browser_cookies_legacy.js (2206B)
1 "use strict"; 2 3 function createTestState() { 4 let r = Math.round(Math.random() * 100000); 5 6 let cookie = { 7 host: "http://example.com", 8 path: "/", 9 name: `name${r}`, 10 value: `value${r}`, 11 sameSite: Ci.nsICookie.SAMESITE_UNSET, 12 }; 13 14 let state = { 15 windows: [ 16 { 17 tabs: [ 18 { entries: [{ url: "about:robots", triggeringPrincipal_base64 }] }, 19 ], 20 cookies: [cookie], 21 }, 22 ], 23 }; 24 25 return [state, cookie]; 26 } 27 28 function waitForNewCookie({ host, name, value }) { 29 info(`waiting for cookie ${name}=${value} from ${host}...`); 30 31 return new Promise(resolve => { 32 Services.obs.addObserver(function observer(subj, topic) { 33 let notification = subj.QueryInterface(Ci.nsICookieNotification); 34 if (notification.action != Ci.nsICookieNotification.COOKIE_ADDED) { 35 return; 36 } 37 38 let cookie = notification.cookie.QueryInterface(Ci.nsICookie); 39 if (cookie.host == host && cookie.name == name && cookie.value == value) { 40 ok(true, "cookie added by the cookie service"); 41 Services.obs.removeObserver(observer, topic); 42 resolve(); 43 } 44 }, "session-cookie-changed"); 45 }); 46 } 47 48 // Setup and cleanup. 49 add_task(async function test_setup() { 50 Services.cookies.removeAll(); 51 52 registerCleanupFunction(() => { 53 Services.cookies.removeAll(); 54 }); 55 }); 56 57 // Test that calling ss.setWindowState() with a legacy state object that 58 // contains cookies in the window state restores session cookies properly. 59 add_task(async function test_window() { 60 let [state, cookie] = createTestState(); 61 let win = await promiseNewWindowLoaded(); 62 63 let promiseCookie = waitForNewCookie(cookie); 64 ss.setWindowState(win, JSON.stringify(state), true); 65 await promiseCookie; 66 67 await BrowserTestUtils.closeWindow(win); 68 }); 69 70 // Test that calling ss.setBrowserState() with a legacy state object that 71 // contains cookies in the window state restores session cookies properly. 72 add_task(async function test_browser() { 73 let backupState = ss.getBrowserState(); 74 let [state, cookie] = createTestState(); 75 await Promise.all([waitForNewCookie(cookie), promiseBrowserState(state)]); 76 await promiseBrowserState(backupState); 77 });