JavaScriptCore:
[WebKit-https.git] / LayoutTests / http / tests / plugins / npapi-response-headers.html
1 <html>
2 <head>
3 <script>
4 if (window.layoutTestController) {
5     layoutTestController.dumpAsText();
6     layoutTestController.waitUntilDone();
7 }
8
9 var res1, res2;
10
11 function test()
12 {
13     try {
14         res1 = document.getElementById("result1");
15         res2 = document.getElementById("result2");
16         plg.getURLNotify("/plugins/resources/load-me-2.txt", null, "callback");
17     } catch (ex) {
18         showErr("Exception: " + ex.description);
19         if (window.layoutTestController)
20             layoutTestController.notifyDone();
21     }
22 }
23
24 function callback(errCode, streamDump)
25 {
26     var parse = parseStreamDump(streamDump);
27     if (parse.err)
28         showErr(parse.err);
29     else {
30         res1.innerHTML = newlinesToHTML(parse.res1);
31         res2.innerHTML = newlinesToHTML(parse.res2);
32     }
33
34     if (window.layoutTestController)
35         layoutTestController.notifyDone();
36 }
37
38 // Format passed by plugin: four fields separated by \n\n:
39 // First URL; first header block; last URL; last header block.
40 function parseStreamDump(streamDump)
41 {
42     var rtn = {};
43
44     if (typeof streamDump == "string" || ((typeof streamDump == "object") && (streamDump.constructor == String))) {
45         var parts = streamDump.split("\n\n");
46         if (parts.length >= 4) {
47             rtn.res1 = genericURL(parts[0]) + "\n" + parseHeaders(parts[1]);
48             rtn.res2 = genericURL(parts[2]) + "\n" + parseHeaders(parts[3]);
49         } else
50             rtn.err = "streamDump from plugin does not have expected format";
51     } else
52         rtn.err = "streamDump from plugin is not a string: " + streamDump;
53
54     return rtn;
55 }
56
57 function showErr(err)
58 {
59     res1.innerHTML = "FAILED - " + err;
60     res2.innerHTML = "";
61 }
62
63 function newlinesToHTML(str)
64 {
65     return str.replace(/\n/g, "<br>");
66 }
67
68 function genericURL(url)
69 {
70     return url.replace(/^(http:\/\/)[^\/]+/, "$1[varies, not being tested]");
71 }
72
73 function parseHeaders(hdrs)
74 {
75     var parts = hdrs.split("\n");
76     var rtn = parts[0] + "\n";
77
78     for (var i = 0; i < parts.length; i++)
79         if (parts[i].match(/^Content-Type:/))
80             rtn += parts[i];
81
82     return rtn;
83 }
84 </script>
85 </head>
86 <body onload="test()">
87 <embed name="plg" type="application/x-webkit-test-netscape" src="/plugins/resources/load-me-1.txt"></embed>
88 <p>Test for <a href="http://bugzilla.opendarwin.org/show_bug.cgi?id=13029">bug 13029<a/>:
89 Permit NPAPI plug-ins to see HTTP response headers.</p>
90 <p>Expected result below is two HTTP response extracts, one for the initial stream specified in the "src"
91 attribute, the other for an NPN_GetURLNotify request. Each block should contain the URL; the status line,
92 which should say "HTTP 200 OK"; and the MIME-type, which should say "Content-Type: text/plain".</p>
93 <p>----------</p>
94 <p id="result1">Running test, result should appear here in a very short time...</p>
95 <p>----------</p>
96 <p id="result2">Running test, result should appear here in a very short time...</p>
97 </body>
98 </html>