← Commit history

v2.0.539 (insiders): Proven on AdomLapper on 2.0.537-539: 20 of 20 vendor sites as tabs in ONE extension-lane window on adom-you, cold, no duplicates (URL dedup + relaunch never appends onto a newer window); the window survives two pup restarts by re-adoption (same hwnd, 20 tabs, one window, no kill); ab-smoke ALL PASS on the default lane; pup_clear_cookies added for the Akamai verdict-cookie fix.

John Lauer ·4e178b5c4b ·1mo ago ·parent f218a55
2 files changed +17−1
src/extension/manifest.json+2−1
@@ -16,7 +16,8 @@     "alarms",     "scripting",     "system.display",-    "downloads"+    "downloads",+    "cookies"   ],   "host_permissions": [     "<all_urls>",
src/extension/worker.js+15
@@ -239,6 +239,21 @@ async function pupExtPoll() {       const wins = await chrome.windows.getAll({});       for (const w of wins) { try { await chrome.windows.remove(w.id); } catch (e) {} }       out = { id: cmd.id, ok: true, closed: wins.length };+    } else if (cmd.action === 'clearCookies') {+      // Remove every cookie whose domain ends with cmd.domain (HttpOnly included). Used to drop a bot+      // manager's poisoned verdict cookie (Akamai _abck at ~-1~) so a site gets a clean look at this browser.+      const dom = String(cmd.domain || '').replace(/^\./, '').toLowerCase();+      const all = await chrome.cookies.getAll({});+      let n = 0;+      for (const c of all) {+        const cd = (c.domain || '').replace(/^\./, '').toLowerCase();+        if (!dom || cd === dom || cd.endsWith('.' + dom)) {+          if (cmd.names && cmd.names.length && !cmd.names.includes(c.name)) continue;+          const url = (c.secure ? 'https://' : 'http://') + cd + (c.path || '/');+          try { await chrome.cookies.remove({ url, name: c.name, storeId: c.storeId }); n++; } catch (e) {}+        }+      }+      out = { id: cmd.id, ok: true, removed: n, domain: dom };     } else if (cmd.action === 'download') {       // chrome.downloads: the lane's download path (no CDP Browser.setDownloadBehavior here). Resolves when the       // item completes, with its saved path and byte count, or fails with the interrupt reason.