From 69983af3a8396c6834ac9c1cdc1c2c6eb9de2c3a Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Wed, 14 May 2025 21:26:01 -0700 Subject: [PATCH] Add multi browser tests + wabac.js update (#420) Fidelity: Fix CSP issue with iframes in Firefox (via wabac.js 2.23.0) Loading: Avoid unnecessary reloads of multiWACZ JSON, prune expired multiWACZ collections Testing improvements: - add playwright multi browser tests with firefox and webkit - add test of iframe replay with iframetest.wacz deps: update to wabac.js 2.23.0 bump to 2.3.9 --- .github/workflows/integration.yaml | 2 +- CHANGES.md | 5 ++ mkdocs/site/docs/examples/iframetest.wacz | Bin 0 -> 6148 bytes package.json | 10 ++-- playwright.config.js | 17 ++++++- tests/embed/iframe-test-cross.html | 19 ++++++++ tests/embed/iframe-test.html | 19 ++++++++ tests/embed/index-sandbox.html | 1 + tests/embed/index.html | 1 + tests/embeds.spec.js | 56 +++++++++++++++++++++- yarn.lock | 36 +++++++------- 11 files changed, 139 insertions(+), 27 deletions(-) create mode 100644 mkdocs/site/docs/examples/iframetest.wacz create mode 100644 tests/embed/iframe-test-cross.html create mode 100644 tests/embed/iframe-test.html diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index a059051..dbe293d 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -27,7 +27,7 @@ jobs: run: yarn build - name: Playwright Install Browsers - run: yarn playwright install + run: yarn playwright install --with-deps - uses: actions/setup-python@v4 with: diff --git a/CHANGES.md b/CHANGES.md index 2496321..c7e1f34 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,11 @@ ## CHANGES +v2.3.9 +- Loading: Avoid unnecessary reloads of multiWACZ JSON, prune expired (via wabac.js 2.23.0) +- Fidelity: Fix CSP issue with iframes in Firefox (via wabac.js 2.23.0) +- Testing: Add testing for CSP handling and embeds in Firefox and Webkit + v2.3.8 - Library: disable GDrive integration in library (for AWP use) diff --git a/mkdocs/site/docs/examples/iframetest.wacz b/mkdocs/site/docs/examples/iframetest.wacz new file mode 100644 index 0000000000000000000000000000000000000000..a379d1876e80762340be426ffbd72b0e18691331 GIT binary patch literal 6148 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 Qu~3zKS&{$p + + + + + + + + + diff --git a/tests/embed/iframe-test.html b/tests/embed/iframe-test.html new file mode 100644 index 0000000..e265531 --- /dev/null +++ b/tests/embed/iframe-test.html @@ -0,0 +1,19 @@ + + + + + + + + + + diff --git a/tests/embed/index-sandbox.html b/tests/embed/index-sandbox.html index b11af62..e238b3a 100644 --- a/tests/embed/index-sandbox.html +++ b/tests/embed/index-sandbox.html @@ -14,6 +14,7 @@ { await expect(res).toContainText("Want to help"); }); +test("same-domain iframe embed is loading", async ({ page }) => { + await page.goto("http://localhost:9990/iframe-test.html"); + + const res = page + .locator("replay-web-page") + .frameLocator("iframe") + .locator("replay-app-main wr-item wr-coll-replay") + .frameLocator("iframe") + .locator("body"); + + await expect(res).toContainText("Outside iframe"); + + const inside = res.frameLocator("iframe").locator("body"); + + await expect(inside).toContainText("Inside iframe"); + +}); + +test("cross-domain iframe embed is loading", async ({ page }) => { + await page.goto("http://localhost:8020/iframe-test-cross.html"); + + const res = page + .locator("replay-web-page") + .frameLocator("iframe") + .locator("replay-app-main wr-item wr-coll-replay") + .frameLocator("iframe") + .locator("body"); + + await expect(res).toContainText("Outside iframe"); + + const inside = res.frameLocator("iframe").locator("body"); + + await expect(inside).toContainText("Inside iframe"); + +}); + test("sandbox + cross-domain embed is loading", async ({ page }) => { await page.goto("http://localhost:8030/"); @@ -73,7 +109,7 @@ test("require subdomain iframe", async ({ page }) => { ); }); -test("csp blocking in place", async ({ page }) => { +test("csp blocking in place", async ({ page }, workerInfo) => { await page.goto("http://localhost:9990/embed.html"); const frame = page @@ -114,6 +150,8 @@ test("csp blocking in place", async ({ page }) => { // (5-6) blocked by csp policy, even though local block += await blocked(iframe.contentWindow, "http://localhost:9990/sw.js"); + + // not blocked in FF block += await blocked( iframe.contentWindow, "http://localhost:9990/static/wombat.js", @@ -122,5 +160,19 @@ test("csp blocking in place", async ({ page }) => { return block; }); - expect(didNotFetch).toBe(6); + const name = workerInfo.project.name; + + switch (name) { + case "chrome": + expect(didNotFetch).toBe(6); + break; + + case "firefox": + expect(didNotFetch).toBe(5); + break; + + case "webkit": + expect(didNotFetch).toBe(4); + break; + } }); diff --git a/yarn.lock b/yarn.lock index 8ec201f..8c2ac3e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -417,12 +417,12 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@playwright/test@^1.38.1": - version "1.38.1" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.38.1.tgz#8ef4263e355cd1d8ad7905d471d268e8acb82ed6" - integrity sha512-NqRp8XMwj3AK+zKLbZShl0r/9wKgzqI/527bkptKXomtuo+dOjU9NdMASQ8DNC9z9zLOMbG53T4eihYr3XR+BQ== +"@playwright/test@^1.52.0": + version "1.52.0" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.52.0.tgz#267ec595b43a8f4fa5e444ea503689629e91a5b8" + integrity sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g== dependencies: - playwright "1.38.1" + playwright "1.52.0" "@shoelace-style/animations@^1.1.0": version "1.1.0" @@ -1028,10 +1028,10 @@ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== -"@webrecorder/wabac@^2.22.17": - version "2.22.17" - resolved "https://registry.yarnpkg.com/@webrecorder/wabac/-/wabac-2.22.17.tgz#af1992ea78fcd6d82f3ce2a5502504d9763c08d8" - integrity sha512-IW7GKwE2Eh5xCj9E7OUHqmmMxdWa5GyyaVRijOFrBksgMfRAyiZxrSUlpUtALtwbyEQ1r2a5wjKyCCJE3xWubw== +"@webrecorder/wabac@^2.23.0": + version "2.23.0" + resolved "https://registry.yarnpkg.com/@webrecorder/wabac/-/wabac-2.23.0.tgz#cad96945365b424c577afa9325df5e6cf6449669" + integrity sha512-kqbs2C/D1moLeinQZ1ilMcgmvXk1B18Yu7S3AEAiOYM+pL62p0DBIfVyS3SUgU2X7nCeJmn90Sq+Pytb3NQ0gg== dependencies: "@peculiar/asn1-ecc" "^2.3.4" "@peculiar/asn1-schema" "^2.3.3" @@ -4467,17 +4467,17 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -playwright-core@1.38.1: - version "1.38.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.38.1.tgz#75a3c470aa9576b7d7c4e274de3d79977448ba08" - integrity sha512-tQqNFUKa3OfMf4b2jQ7aGLB8o9bS3bOY0yMEtldtC2+spf8QXG9zvXLTXUeRsoNuxEYMgLYR+NXfAa1rjKRcrg== +playwright-core@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.52.0.tgz#238f1f0c3edd4ebba0434ce3f4401900319a3dca" + integrity sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg== -playwright@1.38.1, playwright@^1.38.1: - version "1.38.1" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.38.1.tgz#82ecd9bc4f4f64dbeee8a11c31793748e2528130" - integrity sha512-oRMSJmZrOu1FP5iu3UrCx8JEFRIMxLDM0c/3o4bpzU5Tz97BypefWf7TuTNPWeCe279TPal5RtPPZ+9lW/Qkow== +playwright@1.52.0, playwright@^1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.52.0.tgz#26cb9a63346651e1c54c8805acfd85683173d4bd" + integrity sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw== dependencies: - playwright-core "1.38.1" + playwright-core "1.52.0" optionalDependencies: fsevents "2.3.2"