Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

/*
* Bug 1267910 - The regression test case for session cookies.
*/
"use strict";
const TEST_HOST = "www.example.com";
const COOKIE = {
name: "test1",
value: "yes1",
path: "/browser/browser/components/sessionstore/test/",
};
const SESSION_DATA = JSON.stringify({
version: ["sessionrestore", 1],
windows: [
{
tabs: [
{
entries: [],
lastAccessed: 1463893009797,
hidden: false,
attributes: {},
image: null,
},
{
entries: [
{
triggeringPrincipal_base64,
charset: "UTF-8",
ID: 0,
docshellID: 2,
originalURI:
docIdentifier: 0,
persist: true,
},
],
lastAccessed: 1463893009321,
hidden: false,
attributes: {},
userContextId: 0,
index: 1,
},
],
selected: 1,
_closedTabs: [],
busy: false,
width: 1024,
height: 768,
screenX: 4,
screenY: 23,
sizemode: "normal",
cookies: [
{
host: "www.example.com",
value: "yes1",
path: "/browser/browser/components/sessionstore/test/",
name: "test1",
},
],
},
],
selectedWindow: 1,
_closedWindows: [],
session: {
lastUpdate: 1463893009801,
startTime: 1463893007134,
recentCrashes: 0,
},
global: {},
});
const SESSION_DATA_OA = JSON.stringify({
version: ["sessionrestore", 1],
windows: [
{
tabs: [
{
entries: [],
lastAccessed: 1463893009797,
hidden: false,
attributes: {},
image: null,
},
{
entries: [
{
triggeringPrincipal_base64,
charset: "UTF-8",
ID: 0,
docshellID: 2,
originalURI:
docIdentifier: 0,
persist: true,
},
],
lastAccessed: 1463893009321,
hidden: false,
attributes: {},
userContextId: 0,
index: 1,
},
],
selected: 1,
_closedTabs: [],
busy: false,
width: 1024,
height: 768,
screenX: 4,
screenY: 23,
sizemode: "normal",
cookies: [
{
host: "www.example.com",
value: "yes1",
path: "/browser/browser/components/sessionstore/test/",
name: "test1",
originAttributes: {
addonId: "",
inIsolatedMozBrowser: false,
userContextId: 0,
},
},
],
},
],
selectedWindow: 1,
_closedWindows: [],
session: {
lastUpdate: 1463893009801,
startTime: 1463893007134,
recentCrashes: 0,
},
global: {},
});
add_task(async function run_test() {
// Wait until initialization is complete.
await SessionStore.promiseInitialized;
// Clear cookies.
Services.cookies.removeAll();
// Open a new window.
let win = await promiseNewWindowLoaded();
// Restore window with session cookies that have no originAttributes.
await setWindowState(win, SESSION_DATA, true);
let cookieCount = 0;
for (var cookie of Services.cookies.getCookiesFromHost(TEST_HOST, {})) {
cookieCount++;
}
// Check that the cookie is restored successfully.
is(cookieCount, 1, "expected one cookie");
is(cookie.name, COOKIE.name, "cookie name successfully restored");
is(cookie.value, COOKIE.value, "cookie value successfully restored");
is(cookie.path, COOKIE.path, "cookie path successfully restored");
// Clear cookies.
Services.cookies.removeAll();
// In real usage, the event loop would get to spin between setWindowState
// uses. Without a spin, we can defer handling the STATE_STOP that
// removes the progress listener until after the mozbrowser has been
// destroyed, causing a window leak.
await new Promise(resolve => win.setTimeout(resolve, 0));
// Restore window with session cookies that have originAttributes within.
await setWindowState(win, SESSION_DATA_OA, true);
cookieCount = 0;
for (cookie of Services.cookies.getCookiesFromHost(TEST_HOST, {})) {
cookieCount++;
}
// Check that the cookie is restored successfully.
is(cookieCount, 1, "expected one cookie");
is(cookie.name, COOKIE.name, "cookie name successfully restored");
is(cookie.value, COOKIE.value, "cookie value successfully restored");
is(cookie.path, COOKIE.path, "cookie path successfully restored");
// Close our window.
await BrowserTestUtils.closeWindow(win);
});