summaryrefslogtreecommitdiff
path: root/browser/base/content/test/browser_datareporting_notification.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/browser_datareporting_notification.js')
-rw-r--r--browser/base/content/test/browser_datareporting_notification.js198
1 files changed, 0 insertions, 198 deletions
diff --git a/browser/base/content/test/browser_datareporting_notification.js b/browser/base/content/test/browser_datareporting_notification.js
deleted file mode 100644
index b892bd009..000000000
--- a/browser/base/content/test/browser_datareporting_notification.js
+++ /dev/null
@@ -1,198 +0,0 @@
-/* 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/. */
-
-function sendNotifyRequest(name) {
- let ns = {};
- Components.utils.import("resource://gre/modules/services/datareporting/policy.jsm", ns);
- Components.utils.import("resource://gre/modules/Preferences.jsm", ns);
-
- let service = Components.classes["@mozilla.org/datareporting/service;1"]
- .getService(Components.interfaces.nsISupports)
- .wrappedJSObject;
- ok(service.healthReporter, "Health Reporter instance is available.");
-
- let policyPrefs = new ns.Preferences("testing." + name + ".");
- ok(service._prefs, "Health Reporter prefs are available.");
- let hrPrefs = service._prefs;
-
- let policy = new ns.DataReportingPolicy(policyPrefs, hrPrefs, service);
- policy.firstRunDate = new Date(Date.now() - 24 * 60 * 60 * 1000);
-
- is(policy.notifyState, policy.STATE_NOTIFY_UNNOTIFIED, "Policy is in unnotified state.");
-
- service.healthReporter.onInit().then(function onInit() {
- is(policy.ensureNotifyResponse(new Date()), false, "User has not responded to policy.");
- });
-
- return policy;
-}
-
-/**
- * Wait for a <notification> to be closed then call the specified callback.
- */
-function waitForNotificationClose(notification, cb) {
- let parent = notification.parentNode;
-
- let observer = new MutationObserver(function onMutatations(mutations) {
- for (let mutation of mutations) {
- for (let i = 0; i < mutation.removedNodes.length; i++) {
- let node = mutation.removedNodes.item(i);
-
- if (node != notification) {
- continue;
- }
-
- observer.disconnect();
- cb();
- }
- }
- });
-
- observer.observe(parent, {childList: true});
-}
-
-let dumpAppender, rootLogger;
-
-function test() {
- waitForExplicitFinish();
-
- let ns = {};
- Components.utils.import("resource://services-common/log4moz.js", ns);
- rootLogger = ns.Log4Moz.repository.rootLogger;
- dumpAppender = new ns.Log4Moz.DumpAppender();
- dumpAppender.level = ns.Log4Moz.Level.All;
- rootLogger.addAppender(dumpAppender);
-
- let notification = document.getElementById("global-notificationbox");
- let policy;
-
- notification.addEventListener("AlertActive", function active() {
- notification.removeEventListener("AlertActive", active, true);
-
- executeSoon(function afterNotification() {
- is(policy.notifyState, policy.STATE_NOTIFY_WAIT, "Policy is waiting for user response.");
- ok(!policy.dataSubmissionPolicyAccepted, "Data submission policy not yet accepted.");
-
- waitForNotificationClose(notification.currentNotification, function onClose() {
- is(policy.notifyState, policy.STATE_NOTIFY_COMPLETE, "Closing info bar completes user notification.");
- ok(policy.dataSubmissionPolicyAccepted, "Data submission policy accepted.");
- is(policy.dataSubmissionPolicyResponseType, "accepted-info-bar-dismissed",
- "Reason for acceptance was info bar dismissal.");
- is(notification.allNotifications.length, 0, "No notifications remain.");
- test_multiple_windows();
- });
- notification.currentNotification.close();
- });
- }, true);
-
- policy = sendNotifyRequest("single_window_notified");
-}
-
-function test_multiple_windows() {
- // Ensure we see the notification on all windows and that action on one window
- // results in dismiss on every window.
- let window2 = OpenBrowserWindow();
- whenDelayedStartupFinished(window2, function onWindow() {
- let notification1 = document.getElementById("global-notificationbox");
- let notification2 = window2.document.getElementById("global-notificationbox");
- ok(notification2, "2nd window has a global notification box.");
-
- let policy;
-
- let displayCount = 0;
- let prefPaneClosed = false;
- let childWindowClosed = false;
-
- function onAlertDisplayed() {
- displayCount++;
-
- if (displayCount != 2) {
- return;
- }
-
- ok(true, "Data reporting info bar displayed on all open windows.");
-
- // We register two independent observers and we need both to clean up
- // properly. This handles gating for test completion.
- function maybeFinish() {
- if (!prefPaneClosed) {
- dump("Not finishing test yet because pref pane isn't closed.\n");
- return;
- }
-
- if (!childWindowClosed) {
- dump("Not finishing test yet because child window isn't closed.\n");
- return;
- }
-
- dump("Finishing multiple window test.\n");
- rootLogger.removeAppender(dumpAppender);
- delete dumpAppender;
- delete rootLogger;
- finish();
- }
-
- let closeCount = 0;
- function onAlertClose() {
- closeCount++;
-
- if (closeCount != 2) {
- return;
- }
-
- ok(true, "Closing info bar on one window closed them on all.");
-
- is(policy.notifyState, policy.STATE_NOTIFY_COMPLETE,
- "Closing info bar with multiple windows completes notification.");
- ok(policy.dataSubmissionPolicyAccepted, "Data submission policy accepted.");
- is(policy.dataSubmissionPolicyResponseType, "accepted-info-bar-button-pressed",
- "Policy records reason for acceptance was button press.");
- is(notification1.allNotifications.length, 0, "No notifications remain on main window.");
- is(notification2.allNotifications.length, 0, "No notifications remain on 2nd window.");
-
- window2.close();
- childWindowClosed = true;
- maybeFinish();
- }
-
- waitForNotificationClose(notification1.currentNotification, onAlertClose);
- waitForNotificationClose(notification2.currentNotification, onAlertClose);
-
- // While we're here, we dual purpose this test to check that pressing the
- // button does the right thing.
- let buttons = notification2.currentNotification.getElementsByTagName("button");
- is(buttons.length, 1, "There is 1 button in the data reporting notification.");
- let button = buttons[0];
-
- // Automatically close preferences window when it is opened as part of
- // button press.
- Services.obs.addObserver(function observer(prefWin, topic, data) {
- Services.obs.removeObserver(observer, "advanced-pane-loaded");
-
- ok(true, "Pref pane opened on info bar button press.");
- executeSoon(function soon() {
- dump("Closing pref pane.\n");
- prefWin.close();
- prefPaneClosed = true;
- maybeFinish();
- });
- }, "advanced-pane-loaded", false);
-
- button.click();
- }
-
- notification1.addEventListener("AlertActive", function active1() {
- notification1.removeEventListener("AlertActive", active1, true);
- executeSoon(onAlertDisplayed);
- }, true);
-
- notification2.addEventListener("AlertActive", function active2() {
- notification2.removeEventListener("AlertActive", active2, true);
- executeSoon(onAlertDisplayed);
- }, true);
-
- policy = sendNotifyRequest("multiple_window_behavior");
- });
-}
-