WebCore:
[WebKit-https.git] / LayoutTests / http / tests / workers / text-encoding.html
1 <html>
2 <meta http-equiv="content-type" content="text/html; charset=windows-1251">
3 <body>
4 This test verifies handling of text encoding in workers. The behavior matches FF3.1b2 with a single exclusion (see below).<br>
5 This is what's tested:<br>
6 - If http header 'Content-Type' with 'charset' specified is on response with worker script or XHR payload, that encoding is used.<br>
7 - In absense of http header, the script of the worker is decoded using the text encoding of the parent document.<br>
8 - In absense of http header, the content of the XHR request is decoded using UTF-8.<br>
9 - The URLs used in workers (for subworkers or XHR) are always encoded using UTF-8 (in regular html documents parts of the query an hash may be encoded with other encodings).<br>
10 - The base URL for the worker (used to resolve relative URLs for subworkers and XHR) is the URL of its script. Note: this is different from FF 3.1b2 which is using the URL of the parent document, which may be a bug (TBD).<br><br>
11
12 <div style="background:beige; padding:10px;" id="status"></div>
13
14 <script>
15 if (window.layoutTestController) {
16     layoutTestController.dumpAsText();
17     layoutTestController.waitUntilDone();
18 }
19
20 // Wait for this many workers to finish their tests.
21 // When worker is done, it sends 'exit' message.
22 var workerCount = 2;
23
24 // Messages from workers in separate threads will come in unstable order. Sort them to have a stable test.
25 var statusStrings = new Array;
26
27 function finishTest()
28 {
29     statusStrings.sort();
30     var status_panel = document.getElementById("status");
31     for (var i = 0; i < statusStrings.length; ++i) {
32         status_panel.appendChild(document.createTextNode(statusStrings[i]));
33         status_panel.appendChild(document.createElement("br"));
34     }
35     if (window.layoutTestController)
36         layoutTestController.notifyDone();
37 }
38
39 function log(source, msg)
40 {
41     statusStrings.push(source + ": " + msg);
42
43     if (msg == "exit" && --workerCount == 0)
44         finishTest();
45
46
47 // Output current charset and a string in that encoding to make
48 // sure this document is decoded as Windows-1251.
49 log("Document encoding", document.inputEncoding);
50 log("Document", "Ïðîâåðêà");
51
52 log("Document, Workers", "All XHR responses should match this: " + String.fromCharCode(0x41F, 0x440, 0x438, 0x432, 0x435, 0x442));
53
54 // Run a worker w/o http header. It should inherit the encoding of the document.
55 var worker1 = new Worker("resources/worker-encoded.php");
56 worker1.onmessage = function(evt) { log("worker 1", evt.data); };
57
58 // Run a worker with http header specifying charset. This new charset should be in effect.
59 var worker2 = new Worker("resources/worker-encoded.php?charset=koi8-r");
60 worker2.onmessage = function(evt) { log("worker 2", evt.data); };
61
62 // Request some content. It should be decoded using UTF-8 even though current document is Windows-1251.
63 var xhr = new XMLHttpRequest();xhr.open("GET", "resources/xhr-response.php", false);
64 xhr.send();log("Document: ", xhr.responseText);
65
66 </script>
67 </body>
68 </html>
69
70