summaryrefslogtreecommitdiff
path: root/browser/base/content/test/general/content_aboutAccounts.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/general/content_aboutAccounts.js')
-rw-r--r--browser/base/content/test/general/content_aboutAccounts.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/browser/base/content/test/general/content_aboutAccounts.js b/browser/base/content/test/general/content_aboutAccounts.js
new file mode 100644
index 0000000000..12ac049348
--- /dev/null
+++ b/browser/base/content/test/general/content_aboutAccounts.js
@@ -0,0 +1,87 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// This file is loaded as a "content script" for browser_aboutAccounts tests
+"use strict";
+
+var {interfaces: Ci, utils: Cu} = Components;
+
+addEventListener("load", function load(event) {
+ if (event.target != content.document) {
+ return;
+ }
+// content.document.removeEventListener("load", load, true);
+ sendAsyncMessage("test:document:load");
+ // Opening Sync prefs in tests is a pain as leaks are reported due to the
+ // in-flight promises. For now we just mock the openPrefs() function and have
+ // it send a message back to the test so we know it was called.
+ content.openPrefs = function() {
+ sendAsyncMessage("test:openPrefsCalled");
+ }
+}, true);
+
+addEventListener("DOMContentLoaded", function domContentLoaded(event) {
+ removeEventListener("DOMContentLoaded", domContentLoaded, true);
+ let iframe = content.document.getElementById("remote");
+ if (!iframe) {
+ // at least one test initially loads about:blank - in that case, we are done.
+ return;
+ }
+ // We use DOMContentLoaded here as that fires for our iframe even when we've
+ // arranged for the URL in the iframe to cause an error.
+ addEventListener("DOMContentLoaded", function iframeLoaded(dclEvent) {
+ if (iframe.contentWindow.location.href == "about:blank" ||
+ dclEvent.target != iframe.contentDocument) {
+ return;
+ }
+ removeEventListener("DOMContentLoaded", iframeLoaded, true);
+ sendAsyncMessage("test:iframe:load", {url: iframe.contentDocument.location.href});
+ // And an event listener for the test responses, which we send to the test
+ // via a message.
+ iframe.contentWindow.addEventListener("FirefoxAccountsTestResponse", function (fxAccountsEvent) {
+ sendAsyncMessage("test:response", {data: fxAccountsEvent.detail.data});
+ }, true);
+ }, true);
+}, true);
+
+// Return the visibility state of a list of ids.
+addMessageListener("test:check-visibilities", function (message) {
+ let result = {};
+ for (let id of message.data.ids) {
+ let elt = content.document.getElementById(id);
+ if (elt) {
+ let displayStyle = content.window.getComputedStyle(elt).display;
+ if (displayStyle == 'none') {
+ result[id] = false;
+ } else if (displayStyle == 'block') {
+ result[id] = true;
+ } else {
+ result[id] = "strange: " + displayStyle; // tests should fail!
+ }
+ } else {
+ result[id] = "doesn't exist: " + id;
+ }
+ }
+ sendAsyncMessage("test:check-visibilities-response", result);
+});
+
+addMessageListener("test:load-with-mocked-profile-path", function (message) {
+ addEventListener("DOMContentLoaded", function domContentLoaded(event) {
+ removeEventListener("DOMContentLoaded", domContentLoaded, true);
+ content.getDefaultProfilePath = () => message.data.profilePath;
+ // now wait for the iframe to load.
+ let iframe = content.document.getElementById("remote");
+ iframe.addEventListener("load", function iframeLoaded(loadEvent) {
+ if (iframe.contentWindow.location.href == "about:blank" ||
+ loadEvent.target != iframe) {
+ return;
+ }
+ iframe.removeEventListener("load", iframeLoaded, true);
+ sendAsyncMessage("test:load-with-mocked-profile-path-response",
+ {url: iframe.contentDocument.location.href});
+ }, true);
+ });
+ let webNav = docShell.QueryInterface(Ci.nsIWebNavigation);
+ webNav.loadURI(message.data.url, webNav.LOAD_FLAGS_NONE, null, null, null);
+}, true);