1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
<!DOCTYPE HTML>
<!-- Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ -->
<html>
<head>
<title>Test advisory link (Bug #1366384)</title>
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="classifierHelper.js"></script>
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
</head>
<body>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
const {TestUtils} = ChromeUtils.importESModule(
"resource://testing-common/TestUtils.sys.mjs"
);
const {BrowserTestUtils} = ChromeUtils.importESModule(
"resource://testing-common/BrowserTestUtils.sys.mjs"
);
var mainWindow = window.browsingContext.topChromeWindow;
var testDatas = [
{ url: "itisaphishingsite.org/phishing.html",
list: "mochi1-phish-simple",
provider: "google",
},
{ url: "fakeitisaphishingsite.org/phishing.html",
list: "fake1-phish-simple",
provider: "mozilla",
},
{ url: "phishing.example.com/test.html",
list: "mochi2-phish-simple",
provider: "google4",
},
];
let pushPrefs = (...p) => SpecialPowers.pushPrefEnv({set: p});
function addUrlToDB(list, url) {
let testData = [{ db: list, url}];
return classifierHelper.addUrlToDB(testData)
.catch(function(err) {
ok(false, "Couldn't update classifier. Error code: " + err);
// Abort test.
SimpleTest.finish();
});
}
function setupTestData(data) {
let promises = [];
let providerList = "browser.safebrowsing.provider." + data.provider + ".lists";
promises.push(pushPrefs([providerList, data.list]));
let activeTablePref = "urlclassifier.phishTable";
let activeTable = SpecialPowers.getCharPref(activeTablePref);
activeTable += "," + data.list;
promises.push(pushPrefs([activeTablePref, activeTable]));
promises.push(addUrlToDB(data.list, data.url));
return Promise.all(promises);
}
function testOnWindow(aTestData) {
return new Promise(resolve => {
let win = mainWindow.OpenBrowserWindow();
(async function() {
await TestUtils.topicObserved("browser-delayed-startup-finished",
subject => subject == win);
let browser = win.gBrowser.selectedBrowser;
BrowserTestUtils.startLoadingURIString(browser, aTestData.url);
await BrowserTestUtils.waitForContentEvent(browser, "DOMContentLoaded");
let doc = win.gBrowser.contentDocument;
// This test works on a document which uses Fluent.
// Fluent localization may finish later than DOMContentLoaded,
// so let's wait for `document.l10n.ready` promise to resolve.
await doc.l10n.ready;
let advisoryEl = doc.getElementById("advisory_provider");
if (aTestData.provider != "google" && aTestData.provider != "google4") {
ok(!advisoryEl, "Advisory should not be shown");
} else {
ok(advisoryEl, "Advisory element should exist");
let expectedUrl =
SpecialPowers.getCharPref("browser.safebrowsing.provider." +
aTestData.provider +
".advisoryURL");
is(advisoryEl.href, expectedUrl, "Correct advisory url");
let expectedText =
SpecialPowers.getCharPref("browser.safebrowsing.provider." +
aTestData.provider +
".advisoryName");
is(advisoryEl.text, expectedText, "correct advisory text");
}
win.close();
resolve();
})();
});
}
SpecialPowers.pushPrefEnv(
{"set": [["browser.safebrowsing.phishing.enabled", true]]},
test);
function test() {
(async function() {
await classifierHelper.waitForInit();
for (let testData of testDatas) {
await setupTestData(testData);
await testOnWindow(testData);
await classifierHelper._cleanup();
}
SimpleTest.finish();
})();
}
SimpleTest.waitForExplicitFinish();
</script>
</pre>
<iframe id="testFrame" width="100%" height="100%" onload=""></iframe>
</body>
</html>
|