From: mkanat%bugzilla.org <> Date: Wed, 12 Jul 2006 13:05:07 +0000 (+0000) Subject: Bug 342757: searching results in "YOUR BROWSER DOESN'T SUPPORT THIS SERVER-PUSH TECHN... X-Git-Tag: bugzilla-2.23.3~276 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8b6eecc5d9fe028933e51cfebaa62ed72eb073ce;p=thirdparty%2Fbugzilla.git Bug 342757: searching results in "YOUR BROWSER DOESN'T SUPPORT THIS SERVER-PUSH TECHNOLOGY" warning on brower under mod_perl Patch By Max Kanat-Alexander r=justdave, a=justdave --- diff --git a/Bugzilla/CGI.pm b/Bugzilla/CGI.pm index b4bcf20c8b..dd6061346c 100644 --- a/Bugzilla/CGI.pm +++ b/Bugzilla/CGI.pm @@ -158,14 +158,27 @@ sub multipart_init { # CGI.pm's header() sets nph according to a param or $CGI::NPH, which # is the desired behaviour. - # Allow multiple calls to $cgi->header() - $CGI::HEADERS_ONCE = 0; - return $self->header( %param, ) . "WARNING: YOUR BROWSER DOESN'T SUPPORT THIS SERVER-PUSH TECHNOLOGY." . $self->multipart_end; } +# Have to add the cookies in. +sub multipart_start { + my $self = shift; + my $headers = $self->SUPER::multipart_start(@_); + # Eliminate the one extra CRLF at the end. + $headers =~ s/$CGI::CRLF$//; + # Add the cookies. We have to do it this way instead of + # passing them to multpart_start, because CGI.pm's multipart_start + # doesn't understand a '-cookie' argument pointing to an arrayref. + foreach my $cookie (@{$self->{Bugzilla_cookie_list}}) { + $headers .= "Set-Cookie: ${cookie}${CGI::CRLF}"; + } + $headers .= $CGI::CRLF; + return $headers; +} + # Override header so we can add the cookies in sub header { my $self = shift; @@ -183,13 +196,6 @@ sub header { return $self->SUPER::header(@_) || ""; } -# Override multipart_start to ensure our cookies are added and avoid bad quoting of -# CGI's multipart_start (bug 275108) -sub multipart_start { - my $self = shift; - return $self->header(@_); -} - # The various parts of Bugzilla which create cookies don't want to have to # pass them around to all of the callers. Instead, store them locally here, # and then output as required from |header|. diff --git a/buglist.cgi b/buglist.cgi index 1a7ffc316d..1400968fc7 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -884,6 +884,12 @@ if ($serverpush) { $template->process("list/server-push.html.tmpl", $vars) || ThrowTemplateError($template->error()); + # Under mod_perl, flush stdout so that the page actually shows up. + if ($ENV{MOD_PERL}) { + require Apache2::RequestUtil; + Apache2::RequestUtil->request->rflush(); + } + # Don't do multipart_end() until we're ready to display the replacement # page, otherwise any errors that happen before then (like SQL errors) # will result in a blank page being shown to the user instead of the error.