tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });