summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/referrer/head.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/referrer/head.js')
-rw-r--r--browser/base/content/test/referrer/head.js265
1 files changed, 0 insertions, 265 deletions
diff --git a/browser/base/content/test/referrer/head.js b/browser/base/content/test/referrer/head.js
deleted file mode 100644
index 1a5d5b051..000000000
--- a/browser/base/content/test/referrer/head.js
+++ /dev/null
@@ -1,265 +0,0 @@
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "Promise",
- "resource://gre/modules/Promise.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "BrowserTestUtils",
- "resource://testing-common/BrowserTestUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "ContentTask",
- "resource://testing-common/ContentTask.jsm");
-
-const REFERRER_URL_BASE = "/browser/browser/base/content/test/referrer/";
-const REFERRER_POLICYSERVER_URL =
- "test1.example.com" + REFERRER_URL_BASE + "file_referrer_policyserver.sjs";
-const REFERRER_POLICYSERVER_URL_ATTRIBUTE =
- "test1.example.com" + REFERRER_URL_BASE + "file_referrer_policyserver_attr.sjs";
-
-SpecialPowers.pushPrefEnv({"set": [['network.http.enablePerElementReferrer', true]]});
-
-var gTestWindow = null;
-var rounds = 0;
-
-// We test that the UI code propagates three pieces of state - the referrer URI
-// itself, the referrer policy, and the triggering principal. After that, we
-// trust nsIWebNavigation to do the right thing with the info it's given, which
-// is covered more exhaustively by dom/base/test/test_bug704320.html (which is
-// a faster content-only test). So, here, we limit ourselves to cases that
-// would break when the UI code drops either of these pieces; we don't try to
-// duplicate the entire cross-product test in bug 704320 - that would be slow,
-// especially when we're opening a new window for each case.
-var _referrerTests = [
- // 1. Normal cases - no referrer policy, no special attributes.
- // We expect a full referrer normally, and no referrer on downgrade.
- {
- fromScheme: "http://",
- toScheme: "http://",
- result: "http://test1.example.com/browser" // full referrer
- },
- {
- fromScheme: "https://",
- toScheme: "http://",
- result: "" // no referrer when downgrade
- },
- // 2. Origin referrer policy - we expect an origin referrer,
- // even on downgrade. But rel=noreferrer trumps this.
- {
- fromScheme: "https://",
- toScheme: "http://",
- policy: "origin",
- result: "https://test1.example.com/" // origin, even on downgrade
- },
- {
- fromScheme: "https://",
- toScheme: "http://",
- policy: "origin",
- rel: "noreferrer",
- result: "" // rel=noreferrer trumps meta-referrer
- },
- // 3. XXX: using no-referrer here until we support all attribute values (bug 1178337)
- // Origin-when-cross-origin policy - this depends on the triggering
- // principal. We expect full referrer for same-origin requests,
- // and origin referrer for cross-origin requests.
- {
- fromScheme: "https://",
- toScheme: "https://",
- policy: "no-referrer",
- result: "" // same origin https://test1.example.com/browser
- },
- {
- fromScheme: "http://",
- toScheme: "https://",
- policy: "no-referrer",
- result: "" // cross origin http://test1.example.com
- },
-];
-
-/**
- * Returns the test object for a given test number.
- * @param aTestNumber The test number - 0, 1, 2, ...
- * @return The test object, or undefined if the number is out of range.
- */
-function getReferrerTest(aTestNumber) {
- return _referrerTests[aTestNumber];
-}
-
-/**
- * Returns a brief summary of the test, for logging.
- * @param aTestNumber The test number - 0, 1, 2...
- * @return The test description.
- */
-function getReferrerTestDescription(aTestNumber) {
- let test = getReferrerTest(aTestNumber);
- return "policy=[" + test.policy + "] " +
- "rel=[" + test.rel + "] " +
- test.fromScheme + " -> " + test.toScheme;
-}
-
-/**
- * Clicks the link.
- * @param aWindow The window to click the link in.
- * @param aLinkId The id of the link element.
- * @param aOptions The options for synthesizeMouseAtCenter.
- */
-function clickTheLink(aWindow, aLinkId, aOptions) {
- return BrowserTestUtils.synthesizeMouseAtCenter(
- "#" + aLinkId, aOptions, aWindow.gBrowser.selectedBrowser);
-}
-
-/**
- * Extracts the referrer result from the target window.
- * @param aWindow The window where the referrer target has loaded.
- * @return {Promise}
- * @resolves When extacted, with the text of the (trimmed) referrer.
- */
-function referrerResultExtracted(aWindow) {
- return ContentTask.spawn(aWindow.gBrowser.selectedBrowser, {}, function() {
- return content.document.getElementById("testdiv").textContent;
- });
-}
-
-/**
- * Waits for browser delayed startup to finish.
- * @param aWindow The window to wait for.
- * @return {Promise}
- * @resolves When the window is loaded.
- */
-function delayedStartupFinished(aWindow) {
- return new Promise(function(resolve) {
- Services.obs.addObserver(function observer(aSubject, aTopic) {
- if (aWindow == aSubject) {
- Services.obs.removeObserver(observer, aTopic);
- resolve();
- }
- }, "browser-delayed-startup-finished", false);
- });
-}
-
-/**
- * Waits for some (any) tab to load. The caller triggers the load.
- * @param aWindow The window where to wait for a tab to load.
- * @return {Promise}
- * @resolves With the tab once it's loaded.
- */
-function someTabLoaded(aWindow) {
- return BrowserTestUtils.waitForNewTab(gTestWindow.gBrowser).then((tab) => {
- return BrowserTestUtils.browserStopped(tab.linkedBrowser).then(() => tab);
- });
-}
-
-/**
- * Waits for a new window to open and load. The caller triggers the open.
- * @return {Promise}
- * @resolves With the new window once it's open and loaded.
- */
-function newWindowOpened() {
- return TestUtils.topicObserved("browser-delayed-startup-finished")
- .then(([win]) => win);
-}
-
-/**
- * Opens the context menu.
- * @param aWindow The window to open the context menu in.
- * @param aLinkId The id of the link to open the context menu on.
- * @return {Promise}
- * @resolves With the menu popup when the context menu is open.
- */
-function contextMenuOpened(aWindow, aLinkId) {
- let popupShownPromise = BrowserTestUtils.waitForEvent(aWindow.document,
- "popupshown");
- // Simulate right-click.
- clickTheLink(aWindow, aLinkId, { type: "contextmenu", button: 2 });
- return popupShownPromise.then(e => e.target);
-}
-
-/**
- * Performs a context menu command.
- * @param aWindow The window with the already open context menu.
- * @param aMenu The menu popup to hide.
- * @param aItemId The id of the menu item to activate.
- */
-function doContextMenuCommand(aWindow, aMenu, aItemId) {
- let command = aWindow.document.getElementById(aItemId);
- command.doCommand();
- aMenu.hidePopup();
-}
-
-/**
- * Loads a single test case, i.e., a source url into gTestWindow.
- * @param aTestNumber The test case number - 0, 1, 2...
- * @return {Promise}
- * @resolves When the source url for this test case is loaded.
- */
-function referrerTestCaseLoaded(aTestNumber, aParams) {
- let test = getReferrerTest(aTestNumber);
- let server = rounds == 0 ? REFERRER_POLICYSERVER_URL :
- REFERRER_POLICYSERVER_URL_ATTRIBUTE;
- let url = test.fromScheme + server +
- "?scheme=" + escape(test.toScheme) +
- "&policy=" + escape(test.policy || "") +
- "&rel=" + escape(test.rel || "");
- let browser = gTestWindow.gBrowser;
- return BrowserTestUtils.openNewForegroundTab(browser, () => {
- browser.selectedTab = browser.addTab(url, aParams);
- }, false, true);
-}
-
-/**
- * Checks the result of the referrer test, and moves on to the next test.
- * @param aTestNumber The test number - 0, 1, 2, ...
- * @param aNewWindow The new window where the referrer target opened, or null.
- * @param aNewTab The new tab where the referrer target opened, or null.
- * @param aStartTestCase The callback to start the next test, aTestNumber + 1.
- */
-function checkReferrerAndStartNextTest(aTestNumber, aNewWindow, aNewTab,
- aStartTestCase, aParams = {}) {
- referrerResultExtracted(aNewWindow || gTestWindow).then(function(result) {
- // Compare the actual result against the expected one.
- let test = getReferrerTest(aTestNumber);
- let desc = getReferrerTestDescription(aTestNumber);
- is(result, test.result, desc);
-
- // Clean up - close new tab / window, and then the source tab.
- aNewTab && (aNewWindow || gTestWindow).gBrowser.removeTab(aNewTab);
- aNewWindow && aNewWindow.close();
- is(gTestWindow.gBrowser.tabs.length, 2, "two tabs open");
- gTestWindow.gBrowser.removeTab(gTestWindow.gBrowser.tabs[1]);
-
- // Move on to the next test. Or finish if we're done.
- var nextTestNumber = aTestNumber + 1;
- if (getReferrerTest(nextTestNumber)) {
- referrerTestCaseLoaded(nextTestNumber, aParams).then(function() {
- aStartTestCase(nextTestNumber);
- });
- } else if (rounds == 0) {
- nextTestNumber = 0;
- rounds = 1;
- referrerTestCaseLoaded(nextTestNumber, aParams).then(function() {
- aStartTestCase(nextTestNumber);
- });
- } else {
- finish();
- }
- });
-}
-
-/**
- * Fires up the complete referrer test.
- * @param aStartTestCase The callback to start a single test case, called with
- * the test number - 0, 1, 2... Needs to trigger the navigation from the source
- * page, and call checkReferrerAndStartNextTest() when the target is loaded.
- */
-function startReferrerTest(aStartTestCase, params = {}) {
- waitForExplicitFinish();
-
- // Open the window where we'll load the source URLs.
- gTestWindow = openDialog(location, "", "chrome,all,dialog=no", "about:blank");
- registerCleanupFunction(function() {
- gTestWindow && gTestWindow.close();
- });
-
- // Load and start the first test.
- delayedStartupFinished(gTestWindow).then(function() {
- referrerTestCaseLoaded(0, params).then(function() {
- aStartTestCase(0);
- });
- });
-}