66 lines
2.6 KiB
JavaScript
66 lines
2.6 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/. */
|
|
|
|
ChromeUtils.defineESModuleGetters(this, {
|
|
Sqlite: "resource://gre/modules/Sqlite.sys.mjs",
|
|
});
|
|
|
|
const MAX_LENGTH = Ci.nsIContentPrefService2.GROUP_NAME_MAX_LENGTH;
|
|
const LONG_DATA_URL = `data:,${new Array(MAX_LENGTH).fill("x").join("")}`;
|
|
|
|
// Dump of version we migrate from
|
|
const schema_queries = [
|
|
"PRAGMA foreign_keys=OFF",
|
|
"CREATE TABLE groups (id INTEGER PRIMARY KEY, name TEXT NOT NULL)",
|
|
`INSERT INTO groups VALUES (1,'foo.com'),
|
|
(2,'bar.com'),
|
|
(3,'data:image/png;base64,1234'),
|
|
(4,'file:///d/test.file'),
|
|
(5,'${LONG_DATA_URL}')`,
|
|
"CREATE TABLE settings (id INTEGER PRIMARY KEY, name TEXT NOT NULL)",
|
|
`INSERT INTO settings VALUES (1,'zoom-setting'),
|
|
(2,'browser.download.lastDir')`,
|
|
`CREATE TABLE prefs (id INTEGER PRIMARY KEY,
|
|
groupID INTEGER REFERENCES groups(id),
|
|
settingID INTEGER NOT NULL REFERENCES settings(id),
|
|
value BLOB,
|
|
timestamp INTEGER NOT NULL DEFAULT 0)`,
|
|
`INSERT INTO prefs VALUES (1,1,1,0.5,0),
|
|
(2,1,2,'/download/dir',0),
|
|
(3,2,1,0.3,0),
|
|
(4,NULL,1,0.1,0),
|
|
(5,3,2,'/download/dir',0),
|
|
(6,4,2,'/download/dir',0),
|
|
(7,5,1,0.7,0)`,
|
|
"CREATE INDEX groups_idx ON groups(name)",
|
|
"CREATE INDEX settings_idx ON settings(name)",
|
|
"CREATE INDEX prefs_idx ON prefs(timestamp, groupID, settingID)",
|
|
];
|
|
|
|
add_setup(async function () {
|
|
let conn = await Sqlite.openConnection({
|
|
path: PathUtils.join(PathUtils.profileDir, "content-prefs.sqlite"),
|
|
});
|
|
Assert.equal(await conn.getSchemaVersion(), 0);
|
|
await conn.executeTransaction(async () => {
|
|
for (let query of schema_queries) {
|
|
await conn.execute(query);
|
|
}
|
|
});
|
|
await conn.setSchemaVersion(4);
|
|
await conn.close();
|
|
});
|
|
|
|
add_task(async function test() {
|
|
// Test migrated db content.
|
|
await schemaVersionIs(CURRENT_DB_VERSION);
|
|
let dbExpectedState = [
|
|
[null, "zoom-setting", 0.1],
|
|
["bar.com", "zoom-setting", 0.3],
|
|
["foo.com", "zoom-setting", 0.5],
|
|
[LONG_DATA_URL.substring(0, MAX_LENGTH - 1), "zoom-setting", 0.7],
|
|
["foo.com", "browser.download.lastDir", "/download/dir"],
|
|
];
|
|
await dbOK(dbExpectedState);
|
|
});
|