Home | History | Annotate | Download | only in inspector
      1 <html>
      2 <head>
      3 <title>Tests for Bug 22920</title>
      4 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
      5 </head>
      6 
      7 <body>
      8 <p>Tests for 
      9 <ul>    
     10 <li><p><a href="https://bugs.webkit.org/show_bug.cgi?id=22920">Bug 22920: Inspector Request Headers Should Show Data/Variables/Parameters Sent With Request</a>
     11 <li><p><a href="https://bugs.webkit.org/show_bug.cgi?id=28970">Bug 28970: content-type parameters not taken into account when building form-data</a>
     12 </ul>
     13 
     14 <p>To test, open the Inspector on this page, go to the Resources panel,
     15 and select the various resources created by this page in the left column of the
     16 Resources panel.  Note that for test-4 ...
     17 test-11, the -sync and -async versions should show the same Form Data,
     18 Request Payload and/or Query String Parameter values.
     19 
     20 <ul>
     21 
     22 <li><p><b>test-1</b>:
     23 <br>no Form Data, Request Payload or Query String Parameters
     24 
     25 <li><p><b>test-2</b>:
     26 <br>Query String Parameters (1): "parm1: abc"
     27 
     28 <li><p><b>test-3</b>:
     29 <br>Query String Parameters (2): "parm1: def" and "parm2: g h i";
     30 Hovering over either parm should yield a tooltip:
     31 <i>"Double-Click to toggle between URL encoded and decoded formats"</i>.
     32 Double-clicking on either parm should toggle between encoded and decoded
     33 versions of the string.  The decoded form is initially displayed.
     34 The encoded form of parm2 is "g%20h+i".
     35 
     36 <li><p><b>test-4</b>:
     37 <br>no Form Data, Request Payload or Query String Parameters
     38 
     39 <li><p><b>test-5</b>:
     40 <br>Query String Parameters (1): "parm1: abc"
     41 
     42 <li><p><b>test-6</b>:
     43 <br>Query String Parameters (3): "parm1: def" and "parm2: g h i" and "parm3: jj kk ll"
     44 
     45 <li><p><b>test-7</b>:
     46 <br>Request Payload: 3 lines of text data with a very long 2nd line which should wrap
     47 
     48 <li><p><b>test-8</b>:
     49 <br>Request Payload: 3 lines of text data with a very long 2nd line which should wrap
     50 
     51 <li><p><b>test-9</b>:
     52 <br>Request Payload: 3 lines of text data with a very long 2nd line of binary data which should wrap
     53 
     54 <li><p><b>test-10</b>:
     55 <br>Form Data (1): "parm1: abc"
     56 
     57 <li><p><b>test-11</b>:
     58 <br>Form Data (2): "parm1: def" and "parm2: g h i"
     59 
     60 <li><p><b>test-12</b>:
     61 <br>Query String Parameters (2): "parm1: abc" and "parm2: d e f"
     62 <br>Form Data (2): "parm1: ghi" and "parm2: j k l"
     63 
     64 <li><p><b>test-13</b>:
     65 <br>Query String Parameters (2): "parm1: &auml;bc" and "parm2: d &#x11B; f"
     66 <br>Form Data (2): "parm1: ghi" and "parm2: j k l"
     67 <p>Note that you should view the encoded values of the query string parameters
     68 by double-clicking on one of the parameters.  The values should be:
     69 <pre>
     70 parm1: %C3%A4bc
     71 parm2: d%20%C4%9B+f
     72 </pre>
     73 
     74 <li><p><b>test-14</b>:
     75 <br>Same results as for test-13, a slightly different but compatible Content-Type
     76 is used for the form data.
     77 
     78 <li><p><b>test-15</b>:
     79 <br>Query String Parameters (2): "parm1: % (unable to decode value)" and "parm2: % (unable to decode value)",
     80 with the parenthesized part in red.
     81 <br>Form Data (2): "parm1: % (unable to decode value)" and "parm2: % (unable to decode value)",
     82 with the parenthesized part in red.
     83 <p>Note that you should view the encoded values of the query string parameters
     84 by double-clicking on one of the parameters.  The values for all four parameters should be "%".
     85 
     86 <li><p><b>test-form</b>:
     87 <br>For this test, invoke the form at the bottom of the page
     88 by pressing the submit button.  The Resources panel should have a "test-form"
     89 resource, with the following data:
     90 <p>Form Data (2): "field1: value &auml;;b;c" and "field2:value d;&#x11B;;f"
     91 <p>Note that you should view the encoded values of the query string parameters
     92 by double-clicking on one of the parameters.  The values should be:
     93 <pre>
     94 field1: value+%C3%A4%3Bb%3Bc
     95 field2: value+d%3B%C4%9B%3Bf</pre>
     96 </ul>
     97 
     98 <p><b>test-form</b>
     99 <form id="form" action="http://example.org/test-form" method="post" enctype="application/x-www-form-urlencoded">
    100 <span style="font-size:200%">field1:</span> <input style="font-size:200%" type="text" name="field1" value="value &auml;;b;c"><br>
    101 <span style="font-size:200%">field2:</span> <input style="font-size:200%" type="text" name="field2" value="value d;&#x11B;;f"><br>
    102 <input type="submit">
    103 </form>
    104 
    105 <div style="display:none">
    106 
    107 <img src="http://example.org/test-1">
    108 <img src="http://example.org/test-2?parm1=abc">
    109 <img src="http://example.org/test-3?parm1=def&parm2=g%20h+i">
    110 
    111 </div>
    112 
    113 <hr>
    114 
    115 <p><b>NLS sample info</b>
    116 
    117 <pre>
    118 <span style="font-size:300%">&auml;</span> - LATIN SMALL LETTER A WITH DIAERESIS
    119 Unicode: 0x00E4 == 228    
    120 UTF8:    C3 A4 
    121 HTML:    &amp;auml;
    122 
    123 <span style="font-size:300%">&#x11B;</span> - LATIN SMALL LETTER E WITH CARON
    124 Unicode: 0x011B == 283    
    125 UTF8:    C4 9B
    126 HTML:    &amp;#x11B;
    127 </pre>
    128     
    129 <script>
    130 
    131 function getReadyState(num) {
    132     switch(num) {
    133         case 0: return "uninitialized";
    134         case 1: return "loading";
    135         case 2: return "loaded";
    136         case 3: return "interactive";
    137         case 4: return "complete";
    138         default: return "unknown: " + num;
    139     }
    140 }
    141 
    142 function getProcessXHR(request) {
    143     return function() {
    144         if (true) return;
    145         var rs = getReadyState(request.readyState);
    146         console.log("ready state change for " + request.url);
    147         console.log("   ready state:   " + rs);
    148         console.log("   response text: " + request.responseText);
    149         if (request.readyState == 4) {
    150             console.log("   status:        " + request.status);
    151             console.log("   status text:   " + request.statusText);
    152         }
    153     }
    154 }
    155 
    156 function sendXHR(url, method, headers, body) {
    157     if (!method) method = "GET";
    158     if (!headers) headers = [];
    159     if (!body) body="";
    160 
    161     // copy headers
    162     var headersNew = [];
    163     for (var i=0; i<headers.length; i++) {
    164         headersNew.push(headers[i]);
    165     }
    166     headers = headersNew;
    167 
    168     if (body != "") {
    169         headers.push(["Content-Length", body.length.toString()]);
    170     }
    171 
    172     // sync
    173     var req = new XMLHttpRequest();
    174 
    175     req.url = url.replace("^","-sync");
    176     req.onreadystatechange = getProcessXHR(req);
    177     req.open(method, req.url, false);
    178 
    179     for (var i=0; i<headers.length; i++) {
    180         req.setRequestHeader(headers[i][0], headers[i][1]);
    181     }
    182 
    183     req.send(body);
    184 
    185     // async
    186     var req = new XMLHttpRequest();
    187 
    188     req.url = url.replace("^","-async");
    189     req.onreadystatechange = getProcessXHR(req);
    190     req.open(method, req.url, true);
    191 
    192     for (var i=0; i<headers.length; i++) {
    193         req.setRequestHeader(headers[i][0], headers[i][1]);
    194     }
    195 
    196     req.send(body);
    197 }
    198 
    199 var headersPlain = [
    200     ["Content-Type", "text/plain"]
    201 ];
    202 
    203 var headersForm = [
    204     ["Content-Type", "application/x-www-form-urlencoded"]
    205 ];
    206 
    207 var headersFormExtra1 = [
    208     ["Content-Type", "application/x-www-form-urlencoded;something-else=here"]
    209 ];
    210 
    211 var headersFormExtra2 = [
    212     ["Content-Type", "application/x-www-form-urlencoded ; something-else=here"]
    213 ];
    214 
    215 var headersBinary = [
    216     ["Content-Type", "application/octet-stream"]
    217 ];
    218 
    219 var longText = "some text with a \n";
    220 for (var i=0; i<40; i++) {
    221     longText += "very-";
    222 }
    223 longText += "long\nline in it";
    224 
    225 var binaryData = "some text with binary data\n";
    226 for (var i=0; i<256; i++) {
    227     binaryData += String.fromCharCode(i);
    228 }
    229 binaryData += "\nin the middle of it";
    230 
    231 
    232 sendXHR("http://example.org/test-4^");
    233 sendXHR("http://example.org/test-5^?parm1=abc");
    234 sendXHR("http://example.org/test-6^?parm1=def&parm2=g%20h+i&parm3=jj++kk%20%20ll");
    235 
    236 sendXHR("http://example.org/test-7^", "POST", null, longText);
    237 sendXHR("http://example.org/test-8^", "POST", headersPlain, longText);
    238 sendXHR("http://example.org/test-9^", "POST", headersBinary, binaryData);
    239 sendXHR("http://example.org/test-10^", "POST", headersForm, "parm1=abc");
    240 sendXHR("http://example.org/test-11^", "POST", headersForm, "parm1=def&parm2=g%20h+i");
    241 sendXHR("http://example.org/test-12^?parm1=abc&parm2=d%20e+f", "POST", headersForm, "parm1=ghi&parm2=j%20k+l");
    242 sendXHR("http://example.org/test-13^?parm1=%C3%A4bc&parm2=d%20%C4%9B+f", "POST", headersFormExtra1, "parm1=ghi&parm2=j%20k+l");
    243 sendXHR("http://example.org/test-14^?parm1=%C3%A4bc&parm2=d%20%C4%9B+f", "POST", headersFormExtra2, "parm1=ghi&parm2=j%20k+l");
    244 sendXHR("http://example.org/test-15^?parm1=%&parm2=%", "POST", headersForm, "parm1=%&parm2=%");
    245 
    246 </script>
    247 
    248 </body>
    249 </html>