forked from mirrors/gecko-dev
Depends on D179104 Differential Revision: https://phabricator.services.mozilla.com/D179170
101 lines
2.7 KiB
JavaScript
101 lines
2.7 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const HISTORY_TEMPLATE_FILE_PATH = "Library/Safari/HistoryTemplate.db";
|
|
const HISTORY_FILE_PATH = "Library/Safari/History.db";
|
|
|
|
// We want this to be some recent time, so we'll always add some time to our
|
|
// dates to keep them ~ five days ago.
|
|
const MS_FROM_REFERENCE_TIME =
|
|
new Date() - new Date("May 31, 2023 00:00:00 UTC");
|
|
|
|
const TEST_URLS = [
|
|
{
|
|
url: "http://example.com/",
|
|
title: "Example Domain",
|
|
time: 706743588.04751,
|
|
jsTime: 1685050788047 + MS_FROM_REFERENCE_TIME,
|
|
visits: 1,
|
|
},
|
|
{
|
|
url: "http://mozilla.org/",
|
|
title: "",
|
|
time: 706743581.133386,
|
|
jsTime: 1685050781133 + MS_FROM_REFERENCE_TIME,
|
|
visits: 1,
|
|
},
|
|
{
|
|
url: "https://www.mozilla.org/en-CA/",
|
|
title: "Internet for people, not profit - Mozilla",
|
|
time: 706743581.133679,
|
|
jsTime: 1685050781133 + MS_FROM_REFERENCE_TIME,
|
|
visits: 1,
|
|
},
|
|
];
|
|
|
|
async function setupHistoryFile() {
|
|
removeHistoryFile();
|
|
let file = do_get_file(HISTORY_TEMPLATE_FILE_PATH);
|
|
file.copyTo(file.parent, "History.db");
|
|
await updateVisitTimes();
|
|
}
|
|
|
|
function removeHistoryFile() {
|
|
let file = do_get_file(HISTORY_FILE_PATH, true);
|
|
try {
|
|
file.remove(false);
|
|
} catch (ex) {
|
|
// It is ok if this doesn't exist.
|
|
if (ex.result != Cr.NS_ERROR_FILE_NOT_FOUND) {
|
|
throw ex;
|
|
}
|
|
}
|
|
}
|
|
|
|
async function updateVisitTimes() {
|
|
let cocoaDifference = MS_FROM_REFERENCE_TIME / 1000;
|
|
let historyFile = do_get_file(HISTORY_FILE_PATH);
|
|
let dbConn = await Sqlite.openConnection({ path: historyFile.path });
|
|
await dbConn.execute(
|
|
"UPDATE history_visits SET visit_time = visit_time + :difference;",
|
|
{ difference: cocoaDifference }
|
|
);
|
|
await dbConn.close();
|
|
}
|
|
|
|
add_setup(async function setup() {
|
|
registerFakePath("ULibDir", do_get_file("Library/"));
|
|
await setupHistoryFile();
|
|
registerCleanupFunction(async () => {
|
|
await PlacesUtils.history.clear();
|
|
removeHistoryFile();
|
|
});
|
|
});
|
|
|
|
add_task(async function testHistoryImport() {
|
|
await PlacesUtils.history.clear();
|
|
|
|
let migrator = await MigrationUtils.getMigrator("safari");
|
|
await promiseMigration(migrator, MigrationUtils.resourceTypes.HISTORY);
|
|
|
|
for (let urlInfo of TEST_URLS) {
|
|
let entry = await PlacesUtils.history.fetch(urlInfo.url, {
|
|
includeVisits: true,
|
|
});
|
|
|
|
Assert.equal(entry.url, urlInfo.url, "Should have the correct URL");
|
|
Assert.equal(entry.title, urlInfo.title, "Should have the correct title");
|
|
Assert.equal(
|
|
entry.visits.length,
|
|
urlInfo.visits,
|
|
"Should have the correct number of visits"
|
|
);
|
|
Assert.equal(
|
|
entry.visits[0].date.getTime(),
|
|
urlInfo.jsTime,
|
|
"Should have the correct date"
|
|
);
|
|
}
|
|
});
|