mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-05 08:35:26 +00:00
5e4f433f95
--HG-- rename : browser/modules/NewTabUtils.jsm => toolkit/modules/NewTabUtils.jsm rename : browser/modules/test/unit/chromeappsstore.sqlite => toolkit/modules/tests/xpcshell/chromeappsstore.sqlite rename : browser/modules/test/unit/test_newtab-migrate-v1.js => toolkit/modules/tests/xpcshell/test_newtab-migrate-v1.js
99 lines
3.1 KiB
JavaScript
99 lines
3.1 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
const Cc = Components.classes;
|
|
const Ci = Components.interfaces;
|
|
const Cu = Components.utils;
|
|
const Cr = Components.results;
|
|
|
|
Cu.import("resource://gre/modules/NewTabUtils.jsm");
|
|
Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js");
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
|
|
/**
|
|
* Asynchronously load test data from chromeappstore.sqlite.
|
|
*
|
|
* @param aDBFile
|
|
* the database file to load
|
|
* @return {Promise} resolved when the load is complete
|
|
*/
|
|
function promiseLoadChromeAppsStore(aDBFile) {
|
|
let deferred = Promise.defer();
|
|
|
|
let pinnedLinks = [];
|
|
let blockedLinks = [];
|
|
|
|
let db = Services.storage.openUnsharedDatabase(aDBFile);
|
|
let stmt = db.createAsyncStatement(
|
|
"SELECT key, value FROM webappsstore2 WHERE scope = 'batwen.:about'");
|
|
try {
|
|
stmt.executeAsync({
|
|
handleResult: function(aResultSet) {
|
|
for (let row = aResultSet.getNextRow(); row;
|
|
row = aResultSet.getNextRow()) {
|
|
let value = JSON.parse(row.getResultByName("value"));
|
|
if (row.getResultByName("key") == "pinnedLinks") {
|
|
pinnedLinks = value;
|
|
} else {
|
|
for (let url of Object.keys(value)) {
|
|
blockedLinks.push({ url: url, title: "" });
|
|
}
|
|
}
|
|
}
|
|
},
|
|
handleError: function(aError) {
|
|
deferred.reject(new Components.Exception("Error", Cr.NS_ERROR_FAILURE));
|
|
},
|
|
handleCompletion: function(aReason) {
|
|
if (aReason === Ci.mozIStorageStatementCallback.REASON_FINISHED) {
|
|
deferred.resolve([pinnedLinks, blockedLinks]);
|
|
}
|
|
}
|
|
});
|
|
} finally {
|
|
stmt.finalize();
|
|
db.asyncClose();
|
|
}
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
function run_test() {
|
|
do_test_pending();
|
|
|
|
// First of all copy the chromeappsstore.sqlite file to the profile folder.
|
|
let dbFile = do_get_file("chromeappsstore.sqlite");
|
|
let profileDBFile = do_get_profile();
|
|
dbFile.copyTo(profileDBFile, "chromeappsstore.sqlite");
|
|
profileDBFile.append("chromeappsstore.sqlite");
|
|
do_check_true(profileDBFile.exists());
|
|
|
|
// Load test data from the database.
|
|
promiseLoadChromeAppsStore(dbFile).then(function success(aResults) {
|
|
let [pinnedLinks, blockedLinks] = aResults;
|
|
|
|
do_check_true(pinnedLinks.length > 0);
|
|
do_check_eq(pinnedLinks.length, NewTabUtils.pinnedLinks.links.length);
|
|
do_check_true(pinnedLinks.every(
|
|
function(aLink) NewTabUtils.pinnedLinks.isPinned(aLink)
|
|
));
|
|
|
|
do_check_true(blockedLinks.length > 0);
|
|
do_check_eq(blockedLinks.length,
|
|
Object.keys(NewTabUtils.blockedLinks.links).length);
|
|
do_check_true(blockedLinks.every(
|
|
function(aLink) NewTabUtils.blockedLinks.isBlocked(aLink)
|
|
));
|
|
|
|
try {
|
|
profileDBFile.remove(true);
|
|
} catch (ex) {
|
|
// May fail due to OS file locking, not a blocking error though.
|
|
do_print("Unable to remove chromeappsstore.sqlite file.");
|
|
}
|
|
|
|
do_test_finished();
|
|
}, do_report_unexpected_exception);
|
|
}
|