fune/toolkit/components/url-classifier/tests/mochitest/test_reporturl.html
Dan Banner 436f06fda4 Bug 1386684 - Enable ESLint for toolkit/components/url-classifier (automatic fixes). r=hchang
MozReview-Commit-ID: F0Z8dRaYOku

--HG--
extra : rebase_source : 3ebc9ab6ea9f1741d8a986c9217575644411e2a1
2017-08-02 16:12:07 +01:00

229 lines
8.1 KiB
HTML

<!DOCTYPE HTML>
<!-- Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ -->
<html>
<head>
<title>Test report matched URL info (Bug #1288633)</title>
<script type="text/javascript" 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 Ci = Components.interfaces;
const Cu = Components.utils;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://testing-common/BrowserTestUtils.jsm");
Cu.import("resource://testing-common/ContentTask.jsm");
var mainWindow = window.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow);
const SJS = "mochi.test:8888/chrome/toolkit/components/url-classifier/tests/mochitest/report.sjs";
const BASE_URL = "http://" + SJS + "?";
var 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";
if (!Services.prefs.prefHasUserValue(providerList)) {
promises.push(pushPrefs([providerList, data.list]));
} else {
let pref = SpecialPowers.getCharPref(providerList);
pref += "," + data.list;
promises.push(pushPrefs([providerList, pref]));
}
let activeTablePref = "urlclassifier.phishTable";
let activeTable = SpecialPowers.getCharPref(activeTablePref);
activeTable += "," + data.list;
promises.push(pushPrefs([activeTablePref, activeTable]));
promises.push(addUrlToDB(data.list, data.testUrl));
return Promise.all(promises);
}
function whenDelayedStartupFinished(aWindow, aCallback) {
Services.obs.addObserver(function observer(aSubject, aTopic) {
if (aWindow == aSubject) {
Services.obs.removeObserver(observer, aTopic);
setTimeout(aCallback, 0);
}
}, "browser-delayed-startup-finished");
}
function testOnWindow(aTestData, aCallback, aTestCreater) {
return new Promise(resolve => {
let win = mainWindow.OpenBrowserWindow();
(async function() {
await new Promise(resolve => whenDelayedStartupFinished(win, resolve));
let browser = win.gBrowser.selectedBrowser;
aTestCreater(win, browser, aTestData.topUrl, aTestData.testUrl);
let notification = await BrowserTestUtils.waitForNotificationBar(win.gBrowser, browser, "blocked-badware-page");
ok(notification, "Notification box should be displayed");
let buttons = notification.getElementsByTagName("button");
let button = buttons[1];
if (aTestData.provider != "google" && aTestData.provider != "google4") {
is(button, undefined, "Report button should not be showed");
win.close();
resolve();
return;
}
button.click();
let newTabBrowser = win.gBrowser.selectedTab.linkedBrowser;
await BrowserTestUtils.browserLoaded(newTabBrowser);
aCallback(newTabBrowser);
win.close();
resolve();
})();
});
}
var createBlockedIframe = function(aWindow, aBrowser, aTopUrl, aUrl) {
(async function() {
await BrowserTestUtils.loadURI(aBrowser, aTopUrl);
await BrowserTestUtils.browserLoaded(aBrowser);
await ContentTask.spawn(aBrowser, aUrl, async function(aUrl) {
return new Promise(resolve => {
let listener = e => {
removeEventListener("AboutBlockedLoaded", listener, false, true);
resolve();
};
addEventListener("AboutBlockedLoaded", listener, false, true);
let frame = content.document.getElementById("phishingFrame");
frame.setAttribute("src", "http://" + aUrl);
});
});
let doc = aWindow.gBrowser.contentDocument.getElementsByTagName("iframe")[0].contentDocument;
let ignoreButton = doc.getElementById("ignoreWarningButton");
ok(ignoreButton, "ignoreWarningButton should exist");
ignoreButton.click();
})();
};
var createBlockedPage = function(aWindow, aBrowser, aTopUrl, aUrl) {
(async function() {
await BrowserTestUtils.loadURI(aBrowser, aTopUrl);
await BrowserTestUtils.waitForContentEvent(aBrowser, "DOMContentLoaded")
let doc = aWindow.gBrowser.contentDocument;
let ignoreButton = doc.getElementById("ignoreWarningButton");
ok(ignoreButton, "ignoreWarningButton should exist");
ignoreButton.click();
})();
};
function checkReportURL(aReportBrowser, aUrl) {
let expectedReportUrl = BASE_URL + "action=reporturl&reporturl=" + encodeURIComponent(aUrl);
is(aReportBrowser.contentDocument.location.href, expectedReportUrl, "Correct report URL");
}
var testDatas = [
{ topUrl: "http://itisaphishingsite.org/phishing.html",
testUrl: "itisaphishingsite.org/phishing.html",
list: "mochi1-phish-simple",
provider: "google",
blockCreater: createBlockedPage,
expectedReportUri: "http://itisaphishingsite.org/phishing.html"
},
// Non-google provider, no report button is showed.
// Test provider needs a valid update URL (mozilla for example) otherwise
// the updates inserting the test data will fail.
{ topUrl: "http://fakeitisaphishingsite.org/phishing.html",
testUrl: "fakeitisaphishingsite.org/phishing.html",
list: "fake-phish-simple",
provider: "mozilla",
blockCreater: createBlockedPage
},
// Iframe case:
// A top level page at
// http://mochi.test:8888/chrome/toolkit/components/url-classifier/tests/mochitest/report.sjs?action=create-blocked-iframe
// contains an iframe to http://phishing.example.com/test.html (blocked).
{ topUrl: "http://mochi.test:8888/chrome/toolkit/components/url-classifier/tests/mochitest/report.sjs?action=create-blocked-iframe",
testUrl: "phishing.example.com/test.html",
list: "mochi2-phish-simple",
provider: "google4",
blockCreater: createBlockedIframe,
expectedReportUri: "http://phishing.example.com/test.html"
},
// Redirect case:
// A top level page at
// http://prefixexample.com/chrome/toolkit/components/url-classifier/tests/mochitest/report.sjs?action=create-blocked-redirect (blocked)
// will get redirected to
// https://mochi.test:8888/chrome/toolkit/components/url-classifier/tests/mochitest/report.sjs?action=create-blocked-redirect.
{ topUrl: "http://prefixexample.com/chrome/toolkit/components/url-classifier/tests/mochitest/report.sjs?action=create-blocked-redirect",
testUrl: "prefixexample.com/chrome/toolkit/components/url-classifier/tests/mochitest/report.sjs?action=create-blocked-redirect",
list: "mochi3-phish-simple",
provider: "google4",
blockCreater: createBlockedPage,
expectedReportUri: "http://prefixexample.com/chrome/toolkit/components/url-classifier/tests/mochitest/report.sjs"
},
];
SpecialPowers.pushPrefEnv(
{"set": [["browser.safebrowsing.provider.google.reportPhishMistakeURL", BASE_URL + "action=reporturl&reporturl="],
["browser.safebrowsing.provider.google4.reportPhishMistakeURL", BASE_URL + "action=reporturl&reporturl="],
["browser.safebrowsing.phishing.enabled", true]]},
test);
function test() {
(async function() {
await classifierHelper.waitForInit();
for (let testData of testDatas) {
await setupTestData(testData);
await testOnWindow(testData, function(browser) {
checkReportURL(browser, testData.expectedReportUri);
}, testData.blockCreater);
await classifierHelper._cleanup();
}
SimpleTest.finish();
})();
}
SimpleTest.waitForExplicitFinish();
</script>
</pre>
<iframe id="testFrame" width="100%" height="100%" onload=""></iframe>
</body>
</html>