chromium/third_party/blink/web_tests/http/tests/inspector-protocol/network/request-interception-on-response.js

(async function(/** @type {import('test_runner').TestRunner} */ testRunner) {
  var {page, session, dp} = await testRunner.startBlank(
      `Tests interception blocking, modification of network fetches.`);

  var InterceptionHelper = await testRunner.loadScript('../resources/interception-test.js');
  var helper = new InterceptionHelper(testRunner, session);

  var headersMaskList = new Set(['date', 'server', 'last-modified', 'etag', 'keep-alive']);

  var requestInterceptedDict = {
    'simple-iframe.html': async event => {
      testRunner.log('Request Intercepted: ' + event.params.request.url.split('/').pop());
      testRunner.log('  responseStatusCode: ' + event.params.responseStatusCode);
      testRunner.log('  responseHeaders:');
      for (var headerName of Object.keys(event.params.responseHeaders).sort()) {
        var headerValue = event.params.responseHeaders[headerName];
        if (headersMaskList.has(headerName.toLowerCase()))
          headerValue = '<Masked>';
        testRunner.log(`    ${headerName}: ${headerValue}`);
      }
      var bodyData = await session.protocol.Network.getResponseBodyForInterception({interceptionId: event.params.interceptionId});
      testRunner.log('  responseBody:');
      testRunner.log(bodyData.result.base64Encoded ? atob(bodyData.result.body) : bodyData.result.body);
      var body = '<html>\n<body>This content was rewritten!</body>\n</html>';
      var dummyHeaders = [
        'HTTP/1.1 200 OK',
        'Date: ' + (new Date()).toUTCString(),
        'Connection: closed',
        'Content-Length: ' + body.size,
        'Content-Type: text/html'
      ];
      helper.modifyRequest(event, {rawResponse: btoa(dummyHeaders.join('\r\n') + '\r\n\r\n' + body)});
      testRunner.log('');
    }
  };

  await helper.startInterceptionTest(requestInterceptedDict, Infinity, 'HeadersReceived');

  var requestId = '';
  session.protocol.Network.onRequestWillBeSent(event => {
    if (requestId)
      throw "requestId already set";
    requestId = event.params.requestId;
  });
  await new Promise(resolve => {
    session.protocol.Network.onLoadingFinished(resolve);
    session.evaluate(`
      var iframe = document.createElement('iframe');
      iframe.src = '${testRunner.url('./resources/simple-iframe.html')}';
      document.body.appendChild(iframe);
    `);
  });

  var result = await session.protocol.Network.getResponseBody({requestId: requestId});
  testRunner.log('Body content received by renderer:');
  testRunner.log(result.result.base64Encoded ? atob(result.result.body) : result.result.body);

  testRunner.completeTest();
})