diff options
Diffstat (limited to 'browser/base/content/test/general/browser_offlineQuotaNotification.js')
-rw-r--r-- | browser/base/content/test/general/browser_offlineQuotaNotification.js | 95 |
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(); + }); + }); +} |