gecko-dev/toolkit/components/url-classifier/tests/mochitest/test_cryptomining.html
Kris Maglione e930b89c34 Bug 1514594: Part 3 - Change ChromeUtils.import API.
***
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
2019-01-17 10:18:31 -08:00

106 lines
3.4 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<title>Test the cryptomining classifier</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<script class="testbody" type="text/javascript">
/* eslint-env mozilla/frame-script */
var tests = [
// All disabled.
{ config: [ false, false ], loadExpected: true },
// Just whitelisted.
{ config: [ false, true ], loadExpected: true },
// Just blacklisted.
{ config: [ true, false ], loadExpected: false },
// whitelist + blacklist: whitelist wins
{ config: [ true, true ], loadExpected: true },
];
function prefValue(value, what) {
return value ? what : "";
}
async function runTest(test) {
await SpecialPowers.pushPrefEnv({set: [
[ "urlclassifier.features.cryptomining.blacklistHosts", prefValue(test.config[0], "example.com") ],
[ "urlclassifier.features.cryptomining.whitelistHosts", prefValue(test.config[1], "mochi.test") ],
[ "urlclassifier.features.cryptomining.blacklistTables", prefValue(test.config[0], "mochitest1-track-simple") ],
[ "urlclassifier.features.cryptomining.whitelistTables", "" ],
[ "privacy.trackingprotection.enabled", false ],
[ "privacy.trackingprotection.annotate_channels", false ],
[ "privacy.trackingprotection.cryptomining.enabled", true ],
[ "privacy.trackingprotection.fingerprinting.enabled", false ],
]});
info("Testing: " + test.config.toSource() + "\n");
// Let's load an image with a random query string, just to avoid network cache.
let result = await new Promise(resolve => {
let image = new Image();
image.src = "http://example.com/tests/toolkit/components/url-classifier/tests/mochitest/raptor.jpg?" + Math.random();
image.onload = _ => resolve(true);
image.onerror = _ => resolve(false);
});
is(result, test.loadExpected, "The loading happened correctly");
// Let's load an image with a random query string, just to avoid network cache.
result = await new Promise(resolve => {
let image = new Image();
image.src = "http://tracking.example.org/tests/toolkit/components/url-classifier/tests/mochitest/raptor.jpg?" + Math.random();
image.onload = _ => resolve(true);
image.onerror = _ => resolve(false);
});
is(result, test.loadExpected, "The loading happened correctly (by table)");
}
async function runTests() {
let chromeScript = SpecialPowers.loadChromeScript(_ => {
const {UrlClassifierTestUtils} = ChromeUtils.import("resource://testing-common/UrlClassifierTestUtils.jsm");
addMessageListener("loadTrackers", __ => {
UrlClassifierTestUtils.addTestTrackers().then(___ => {
sendAsyncMessage("trackersLoaded");
});
});
addMessageListener("unloadTrackers", __ => {
UrlClassifierTestUtils.cleanupTestTrackers();
sendAsyncMessage("trackersUnloaded");
});
});
await new Promise(resolve => {
chromeScript.addMessageListener("trackersLoaded", resolve);
chromeScript.sendAsyncMessage("loadTrackers");
});
for (let test in tests) {
await runTest(tests[test]);
}
await new Promise(resolve => {
chromeScript.addMessageListener("trackersUnloaded", resolve);
chromeScript.sendSyncMessage("unloadTrackers");
});
chromeScript.destroy();
SimpleTest.finish();
}
SimpleTest.waitForExplicitFinish();
runTests();
</script>
</body>
</html>