chromium/headless/test/data/protocol/sanity/browser-set-proxy-config.js

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

(async function(testRunner) {
  testRunner.log('Tests that headless session can configure proxy.\n');
  const { result: { sessionId } } =
      await testRunner.browserP().Target.attachToBrowserTarget({});
  const { protocol: bProtocol } = new TestRunner.Session(testRunner, sessionId);

  async function dumpWithProxyServer(targetUrl, proxyServer) {
    const { result: { browserContextId } } =
        await bProtocol.Target.createBrowserContext({ proxyServer });
    const { result: { targetId }} =
        await bProtocol.Target.createTarget({
      browserContextId: browserContextId,
      url: 'about:blank'
    });

    const { result: { sessionId } } =
        await bProtocol.Target.attachToTarget({ targetId, flatten: true });
    const { protocol: pProtocol } =
        new TestRunner.Session(testRunner, sessionId);
    await pProtocol.Page.enable({});
    await pProtocol.Page.navigate({ url: targetUrl });
    await pProtocol.Page.onceLoadEventFired();
    const { result: { result: { value } } } =
        await pProtocol.Runtime.evaluate(
            { expression: 'document.body.innerText' });
    return value;
  }

  testRunner.log(`No proxy: ${await dumpWithProxyServer(
      testRunner._testBaseURL + 'resources/body.html'
  )}`);

  testRunner.log(`Proxied to itself: ${await dumpWithProxyServer(
      testRunner._testBaseURL + 'resources/body.html',
      new URL(testRunner._targetBaseURL).host)}`);

  testRunner.log(`Proxied to another server: ${await dumpWithProxyServer(
      'http://not-an-actual-domain.tld/hello.html',
      testRunner.params('proxy'))}`);

  testRunner.completeTest();
})