forked from mirrors/gecko-dev
118 lines
3.5 KiB
JavaScript
118 lines
3.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const { FormHistory } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/FormHistory.sys.mjs"
|
|
);
|
|
|
|
let rootDir = do_get_file("chromefiles/", true);
|
|
|
|
add_setup(async function setup_fakePaths() {
|
|
let pathId;
|
|
if (AppConstants.platform == "macosx") {
|
|
pathId = "ULibDir";
|
|
} else if (AppConstants.platform == "win") {
|
|
pathId = "LocalAppData";
|
|
} else {
|
|
pathId = "Home";
|
|
}
|
|
registerFakePath(pathId, rootDir);
|
|
});
|
|
|
|
/**
|
|
* This function creates a testing database in the default profile,
|
|
* populates it with 10 example data entries,migrates the database,
|
|
* and then searches for each entry to ensure it exists in the FormHistory.
|
|
*
|
|
* @async
|
|
* @param {string} migratorKey
|
|
* A string that identifies the type of migrator object to be retrieved.
|
|
* @param {Array<string>} subDirs
|
|
* An array of strings that specifies the subdirectories for the target profile directory.
|
|
* @returns {Promise<undefined>}
|
|
* A Promise that resolves when the migration is completed.
|
|
*/
|
|
async function testFormdata(migratorKey, subDirs) {
|
|
if (AppConstants.platform == "macosx") {
|
|
subDirs.unshift("Application Support");
|
|
} else if (AppConstants.platform == "win") {
|
|
subDirs.push("User Data");
|
|
} else {
|
|
subDirs.unshift(".config");
|
|
}
|
|
|
|
let target = rootDir.clone();
|
|
// Pretend this is the default profile
|
|
subDirs.push("Default");
|
|
while (subDirs.length) {
|
|
target.append(subDirs.shift());
|
|
}
|
|
|
|
await IOUtils.makeDirectory(target.path, {
|
|
createAncestor: true,
|
|
ignoreExisting: true,
|
|
});
|
|
|
|
target.append("Web Data");
|
|
await IOUtils.remove(target.path, { ignoreAbsent: true });
|
|
|
|
// Clear any search history results
|
|
await FormHistory.update({ op: "remove" });
|
|
|
|
let dbConn = await Sqlite.openConnection({ path: target.path });
|
|
|
|
await dbConn.execute(
|
|
`CREATE TABLE "autofill" (name VARCHAR, value VARCHAR, value_lower VARCHAR, date_created INTEGER DEFAULT 0, date_last_used INTEGER DEFAULT 0, count INTEGER DEFAULT 1, PRIMARY KEY (name, value))`
|
|
);
|
|
for (let i = 0; i < 10; i++) {
|
|
await dbConn.execute(
|
|
`INSERT INTO autofill VALUES (:name, :value, :value_lower, :date_created, :date_last_used, :count)`,
|
|
{
|
|
name: `name${i}`,
|
|
value: `example${i}`,
|
|
value_lower: `example${i}`,
|
|
date_created: Math.round(Date.now() / 1000) - i * 10000,
|
|
date_last_used: Date.now(),
|
|
count: i,
|
|
}
|
|
);
|
|
}
|
|
await dbConn.close();
|
|
|
|
let migrator = await MigrationUtils.getMigrator(migratorKey);
|
|
// Sanity check for the source.
|
|
Assert.ok(await migrator.isSourceAvailable());
|
|
|
|
await promiseMigration(migrator, MigrationUtils.resourceTypes.FORMDATA, {
|
|
id: "Default",
|
|
name: "Person 1",
|
|
});
|
|
|
|
for (let i = 0; i < 10; i++) {
|
|
let results = await FormHistory.search(["fieldname", "value"], {
|
|
fieldname: `name${i}`,
|
|
value: `example${i}`,
|
|
});
|
|
Assert.ok(results.length, `Should have item${i} in FormHistory`);
|
|
}
|
|
}
|
|
|
|
add_task(async function test_Chrome() {
|
|
let subDirs =
|
|
AppConstants.platform == "linux" ? ["google-chrome"] : ["Google", "Chrome"];
|
|
await testFormdata("chrome", subDirs);
|
|
});
|
|
|
|
add_task(async function test_ChromiumEdge() {
|
|
if (AppConstants.platform == "linux") {
|
|
// Edge isn't available on Linux.
|
|
return;
|
|
}
|
|
let subDirs =
|
|
AppConstants.platform == "macosx"
|
|
? ["Microsoft Edge"]
|
|
: ["Microsoft", "Edge"];
|
|
await testFormdata("chromium-edge", subDirs);
|
|
});
|