210 lines
4.5 KiB
JavaScript
210 lines
4.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
// Test cookie database schema 15
|
|
"use strict";
|
|
|
|
add_task(async function test_schema_15_migration() {
|
|
// Set up a profile.
|
|
let profile = do_get_profile();
|
|
|
|
// Start the cookieservice, to force creation of a database.
|
|
Services.cookies.sessionCookies;
|
|
|
|
// Close the profile.
|
|
await promise_close_profile();
|
|
|
|
// Remove the cookie file in order to create another database file.
|
|
do_get_cookie_file(profile).remove(false);
|
|
|
|
// Create a schema 14 database.
|
|
let schema14db = new CookieDatabaseConnection(
|
|
do_get_cookie_file(profile),
|
|
14
|
|
);
|
|
|
|
let now = Math.round(Date.now() / 1000);
|
|
|
|
// This cookie will be updated from NONE/LAX to UNSET
|
|
let cookie = new Cookie(
|
|
"test0",
|
|
"Some data",
|
|
"foo.com",
|
|
"/",
|
|
now,
|
|
now,
|
|
now,
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
{},
|
|
Ci.nsICookie.SAMESITE_NONE,
|
|
Ci.nsICookie.SCHEME_UNSET
|
|
);
|
|
cookie.sameSite = Ci.nsICookie.SAMESITE_LAX;
|
|
schema14db.insertCookie(cookie);
|
|
|
|
schema14db.insertCookie(
|
|
new Cookie(
|
|
"test1",
|
|
"Some data",
|
|
"foo.com",
|
|
"/",
|
|
now,
|
|
now,
|
|
now,
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
{},
|
|
Ci.nsICookie.SAMESITE_UNSET,
|
|
Ci.nsICookie.SCHEME_UNSET
|
|
)
|
|
);
|
|
|
|
schema14db.insertCookie(
|
|
new Cookie(
|
|
"test2",
|
|
"Some data",
|
|
"foo.com",
|
|
"/",
|
|
now,
|
|
now,
|
|
now,
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
{},
|
|
Ci.nsICookie.SAMESITE_LAX,
|
|
Ci.nsICookie.SCHEME_UNSET
|
|
)
|
|
);
|
|
|
|
schema14db.insertCookie(
|
|
new Cookie(
|
|
"test3",
|
|
"Some data",
|
|
"foo.com",
|
|
"/",
|
|
now,
|
|
now,
|
|
now,
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
{},
|
|
Ci.nsICookie.SAMESITE_STRICT,
|
|
Ci.nsICookie.SCHEME_UNSET
|
|
)
|
|
);
|
|
|
|
schema14db.insertCookie(
|
|
new Cookie(
|
|
"test4",
|
|
"Some data",
|
|
"foo.com",
|
|
"/",
|
|
now,
|
|
now,
|
|
now,
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
{},
|
|
Ci.nsICookie.SAMESITE_NONE,
|
|
Ci.nsICookie.SCHEME_UNSET
|
|
)
|
|
);
|
|
|
|
// This cookie will be updated from NONE/LAX to UNSET
|
|
cookie = new Cookie(
|
|
"test5",
|
|
"Some data",
|
|
"foo.com",
|
|
"/",
|
|
now,
|
|
now,
|
|
now,
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
{},
|
|
Ci.nsICookie.SAMESITE_NONE,
|
|
Ci.nsICookie.SCHEME_UNSET
|
|
);
|
|
cookie.sameSite = Ci.nsICookie.SAMESITE_LAX;
|
|
schema14db.insertCookie(cookie);
|
|
|
|
schema14db.close();
|
|
schema14db = null;
|
|
|
|
// Check if we have the right entries
|
|
{
|
|
const dbConnection = Services.storage.openDatabase(
|
|
do_get_cookie_file(profile)
|
|
);
|
|
const stmt = dbConnection.createStatement(
|
|
"SELECT name, sameSite FROM moz_cookies"
|
|
);
|
|
|
|
const results = [];
|
|
while (stmt.executeStep()) {
|
|
results.push({ name: stmt.getString(0), sameSite: stmt.getInt32(1) });
|
|
}
|
|
|
|
Assert.deepEqual(results, [
|
|
{ name: "test0", sameSite: Ci.nsICookie.SAMESITE_LAX },
|
|
{ name: "test1", sameSite: Ci.nsICookie.SAMESITE_UNSET },
|
|
{ name: "test2", sameSite: Ci.nsICookie.SAMESITE_LAX },
|
|
{ name: "test3", sameSite: Ci.nsICookie.SAMESITE_STRICT },
|
|
{ name: "test4", sameSite: Ci.nsICookie.SAMESITE_NONE },
|
|
{ name: "test5", sameSite: Ci.nsICookie.SAMESITE_LAX },
|
|
]);
|
|
|
|
stmt.finalize();
|
|
dbConnection.close();
|
|
}
|
|
|
|
// Reload profile.
|
|
await promise_load_profile();
|
|
|
|
// Assert inserted cookies are in the db and correctly handled by services.
|
|
Assert.equal(Services.cookies.countCookiesFromHost("foo.com"), 6);
|
|
|
|
// Check if the time was reset
|
|
{
|
|
const dbConnection = Services.storage.openDatabase(
|
|
do_get_cookie_file(profile)
|
|
);
|
|
const stmt = dbConnection.createStatement(
|
|
"SELECT name, sameSite FROM moz_cookies"
|
|
);
|
|
|
|
const results = [];
|
|
while (stmt.executeStep()) {
|
|
results.push({ name: stmt.getString(0), sameSite: stmt.getInt32(1) });
|
|
}
|
|
|
|
Assert.deepEqual(results, [
|
|
{ name: "test0", sameSite: Ci.nsICookie.SAMESITE_UNSET },
|
|
{ name: "test1", sameSite: Ci.nsICookie.SAMESITE_UNSET },
|
|
{ name: "test2", sameSite: Ci.nsICookie.SAMESITE_LAX },
|
|
{ name: "test3", sameSite: Ci.nsICookie.SAMESITE_STRICT },
|
|
{ name: "test4", sameSite: Ci.nsICookie.SAMESITE_NONE },
|
|
{ name: "test5", sameSite: Ci.nsICookie.SAMESITE_UNSET },
|
|
]);
|
|
|
|
stmt.finalize();
|
|
dbConnection.close();
|
|
}
|
|
|
|
// Cleanup
|
|
Services.cookies.removeAll();
|
|
do_close_profile();
|
|
});
|