Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
// Test cookie database schema 13
"use strict";
add_task(async function test_schema_13_db() {
// Set up a profile.
let profile = do_get_profile();
// Start the cookieservice, to force creation of a database.
Services.cookies.sessionCookies;
// Assert schema 13 cookie db was created
Assert.ok(do_get_cookie_file(profile).exists());
let dbConnection = Services.storage.openDatabase(do_get_cookie_file(profile));
let version = dbConnection.schemaVersion;
dbConnection.close();
Assert.equal(version, 13);
// Close the profile.
await promise_close_profile();
// Open CookieDatabaseConnection to manipulate DB without using services.
let schema13db = new CookieDatabaseConnection(
do_get_cookie_file(profile),
13
);
let now = Date.now() * 1000;
let futureExpiry = Math.round(now / 1e6 + 1000);
let N = 20;
// Populate db with N unexpired, unique, partially partitioned cookies.
for (let i = 0; i < N; ++i) {
let cookie = new Cookie(
"test" + i,
"Some data",
"foo.com",
"/",
futureExpiry,
now,
now,
false,
false,
false,
false,
{},
Ci.nsICookie.SAMESITE_NONE,
Ci.nsICookie.SAMESITE_NONE,
Ci.nsICookie.SCHEME_UNSET,
!!(i % 2) // isPartitioned
);
schema13db.insertCookie(cookie);
}
schema13db.close();
schema13db = null;
// 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"), N);
// Open connection to manipulated db
dbConnection = Services.storage.openDatabase(do_get_cookie_file(profile));
// Check that schema is still correct after profile reload / db opening
Assert.equal(dbConnection.schemaVersion, 13);
// Count cookies with isPartitionedAttributeSet set to 1 (true)
let stmt = dbConnection.createStatement(
"SELECT COUNT(1) FROM moz_cookies WHERE isPartitionedAttributeSet = 1"
);
let success = stmt.executeStep();
Assert.ok(success);
// Assert the correct number of partitioned cookies was inserted / read
let isPartitionedAttributeSetCount = stmt.getInt32(0);
stmt.finalize();
Assert.equal(isPartitionedAttributeSetCount, N / 2);
// Cleanup
Services.cookies.removeAll();
stmt.finalize();
dbConnection.close();
do_close_profile();
});