summaryrefslogtreecommitdiffstats
path: root/docshell/test/browser/browser_bug1705872.js
blob: 87d10b452638fe7aeaf129653efb95f9752b99fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"use strict";

async function doLoadAndGoBack(browser, ext) {
  let loaded = BrowserTestUtils.browserLoaded(browser);
  BrowserTestUtils.startLoadingURIString(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":
        "<!DOCTYPE html><html><head><title>Test add-on</title></head><body></body></html>",
    },
    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();
});