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

(async function() {
  TestRunner.addResult(
    'Verifies that html resources are previewed with the encoding set in their content-type header');
  await TestRunner.loadModule('network_test_runner');
  await TestRunner.showPanel('network');

  async function runEncodingTest(url, nextTestCallback) {
    const fetchScript = `fetch('${url}')`;
    TestRunner.addResult('fetchScript: ' + fetchScript);
    TestRunner.evaluateInPage(fetchScript);

    const request = await TestRunner.networkManager.once(SDK.NetworkManager.Events.RequestFinished);

    const previewView = new Network.RequestPreviewView(request);
    previewView.wasShown();
    const htmlPreviewView = await previewView._contentViewPromise;
    htmlPreviewView.wasShown();
    const iframe = htmlPreviewView.contentElement.firstChild;
    TestRunner.addResult('iframe.src: ' + iframe.src);

    nextTestCallback();
  }

  TestRunner.runTestSuite([
      function testUTF8(next) {
        runEncodingTest('/devtools/network/resources/content-type-utf8.php', next);
      },
      function testISO(next) {
        runEncodingTest('/devtools/network/resources/content-type-iso.php', next);
      },
      function testNoCharset(next) {
        runEncodingTest('/devtools/network/resources/content-type-none.php', next);
      },
    ]);
})();
