mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-18 15:55:36 +00:00
Bug 1445188 - Move site data tests into their own subdirectory. r=jaws
This commit is mostly about moving files but also contains a few test cleanups. MozReview-Commit-ID: AkDhFxlGdCT --HG-- rename : browser/components/preferences/in-content/tests/browser_clearSiteData.js => browser/components/preferences/in-content/tests/siteData/browser_clearSiteData.js rename : browser/components/preferences/in-content/tests/browser_siteData.js => browser/components/preferences/in-content/tests/siteData/browser_siteData.js rename : browser/components/preferences/in-content/tests/browser_siteData2.js => browser/components/preferences/in-content/tests/siteData/browser_siteData2.js rename : browser/components/preferences/in-content/tests/browser_siteData3.js => browser/components/preferences/in-content/tests/siteData/browser_siteData3.js rename : browser/components/preferences/in-content/tests/head.js => browser/components/preferences/in-content/tests/siteData/head.js rename : browser/components/preferences/in-content/tests/offline/manifest.appcache => browser/components/preferences/in-content/tests/siteData/offline/manifest.appcache rename : browser/components/preferences/in-content/tests/offline/offline.html => browser/components/preferences/in-content/tests/siteData/offline/offline.html rename : browser/components/preferences/in-content/tests/service_worker_test.html => browser/components/preferences/in-content/tests/siteData/service_worker_test.html rename : browser/components/preferences/in-content/tests/service_worker_test.js => browser/components/preferences/in-content/tests/siteData/service_worker_test.js rename : browser/components/preferences/in-content/tests/site_data_test.html => browser/components/preferences/in-content/tests/siteData/site_data_test.html extra : rebase_source : 5e715469de30f7f1ae956c272c254cdc4426f605
This commit is contained in:
parent
394c8f01a3
commit
7264beb9af
@ -5,13 +5,8 @@ prefs =
|
||||
support-files =
|
||||
head.js
|
||||
privacypane_tests_perwindow.js
|
||||
site_data_test.html
|
||||
service_worker_test.html
|
||||
service_worker_test.js
|
||||
addons/set_homepage.xpi
|
||||
addons/set_newtab.xpi
|
||||
offline/offline.html
|
||||
offline/manifest.appcache
|
||||
|
||||
[browser_applications_selection.js]
|
||||
skip-if = os == 'linux' # bug 1382057
|
||||
@ -45,7 +40,6 @@ skip-if = os != "win" || (os == "win" && os_version == "6.1")
|
||||
# This test tests the windows-specific app selection dialog, so can't run on non-Windows.
|
||||
# Skip the test on Window 7, see the detail at Bug 1381706.
|
||||
[browser_checkspelling.js]
|
||||
[browser_clearSiteData.js]
|
||||
[browser_connection.js]
|
||||
[browser_connection_bug388287.js]
|
||||
[browser_cookies_exceptions.js]
|
||||
@ -82,10 +76,6 @@ run-if = nightly_build
|
||||
[browser_searchsuggestions.js]
|
||||
[browser_security-1.js]
|
||||
[browser_security-2.js]
|
||||
[browser_siteData.js]
|
||||
skip-if = (os == 'linux' && debug) # Bug 1439332
|
||||
[browser_siteData2.js]
|
||||
[browser_siteData3.js]
|
||||
[browser_spotlight.js]
|
||||
[browser_site_login_exceptions.js]
|
||||
[browser_permissions_dialog.js]
|
||||
|
@ -3,8 +3,6 @@
|
||||
|
||||
ChromeUtils.import("resource://gre/modules/Promise.jsm", this);
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, "serviceWorkerManager", "@mozilla.org/serviceworkers/manager;1", "nsIServiceWorkerManager");
|
||||
|
||||
const kDefaultWait = 2000;
|
||||
|
||||
function is_hidden(aElement) {
|
||||
@ -144,46 +142,6 @@ function openPreferencesViaOpenPreferencesAPI(aPane, aOptions) {
|
||||
});
|
||||
}
|
||||
|
||||
function promiseWindowDialogOpen(buttonAction, url) {
|
||||
return BrowserTestUtils.promiseAlertDialogOpen(buttonAction, url);
|
||||
}
|
||||
|
||||
function promiseAlertDialogOpen(buttonAction) {
|
||||
return BrowserTestUtils.promiseAlertDialogOpen(buttonAction);
|
||||
}
|
||||
|
||||
function promiseSiteDataManagerSitesUpdated() {
|
||||
return TestUtils.topicObserved("sitedatamanager:sites-updated", () => true);
|
||||
}
|
||||
|
||||
function openSiteDataSettingsDialog() {
|
||||
let doc = gBrowser.selectedBrowser.contentDocument;
|
||||
let settingsBtn = doc.getElementById("siteDataSettings");
|
||||
let dialogOverlay = content.gSubDialog._preloadDialog._overlay;
|
||||
let dialogLoadPromise = promiseLoadSubDialog("chrome://browser/content/preferences/siteDataSettings.xul");
|
||||
let dialogInitPromise = TestUtils.topicObserved("sitedata-settings-init", () => true);
|
||||
let fullyLoadPromise = Promise.all([dialogLoadPromise, dialogInitPromise]).then(() => {
|
||||
is(dialogOverlay.style.visibility, "visible", "The Settings dialog should be visible");
|
||||
});
|
||||
settingsBtn.doCommand();
|
||||
return fullyLoadPromise;
|
||||
}
|
||||
|
||||
function assertSitesListed(doc, hosts) {
|
||||
let frameDoc = content.gSubDialog._topDialog._frame.contentDocument;
|
||||
let removeBtn = frameDoc.getElementById("removeSelected");
|
||||
let removeAllBtn = frameDoc.getElementById("removeAll");
|
||||
let sitesList = frameDoc.getElementById("sitesList");
|
||||
let totalSitesNumber = sitesList.getElementsByTagName("richlistitem").length;
|
||||
is(totalSitesNumber, hosts.length, "Should list the right sites number");
|
||||
hosts.forEach(host => {
|
||||
let site = sitesList.querySelector(`richlistitem[host="${host}"]`);
|
||||
ok(site, `Should list the site of ${host}`);
|
||||
});
|
||||
is(removeBtn.disabled, true, "Should disable the removeSelected button");
|
||||
is(removeAllBtn.disabled, false, "Should enable the removeAllBtn button");
|
||||
}
|
||||
|
||||
async function evaluateSearchResults(keyword, searchReults) {
|
||||
searchReults = Array.isArray(searchReults) ? searchReults : [searchReults];
|
||||
searchReults.push("header-searchResults");
|
||||
@ -206,111 +164,3 @@ async function evaluateSearchResults(keyword, searchReults) {
|
||||
}
|
||||
}
|
||||
|
||||
const mockSiteDataManager = {
|
||||
|
||||
_SiteDataManager: null,
|
||||
_originalQMS: null,
|
||||
_originalRemoveQuotaUsage: null,
|
||||
|
||||
getUsage(onUsageResult) {
|
||||
let result = this.fakeSites.map(site => ({
|
||||
origin: site.principal.origin,
|
||||
usage: site.usage,
|
||||
persisted: site.persisted,
|
||||
lastAccessed: site.lastAccessed,
|
||||
}));
|
||||
onUsageResult({ result, resultCode: Cr.NS_OK });
|
||||
},
|
||||
|
||||
_removeQuotaUsage(site) {
|
||||
var target = site.principals[0].URI.host;
|
||||
this.fakeSites = this.fakeSites.filter(fakeSite => {
|
||||
return fakeSite.principal.URI.host != target;
|
||||
});
|
||||
},
|
||||
|
||||
register(SiteDataManager, fakeSites) {
|
||||
this._SiteDataManager = SiteDataManager;
|
||||
this._originalQMS = this._SiteDataManager._qms;
|
||||
this._SiteDataManager._qms = this;
|
||||
this._originalRemoveQuotaUsage = this._SiteDataManager._removeQuotaUsage;
|
||||
this._SiteDataManager._removeQuotaUsage = this._removeQuotaUsage.bind(this);
|
||||
// Add some fake data.
|
||||
this.fakeSites = fakeSites;
|
||||
for (let site of fakeSites) {
|
||||
if (!site.principal) {
|
||||
site.principal = Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin(site.origin);
|
||||
}
|
||||
|
||||
let uri = site.principal.URI;
|
||||
try {
|
||||
site.baseDomain = Services.eTLD.getBaseDomainFromHost(uri.host);
|
||||
} catch (e) {
|
||||
site.baseDomain = uri.host;
|
||||
}
|
||||
|
||||
// Add some cookies if needed.
|
||||
for (let i = 0; i < (site.cookies || 0); i++) {
|
||||
Services.cookies.add(uri.host, uri.pathQueryRef, Cu.now(), i,
|
||||
false, false, false, Date.now() + 1000 * 60 * 60);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async unregister() {
|
||||
await this._SiteDataManager.removeAll();
|
||||
this.fakeSites = null;
|
||||
this._SiteDataManager._qms = this._originalQMS;
|
||||
this._SiteDataManager._removeQuotaUsage = this._originalRemoveQuotaUsage;
|
||||
}
|
||||
};
|
||||
|
||||
function getQuotaUsage(origin) {
|
||||
return new Promise(resolve => {
|
||||
let uri = NetUtil.newURI(origin);
|
||||
let principal = Services.scriptSecurityManager.createCodebasePrincipal(uri, {});
|
||||
Services.qms.getUsageForPrincipal(principal, request => resolve(request.result.usage));
|
||||
});
|
||||
}
|
||||
|
||||
function promiseCookiesCleared() {
|
||||
return TestUtils.topicObserved("cookie-changed", (subj, data) => {
|
||||
return data === "cleared";
|
||||
});
|
||||
}
|
||||
|
||||
async function loadServiceWorkerTestPage(url) {
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
|
||||
await BrowserTestUtils.waitForCondition(() => {
|
||||
return ContentTask.spawn(tab.linkedBrowser, {}, () =>
|
||||
content.document.body.getAttribute("data-test-service-worker-registered") === "true");
|
||||
}, `Fail to load service worker test ${url}`);
|
||||
await BrowserTestUtils.removeTab(tab);
|
||||
}
|
||||
|
||||
function promiseServiceWorkersCleared() {
|
||||
return BrowserTestUtils.waitForCondition(() => {
|
||||
let serviceWorkers = serviceWorkerManager.getAllRegistrations();
|
||||
if (serviceWorkers.length == 0) {
|
||||
ok(true, "Cleared all service workers");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}, "Should clear all service workers");
|
||||
}
|
||||
|
||||
function promiseServiceWorkerRegisteredFor(url) {
|
||||
return BrowserTestUtils.waitForCondition(() => {
|
||||
try {
|
||||
let principal = Services.scriptSecurityManager.createCodebasePrincipalFromOrigin(url);
|
||||
let sw = serviceWorkerManager.getRegistrationByPrincipal(principal, principal.URI.spec);
|
||||
if (sw) {
|
||||
ok(true, `Found the service worker registered for ${url}`);
|
||||
return true;
|
||||
}
|
||||
} catch (e) {}
|
||||
return false;
|
||||
}, `Should register service worker for ${url}`);
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,14 @@
|
||||
[DEFAULT]
|
||||
support-files =
|
||||
head.js
|
||||
site_data_test.html
|
||||
service_worker_test.html
|
||||
service_worker_test.js
|
||||
offline/offline.html
|
||||
offline/manifest.appcache
|
||||
|
||||
[browser_clearSiteData.js]
|
||||
[browser_siteData.js]
|
||||
skip-if = (os == 'linux' && debug) # Bug 1439332
|
||||
[browser_siteData2.js]
|
||||
[browser_siteData3.js]
|
@ -5,17 +5,6 @@
|
||||
|
||||
ChromeUtils.import("resource:///modules/SitePermissions.jsm");
|
||||
|
||||
const { SiteDataManager } = ChromeUtils.import("resource:///modules/SiteDataManager.jsm", {});
|
||||
const { DownloadUtils } = ChromeUtils.import("resource://gre/modules/DownloadUtils.jsm", {});
|
||||
|
||||
const TEST_QUOTA_USAGE_HOST = "example.com";
|
||||
const TEST_QUOTA_USAGE_ORIGIN = "https://" + TEST_QUOTA_USAGE_HOST;
|
||||
const TEST_QUOTA_USAGE_URL = TEST_QUOTA_USAGE_ORIGIN + "/browser/browser/components/preferences/in-content/tests/site_data_test.html";
|
||||
const TEST_OFFLINE_HOST = "example.org";
|
||||
const TEST_OFFLINE_ORIGIN = "https://" + TEST_OFFLINE_HOST;
|
||||
const TEST_OFFLINE_URL = TEST_OFFLINE_ORIGIN + "/browser/browser/components/preferences/in-content/tests/offline/offline.html";
|
||||
const TEST_SERVICE_WORKER_URL = TEST_OFFLINE_ORIGIN + "/browser/browser/components/preferences/in-content/tests/service_worker_test.html";
|
||||
|
||||
async function testClearData(clearSiteData, clearCache) {
|
||||
let quotaURI = Services.io.newURI(TEST_QUOTA_USAGE_ORIGIN);
|
||||
SitePermissions.set(quotaURI, "persistent-storage", SitePermissions.ALLOW);
|
||||
@ -89,7 +78,7 @@ async function testClearData(clearSiteData, clearCache) {
|
||||
let updatePromise;
|
||||
let cookiesClearedPromise;
|
||||
if (clearSiteData) {
|
||||
acceptPromise = promiseAlertDialogOpen("accept");
|
||||
acceptPromise = BrowserTestUtils.promiseAlertDialogOpen("accept");
|
||||
updatePromise = promiseSiteDataManagerSitesUpdated();
|
||||
cookiesClearedPromise = promiseCookiesCleared();
|
||||
}
|
@ -3,22 +3,8 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const TEST_QUOTA_USAGE_HOST = "example.com";
|
||||
const TEST_QUOTA_USAGE_ORIGIN = "https://" + TEST_QUOTA_USAGE_HOST;
|
||||
const TEST_QUOTA_USAGE_URL = TEST_QUOTA_USAGE_ORIGIN + "/browser/browser/components/preferences/in-content/tests/site_data_test.html";
|
||||
const TEST_OFFLINE_HOST = "example.org";
|
||||
const TEST_OFFLINE_ORIGIN = "https://" + TEST_OFFLINE_HOST;
|
||||
const TEST_OFFLINE_URL = TEST_OFFLINE_ORIGIN + "/browser/browser/components/preferences/in-content/tests/offline/offline.html";
|
||||
const TEST_SERVICE_WORKER_URL = TEST_OFFLINE_ORIGIN + "/browser/browser/components/preferences/in-content/tests/service_worker_test.html";
|
||||
const REMOVE_DIALOG_URL = "chrome://browser/content/preferences/siteDataRemoveSelected.xul";
|
||||
|
||||
const { NetUtil } = ChromeUtils.import("resource://gre/modules/NetUtil.jsm", {});
|
||||
const { DownloadUtils } = ChromeUtils.import("resource://gre/modules/DownloadUtils.jsm", {});
|
||||
const { SiteDataManager } = ChromeUtils.import("resource:///modules/SiteDataManager.jsm", {});
|
||||
const { OfflineAppCacheHelper } = ChromeUtils.import("resource:///modules/offlineAppCache.jsm", {});
|
||||
|
||||
function getPersistentStoragePermStatus(origin) {
|
||||
let uri = NetUtil.newURI(origin);
|
||||
let uri = Services.io.newURI(origin);
|
||||
let principal = Services.scriptSecurityManager.createCodebasePrincipal(uri, {});
|
||||
return Services.perms.testExactPermissionFromPrincipal(principal, "persistent-storage");
|
||||
}
|
||||
@ -26,8 +12,6 @@ function getPersistentStoragePermStatus(origin) {
|
||||
// Test listing site using quota usage or site using appcache
|
||||
// This is currently disabled because of bug 1414751.
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
|
||||
// Open a test site which would save into appcache
|
||||
await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_OFFLINE_URL);
|
||||
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
@ -71,7 +55,6 @@ add_task(async function() {
|
||||
|
||||
// Test buttons are disabled and loading message shown while updating sites
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
let updatedPromise = promiseSiteDataManagerSitesUpdated();
|
||||
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
|
||||
await updatedPromise;
|
||||
@ -118,7 +101,6 @@ add_task(async function() {
|
||||
|
||||
// Test clearing service wroker through the settings panel
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
// Register a test service worker
|
||||
await loadServiceWorkerTestPage(TEST_SERVICE_WORKER_URL);
|
||||
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
|
||||
@ -126,7 +108,7 @@ add_task(async function() {
|
||||
await promiseServiceWorkerRegisteredFor(TEST_SERVICE_WORKER_URL);
|
||||
// Open the Site Data Settings panel and remove the site
|
||||
await openSiteDataSettingsDialog();
|
||||
let acceptRemovePromise = promiseAlertDialogOpen("accept");
|
||||
let acceptRemovePromise = BrowserTestUtils.promiseAlertDialogOpen("accept");
|
||||
let updatePromise = promiseSiteDataManagerSitesUpdated();
|
||||
ContentTask.spawn(gBrowser.selectedBrowser, { TEST_OFFLINE_HOST }, args => {
|
||||
let host = args.TEST_OFFLINE_HOST;
|
||||
@ -186,7 +168,7 @@ add_task(async function() {
|
||||
|
||||
// Open the site data manager and remove one site.
|
||||
await openSiteDataSettingsDialog();
|
||||
let removeDialogOpenPromise = promiseWindowDialogOpen("accept", REMOVE_DIALOG_URL);
|
||||
let removeDialogOpenPromise = BrowserTestUtils.promiseAlertDialogOpen("accept", REMOVE_DIALOG_URL);
|
||||
await ContentTask.spawn(gBrowser.selectedBrowser, {creationDate1, creationDate2}, function(args) {
|
||||
let frameDoc = content.gSubDialog._topDialog._frame.contentDocument;
|
||||
|
||||
@ -221,7 +203,7 @@ add_task(async function() {
|
||||
|
||||
// Open the site data manager and remove another site.
|
||||
await openSiteDataSettingsDialog();
|
||||
let acceptRemovePromise = promiseAlertDialogOpen("accept");
|
||||
let acceptRemovePromise = BrowserTestUtils.promiseAlertDialogOpen("accept");
|
||||
await ContentTask.spawn(gBrowser.selectedBrowser, {creationDate1}, function(args) {
|
||||
let frameDoc = content.gSubDialog._topDialog._frame.contentDocument;
|
||||
|
@ -1,6 +1,4 @@
|
||||
"use strict";
|
||||
const { SiteDataManager } = ChromeUtils.import("resource:///modules/SiteDataManager.jsm", {});
|
||||
const REMOVE_DIALOG_URL = "chrome://browser/content/preferences/siteDataRemoveSelected.xul";
|
||||
|
||||
/* eslint-disable mozilla/no-cpows-in-tests */
|
||||
|
||||
@ -31,7 +29,6 @@ function assertAllSitesNotListed(win) {
|
||||
|
||||
// Test selecting and removing all sites one by one
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
mockSiteDataManager.register(SiteDataManager, [
|
||||
{
|
||||
usage: 1024,
|
||||
@ -83,7 +80,7 @@ add_task(async function() {
|
||||
assertSitesListed(doc, fakeHosts);
|
||||
|
||||
// Test the "Save Changes" button but cancelling save
|
||||
let cancelPromise = promiseAlertDialogOpen("cancel");
|
||||
let cancelPromise = BrowserTestUtils.promiseAlertDialogOpen("cancel");
|
||||
settingsDialogClosePromise = promiseSettingsDialogClose();
|
||||
frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
|
||||
saveBtn = frameDoc.getElementById("save");
|
||||
@ -98,7 +95,7 @@ add_task(async function() {
|
||||
assertSitesListed(doc, fakeHosts);
|
||||
|
||||
// Test the "Save Changes" button and accepting save
|
||||
let acceptPromise = promiseAlertDialogOpen("accept");
|
||||
let acceptPromise = BrowserTestUtils.promiseAlertDialogOpen("accept");
|
||||
settingsDialogClosePromise = promiseSettingsDialogClose();
|
||||
updatePromise = promiseSiteDataManagerSitesUpdated();
|
||||
frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
|
||||
@ -129,7 +126,6 @@ add_task(async function() {
|
||||
|
||||
// Test selecting and removing partial sites
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
mockSiteDataManager.register(SiteDataManager, [
|
||||
{
|
||||
usage: 1024,
|
||||
@ -197,7 +193,7 @@ add_task(async function() {
|
||||
assertSitesListed(doc, fakeHosts);
|
||||
|
||||
// Test the "Save Changes" button but canceling save
|
||||
removeDialogOpenPromise = promiseWindowDialogOpen("cancel", REMOVE_DIALOG_URL);
|
||||
removeDialogOpenPromise = BrowserTestUtils.promiseAlertDialogOpen("cancel", REMOVE_DIALOG_URL);
|
||||
settingsDialogClosePromise = promiseSettingsDialogClose();
|
||||
frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
|
||||
saveBtn = frameDoc.getElementById("save");
|
||||
@ -212,7 +208,7 @@ add_task(async function() {
|
||||
assertSitesListed(doc, fakeHosts);
|
||||
|
||||
// Test the "Save Changes" button and accepting save
|
||||
removeDialogOpenPromise = promiseWindowDialogOpen("accept", REMOVE_DIALOG_URL);
|
||||
removeDialogOpenPromise = BrowserTestUtils.promiseAlertDialogOpen("accept", REMOVE_DIALOG_URL);
|
||||
settingsDialogClosePromise = promiseSettingsDialogClose();
|
||||
frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
|
||||
saveBtn = frameDoc.getElementById("save");
|
||||
@ -247,7 +243,6 @@ add_task(async function() {
|
||||
|
||||
// Test searching and then removing only visible sites
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
mockSiteDataManager.register(SiteDataManager, [
|
||||
{
|
||||
usage: 1024,
|
||||
@ -288,7 +283,7 @@ add_task(async function() {
|
||||
|
||||
// Test only removing all visible sites listed
|
||||
updatePromise = promiseSiteDataManagerSitesUpdated();
|
||||
let acceptRemovePromise = promiseWindowDialogOpen("accept", REMOVE_DIALOG_URL);
|
||||
let acceptRemovePromise = BrowserTestUtils.promiseAlertDialogOpen("accept", REMOVE_DIALOG_URL);
|
||||
let settingsDialogClosePromise = promiseSettingsDialogClose();
|
||||
let removeAllBtn = frameDoc.getElementById("removeAll");
|
||||
let saveBtn = frameDoc.getElementById("save");
|
||||
@ -306,7 +301,6 @@ add_task(async function() {
|
||||
|
||||
// Test dynamically clearing all site data
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
mockSiteDataManager.register(SiteDataManager, [
|
||||
{
|
||||
usage: 1024,
|
||||
@ -346,7 +340,7 @@ add_task(async function() {
|
||||
let win = gBrowser.selectedBrowser.contentWindow;
|
||||
let frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
|
||||
updatePromise = promiseSiteDataManagerSitesUpdated();
|
||||
let acceptRemovePromise = promiseAlertDialogOpen("accept");
|
||||
let acceptRemovePromise = BrowserTestUtils.promiseAlertDialogOpen("accept");
|
||||
let settingsDialogClosePromise = promiseSettingsDialogClose();
|
||||
let removeAllBtn = frameDoc.getElementById("removeAll");
|
||||
let saveBtn = frameDoc.getElementById("save");
|
@ -1,10 +1,7 @@
|
||||
"use strict";
|
||||
const { SiteDataManager } = ChromeUtils.import("resource:///modules/SiteDataManager.jsm", {});
|
||||
const { DownloadUtils } = ChromeUtils.import("resource://gre/modules/DownloadUtils.jsm", {});
|
||||
|
||||
// Test not displaying sites which store 0 byte and don't have persistent storage.
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({ set: [["browser.storageManager.enabled", true]] });
|
||||
mockSiteDataManager.register(SiteDataManager, [
|
||||
{
|
||||
usage: 0,
|
||||
@ -48,7 +45,6 @@ add_task(async function() {
|
||||
|
||||
// Test grouping and listing sites across scheme, port and origin attributes by host
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({ set: [["browser.storageManager.enabled", true]] });
|
||||
const quotaUsage = 1024;
|
||||
mockSiteDataManager.register(SiteDataManager, [
|
||||
{
|
||||
@ -107,7 +103,6 @@ add_task(async function() {
|
||||
|
||||
// Test sorting
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
mockSiteDataManager.register(SiteDataManager, [
|
||||
{
|
||||
usage: 1024,
|
237
browser/components/preferences/in-content/tests/siteData/head.js
Normal file
237
browser/components/preferences/in-content/tests/siteData/head.js
Normal file
@ -0,0 +1,237 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
const TEST_QUOTA_USAGE_HOST = "example.com";
|
||||
const TEST_QUOTA_USAGE_ORIGIN = "https://" + TEST_QUOTA_USAGE_HOST;
|
||||
const TEST_QUOTA_USAGE_URL = getRootDirectory(gTestPath).replace("chrome://mochitests/content", TEST_QUOTA_USAGE_ORIGIN) + "/site_data_test.html";
|
||||
const TEST_OFFLINE_HOST = "example.org";
|
||||
const TEST_OFFLINE_ORIGIN = "https://" + TEST_OFFLINE_HOST;
|
||||
const TEST_OFFLINE_URL = getRootDirectory(gTestPath).replace("chrome://mochitests/content", TEST_OFFLINE_ORIGIN) + "/offline/offline.html";
|
||||
const TEST_SERVICE_WORKER_URL = getRootDirectory(gTestPath).replace("chrome://mochitests/content", TEST_OFFLINE_ORIGIN) + "/service_worker_test.html";
|
||||
|
||||
const REMOVE_DIALOG_URL = "chrome://browser/content/preferences/siteDataRemoveSelected.xul";
|
||||
|
||||
const { DownloadUtils } = ChromeUtils.import("resource://gre/modules/DownloadUtils.jsm", {});
|
||||
const { SiteDataManager } = ChromeUtils.import("resource:///modules/SiteDataManager.jsm", {});
|
||||
const { OfflineAppCacheHelper } = ChromeUtils.import("resource:///modules/offlineAppCache.jsm", {});
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, "serviceWorkerManager", "@mozilla.org/serviceworkers/manager;1", "nsIServiceWorkerManager");
|
||||
|
||||
function promiseSiteDataManagerSitesUpdated() {
|
||||
return TestUtils.topicObserved("sitedatamanager:sites-updated", () => true);
|
||||
}
|
||||
|
||||
function is_hidden(aElement) {
|
||||
var style = aElement.ownerGlobal.getComputedStyle(aElement);
|
||||
if (style.display == "none")
|
||||
return true;
|
||||
if (style.visibility != "visible")
|
||||
return true;
|
||||
|
||||
// Hiding a parent element will hide all its children
|
||||
if (aElement.parentNode != aElement.ownerDocument)
|
||||
return is_hidden(aElement.parentNode);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function is_element_visible(aElement, aMsg) {
|
||||
isnot(aElement, null, "Element should not be null, when checking visibility");
|
||||
ok(!is_hidden(aElement), aMsg);
|
||||
}
|
||||
|
||||
function is_element_hidden(aElement, aMsg) {
|
||||
isnot(aElement, null, "Element should not be null, when checking visibility");
|
||||
ok(is_hidden(aElement), aMsg);
|
||||
}
|
||||
|
||||
function promiseLoadSubDialog(aURL) {
|
||||
return new Promise((resolve, reject) => {
|
||||
content.gSubDialog._dialogStack.addEventListener("dialogopen", function dialogopen(aEvent) {
|
||||
if (aEvent.detail.dialog._frame.contentWindow.location == "about:blank")
|
||||
return;
|
||||
content.gSubDialog._dialogStack.removeEventListener("dialogopen", dialogopen);
|
||||
|
||||
is(aEvent.detail.dialog._frame.contentWindow.location.toString(), aURL,
|
||||
"Check the proper URL is loaded");
|
||||
|
||||
// Check visibility
|
||||
is_element_visible(aEvent.detail.dialog._overlay, "Overlay is visible");
|
||||
|
||||
// Check that stylesheets were injected
|
||||
let expectedStyleSheetURLs = aEvent.detail.dialog._injectedStyleSheets.slice(0);
|
||||
for (let styleSheet of aEvent.detail.dialog._frame.contentDocument.styleSheets) {
|
||||
let i = expectedStyleSheetURLs.indexOf(styleSheet.href);
|
||||
if (i >= 0) {
|
||||
info("found " + styleSheet.href);
|
||||
expectedStyleSheetURLs.splice(i, 1);
|
||||
}
|
||||
}
|
||||
is(expectedStyleSheetURLs.length, 0, "All expectedStyleSheetURLs should have been found");
|
||||
|
||||
// Wait for the next event tick to make sure the remaining part of the
|
||||
// testcase runs after the dialog gets ready for input.
|
||||
executeSoon(() => resolve(aEvent.detail.dialog._frame.contentWindow));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function openPreferencesViaOpenPreferencesAPI(aPane, aOptions) {
|
||||
return new Promise(resolve => {
|
||||
let finalPrefPaneLoaded = TestUtils.topicObserved("sync-pane-loaded", () => true);
|
||||
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, "about:blank");
|
||||
openPreferences(aPane);
|
||||
let newTabBrowser = gBrowser.selectedBrowser;
|
||||
|
||||
newTabBrowser.addEventListener("Initialized", function() {
|
||||
newTabBrowser.contentWindow.addEventListener("load", async function() {
|
||||
let win = gBrowser.contentWindow;
|
||||
let selectedPane = win.history.state;
|
||||
await finalPrefPaneLoaded;
|
||||
if (!aOptions || !aOptions.leaveOpen)
|
||||
gBrowser.removeCurrentTab();
|
||||
resolve({ selectedPane });
|
||||
}, { once: true });
|
||||
}, { capture: true, once: true });
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
function openSiteDataSettingsDialog() {
|
||||
let doc = gBrowser.selectedBrowser.contentDocument;
|
||||
let settingsBtn = doc.getElementById("siteDataSettings");
|
||||
let dialogOverlay = content.gSubDialog._preloadDialog._overlay;
|
||||
let dialogLoadPromise = promiseLoadSubDialog("chrome://browser/content/preferences/siteDataSettings.xul");
|
||||
let dialogInitPromise = TestUtils.topicObserved("sitedata-settings-init", () => true);
|
||||
let fullyLoadPromise = Promise.all([dialogLoadPromise, dialogInitPromise]).then(() => {
|
||||
is(dialogOverlay.style.visibility, "visible", "The Settings dialog should be visible");
|
||||
});
|
||||
settingsBtn.doCommand();
|
||||
return fullyLoadPromise;
|
||||
}
|
||||
|
||||
function assertSitesListed(doc, hosts) {
|
||||
let frameDoc = content.gSubDialog._topDialog._frame.contentDocument;
|
||||
let removeBtn = frameDoc.getElementById("removeSelected");
|
||||
let removeAllBtn = frameDoc.getElementById("removeAll");
|
||||
let sitesList = frameDoc.getElementById("sitesList");
|
||||
let totalSitesNumber = sitesList.getElementsByTagName("richlistitem").length;
|
||||
is(totalSitesNumber, hosts.length, "Should list the right sites number");
|
||||
hosts.forEach(host => {
|
||||
let site = sitesList.querySelector(`richlistitem[host="${host}"]`);
|
||||
ok(site, `Should list the site of ${host}`);
|
||||
});
|
||||
is(removeBtn.disabled, true, "Should disable the removeSelected button");
|
||||
is(removeAllBtn.disabled, false, "Should enable the removeAllBtn button");
|
||||
}
|
||||
|
||||
const mockSiteDataManager = {
|
||||
|
||||
_SiteDataManager: null,
|
||||
_originalQMS: null,
|
||||
_originalRemoveQuotaUsage: null,
|
||||
|
||||
getUsage(onUsageResult) {
|
||||
let result = this.fakeSites.map(site => ({
|
||||
origin: site.principal.origin,
|
||||
usage: site.usage,
|
||||
persisted: site.persisted,
|
||||
lastAccessed: site.lastAccessed,
|
||||
}));
|
||||
onUsageResult({ result, resultCode: Cr.NS_OK });
|
||||
},
|
||||
|
||||
_removeQuotaUsage(site) {
|
||||
var target = site.principals[0].URI.host;
|
||||
this.fakeSites = this.fakeSites.filter(fakeSite => {
|
||||
return fakeSite.principal.URI.host != target;
|
||||
});
|
||||
},
|
||||
|
||||
register(siteDataManager, fakeSites) {
|
||||
this._SiteDataManager = siteDataManager;
|
||||
this._originalQMS = this._SiteDataManager._qms;
|
||||
this._SiteDataManager._qms = this;
|
||||
this._originalRemoveQuotaUsage = this._SiteDataManager._removeQuotaUsage;
|
||||
this._SiteDataManager._removeQuotaUsage = this._removeQuotaUsage.bind(this);
|
||||
// Add some fake data.
|
||||
this.fakeSites = fakeSites;
|
||||
for (let site of fakeSites) {
|
||||
if (!site.principal) {
|
||||
site.principal = Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin(site.origin);
|
||||
}
|
||||
|
||||
let uri = site.principal.URI;
|
||||
try {
|
||||
site.baseDomain = Services.eTLD.getBaseDomainFromHost(uri.host);
|
||||
} catch (e) {
|
||||
site.baseDomain = uri.host;
|
||||
}
|
||||
|
||||
// Add some cookies if needed.
|
||||
for (let i = 0; i < (site.cookies || 0); i++) {
|
||||
Services.cookies.add(uri.host, uri.pathQueryRef, Cu.now(), i,
|
||||
false, false, false, Date.now() + 1000 * 60 * 60);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async unregister() {
|
||||
await this._SiteDataManager.removeAll();
|
||||
this.fakeSites = null;
|
||||
this._SiteDataManager._qms = this._originalQMS;
|
||||
this._SiteDataManager._removeQuotaUsage = this._originalRemoveQuotaUsage;
|
||||
}
|
||||
};
|
||||
|
||||
function getQuotaUsage(origin) {
|
||||
return new Promise(resolve => {
|
||||
let uri = NetUtil.newURI(origin);
|
||||
let principal = Services.scriptSecurityManager.createCodebasePrincipal(uri, {});
|
||||
Services.qms.getUsageForPrincipal(principal, request => resolve(request.result.usage));
|
||||
});
|
||||
}
|
||||
|
||||
function promiseCookiesCleared() {
|
||||
return TestUtils.topicObserved("cookie-changed", (subj, data) => {
|
||||
return data === "cleared";
|
||||
});
|
||||
}
|
||||
|
||||
async function loadServiceWorkerTestPage(url) {
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
|
||||
await BrowserTestUtils.waitForCondition(() => {
|
||||
return ContentTask.spawn(tab.linkedBrowser, {}, () =>
|
||||
content.document.body.getAttribute("data-test-service-worker-registered") === "true");
|
||||
}, `Fail to load service worker test ${url}`);
|
||||
await BrowserTestUtils.removeTab(tab);
|
||||
}
|
||||
|
||||
function promiseServiceWorkersCleared() {
|
||||
return BrowserTestUtils.waitForCondition(() => {
|
||||
let serviceWorkers = serviceWorkerManager.getAllRegistrations();
|
||||
if (serviceWorkers.length == 0) {
|
||||
ok(true, "Cleared all service workers");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}, "Should clear all service workers");
|
||||
}
|
||||
|
||||
function promiseServiceWorkerRegisteredFor(url) {
|
||||
return BrowserTestUtils.waitForCondition(() => {
|
||||
try {
|
||||
let principal = Services.scriptSecurityManager.createCodebasePrincipalFromOrigin(url);
|
||||
let sw = serviceWorkerManager.getRegistrationByPrincipal(principal, principal.URI.spec);
|
||||
if (sw) {
|
||||
ok(true, `Found the service worker registered for ${url}`);
|
||||
return true;
|
||||
}
|
||||
} catch (e) {}
|
||||
return false;
|
||||
}, `Should register service worker for ${url}`);
|
||||
}
|
||||
|
@ -9,7 +9,8 @@ DIRS += [
|
||||
]
|
||||
|
||||
BROWSER_CHROME_MANIFESTS += [
|
||||
'in-content/tests/browser.ini'
|
||||
'in-content/tests/browser.ini',
|
||||
'in-content/tests/siteData/browser.ini'
|
||||
]
|
||||
|
||||
for var in ('MOZ_APP_NAME', 'MOZ_MACBUNDLE_NAME'):
|
||||
|
Loading…
Reference in New Issue
Block a user