summaryrefslogtreecommitdiffstats
path: root/toolkit/components/webextensions/test/mochitest/test_ext_webnavigation.html
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/webextensions/test/mochitest/test_ext_webnavigation.html')
-rw-r--r--toolkit/components/webextensions/test/mochitest/test_ext_webnavigation.html559
1 files changed, 0 insertions, 559 deletions
diff --git a/toolkit/components/webextensions/test/mochitest/test_ext_webnavigation.html b/toolkit/components/webextensions/test/mochitest/test_ext_webnavigation.html
deleted file mode 100644
index 2287fd9b1..000000000
--- a/toolkit/components/webextensions/test/mochitest/test_ext_webnavigation.html
+++ /dev/null
@@ -1,559 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
- <title>Test for simple WebExtension</title>
- <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script>
- <script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
- <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
- <script type="text/javascript" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-
-<script type="text/javascript">
-"use strict";
-
-/* globals sendMouseEvent */
-
-function backgroundScript() {
- const BASE = "http://mochi.test:8888/tests/toolkit/components/extensions/test/mochitest";
- const URL = BASE + "/file_WebNavigation_page1.html";
-
- const EVENTS = [
- "onTabReplaced",
- "onBeforeNavigate",
- "onCommitted",
- "onDOMContentLoaded",
- "onCompleted",
- "onErrorOccurred",
- "onReferenceFragmentUpdated",
- "onHistoryStateUpdated",
- ];
-
- let expectedTabId = -1;
-
- function gotEvent(event, details) {
- if (!details.url.startsWith(BASE)) {
- return;
- }
- browser.test.log(`Got ${event} ${details.url} ${details.frameId} ${details.parentFrameId}`);
-
- if (expectedTabId == -1) {
- browser.test.assertTrue(details.tabId !== undefined, "tab ID defined");
- expectedTabId = details.tabId;
- }
-
- browser.test.assertEq(details.tabId, expectedTabId, "correct tab");
-
- browser.test.sendMessage("received", {url: details.url, event});
-
- if (details.url == URL) {
- browser.test.assertEq(details.frameId, 0, "root frame ID correct");
- browser.test.assertEq(details.parentFrameId, -1, "root parent frame ID correct");
- } else {
- browser.test.assertEq(details.parentFrameId, 0, "parent frame ID correct");
- browser.test.assertTrue(details.frameId != 0, "frame ID probably okay");
- }
-
- browser.test.assertTrue(details.frameId !== undefined);
- browser.test.assertTrue(details.parentFrameId !== undefined);
- }
-
- let listeners = {};
- for (let event of EVENTS) {
- listeners[event] = gotEvent.bind(null, event);
- browser.webNavigation[event].addListener(listeners[event]);
- }
-
- browser.test.sendMessage("ready");
-}
-
-const BASE = "http://mochi.test:8888/tests/toolkit/components/extensions/test/mochitest";
-const URL = BASE + "/file_WebNavigation_page1.html";
-const FRAME = BASE + "/file_WebNavigation_page2.html";
-const FRAME2 = BASE + "/file_WebNavigation_page3.html";
-const FRAME_PUSHSTATE = BASE + "/file_WebNavigation_page3_pushState.html";
-const REDIRECT = BASE + "/redirection.sjs";
-const REDIRECTED = BASE + "/dummy_page.html";
-const CLIENT_REDIRECT = BASE + "/file_webNavigation_clientRedirect.html";
-const CLIENT_REDIRECT_HTTPHEADER = BASE + "/file_webNavigation_clientRedirect_httpHeaders.html";
-const FRAME_CLIENT_REDIRECT = BASE + "/file_webNavigation_frameClientRedirect.html";
-const FRAME_REDIRECT = BASE + "/file_webNavigation_frameRedirect.html";
-const FRAME_MANUAL = BASE + "/file_webNavigation_manualSubframe.html";
-const FRAME_MANUAL_PAGE1 = BASE + "/file_webNavigation_manualSubframe_page1.html";
-const FRAME_MANUAL_PAGE2 = BASE + "/file_webNavigation_manualSubframe_page2.html";
-const INVALID_PAGE = "https://invalid.localhost/";
-
-const REQUIRED = [
- "onBeforeNavigate",
- "onCommitted",
- "onDOMContentLoaded",
- "onCompleted",
-];
-
-var received = [];
-var completedResolve;
-var waitingURL, waitingEvent;
-
-function loadAndWait(win, event, url, script) {
- received = [];
- waitingEvent = event;
- waitingURL = url;
- dump(`RUN ${script}\n`);
- script();
- return new Promise(resolve => { completedResolve = resolve; });
-}
-
-add_task(function* webnav_transitions_props() {
- function backgroundScriptTransitions() {
- const EVENTS = [
- "onCommitted",
- "onCompleted",
- ];
-
- function gotEvent(event, details) {
- browser.test.log(`Got ${event} ${details.url} ${details.transitionType} ${details.transitionQualifiers && JSON.stringify(details.transitionQualifiers)}`);
-
- browser.test.sendMessage("received", {url: details.url, details, event});
- }
-
- let listeners = {};
- for (let event of EVENTS) {
- listeners[event] = gotEvent.bind(null, event);
- browser.webNavigation[event].addListener(listeners[event]);
- }
-
- browser.test.sendMessage("ready");
- }
-
- let extensionData = {
- manifest: {
- permissions: [
- "webNavigation",
- ],
- },
- background: backgroundScriptTransitions,
- };
-
- let extension = ExtensionTestUtils.loadExtension(extensionData);
-
- extension.onMessage("received", ({url, event, details}) => {
- received.push({url, event, details});
-
- if (event == waitingEvent && url == waitingURL) {
- completedResolve();
- }
- });
-
- yield Promise.all([extension.startup(), extension.awaitMessage("ready")]);
- info("webnavigation extension loaded");
-
- let win = window.open();
-
- yield loadAndWait(win, "onCompleted", URL, () => { win.location = URL; });
-
- // transitionType: reload
- received = [];
- yield loadAndWait(win, "onCompleted", URL, () => { win.location.reload(); });
-
- let found = received.find((data) => (data.event == "onCommitted" && data.url == URL));
-
- ok(found, "Got the onCommitted event");
-
- if (found) {
- is(found.details.transitionType, "reload",
- "Got the expected 'reload' transitionType in the OnCommitted event");
- ok(Array.isArray(found.details.transitionQualifiers),
- "transitionQualifiers found in the OnCommitted events");
- }
-
- // transitionType: auto_subframe
- found = received.find((data) => (data.event == "onCommitted" && data.url == FRAME));
-
- ok(found, "Got the sub-frame onCommitted event");
-
- if (found) {
- is(found.details.transitionType, "auto_subframe",
- "Got the expected 'auto_subframe' transitionType in the OnCommitted event");
- ok(Array.isArray(found.details.transitionQualifiers),
- "transitionQualifiers found in the OnCommitted events");
- }
-
- // transitionType: form_submit
- received = [];
- yield loadAndWait(win, "onCompleted", URL, () => {
- win.document.querySelector("form").submit();
- });
-
- found = received.find((data) => (data.event == "onCommitted" && data.url == URL));
-
- ok(found, "Got the onCommitted event");
-
- if (found) {
- is(found.details.transitionType, "form_submit",
- "Got the expected 'form_submit' transitionType in the OnCommitted event");
- ok(Array.isArray(found.details.transitionQualifiers),
- "transitionQualifiers found in the OnCommitted events");
- }
-
- // transitionQualifier: server_redirect
- received = [];
- yield loadAndWait(win, "onCompleted", REDIRECTED, () => { win.location = REDIRECT; });
-
- found = received.find((data) => (data.event == "onCommitted" && data.url == REDIRECTED));
-
- ok(found, "Got the onCommitted event");
-
- if (found) {
- is(found.details.transitionType, "link",
- "Got the expected 'link' transitionType in the OnCommitted event");
- ok(Array.isArray(found.details.transitionQualifiers) &&
- found.details.transitionQualifiers.find((q) => q == "server_redirect"),
- "Got the expected 'server_redirect' transitionQualifiers in the OnCommitted events");
- }
-
- // transitionQualifier: forward_back
- received = [];
- yield loadAndWait(win, "onCompleted", URL, () => { win.history.back(); });
-
- found = received.find((data) => (data.event == "onCommitted" && data.url == URL));
-
- ok(found, "Got the onCommitted event");
-
- if (found) {
- is(found.details.transitionType, "link",
- "Got the expected 'link' transitionType in the OnCommitted event");
- ok(Array.isArray(found.details.transitionQualifiers) &&
- found.details.transitionQualifiers.find((q) => q == "forward_back"),
- "Got the expected 'forward_back' transitionQualifiers in the OnCommitted events");
- }
-
- // transitionQualifier: client_redirect
- // (from meta http-equiv tag)
- received = [];
- yield loadAndWait(win, "onCompleted", REDIRECTED, () => {
- win.location = CLIENT_REDIRECT;
- });
-
- found = received.find((data) => (data.event == "onCommitted" && data.url == REDIRECTED));
-
- ok(found, "Got the onCommitted event");
-
- if (found) {
- is(found.details.transitionType, "link",
- "Got the expected 'link' transitionType in the OnCommitted event");
- ok(Array.isArray(found.details.transitionQualifiers) &&
- found.details.transitionQualifiers.find((q) => q == "client_redirect"),
- "Got the expected 'client_redirect' transitionQualifiers in the OnCommitted events");
- }
-
- // transitionQualifier: client_redirect
- // (from http headers)
- received = [];
- yield loadAndWait(win, "onCompleted", REDIRECTED, () => {
- win.location = CLIENT_REDIRECT_HTTPHEADER;
- });
-
- found = received.find((data) => (data.event == "onCommitted" &&
- data.url == CLIENT_REDIRECT_HTTPHEADER));
-
- ok(found, "Got the onCommitted event");
-
- if (found) {
- is(found.details.transitionType, "link",
- "Got the expected 'link' transitionType in the OnCommitted event");
- ok(Array.isArray(found.details.transitionQualifiers) &&
- found.details.transitionQualifiers.find((q) => q == "client_redirect"),
- "Got the expected 'client_redirect' transitionQualifiers in the OnCommitted events");
- }
-
- // transitionQualifier: client_redirect (sub-frame)
- // (from meta http-equiv tag)
- received = [];
- yield loadAndWait(win, "onCompleted", REDIRECTED, () => {
- win.location = FRAME_CLIENT_REDIRECT;
- });
-
- found = received.find((data) => (data.event == "onCommitted" && data.url == REDIRECTED));
-
- ok(found, "Got the onCommitted event");
-
- if (found) {
- is(found.details.transitionType, "auto_subframe",
- "Got the expected 'auto_subframe' transitionType in the OnCommitted event");
- ok(Array.isArray(found.details.transitionQualifiers) &&
- found.details.transitionQualifiers.find((q) => q == "client_redirect"),
- "Got the expected 'client_redirect' transitionQualifiers in the OnCommitted events");
- }
-
- // transitionQualifier: server_redirect (sub-frame)
- received = [];
- yield loadAndWait(win, "onCompleted", REDIRECTED, () => { win.location = FRAME_REDIRECT; });
-
- found = received.find((data) => (data.event == "onCommitted" && data.url == REDIRECT));
-
- ok(found, "Got the onCommitted event");
-
- if (found) {
- is(found.details.transitionType, "auto_subframe",
- "Got the expected 'auto_subframe' transitionType in the OnCommitted event");
- // BUG 1264936: currently the server_redirect is not detected in sub-frames
- // once we fix it we can test it here:
- //
- // ok(Array.isArray(found.details.transitionQualifiers) &&
- // found.details.transitionQualifiers.find((q) => q == "server_redirect"),
- // "Got the expected 'server_redirect' transitionQualifiers in the OnCommitted events");
- }
-
- // transitionType: manual_subframe
- received = [];
- yield loadAndWait(win, "onCompleted", FRAME_MANUAL, () => { win.location = FRAME_MANUAL; });
- found = received.find((data) => (data.event == "onCommitted" &&
- data.url == FRAME_MANUAL_PAGE1));
-
- ok(found, "Got the onCommitted event");
-
- if (found) {
- is(found.details.transitionType, "auto_subframe",
- "Got the expected 'auto_subframe' transitionType in the OnCommitted event");
- }
-
- received = [];
- yield loadAndWait(win, "onCompleted", FRAME_MANUAL_PAGE2, () => {
- let el = win.document.querySelector("iframe")
- .contentDocument.querySelector("a");
- sendMouseEvent({type: "click"}, el, win);
- });
-
- found = received.find((data) => (data.event == "onCommitted" &&
- data.url == FRAME_MANUAL_PAGE2));
-
- ok(found, "Got the onCommitted event");
-
- if (found) {
- is(found.details.transitionType, "manual_subframe",
- "Got the expected 'manual_subframe' transitionType in the OnCommitted event");
- }
-
- // cleanup phase
- win.close();
-
- yield extension.unload();
- info("webnavigation extension unloaded");
-});
-
-add_task(function* webnav_ordering() {
- let extensionData = {
- manifest: {
- permissions: [
- "webNavigation",
- ],
- },
- background: backgroundScript,
- };
-
- let extension = ExtensionTestUtils.loadExtension(extensionData);
-
- extension.onMessage("received", ({url, event}) => {
- received.push({url, event});
-
- if (event == waitingEvent && url == waitingURL) {
- completedResolve();
- }
- });
-
- yield extension.startup();
- yield extension.awaitMessage("ready");
- info("webnavigation extension loaded");
-
- let win = window.open();
-
- yield loadAndWait(win, "onCompleted", URL, () => { win.location = URL; });
-
- function checkRequired(url) {
- for (let event of REQUIRED) {
- let found = false;
- for (let r of received) {
- if (r.url == url && r.event == event) {
- found = true;
- }
- }
- ok(found, `Received event ${event} from ${url}`);
- }
- }
-
- checkRequired(URL);
- checkRequired(FRAME);
-
- function checkBefore(action1, action2) {
- function find(action) {
- for (let i = 0; i < received.length; i++) {
- if (received[i].url == action.url && received[i].event == action.event) {
- return i;
- }
- }
- return -1;
- }
-
- let index1 = find(action1);
- let index2 = find(action2);
- ok(index1 != -1, `Action ${JSON.stringify(action1)} happened`);
- ok(index2 != -1, `Action ${JSON.stringify(action2)} happened`);
- ok(index1 < index2, `Action ${JSON.stringify(action1)} happened before ${JSON.stringify(action2)}`);
- }
-
- // As required in the webNavigation API documentation:
- // If a navigating frame contains subframes, its onCommitted is fired before any
- // of its children's onBeforeNavigate; while onCompleted is fired after
- // all of its children's onCompleted.
- checkBefore({url: URL, event: "onCommitted"}, {url: FRAME, event: "onBeforeNavigate"});
- checkBefore({url: FRAME, event: "onCompleted"}, {url: URL, event: "onCompleted"});
-
- // As required in the webNAvigation API documentation, check the event sequence:
- // onBeforeNavigate -> onCommitted -> onDOMContentLoaded -> onCompleted
- let expectedEventSequence = [
- "onBeforeNavigate", "onCommitted", "onDOMContentLoaded", "onCompleted",
- ];
-
- for (let i = 1; i < expectedEventSequence.length; i++) {
- let after = expectedEventSequence[i];
- let before = expectedEventSequence[i - 1];
- checkBefore({url: URL, event: before}, {url: URL, event: after});
- checkBefore({url: FRAME, event: before}, {url: FRAME, event: after});
- }
-
- yield loadAndWait(win, "onCompleted", FRAME2, () => { win.frames[0].location = FRAME2; });
-
- checkRequired(FRAME2);
-
- let navigationSequence = [
- {
- action: () => { win.frames[0].document.getElementById("elt").click(); },
- waitURL: `${FRAME2}#ref`,
- expectedEvent: "onReferenceFragmentUpdated",
- description: "clicked an anchor link",
- },
- {
- action: () => { win.frames[0].history.pushState({}, "History PushState", `${FRAME2}#ref2`); },
- waitURL: `${FRAME2}#ref2`,
- expectedEvent: "onReferenceFragmentUpdated",
- description: "history.pushState, same pathname, different hash",
- },
- {
- action: () => { win.frames[0].history.pushState({}, "History PushState", `${FRAME2}#ref2`); },
- waitURL: `${FRAME2}#ref2`,
- expectedEvent: "onHistoryStateUpdated",
- description: "history.pushState, same pathname, same hash",
- },
- {
- action: () => {
- win.frames[0].history.pushState({}, "History PushState", `${FRAME2}?query_param1=value#ref2`);
- },
- waitURL: `${FRAME2}?query_param1=value#ref2`,
- expectedEvent: "onHistoryStateUpdated",
- description: "history.pushState, same pathname, same hash, different query params",
- },
- {
- action: () => {
- win.frames[0].history.pushState({}, "History PushState", `${FRAME2}?query_param2=value#ref3`);
- },
- waitURL: `${FRAME2}?query_param2=value#ref3`,
- expectedEvent: "onHistoryStateUpdated",
- description: "history.pushState, same pathname, different hash, different query params",
- },
- {
- action: () => { win.frames[0].history.pushState(null, "History PushState", FRAME_PUSHSTATE); },
- waitURL: FRAME_PUSHSTATE,
- expectedEvent: "onHistoryStateUpdated",
- description: "history.pushState, different pathname",
- },
- ];
-
- for (let navigation of navigationSequence) {
- let {expectedEvent, waitURL, action, description} = navigation;
- info(`Waiting ${expectedEvent} from ${waitURL} - ${description}`);
- yield loadAndWait(win, expectedEvent, waitURL, action);
- info(`Received ${expectedEvent} from ${waitURL} - ${description}`);
- }
-
- for (let i = navigationSequence.length - 1; i > 0; i--) {
- let {waitURL: fromURL, expectedEvent} = navigationSequence[i];
- let {waitURL} = navigationSequence[i - 1];
- info(`Waiting ${expectedEvent} from ${waitURL} - history.back() from ${fromURL} to ${waitURL}`);
- yield loadAndWait(win, expectedEvent, waitURL, () => { win.frames[0].history.back(); });
- info(`Received ${expectedEvent} from ${waitURL} - history.back() from ${fromURL} to ${waitURL}`);
- }
-
- for (let i = 0; i < navigationSequence.length - 1; i++) {
- let {waitURL: fromURL} = navigationSequence[i];
- let {waitURL, expectedEvent} = navigationSequence[i + 1];
- info(`Waiting ${expectedEvent} from ${waitURL} - history.forward() from ${fromURL} to ${waitURL}`);
- yield loadAndWait(win, expectedEvent, waitURL, () => { win.frames[0].history.forward(); });
- info(`Received ${expectedEvent} from ${waitURL} - history.forward() from ${fromURL} to ${waitURL}`);
- }
-
- win.close();
-
- yield extension.unload();
- info("webnavigation extension unloaded");
-});
-
-add_task(function* webnav_error_event() {
- function backgroundScriptErrorEvent() {
- browser.webNavigation.onErrorOccurred.addListener((details) => {
- browser.test.log(`Got onErrorOccurred ${details.url} ${details.error}`);
-
- browser.test.sendMessage("received", {url: details.url, details, event: "onErrorOccurred"});
- });
-
- browser.test.sendMessage("ready");
- }
-
- let extensionData = {
- manifest: {
- permissions: [
- "webNavigation",
- ],
- },
- background: backgroundScriptErrorEvent,
- };
-
- let extension = ExtensionTestUtils.loadExtension(extensionData);
-
- extension.onMessage("received", ({url, event, details}) => {
- received.push({url, event, details});
-
- if (event == waitingEvent && url == waitingURL) {
- completedResolve();
- }
- });
-
- yield Promise.all([extension.startup(), extension.awaitMessage("ready")]);
- info("webnavigation extension loaded");
-
- let win = window.open();
-
- received = [];
- yield loadAndWait(win, "onErrorOccurred", INVALID_PAGE, () => { win.location = INVALID_PAGE; });
-
- let found = received.find((data) => (data.event == "onErrorOccurred" &&
- data.url == INVALID_PAGE));
-
- ok(found, "Got the onErrorOccurred event");
-
- if (found) {
- ok(found.details.error.match(/Error code [0-9]+/),
- "Got the expected error string in the onErrorOccurred event");
- }
-
- // cleanup phase
- win.close();
-
- yield extension.unload();
- info("webnavigation extension unloaded");
-});
-</script>
-
-</body>
-</html>