michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: Components.utils.import("resource://gre/modules/PlacesUtils.jsm"); michael@0: Components.utils.import("resource://gre/modules/NetUtil.jsm"); michael@0: Components.utils.import("resource://gre/modules/ForgetAboutSite.jsm"); michael@0: michael@0: const ABOUT_PERMISSIONS_SPEC = "about:permissions"; michael@0: michael@0: const TEST_URI_1 = NetUtil.newURI("http://mozilla.com/"); michael@0: const TEST_URI_2 = NetUtil.newURI("http://mozilla.org/"); michael@0: const TEST_URI_3 = NetUtil.newURI("http://wikipedia.org/"); michael@0: michael@0: // values from DefaultPermissions object michael@0: const PERM_UNKNOWN = 0; michael@0: const PERM_ALLOW = 1; michael@0: const PERM_DENY = 2; michael@0: michael@0: // used to set permissions on test sites michael@0: const TEST_PERMS = { michael@0: "password": PERM_ALLOW, michael@0: "cookie": PERM_ALLOW, michael@0: "geo": PERM_UNKNOWN, michael@0: "indexedDB": PERM_UNKNOWN, michael@0: "popup": PERM_DENY michael@0: }; michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: registerCleanupFunction(cleanUp); michael@0: setup(function() { michael@0: runNextTest(); michael@0: }); michael@0: } michael@0: michael@0: function setup(aCallback) { michael@0: // add test history visit michael@0: addVisits(TEST_URI_1, function() { michael@0: // set permissions ourselves to avoid problems with different defaults michael@0: // from test harness configuration michael@0: for (let type in TEST_PERMS) { michael@0: if (type == "password") { michael@0: Services.logins.setLoginSavingEnabled(TEST_URI_2.prePath, true); michael@0: } else { michael@0: // set permissions on a site without history visits to test enumerateServices michael@0: Services.perms.add(TEST_URI_2, type, TEST_PERMS[type]); michael@0: } michael@0: } michael@0: michael@0: Services.perms.add(TEST_URI_3, "popup", TEST_PERMS["popup"]); michael@0: aCallback(); michael@0: }); michael@0: } michael@0: michael@0: function cleanUp() { michael@0: for (let type in TEST_PERMS) { michael@0: if (type != "password") { michael@0: Services.perms.remove(TEST_URI_1.host, type); michael@0: Services.perms.remove(TEST_URI_2.host, type); michael@0: Services.perms.remove(TEST_URI_3.host, type); michael@0: } michael@0: } michael@0: } michael@0: michael@0: function runNextTest() { michael@0: if (gTestIndex == tests.length) { michael@0: waitForClearHistory(finish); michael@0: return; michael@0: } michael@0: michael@0: let nextTest = tests[gTestIndex++]; michael@0: info(nextTest.desc); michael@0: michael@0: function preinit_observer() { michael@0: Services.obs.removeObserver(preinit_observer, "browser-permissions-preinit"); michael@0: nextTest.preInit(); michael@0: } michael@0: Services.obs.addObserver(preinit_observer, "browser-permissions-preinit", false); michael@0: michael@0: function init_observer() { michael@0: Services.obs.removeObserver(init_observer, "browser-permissions-initialized"); michael@0: nextTest.run(); michael@0: } michael@0: Services.obs.addObserver(init_observer, "browser-permissions-initialized", false); michael@0: michael@0: // open about:permissions michael@0: let tab = gBrowser.selectedTab = gBrowser.addTab("about:permissions"); michael@0: registerCleanupFunction(function() { michael@0: gBrowser.removeTab(tab); michael@0: }); michael@0: } michael@0: michael@0: var gSitesList; michael@0: michael@0: var gTestIndex = 0; michael@0: var tests = [ michael@0: // 'preInit' occurs after opening about:permissions, before sites-list is populated michael@0: // 'run' occurs after sites-list is populated michael@0: { michael@0: desc: "test filtering before sites-list is fully constructed.", michael@0: preInit: function() { michael@0: let sitesFilter = gBrowser.contentDocument.getElementById("sites-filter"); michael@0: sitesFilter.value = TEST_URI_2.host; michael@0: sitesFilter.doCommand(); michael@0: }, michael@0: run: function() { michael@0: let testSite1 = getSiteItem(TEST_URI_1.host); michael@0: ok(testSite1.collapsed, "test site 1 is collapsed after early filtering"); michael@0: let testSite2 = getSiteItem(TEST_URI_2.host); michael@0: ok(!testSite2.collapsed, "test site 2 is not collapsed after early filtering"); michael@0: let testSite3 = getSiteItem(TEST_URI_3.host); michael@0: ok(testSite3.collapsed, "test site 3 is collapsed after early filtering"); michael@0: michael@0: runNextTest(); michael@0: } michael@0: }, michael@0: { michael@0: desc: "test removing from sites-list before it is fully constructed.", michael@0: preInit: function() { michael@0: ForgetAboutSite.removeDataFromDomain(TEST_URI_2.host); michael@0: }, michael@0: run: function() { michael@0: let testSite1 = getSiteItem(TEST_URI_1.host); michael@0: ok(!testSite2, "test site 1 was not removed from sites list"); michael@0: let testSite2 = getSiteItem(TEST_URI_2.host); michael@0: ok(!testSite2, "test site 2 was pre-removed from sites list"); michael@0: let testSite3 = getSiteItem(TEST_URI_3.host); michael@0: ok(!testSite2, "test site 3 was not removed from sites list"); michael@0: michael@0: runNextTest(); michael@0: } michael@0: } michael@0: ]; michael@0: michael@0: function getSiteItem(aHost) { michael@0: return gBrowser.contentDocument. michael@0: querySelector(".site[value='" + aHost + "']"); michael@0: } michael@0: michael@0: // copied from toolkit/components/places/tests/head_common.js michael@0: function waitForClearHistory(aCallback) { michael@0: let observer = { michael@0: observe: function(aSubject, aTopic, aData) { michael@0: Services.obs.removeObserver(this, PlacesUtils.TOPIC_EXPIRATION_FINISHED); michael@0: aCallback(); michael@0: } michael@0: }; michael@0: Services.obs.addObserver(observer, PlacesUtils.TOPIC_EXPIRATION_FINISHED, false); michael@0: PlacesUtils.bhistory.removeAllPages(); michael@0: }