summaryrefslogtreecommitdiffstats
path: root/accessible/tests/browser/head.js
diff options
context:
space:
mode:
Diffstat (limited to 'accessible/tests/browser/head.js')
-rw-r--r--accessible/tests/browser/head.js116
1 files changed, 116 insertions, 0 deletions
diff --git a/accessible/tests/browser/head.js b/accessible/tests/browser/head.js
new file mode 100644
index 000000000..8e8d82205
--- /dev/null
+++ b/accessible/tests/browser/head.js
@@ -0,0 +1,116 @@
+/* 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/. */
+
+'use strict';
+
+/* exported initPromise, shutdownPromise,
+ setE10sPrefs, unsetE10sPrefs, forceGC */
+
+/**
+ * Set e10s related preferences in the test environment.
+ * @return {Promise} promise that resolves when preferences are set.
+ */
+function setE10sPrefs() {
+ return new Promise(resolve =>
+ SpecialPowers.pushPrefEnv({
+ set: [
+ ['browser.tabs.remote.autostart', true],
+ ['browser.tabs.remote.force-enable', true],
+ ['extensions.e10sBlocksEnabling', false]
+ ]
+ }, resolve));
+}
+
+/**
+ * Unset e10s related preferences in the test environment.
+ * @return {Promise} promise that resolves when preferences are unset.
+ */
+function unsetE10sPrefs() {
+ return new Promise(resolve => {
+ SpecialPowers.popPrefEnv(resolve);
+ });
+}
+
+// Load the shared-head file first.
+Services.scriptloader.loadSubScript(
+ 'chrome://mochitests/content/browser/accessible/tests/browser/shared-head.js',
+ this);
+
+/**
+ * Returns a promise that resolves when 'a11y-init-or-shutdown' event is fired.
+ * @return {Promise} event promise evaluating to event's data
+ */
+function a11yInitOrShutdownPromise() {
+ return new Promise(resolve => {
+ let observe = (subject, topic, data) => {
+ Services.obs.removeObserver(observe, 'a11y-init-or-shutdown');
+ resolve(data);
+ };
+ Services.obs.addObserver(observe, 'a11y-init-or-shutdown', false);
+ });
+}
+
+/**
+ * Returns a promise that resolves when 'a11y-init-or-shutdown' event is fired
+ * in content.
+ * @param {Object} browser current "tabbrowser" element
+ * @return {Promise} event promise evaluating to event's data
+ */
+function contentA11yInitOrShutdownPromise(browser) {
+ return ContentTask.spawn(browser, {}, a11yInitOrShutdownPromise);
+}
+
+/**
+ * A helper function that maps 'a11y-init-or-shutdown' event to a promise that
+ * resovles or rejects depending on whether accessibility service is expected to
+ * be initialized or shut down.
+ */
+function promiseOK(promise, expected) {
+ return promise.then(flag =>
+ flag === expected ? Promise.resolve() : Promise.reject());
+}
+
+/**
+ * Checks and returns a promise that resolves when accessibility service is
+ * initialized with the correct flag.
+ * @param {?Object} contentBrowser optinal remove browser object that indicates
+ * that accessibility service is expected to be
+ * initialized in content process.
+ * @return {Promise} promise that resolves when the accessibility
+ * service initialized correctly.
+ */
+function initPromise(contentBrowser) {
+ let a11yInitPromise = contentBrowser ?
+ contentA11yInitOrShutdownPromise(contentBrowser) :
+ a11yInitOrShutdownPromise();
+ return promiseOK(a11yInitPromise, '1').then(
+ () => ok(true, 'Service initialized correctly'),
+ () => ok(false, 'Service shutdown incorrectly'));
+}
+
+/**
+ * Checks and returns a promise that resolves when accessibility service is
+ * shut down with the correct flag.
+ * @param {?Object} contentBrowser optinal remove browser object that indicates
+ * that accessibility service is expected to be
+ * shut down in content process.
+ * @return {Promise} promise that resolves when the accessibility
+ * service shuts down correctly.
+ */
+function shutdownPromise(contentBrowser) {
+ let a11yShutdownPromise = contentBrowser ?
+ contentA11yInitOrShutdownPromise(contentBrowser) :
+ a11yInitOrShutdownPromise();
+ return promiseOK(a11yShutdownPromise, '0').then(
+ () => ok(true, 'Service shutdown correctly'),
+ () => ok(false, 'Service initialized incorrectly'));
+}
+
+/**
+ * Force garbage collection.
+ */
+function forceGC() {
+ Cu.forceCC();
+ Cu.forceGC();
+}