Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: netwerk/test/unit/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
// 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();
});