forked from mirrors/gecko-dev
To fix the intermittent issue, the patch ensures the safebrowsing database is initiated after reload the database before we load the test frame. It also fixes the issue that classifierHelper doesn't properly clean up the prefs used in the test. Differential Revision: https://phabricator.services.mozilla.com/D196548
108 lines
2.5 KiB
JavaScript
108 lines
2.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/* eslint-env mozilla/chrome-script */
|
|
|
|
var dbService = Cc["@mozilla.org/url-classifier/dbservice;1"].getService(
|
|
Ci.nsIUrlClassifierDBService
|
|
);
|
|
var listmanager = Cc["@mozilla.org/url-classifier/listmanager;1"].getService(
|
|
Ci.nsIUrlListManager
|
|
);
|
|
|
|
var timer;
|
|
function setTimeout(callback, delay) {
|
|
timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
|
timer.initWithCallback(
|
|
{ notify: callback },
|
|
delay,
|
|
Ci.nsITimer.TYPE_ONE_SHOT
|
|
);
|
|
}
|
|
|
|
function doUpdate(update) {
|
|
let listener = {
|
|
QueryInterface: ChromeUtils.generateQI(["nsIUrlClassifierUpdateObserver"]),
|
|
updateUrlRequested(url) {},
|
|
streamFinished(status) {},
|
|
updateError(errorCode) {
|
|
sendAsyncMessage("updateError", errorCode);
|
|
},
|
|
updateSuccess(requestedTimeout) {
|
|
sendAsyncMessage("updateSuccess");
|
|
},
|
|
};
|
|
|
|
try {
|
|
dbService.beginUpdate(
|
|
listener,
|
|
"test-malware-simple,test-unwanted-simple",
|
|
""
|
|
);
|
|
dbService.beginStream("", "");
|
|
dbService.updateStream(update);
|
|
dbService.finishStream();
|
|
dbService.finishUpdate();
|
|
} catch (e) {
|
|
// beginUpdate may fail if there's an existing update in progress
|
|
// retry until success or testcase timeout.
|
|
setTimeout(() => {
|
|
doUpdate(update);
|
|
}, 1000);
|
|
}
|
|
}
|
|
|
|
function doReload() {
|
|
try {
|
|
dbService.reloadDatabase();
|
|
sendAsyncMessage("reloadSuccess");
|
|
} catch (e) {
|
|
setTimeout(() => {
|
|
doReload();
|
|
}, 1000);
|
|
}
|
|
}
|
|
|
|
// SafeBrowsing.jsm is initialized after mozEntries are added. Add observer
|
|
// to receive "finished" event. For the case when this function is called
|
|
// after the event had already been notified, we lookup entries to see if
|
|
// they are already added to database.
|
|
function waitForInit() {
|
|
if (listmanager.isRegistered()) {
|
|
sendAsyncMessage("safeBrowsingInited");
|
|
} else {
|
|
setTimeout(() => {
|
|
waitForInit();
|
|
}, 1000);
|
|
}
|
|
}
|
|
|
|
function doGetTables() {
|
|
const callback = tables => {
|
|
sendAsyncMessage("GetTableSuccess", tables);
|
|
};
|
|
|
|
try {
|
|
dbService.getTables(callback);
|
|
} catch (e) {
|
|
setTimeout(() => {
|
|
doGetTables();
|
|
}, 1000);
|
|
}
|
|
}
|
|
|
|
addMessageListener("doUpdate", ({ testUpdate }) => {
|
|
doUpdate(testUpdate);
|
|
});
|
|
|
|
addMessageListener("doReload", () => {
|
|
doReload();
|
|
});
|
|
|
|
addMessageListener("waitForInit", () => {
|
|
waitForInit();
|
|
});
|
|
|
|
addMessageListener("doGetTables", () => {
|
|
doGetTables();
|
|
});
|