<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>63262</bug_id>
          
          <creation_ts>2011-06-23 10:01:24 -0700</creation_ts>
          <short_desc>REGRESSION: EventSource fails to connect if Content-Type header has a charset attribute</short_desc>
          <delta_ts>2011-06-23 14:32:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter>goberman</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>426244</commentid>
    <comment_count>0</comment_count>
    <who name="">goberman</who>
    <bug_when>2011-06-23 10:01:24 -0700</bug_when>
    <thetext>This is regression of https://bugs.webkit.org/show_bug.cgi?id=45372 that was fixed for a while, but now broken again in the nightly build 89520. Used to work in Chrome for months, but broken in the latest Chrome...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426251</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-23 10:05:23 -0700</bug_when>
    <thetext>Do you have a test case that you could share with us? It can&apos;t be all broken, since we have regression tests for this behavior.

Or if you can&apos;t share a test, maybe you could attach a packet trace (from tcpdump or Wireshark)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426264</commentid>
    <comment_count>2</comment_count>
    <who name="">goberman</who>
    <bug_when>2011-06-23 10:21:21 -0700</bug_when>
    <thetext>SERVER:
package test;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class WebFrameworkServletEventSource extends HttpServlet {
	private SimpleDateFormat formatter = new SimpleDateFormat(&quot;hh:mm:ss&quot;);

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println(&quot;Begin for session: &quot; + request.getSession(true).getId() + &quot; &quot; + response.getWriter());
		
		response.setHeader(&quot;pragma&quot;, &quot;no-cache,no-store&quot;);
		response.setHeader(&quot;cache-control&quot;, &quot;no-cache,no-store,max-age=0,max-stale=0&quot;);
		response.setHeader(&quot;Connection&quot;, &quot;close&quot;);
		
		response.setContentType(&quot;text/event-stream&quot;);
		
		PrintWriter out = response.getWriter();
		
		int messagesSent = 0;
		while (true) {
			out.print(&quot;data: &quot;);
			out.print(&quot;{\&quot;m\&quot;:8448,\&quot;r\&quot;:0,\&quot;e\&quot;:1,\&quot;s\&quot;:[\&quot;BAC.\&quot;,0],\&quot;f\&quot;:[[0,6,3993,2],[55,6,1185,2],[54,6,3218,2],[5,6,6617,2],[52,4,15],[12,6,1700,2]]}&quot;);
			out.print(&quot;\n\n&quot;);
			out.flush();
			
			messagesSent++;
			
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e1) {
			}
		}
	}
}

CLIENT:
&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;test&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;input type=&quot;button&quot; value=&quot;TEST&quot; onclick=&quot;test(); return false;&quot; /&gt;

    &lt;script type=&quot;text/javascript&quot;&gt;
        var domElement;
        var messagesProcessed = 0;
        var eventSrc;

        function test() {
            domElement = document.getElementsByTagName(&apos;body&apos;)[0];

            debug(&apos;connect&apos;);

            try {
                eventSrc = new EventSource(&apos;http://{ADDRESS}/Test/Controller&apos;);
            }
            catch (e) {
                debug(&apos;exception&apos;);
            }

            eventSrc.onopen = function (event) {
                debug(&apos;open &apos; + event.type);
            };

            eventSrc.onerror = function (event) {
                debug(&apos;error &apos; + event.type);
            };

            eventSrc.onmessage = function (event) {
            	var data = event.data;
                debug(event.type + &apos; &apos; + data);
            };
        }
        
        function debug(message) {
            var oText = document.createTextNode(message);
            var oDiv = document.createElement(&apos;div&apos;);
            oDiv.appendChild(oText);

            domElement.insertBefore(oDiv, domElement.hasChildNodes() ? domElement.childNodes[0] : null);
        }
    &lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;


WEB.XML
&lt;!DOCTYPE web-app 
  PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot; 
  &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;&gt;

&lt;web-app&gt;

  &lt;servlet&gt;
    &lt;servlet-name&gt;Controller&lt;/servlet-name&gt;
    &lt;servlet-class&gt;test.WebFrameworkServletEventSource&lt;/servlet-class&gt;
    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
  &lt;/servlet&gt;

  &lt;servlet-mapping&gt;
    &lt;servlet-name&gt;Controller&lt;/servlet-name&gt;
    &lt;url-pattern&gt;/Controller&lt;/url-pattern&gt;
  &lt;/servlet-mapping&gt;

&lt;/web-app&gt;


WIRESHARK TRACE:
GET /Test/Controller HTTP/1.1

Host: 172.16.16.250

Connection: keep-alive

Referer: http://172.16.16.250/Test/web/StreamingEventSourceTest.html

Cache-Control: no-cache

User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30

Accept: text/event-stream

Accept-Encoding: gzip,deflate,sdch

Accept-Language: en-US,en;q=0.8

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3



HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Set-Cookie: JSESSIONID=BB8BAD8227976D3032225DEB90FE99BB; Path=/Test; HttpOnly

pragma: no-cache,no-store

cache-control: no-cache,no-store,max-age=0,max-stale=0

Connection: close

Content-Type: text/event-stream;charset=ISO-8859-1

Transfer-Encoding: chunked

Date: Thu, 23 Jun 2011 17:15:34 GMT



81

data: {&quot;m&quot;:8448,&quot;r&quot;:0,&quot;e&quot;:1,&quot;s&quot;:[&quot;BAC.&quot;,0],&quot;f&quot;:[[0,6,3993,2],[55,6,1185,2],[54,6,3218,2],[5,6,6617,2],[52,4,15],[12,6,1700,2]]}



81

data: {&quot;m&quot;:8448,&quot;r&quot;:0,&quot;e&quot;:1,&quot;s&quot;:[&quot;BAC.&quot;,0],&quot;f&quot;:[[0,6,3993,2],[55,6,1185,2],[54,6,3218,2],[5,6,6617,2],[52,4,15],[12,6,1700,2]]}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426277</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-23 10:35:57 -0700</bug_when>
    <thetext>Thank you!

&gt; Content-Type: text/event-stream;charset=ISO-8859-1

That&apos;s correct behavior per HTML5 - only &quot;UTF-8&quot; (case insensitive) is allowed as charset value. Please re-open if this is unacceptable for you, and you would like to try and get the spec changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426364</commentid>
    <comment_count>4</comment_count>
    <who name="">goberman</who>
    <bug_when>2011-06-23 12:32:59 -0700</bug_when>
    <thetext>This must have been implemented after https://bugs.webkit.org/show_bug.cgi?id=45372 was fixed...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426374</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-23 12:42:54 -0700</bug_when>
    <thetext>Yes, that was bug 56942.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426472</commentid>
    <comment_count>6</comment_count>
    <who name="">goberman</who>
    <bug_when>2011-06-23 14:32:52 -0700</bug_when>
    <thetext>Well, Tomcat sends ISO-8859-1 by default, to it broke our server app. We are not in prod, so it is not a huge deal, at least for us.

Can someone explain what WebKit version a bug fix (https://bugs.webkit.org/show_bug.cgi?id=56942 for example) landed on? I asked this question multiple times, but nobody seems to know. I know what WebKit version is is used by Chrome and Safari:
http://en.wikipedia.org/wiki/Safari_version_history
http://en.wikipedia.org/wiki/Google_Chrome
, but just cannot figure out how to match a bug to a WebKit version.
Thanks</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>