forked from mirrors/gecko-dev
***
Bug 1514594: Part 3a - Change ChromeUtils.import to return an exports object; not pollute global. r=mccr8
This changes the behavior of ChromeUtils.import() to return an exports object,
rather than a module global, in all cases except when `null` is passed as a
second argument, and changes the default behavior not to pollute the global
scope with the module's exports. Thus, the following code written for the old
model:
ChromeUtils.import("resource://gre/modules/Services.jsm");
is approximately the same as the following, in the new model:
var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
Since the two behaviors are mutually incompatible, this patch will land with a
scripted rewrite to update all existing callers to use the new model rather
than the old.
***
Bug 1514594: Part 3b - Mass rewrite all JS code to use the new ChromeUtils.import API. rs=Gijs
This was done using the followng script:
https://bitbucket.org/kmaglione/m-c-rewrites/src/tip/processors/cu-import-exports.jsm
***
Bug 1514594: Part 3c - Update ESLint plugin for ChromeUtils.import API changes. r=Standard8
Differential Revision: https://phabricator.services.mozilla.com/D16747
***
Bug 1514594: Part 3d - Remove/fix hundreds of duplicate imports from sync tests. r=Gijs
Differential Revision: https://phabricator.services.mozilla.com/D16748
***
Bug 1514594: Part 3e - Remove no-op ChromeUtils.import() calls. r=Gijs
Differential Revision: https://phabricator.services.mozilla.com/D16749
***
Bug 1514594: Part 3f.1 - Cleanup various test corner cases after mass rewrite. r=Gijs
***
Bug 1514594: Part 3f.2 - Cleanup various non-test corner cases after mass rewrite. r=Gijs
Differential Revision: https://phabricator.services.mozilla.com/D16750
--HG--
extra : rebase_source : 359574ee3064c90f33bf36c2ebe3159a24cc8895
extra : histedit_source : b93c8f42808b1599f9122d7842d2c0b3e656a594%2C64a3a4e3359dc889e2ab2b49461bab9e27fc10a7
89 lines
3.1 KiB
JavaScript
89 lines
3.1 KiB
JavaScript
"use strict";
|
|
|
|
var gTestTab;
|
|
var gContentAPI;
|
|
var gContentWindow;
|
|
|
|
const { UrlClassifierTestUtils } = ChromeUtils.import("resource://testing-common/UrlClassifierTestUtils.jsm");
|
|
|
|
const TP_ENABLED_PREF = "privacy.trackingprotection.enabled";
|
|
|
|
add_task(setup_UITourTest);
|
|
|
|
add_task(async function test_setup() {
|
|
Services.prefs.setBoolPref("privacy.trackingprotection.enabled", true);
|
|
await UrlClassifierTestUtils.addTestTrackers();
|
|
|
|
registerCleanupFunction(function() {
|
|
UrlClassifierTestUtils.cleanupTestTrackers();
|
|
Services.prefs.clearUserPref("privacy.trackingprotection.enabled");
|
|
});
|
|
});
|
|
|
|
add_UITour_task(async function test_unblock_target() {
|
|
await checkToggleTarget("controlCenter-trackingUnblock");
|
|
});
|
|
|
|
add_UITour_task(function setup_block_target() {
|
|
// Preparation for test_block_target. These are separate since the reload
|
|
// interferes with UITour as it does a teardown. All we really care about
|
|
// is the permission manager entry but UITour tests shouldn't rely on that
|
|
// implementation detail.
|
|
window.ContentBlocking.disableForCurrentPage();
|
|
});
|
|
|
|
add_UITour_task(async function test_block_target() {
|
|
await checkToggleTarget("controlCenter-trackingBlock");
|
|
window.ContentBlocking.enableForCurrentPage();
|
|
});
|
|
|
|
|
|
async function checkToggleTarget(targetID) {
|
|
let popup = document.getElementById("UITourTooltip");
|
|
|
|
let trackerOpened = new Promise(function(resolve, reject) {
|
|
Services.obs.addObserver(function onopen(subject) {
|
|
let asciiSpec = subject.QueryInterface(Ci.nsIHttpChannel).URI.asciiSpec;
|
|
if (asciiSpec === "https://tracking.example.com/") {
|
|
Services.obs.removeObserver(onopen, "http-on-opening-request");
|
|
resolve();
|
|
}
|
|
}, "http-on-opening-request");
|
|
});
|
|
|
|
await ContentTask.spawn(gBrowser.selectedBrowser, {}, function() {
|
|
let doc = content.document;
|
|
let iframe = doc.createElement("iframe");
|
|
iframe.setAttribute("id", "tracking-element");
|
|
iframe.setAttribute("src", "https://tracking.example.com/");
|
|
doc.body.insertBefore(iframe, doc.body.firstElementChild);
|
|
});
|
|
|
|
await trackerOpened;
|
|
|
|
let testTargetAvailability = async function(expectedAvailable) {
|
|
let data = await getConfigurationPromise("availableTargets");
|
|
let available = (data.targets.includes(targetID));
|
|
is(available, expectedAvailable, "Target has expected availability.");
|
|
};
|
|
await testTargetAvailability(false);
|
|
await showMenuPromise("controlCenter");
|
|
await testTargetAvailability(true);
|
|
|
|
await showInfoPromise(targetID, "This is " + targetID,
|
|
"My arrow should be on the side");
|
|
is(popup.alignmentPosition, "end_before",
|
|
"Check " + targetID + " position");
|
|
|
|
let hideMenuPromise =
|
|
promisePanelElementHidden(window, gIdentityHandler._identityPopup);
|
|
await gContentAPI.hideMenu("controlCenter");
|
|
await hideMenuPromise;
|
|
|
|
ok(!BrowserTestUtils.is_visible(popup), "The tooltip should now be hidden.");
|
|
await testTargetAvailability(false);
|
|
|
|
await ContentTask.spawn(gBrowser.selectedBrowser, {}, function() {
|
|
content.document.getElementById("tracking-element").remove();
|
|
});
|
|
}
|