LCOV - code coverage report
Current view: top level - test/wpt/xhr - setrequestheader-header-forbidden.js (source / functions) Hit Total Coverage
Test: lcov.info Lines: 194 194 100.0 %
Date: 2024-12-07 00:20:21 Functions: 1 1 100.0 %
Branches: 6 6 100.0 %

           Branch data     Line data    Source code
       1            [ + ]:          2 : import assert from 'node:assert/strict';
       2                 :          2 : import { XMLHttpRequest } from '../../../lib/whatwg-xhr.js';
       3                 :          2 : 
       4            [ + ]:          2 : export default (activeURL) => {
       5                 :          1 : 
       6                 :          1 :         let xhr = new XMLHttpRequest();
       7                 :          1 : 
       8                 :          1 :         xhr.open('POST', `${activeURL}/inspect-headers.py?filter_value=TEST`, false);
       9                 :          1 : 
      10                 :          1 :         xhr.setRequestHeader('Accept-Charset', 'TEST');
      11                 :          1 :         xhr.setRequestHeader('Accept-Encoding', 'TEST');
      12                 :          1 :         xhr.setRequestHeader('Connection', 'TEST');
      13                 :          1 :         xhr.setRequestHeader('Content-Length', 'TEST');
      14                 :          1 :         xhr.setRequestHeader('Cookie', 'TEST');
      15                 :          1 :         xhr.setRequestHeader('Cookie2', 'TEST');
      16                 :          1 :         xhr.setRequestHeader('Date', 'TEST');
      17                 :          1 :         xhr.setRequestHeader('DNT', 'TEST');
      18                 :          1 :         xhr.setRequestHeader('Expect', 'TEST');
      19                 :          1 :         xhr.setRequestHeader('Host', 'TEST');
      20                 :          1 :         xhr.setRequestHeader('Keep-Alive', 'TEST');
      21                 :          1 :         xhr.setRequestHeader('Referer', 'TEST');
      22                 :          1 :         xhr.setRequestHeader('TE', 'TEST');
      23                 :          1 :         xhr.setRequestHeader('Trailer', 'TEST');
      24                 :          1 :         xhr.setRequestHeader('Transfer-Encoding', 'TEST');
      25                 :          1 :         xhr.setRequestHeader('Upgrade', 'TEST');
      26                 :          1 :         xhr.setRequestHeader('Via', 'TEST');
      27                 :          1 :         xhr.setRequestHeader('Proxy-', 'TEST');
      28                 :          1 :         xhr.setRequestHeader('Proxy-LIES', 'TEST');
      29                 :          1 :         xhr.setRequestHeader('Proxy-Authorization', 'TEST');
      30                 :          1 :         xhr.setRequestHeader('Sec-', 'TEST');
      31                 :          1 :         xhr.setRequestHeader('Sec-X', 'TEST');
      32                 :          1 : 
      33                 :          1 :         xhr.send();
      34                 :          1 :         assert.strictEqual(xhr.responseText, '');
      35                 :          1 : 
      36                 :          1 :         let forbiddenMethods = [
      37                 :          1 :                 'TRACE',
      38                 :          1 :                 'TRACK',
      39                 :          1 :                 'CONNECT',
      40                 :          1 :                 'trace',
      41                 :          1 :                 'track',
      42                 :          1 :                 'connect',
      43                 :          1 :                 'trace,',
      44                 :          1 :                 'GET,track ',
      45                 :          1 :                 ' connect',
      46                 :          1 :         ];
      47                 :          1 : 
      48                 :          1 :         let overrideHeaders = [
      49                 :          1 :                 'x-http-method-override',
      50                 :          1 :                 'x-http-method',
      51                 :          1 :                 'x-method-override',
      52                 :          1 :                 'X-HTTP-METHOD-OVERRIDE',
      53                 :          1 :                 'X-HTTP-METHOD',
      54                 :          1 :                 'X-METHOD-OVERRIDE',
      55                 :          1 :         ];
      56                 :          1 : 
      57            [ + ]:          1 :         for (let forbiddenMethod of forbiddenMethods) {
      58            [ + ]:          9 :                 for (let overrideHeader of overrideHeaders) {
      59                 :         54 :                         let xhr = new XMLHttpRequest();
      60                 :         54 : 
      61                 :         54 :                         xhr.open('POST',
      62                 :         54 :                                 `${activeURL}/inspect-headers.py?filter_name=${forbiddenMethod}`, false);
      63                 :         54 : 
      64                 :         54 :                         xhr.setRequestHeader(overrideHeader, forbiddenMethod);
      65                 :         54 :                         xhr.send();
      66                 :         54 : 
      67                 :         54 :                         assert.strictEqual(xhr.responseText, '');
      68                 :         54 :                 }
      69                 :          9 :         }
      70                 :          1 : 
      71                 :          1 :         let permittedValues = [
      72                 :          1 :                 'GETTRACE',
      73                 :          1 :                 'GET',
      74                 :          1 :                 '\",TRACE\",',
      75                 :          1 :         ];
      76                 :          1 : 
      77            [ + ]:          1 :         for (let permittedValue of permittedValues) {
      78            [ + ]:          3 :                  for (let overrideHeader of overrideHeaders) {
      79                 :         18 :                         let xhr = new XMLHttpRequest();
      80                 :         18 : 
      81                 :         18 :                         xhr.open('POST',
      82                 :         18 :                                 `${activeURL}/inspect-headers.py?filter_name=${overrideHeader}`, false);
      83                 :         18 : 
      84                 :         18 :                         xhr.setRequestHeader(overrideHeader, permittedValue);
      85                 :         18 :                         xhr.send();
      86                 :         18 : 
      87                 :         18 :                         assert.strictEqual(xhr.responseText, `${overrideHeader}: ${permittedValue}\n`);
      88                 :         18 :                 }
      89                 :          3 :         }
      90                 :          1 : }
      91                 :          2 : 
      92                 :          2 : /*
      93                 :          2 :  * setrequestheader-header-forbidden.htm
      94                 :          2 :  *
      95                 :          2 : 
      96                 :          2 : <!doctype html>
      97                 :          2 : <html>
      98                 :          2 :   <head>
      99                 :          2 :     <title>XMLHttpRequest: setRequestHeader() - headers that are forbidden</title>
     100                 :          2 :     <script src="/resources/testharness.js"></script>
     101                 :          2 :     <script src="/resources/testharnessreport.js"></script>
     102                 :          2 :     <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method">
     103                 :          2 : 
     104                 :          2 :   </head>
     105                 :          2 :   <body>
     106                 :          2 :     <div id="log"></div>
     107                 :          2 :     <script>
     108                 :          2 :       test(function() {
     109                 :          2 :         var client = new XMLHttpRequest()
     110                 :          2 :         client.open("POST", "resources/inspect-headers.py?filter_value=TEST", false)
     111                 :          2 :         client.setRequestHeader("Accept-Charset", "TEST")
     112                 :          2 :         client.setRequestHeader("Accept-Encoding", "TEST")
     113                 :          2 :         client.setRequestHeader("Connection", "TEST")
     114                 :          2 :         client.setRequestHeader("Content-Length", "TEST")
     115                 :          2 :         client.setRequestHeader("Cookie", "TEST")
     116                 :          2 :         client.setRequestHeader("Cookie2", "TEST")
     117                 :          2 :         client.setRequestHeader("Date", "TEST")
     118                 :          2 :         client.setRequestHeader("DNT", "TEST")
     119                 :          2 :         client.setRequestHeader("Expect", "TEST")
     120                 :          2 :         client.setRequestHeader("Host", "TEST")
     121                 :          2 :         client.setRequestHeader("Keep-Alive", "TEST")
     122                 :          2 :         client.setRequestHeader("Referer", "TEST")
     123                 :          2 :         client.setRequestHeader("TE", "TEST")
     124                 :          2 :         client.setRequestHeader("Trailer", "TEST")
     125                 :          2 :         client.setRequestHeader("Transfer-Encoding", "TEST")
     126                 :          2 :         client.setRequestHeader("Upgrade", "TEST")
     127                 :          2 :         client.setRequestHeader("Via", "TEST")
     128                 :          2 :         client.setRequestHeader("Proxy-", "TEST")
     129                 :          2 :         client.setRequestHeader("Proxy-LIES", "TEST")
     130                 :          2 :         client.setRequestHeader("Proxy-Authorization", "TEST")
     131                 :          2 :         client.setRequestHeader("Sec-", "TEST")
     132                 :          2 :         client.setRequestHeader("Sec-X", "TEST")
     133                 :          2 :         client.send(null)
     134                 :          2 :         assert_equals(client.responseText, "")
     135                 :          2 :         })
     136                 :          2 : 
     137                 :          2 :         test (function() {
     138                 :          2 : 
     139                 :          2 :         let forbiddenMethods = [
     140                 :          2 :           "TRACE",
     141                 :          2 :           "TRACK",
     142                 :          2 :           "CONNECT",
     143                 :          2 :           "trace",
     144                 :          2 :           "track",
     145                 :          2 :           "connect",
     146                 :          2 :           "trace,",
     147                 :          2 :           "GET,track ",
     148                 :          2 :           " connect",
     149                 :          2 :         ];
     150                 :          2 : 
     151                 :          2 :         let overrideHeaders = [
     152                 :          2 :           "x-http-method-override",
     153                 :          2 :           "x-http-method",
     154                 :          2 :           "x-method-override",
     155                 :          2 :           "X-HTTP-METHOD-OVERRIDE",
     156                 :          2 :           "X-HTTP-METHOD",
     157                 :          2 :           "X-METHOD-OVERRIDE",
     158                 :          2 :         ];
     159                 :          2 : 
     160                 :          2 :         for (forbiddenMethod of forbiddenMethods) {
     161                 :          2 :           for (overrideHeader of overrideHeaders) {
     162                 :          2 :              var client = new XMLHttpRequest()
     163                 :          2 :              client.open("POST",
     164                 :          2 :                      `resources/inspect-headers.py?filter_value=${forbiddenMethod}`, false)
     165                 :          2 :              client.setRequestHeader(overrideHeader, forbiddenMethod)
     166                 :          2 :              client.send(null)
     167                 :          2 :              assert_equals(client.responseText, "")
     168                 :          2 :           }
     169                 :          2 :         }
     170                 :          2 : 
     171                 :          2 :         let permittedValues = [
     172                 :          2 :         "GETTRACE",
     173                 :          2 :         "GET",
     174                 :          2 :         "\",TRACE\",",
     175                 :          2 :         ];
     176                 :          2 : 
     177                 :          2 :         for (permittedValue of permittedValues) {
     178                 :          2 :           for (overrideHeader of overrideHeaders) {
     179                 :          2 :              var client = new XMLHttpRequest()
     180                 :          2 :              client.open("POST",
     181                 :          2 :                      `resources/inspect-headers.py?filter_name=${overrideHeader}`, false)
     182                 :          2 :              client.setRequestHeader(overrideHeader, permittedValue)
     183                 :          2 :              client.send(null)
     184                 :          2 :              assert_equals(client.responseText, overrideHeader + ": " + permittedValue + "\n")
     185                 :          2 :           }
     186                 :          2 :         }
     187                 :          2 :       })
     188                 :          2 :     </script>
     189                 :          2 :   </body>
     190                 :          2 : </html>
     191                 :          2 : 
     192                 :          2 :  *
     193                 :          2 :  * setrequestheader-header-forbidden.htm
     194                 :          2 :  */

Generated by: LCOV version 1.14