summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_offlineQuotaNotification.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/general/browser_offlineQuotaNotification.js')
-rw-r--r--browser/base/content/test/general/browser_offlineQuotaNotification.js95
1 files changed, 95 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_offlineQuotaNotification.js b/browser/base/content/test/general/browser_offlineQuotaNotification.js
new file mode 100644
index 000000000..e56bfe9a8
--- /dev/null
+++ b/browser/base/content/test/general/browser_offlineQuotaNotification.js
@@ -0,0 +1,95 @@
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// Test offline quota warnings - must be run as a mochitest-browser test or
+// else the test runner gets in the way of notifications due to bug 857897.
+
+const URL = "http://mochi.test:8888/browser/browser/base/content/test/general/offlineQuotaNotification.html";
+
+registerCleanupFunction(function() {
+ // Clean up after ourself
+ let uri = Services.io.newURI(URL, null, null);
+ let principal = Services.scriptSecurityManager.createCodebasePrincipal(uri, {});
+ Services.perms.removeFromPrincipal(principal, "offline-app");
+ Services.prefs.clearUserPref("offline-apps.quota.warn");
+ Services.prefs.clearUserPref("offline-apps.allow_by_default");
+ let {OfflineAppCacheHelper} = Components.utils.import("resource:///modules/offlineAppCache.jsm", {});
+ OfflineAppCacheHelper.clear();
+});
+
+// Same as the other one, but for in-content preferences
+function checkInContentPreferences(win) {
+ let doc = win.document;
+ let sel = doc.getElementById("categories").selectedItems[0].id;
+ let tab = doc.getElementById("advancedPrefs").selectedTab.id;
+ is(gBrowser.currentURI.spec, "about:preferences#advanced", "about:preferences loaded");
+ is(sel, "category-advanced", "Advanced pane was selected");
+ is(tab, "networkTab", "Network tab is selected");
+ // all good, we are done.
+ win.close();
+ finish();
+}
+
+function test() {
+ waitForExplicitFinish();
+
+ Services.prefs.setBoolPref("offline-apps.allow_by_default", false);
+
+ // Open a new tab.
+ gBrowser.selectedTab = gBrowser.addTab(URL);
+ registerCleanupFunction(() => gBrowser.removeCurrentTab());
+
+
+ Promise.all([
+ // Wait for a notification that asks whether to allow offline storage.
+ promiseNotification(),
+ // Wait for the tab to load.
+ BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser),
+ ]).then(() => {
+ info("Loaded page, adding onCached handler");
+ // Need a promise to keep track of when we've added our handler.
+ let mm = gBrowser.selectedBrowser.messageManager;
+ let onCachedAttached = BrowserTestUtils.waitForMessage(mm, "Test:OnCachedAttached");
+ let gotCached = ContentTask.spawn(gBrowser.selectedBrowser, null, function*() {
+ return new Promise(resolve => {
+ content.window.applicationCache.oncached = function() {
+ setTimeout(resolve, 0);
+ };
+ sendAsyncMessage("Test:OnCachedAttached");
+ });
+ });
+ gotCached.then(function() {
+ // We got cached - now we should have provoked the quota warning.
+ let notification = PopupNotifications.getNotification('offline-app-usage');
+ ok(notification, "have offline-app-usage notification");
+ // select the default action - this should cause the preferences
+ // tab to open - which we track via an "Initialized" event.
+ PopupNotifications.panel.firstElementChild.button.click();
+ let newTabBrowser = gBrowser.getBrowserForTab(gBrowser.selectedTab);
+ newTabBrowser.addEventListener("Initialized", function PrefInit() {
+ newTabBrowser.removeEventListener("Initialized", PrefInit, true);
+ executeSoon(function() {
+ checkInContentPreferences(newTabBrowser.contentWindow);
+ })
+ }, true);
+ });
+ onCachedAttached.then(function() {
+ Services.prefs.setIntPref("offline-apps.quota.warn", 1);
+
+ // Click the notification panel's "Allow" button. This should kick
+ // off updates which will call our oncached handler above.
+ PopupNotifications.panel.firstElementChild.button.click();
+ });
+ });
+}
+
+function promiseNotification() {
+ return new Promise(resolve => {
+ PopupNotifications.panel.addEventListener("popupshown", function onShown() {
+ PopupNotifications.panel.removeEventListener("popupshown", onShown);
+ resolve();
+ });
+ });
+}