chromium/third_party/blink/web_tests/http/tests/devtools/network/download.js

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

import {TestRunner} from 'test_runner';
import {NetworkTestRunner} from 'network_test_runner';

import * as SDK from 'devtools/core/sdk/sdk.js';

(async function() {
  TestRunner.addResult(`Tests that responseReceived is called on NetworkDispatcher for downloads.\n`);
  await TestRunner.showPanel('network');

  await TestRunner.evaluateInPagePromise(`
    function loadIFrameWithDownload()
    {
        var iframe = document.createElement("iframe");
        iframe.setAttribute("src", "resources/download.zzz");
        document.body.appendChild(iframe);
    };
  `);

  TestRunner.addSniffer(SDK.NetworkManager.NetworkDispatcher.prototype, 'responseReceived', responseReceived);
  TestRunner.addSniffer(SDK.NetworkManager.NetworkDispatcher.prototype, 'loadingFailed', loadingFailed);
  TestRunner.addSniffer(SDK.NetworkManager.NetworkDispatcher.prototype, 'loadingFinished', loadingFinished);
  TestRunner.addIframe('resources/download.zzz');

  function responseReceived(event) {
    var request = NetworkTestRunner.networkLog().requestByManagerAndId(
        TestRunner.networkManager, event.requestId);

    if (/download\.zzz/.exec(request.url())) {
      TestRunner.addResult('Received response for download.zzz');
      TestRunner.addResult('SUCCESS');
      TestRunner.completeTest();
    }
  }

  function loadingFinished(event) {
    var request = NetworkTestRunner.networkLog().requestByManagerAndId(
        TestRunner.networkManager, event.requestId);

    if (/download\.zzz/.exec(request.url())) TestRunner.completeTest();
  }

  function loadingFailed(event) {
    var request = NetworkTestRunner.networkLog().requestByManagerAndId(
        TestRunner.networkManager, event.requestId);

    if (/download\.zzz/.exec(request.url())) TestRunner.completeTest();
  }
})();