From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../sessionstore/test/browser_cookies_legacy.js | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 browser/components/sessionstore/test/browser_cookies_legacy.js (limited to 'browser/components/sessionstore/test/browser_cookies_legacy.js') diff --git a/browser/components/sessionstore/test/browser_cookies_legacy.js b/browser/components/sessionstore/test/browser_cookies_legacy.js new file mode 100644 index 0000000000..087c2d516f --- /dev/null +++ b/browser/components/sessionstore/test/browser_cookies_legacy.js @@ -0,0 +1,75 @@ +"use strict"; + +function createTestState() { + let r = Math.round(Math.random() * 100000); + + let cookie = { + host: "http://example.com", + path: "/", + name: `name${r}`, + value: `value${r}`, + }; + + let state = { + windows: [ + { + tabs: [ + { entries: [{ url: "about:robots", triggeringPrincipal_base64 }] }, + ], + cookies: [cookie], + }, + ], + }; + + return [state, cookie]; +} + +function waitForNewCookie({ host, name, value }) { + info(`waiting for cookie ${name}=${value} from ${host}...`); + + return new Promise(resolve => { + Services.obs.addObserver(function observer(subj, topic, data) { + if (data != "added") { + return; + } + + let cookie = subj.QueryInterface(Ci.nsICookie); + if (cookie.host == host && cookie.name == name && cookie.value == value) { + ok(true, "cookie added by the cookie service"); + Services.obs.removeObserver(observer, topic); + resolve(); + } + }, "session-cookie-changed"); + }); +} + +// Setup and cleanup. +add_task(async function test_setup() { + Services.cookies.removeAll(); + + registerCleanupFunction(() => { + Services.cookies.removeAll(); + }); +}); + +// Test that calling ss.setWindowState() with a legacy state object that +// contains cookies in the window state restores session cookies properly. +add_task(async function test_window() { + let [state, cookie] = createTestState(); + let win = await promiseNewWindowLoaded(); + + let promiseCookie = waitForNewCookie(cookie); + ss.setWindowState(win, JSON.stringify(state), true); + await promiseCookie; + + await BrowserTestUtils.closeWindow(win); +}); + +// Test that calling ss.setBrowserState() with a legacy state object that +// contains cookies in the window state restores session cookies properly. +add_task(async function test_browser() { + let backupState = ss.getBrowserState(); + let [state, cookie] = createTestState(); + await Promise.all([waitForNewCookie(cookie), promiseBrowserState(state)]); + await promiseBrowserState(backupState); +}); -- cgit v1.2.3