"use strict";
async function doLoadAndGoBack(browser, ext) {
  let loaded = BrowserTestUtils.browserLoaded(browser);
  BrowserTestUtils.loadURI(browser, "https://example.com/");
  await ext.awaitMessage("redir-handled");
  await loaded;
  let pageShownPromise = BrowserTestUtils.waitForContentEvent(
    browser,
    "pageshow",
    true
  );
  await SpecialPowers.spawn(browser, [], () => {
    content.history.back();
  });
  return pageShownPromise;
}
add_task(async function test_back() {
  let extension = ExtensionTestUtils.loadExtension({
    manifest: {
      permissions: ["webRequest", "webRequestBlocking", "https://example.com/"],
      web_accessible_resources: ["test.html"],
    },
    files: {
      "test.html":
        "
Test add-on",
    },
    background: () => {
      let { browser } = this;
      browser.webRequest.onHeadersReceived.addListener(
        details => {
          if (details.statusCode != 200) {
            return undefined;
          }
          browser.test.sendMessage("redir-handled");
          return { redirectUrl: browser.runtime.getURL("test.html") };
        },
        {
          urls: ["https://example.com/"],
          types: ["main_frame"],
        },
        ["blocking"]
      );
    },
  });
  await extension.startup();
  await BrowserTestUtils.withNewTab("about:home", async function(browser) {
    await doLoadAndGoBack(browser, extension);
    await SpecialPowers.spawn(browser, [], () => {
      is(
        content.document.documentURI,
        "about:home",
        "Gone back to the right page"
      );
    });
    await doLoadAndGoBack(browser, extension);
    await SpecialPowers.spawn(browser, [], () => {
      is(
        content.document.documentURI,
        "about:home",
        "Gone back to the right page"
      );
    });
  });
  await extension.unload();
});