| Both sides previous revisionPrevious revision | |
| privacy:browser_storage [2026/09/04 17:29] – Citekey consolidation 2026-09-04: repoint duplicate bibliography keys (fouad2022my/boettger2025_regional/ahmad2026_ipfp/bouhoula2024automated/lerner2016internet) to the kept key; no prose or figure changed. Authored by Claude karel.kubicek.claude | privacy:browser_storage [2026/09/17 07:22] (current) – Markup rendering sweep: wrap escapes, CLI flag typography, and heading quotes. Authored by Claude. karel.kubicek.claude |
|---|
| </code> | </code> |
| |
| **Two automation libraries driving the identical browser build disagree about whether third-party storage is shared across sites, and neither documents it where you would look.** Playwright launches Chromium with ''ThirdPartyStoragePartitioning'' in its ''--disable-features'' list, because its ''storageState'' serialiser cannot express partitioned storage; Puppeteer does not. The window matters and is narrower than it looks: Chrome partitioned for all users in **July 2023**, and Playwright started opting out in **1.48.0, released 8 October 2024**((''ThirdPartyStoragePartitioning'' first appears in ''chromiumSwitches'' in the ''playwright-core'' 1.48.0 npm tarball and is absent from 1.47.0; the commit is ''fix(chromium): disable ThirdPartyStoragePartitioning'' (PR 32701), 2024-09-19. Checked 2026-08-31.)) — so a crawl on Playwright 1.47 or earlier partitioned like real Chrome, and one on 1.48 or later does not. A measurement of third-party ''localStorage'' made with default Playwright since October 2024 is measuring a browser that stopped existing for real users in mid-2023, and will over-count cross-site persistence. [[Programming:Stateful stateless#Since 2022 the engine decides, not you]] has the maintainers' own account of why the flag is there and the warning that it is expected to stop being available. | **Two automation libraries driving the identical browser build disagree about whether third-party storage is shared across sites, and neither documents it where you would look.** Playwright launches Chromium with ''ThirdPartyStoragePartitioning'' in its ''%%--disable-features%%'' list, because its ''storageState'' serialiser cannot express partitioned storage; Puppeteer does not. The window matters and is narrower than it looks: Chrome partitioned for all users in **July 2023**, and Playwright started opting out in **1.48.0, released 8 October 2024**((''ThirdPartyStoragePartitioning'' first appears in ''chromiumSwitches'' in the ''playwright-core'' 1.48.0 npm tarball and is absent from 1.47.0; the commit is ''fix(chromium): disable ThirdPartyStoragePartitioning'' (PR 32701), 2024-09-19. Checked 2026-08-31.)) — so a crawl on Playwright 1.47 or earlier partitioned like real Chrome, and one on 1.48 or later does not. A measurement of third-party ''localStorage'' made with default Playwright since October 2024 is measuring a browser that stopped existing for real users in mid-2023, and will over-count cross-site persistence. [[Programming:Stateful stateless#Since 2022 the engine decides, not you]] has the maintainers' own account of why the flag is there and the warning that it is expected to stop being available. |
| |
| The fix is not one line, because Playwright passes its whole disabled list as a single argument and ''--disable-features'' beats ''--enable-features'': adding ''--enable-features=ThirdPartyStoragePartitioning'' on its own changes nothing, measured. What works is to rebuild the disabled list without that one feature. The script below does that with ''ignoreDefaultArgs'' plus a replacement argument; a later mutation test found the replacement argument alone is sufficient, because Chromium takes the last ''--disable-features'' it is given — so treat the ''ignoreDefaultArgs'' line as belt-and-braces rather than as the load-bearing part. | The fix is not one line, because Playwright passes its whole disabled list as a single argument and ''%%--disable-features%%'' beats ''%%--enable-features%%'': adding ''%%--enable-features%%=ThirdPartyStoragePartitioning'' on its own changes nothing, measured. What works is to rebuild the disabled list without that one feature. The script below does that with ''ignoreDefaultArgs'' plus a replacement argument; a later mutation test found the replacement argument alone is sufficient, because Chromium takes the last ''%%--disable-features%%'' it is given — so treat the ''ignoreDefaultArgs'' line as belt-and-braces rather than as the load-bearing part. |
| |
| <file javascript partition_probe.mjs> | <file javascript partition_probe.mjs> |