summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/browser_restore_cookies_noOriginAttributes.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/sessionstore/test/browser_restore_cookies_noOriginAttributes.js')
-rw-r--r--browser/components/sessionstore/test/browser_restore_cookies_noOriginAttributes.js191
1 files changed, 191 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_restore_cookies_noOriginAttributes.js b/browser/components/sessionstore/test/browser_restore_cookies_noOriginAttributes.js
new file mode 100644
index 0000000000..bdfdf7fbe3
--- /dev/null
+++ b/browser/components/sessionstore/test/browser_restore_cookies_noOriginAttributes.js
@@ -0,0 +1,191 @@
+/*
+ * 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: [
+ {
+ url: "http://www.example.com/browser/browser/components/sessionstore/test/browser_1267910_page.html",
+ triggeringPrincipal_base64,
+ charset: "UTF-8",
+ ID: 0,
+ docshellID: 2,
+ originalURI:
+ "http://www.example.com/browser/browser/components/sessionstore/test/browser_1267910_page.html",
+ docIdentifier: 0,
+ persist: true,
+ },
+ ],
+ lastAccessed: 1463893009321,
+ hidden: false,
+ attributes: {},
+ userContextId: 0,
+ index: 1,
+ image: "http://www.example.com/favicon.ico",
+ },
+ ],
+ 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: [
+ {
+ url: "http://www.example.com/browser/browser/components/sessionstore/test/browser_1267910_page.html",
+ triggeringPrincipal_base64,
+ charset: "UTF-8",
+ ID: 0,
+ docshellID: 2,
+ originalURI:
+ "http://www.example.com/browser/browser/components/sessionstore/test/browser_1267910_page.html",
+ docIdentifier: 0,
+ persist: true,
+ },
+ ],
+ lastAccessed: 1463893009321,
+ hidden: false,
+ attributes: {},
+ userContextId: 0,
+ index: 1,
+ image: "http://www.example.com/favicon.ico",
+ },
+ ],
+ 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);
+});