diff --git a/.eslintignore b/.eslintignore
index 60b8fd360fcb9..9d22f618d81c1 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -8,14 +8,11 @@ test/assets/modernizr.js
/packages/playwright-ct-core/src/generated/*
/index.d.ts
node_modules/
-browser_patches/*/checkout/
-browser_patches/chromium/output/
**/*.d.ts
output/
test-results/
-tests/components/
-tests/installation/fixture-scripts/
-examples/
+/tests/components/
+/tests/installation/fixture-scripts/
DEPS
.cache/
-utils/
+/utils/
diff --git a/.github/workflows/create_test_report.yml b/.github/workflows/create_test_report.yml
index 9d382f1ee632e..dfc6961c2c1ab 100644
--- a/.github/workflows/create_test_report.yml
+++ b/.github/workflows/create_test_report.yml
@@ -22,6 +22,7 @@ jobs:
env:
DEBUG: pw:install
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
+ ELECTRON_SKIP_BINARY_DOWNLOAD: 1
- run: npm run build
- name: Download blob report artifact
@@ -34,7 +35,7 @@ jobs:
run: |
npx playwright merge-reports --config .github/workflows/merge.config.ts ./all-blob-reports
env:
- NODE_OPTIONS: --max-old-space-size=4096
+ NODE_OPTIONS: --max-old-space-size=8192
- name: Azure Login
uses: azure/login@v2
@@ -120,21 +121,3 @@ jobs:
]),
});
core.info('Posted comment: ' + response.html_url);
-
- const check = await github.rest.checks.create({
- ...context.repo,
- name: 'Merge report (${{ github.event.workflow_run.name }})',
- head_sha: '${{ github.event.workflow_run.head_sha }}',
- status: 'completed',
- conclusion: 'success',
- details_url: reportUrl,
- output: {
- title: 'Test results for "${{ github.event.workflow_run.name }}"',
- summary: [
- reportMd,
- '',
- '---',
- `Full [HTML report](${reportUrl}). Merge [workflow run](${mergeWorkflowUrl}).`
- ].join('\n'),
- }
- });
diff --git a/.github/workflows/infra.yml b/.github/workflows/infra.yml
index f33c8535f07f1..1d52ddb96d41d 100644
--- a/.github/workflows/infra.yml
+++ b/.github/workflows/infra.yml
@@ -16,7 +16,7 @@ env:
jobs:
doc-and-lint:
name: "docs & lint"
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
@@ -38,7 +38,7 @@ jobs:
run: npm audit --omit dev
lint-snippets:
name: "Lint snippets"
- runs-on: ubuntu-22.04
+ runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
@@ -50,6 +50,12 @@ jobs:
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
+ - uses: actions/setup-java@v4
+ with:
+ distribution: 'zulu'
+ java-version: '21'
- run: npm ci
- run: pip install -r utils/doclint/linting-code-snippets/python/requirements.txt
+ - run: mvn package
+ working-directory: utils/doclint/linting-code-snippets/java
- run: node utils/doclint/linting-code-snippets/cli.js
diff --git a/.github/workflows/merge.config.ts b/.github/workflows/merge.config.ts
index b39944bc809c1..e8582ed5213e4 100644
--- a/.github/workflows/merge.config.ts
+++ b/.github/workflows/merge.config.ts
@@ -1,4 +1,4 @@
export default {
testDir: '../../tests',
- reporter: [['markdown'], ['html']]
+ reporter: [[require.resolve('../../packages/playwright/lib/reporters/markdown')], ['html']]
};
\ No newline at end of file
diff --git a/.github/workflows/pr_check_client_side_changes.yml b/.github/workflows/pr_check_client_side_changes.yml
index 7748b5d514af3..6612845f47202 100644
--- a/.github/workflows/pr_check_client_side_changes.yml
+++ b/.github/workflows/pr_check_client_side_changes.yml
@@ -12,7 +12,7 @@ on:
jobs:
check:
name: Check
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
if: github.repository == 'microsoft/playwright'
steps:
- uses: actions/checkout@v4
@@ -27,7 +27,7 @@ jobs:
repo: context.repo.repo,
commit_sha: context.sha,
});
- const commitHeader = data.message.split('\n')[0];
+ const commitHeader = data.message.split('\n')[0].replace(/#(\d+)/g, 'https://github.com/microsoft/playwright/pull/$1');
const title = '[Ports]: Backport client side changes for ' + currentPlaywrightVersion;
for (const repo of ['playwright-python', 'playwright-java', 'playwright-dotnet']) {
diff --git a/.github/workflows/publish_canary.yml b/.github/workflows/publish_canary.yml
index 64d25dbd6dd85..78fb0ba5a95da 100644
--- a/.github/workflows/publish_canary.yml
+++ b/.github/workflows/publish_canary.yml
@@ -65,7 +65,7 @@ jobs:
publish-trace-viewer:
name: "publish Trace Viewer to trace.playwright.dev"
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
if: github.repository == 'microsoft/playwright'
steps:
- uses: actions/checkout@v4
diff --git a/.github/workflows/publish_release_npm.yml b/.github/workflows/publish_release_npm.yml
index 46b58168345dc..bbef0c5c62a28 100644
--- a/.github/workflows/publish_release_npm.yml
+++ b/.github/workflows/publish_release_npm.yml
@@ -10,7 +10,7 @@ env:
jobs:
publish-npm-release:
name: "publish to NPM"
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
if: github.repository == 'microsoft/playwright'
permissions:
contents: read
diff --git a/.github/workflows/publish_release_traceviewer.yml b/.github/workflows/publish_release_traceviewer.yml
index 60af5442e95b2..e61ac76ccdbd6 100644
--- a/.github/workflows/publish_release_traceviewer.yml
+++ b/.github/workflows/publish_release_traceviewer.yml
@@ -7,7 +7,7 @@ on:
jobs:
publish-trace-viewer:
name: "publish Trace Viewer to trace.playwright.dev"
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
if: github.repository == 'microsoft/playwright'
steps:
- uses: actions/checkout@v4
diff --git a/.github/workflows/roll_browser_into_playwright.yml b/.github/workflows/roll_browser_into_playwright.yml
index da905131603e6..e24d015cf8a2c 100644
--- a/.github/workflows/roll_browser_into_playwright.yml
+++ b/.github/workflows/roll_browser_into_playwright.yml
@@ -12,7 +12,7 @@ permissions:
jobs:
roll:
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
diff --git a/.github/workflows/tests_bidi.yml b/.github/workflows/tests_bidi.yml
index 34af9e7096953..46b16aac7bc03 100644
--- a/.github/workflows/tests_bidi.yml
+++ b/.github/workflows/tests_bidi.yml
@@ -13,7 +13,6 @@ on:
env:
FORCE_COLOR: 1
- ELECTRON_SKIP_BINARY_DOWNLOAD: 1
jobs:
test_bidi:
diff --git a/.github/workflows/tests_secondary.yml b/.github/workflows/tests_secondary.yml
index 0105f8c4bb8a5..de9434d7df6e3 100644
--- a/.github/workflows/tests_secondary.yml
+++ b/.github/workflows/tests_secondary.yml
@@ -123,7 +123,13 @@ jobs:
fail-fast: false
matrix:
browser: [chromium, firefox, webkit]
- os: [ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, macos-14-xlarge, windows-latest]
+ os: [ubuntu-24.04, macos-14-xlarge, windows-latest]
+ include:
+ # We have different binaries per Ubuntu version for WebKit.
+ - browser: webkit
+ os: ubuntu-20.04
+ - browser: webkit
+ os: ubuntu-22.04
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
@@ -184,354 +190,71 @@ jobs:
PWTEST_TRACE: 1
PWTEST_CHANNEL: ${{ matrix.channel }}
- chrome_stable_linux:
- name: "Chrome Stable (Linux)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: ubuntu-20.04
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: chrome
- command: npm run ctest
- bot-name: "chrome-stable-linux"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: chrome
-
- chrome_stable_win:
- name: "Chrome Stable (Win)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: windows-latest
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: chrome
- command: npm run ctest
- bot-name: "chrome-stable-windows"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: chrome
-
- chrome_stable_mac:
- name: "Chrome Stable (Mac)"
+ test_chromium_channels:
+ name: Test ${{ matrix.channel }} on ${{ matrix.runs-on }}
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: macos-latest
+ runs-on: ${{ matrix.runs-on }}
+ strategy:
+ fail-fast: false
+ matrix:
+ channel: [chrome, chrome-beta, msedge, msedge-beta, msedge-dev]
+ runs-on: [ubuntu-20.04, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/run-test
with:
- browsers-to-install: chrome
+ browsers-to-install: ${{ matrix.channel }}
command: npm run ctest
- bot-name: "chrome-stable-mac"
+ bot-name: ${{ matrix.channel }}-${{ matrix.runs-on }}
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
env:
- PWTEST_CHANNEL: chrome
+ PWTEST_CHANNEL: ${{ matrix.channel }}
chromium_tot:
- name: Chromium tip-of-tree ${{ matrix.os }}
+ name: Chromium tip-of-tree ${{ matrix.os }}${{ matrix.headed }}
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04, macos-13, windows-latest]
+ headed: ['--headed', '']
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/run-test
with:
browsers-to-install: chromium-tip-of-tree
- command: npm run ctest
- bot-name: "tip-of-tree-${{ matrix.os }}"
+ command: npm run ctest -- ${{ matrix.headed }}
+ bot-name: "chromium-tip-of-tree-${{ matrix.os }}${{ matrix.headed }}"
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
env:
PWTEST_CHANNEL: chromium-tip-of-tree
- chromium_tot_headed:
- name: Chromium tip-of-tree headed ${{ matrix.os }}
+ firefox_beta:
+ name: Firefox Beta ${{ matrix.os }}
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
- os: [ubuntu-latest, macos-latest, windows-latest]
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: chromium-tip-of-tree
- command: npm run ctest -- --headed
- bot-name: "tip-of-tree-headed-${{ matrix.os }}"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: chromium-tip-of-tree
-
- firefox_beta_linux:
- name: "Firefox Beta (Linux)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: ubuntu-20.04
+ os: [ubuntu-20.04, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/run-test
with:
browsers-to-install: firefox-beta chromium
command: npm run ftest
- bot-name: "firefox-beta-linux"
+ bot-name: "firefox-beta-${{ matrix.os }}"
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
env:
PWTEST_CHANNEL: firefox-beta
- firefox_beta_win:
- name: "Firefox Beta (Win)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: windows-latest
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: firefox-beta chromium
- command: npm run ftest -- --workers=1
- bot-name: "firefox-beta-windows"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: firefox-beta
-
- firefox_beta_mac:
- name: "Firefox Beta (Mac)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: macos-latest
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: firefox-beta chromium
- command: npm run ftest
- bot-name: "firefox-beta-mac"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: firefox-beta
-
- edge_stable_mac:
- name: "Edge Stable (Mac)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: macos-latest
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: msedge
- command: npm run ctest
- bot-name: "edge-stable-mac"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: msedge
-
- edge_stable_win:
- name: "Edge Stable (Win)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: windows-latest
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: msedge
- command: npm run ctest
- bot-name: "edge-stable-windows"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: msedge
-
- edge_stable_linux:
- name: "Edge Stable (Linux)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: ubuntu-20.04
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: msedge
- command: npm run ctest
- bot-name: "edge-stable-linux"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: msedge
-
- edge_beta_mac:
- name: "Edge Beta (Mac)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: macos-latest
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: msedge-beta
- command: npm run ctest
- bot-name: "edge-beta-mac"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: msedge-beta
-
- edge_beta_win:
- name: "Edge Beta (Win)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: windows-latest
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: msedge-beta
- command: npm run ctest
- bot-name: "edge-beta-windows"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: msedge-beta
-
- edge_beta_linux:
- name: "Edge Beta (Linux)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: ubuntu-20.04
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: msedge-beta
- command: npm run ctest
- bot-name: "edge-beta-linux"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: msedge-beta
-
- edge_dev_mac:
- name: "Edge Dev (Mac)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: macos-latest
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: msedge-dev
- command: npm run ctest
- bot-name: "edge-dev-mac"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: msedge-dev
-
- edge_dev_win:
- name: "Edge Dev (Win)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: windows-latest
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: msedge-dev
- command: npm run ctest
- bot-name: "edge-dev-windows"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: msedge-dev
-
- edge_dev_linux:
- name: "Edge Dev (Linux)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: ubuntu-20.04
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: msedge-dev
- command: npm run ctest
- bot-name: "edge-dev-linux"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: msedge-dev
-
- chrome_beta_linux:
- name: "Chrome Beta (Linux)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: ubuntu-20.04
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: chrome-beta
- command: npm run ctest
- bot-name: "chrome-beta-linux"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: chrome-beta
-
- chrome_beta_win:
- name: "Chrome Beta (Win)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: windows-latest
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: chrome-beta
- command: npm run ctest
- bot-name: "chrome-beta-windows"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: chrome-beta
-
- chrome_beta_mac:
- name: "Chrome Beta (Mac)"
- environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: macos-latest
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/run-test
- with:
- browsers-to-install: chrome-beta
- command: npm run ctest
- bot-name: "chrome-beta-mac"
- flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
- flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- env:
- PWTEST_CHANNEL: chrome-beta
-
build-playwright-driver:
name: "build-playwright-driver"
runs-on: ubuntu-24.04
@@ -545,19 +268,25 @@ jobs:
- run: npx playwright install-deps
- run: utils/build/build-playwright-driver.sh
- test_linux_chromium_headless_new:
- name: Linux Chromium Headless New
+ test_channel_chromium:
+ name: Test channel=chromium
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
- runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ runs-on: [ubuntu-latest, windows-latest, macos-latest]
+ runs-on: ${{ matrix.runs-on }}
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/run-test
with:
+ # TODO: this should pass --no-shell.
+ # However, codegen tests do not inherit the channel and try to launch headless shell.
browsers-to-install: chromium
command: npm run ctest
- bot-name: "headless-new"
+ bot-name: "channel-chromium-${{ matrix.runs-on }}"
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
env:
- PLAYWRIGHT_CHROMIUM_USE_HEADLESS_NEW: 1
+ PWTEST_CHANNEL: chromium
diff --git a/.github/workflows/trigger_tests.yml b/.github/workflows/trigger_tests.yml
index dcd68dca37440..1ea2ec424d2ef 100644
--- a/.github/workflows/trigger_tests.yml
+++ b/.github/workflows/trigger_tests.yml
@@ -9,7 +9,7 @@ on:
jobs:
trigger:
name: "trigger"
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
steps:
- run: |
curl -X POST \
diff --git a/.gitignore b/.gitignore
index aadc481067c2b..1f3b9a7a72959 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,3 +35,4 @@ test-results
.cache/
.eslintcache
playwright.env
+firefox
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b25a131d44a54..cb06a17e771a1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,92 +1,77 @@
# Contributing
-- [How to Contribute](#how-to-contribute)
- * [Getting Code](#getting-code)
- * [Code reviews](#code-reviews)
- * [Code Style](#code-style)
- * [API guidelines](#api-guidelines)
- * [Commit Messages](#commit-messages)
- * [Writing Documentation](#writing-documentation)
- * [Adding New Dependencies](#adding-new-dependencies)
- * [Running & Writing Tests](#running--writing-tests)
- * [Public API Coverage](#public-api-coverage)
-- [Contributor License Agreement](#contributor-license-agreement)
- * [Code of Conduct](#code-of-conduct)
+## Choose an issue
-## How to Contribute
+Playwright **requires an issue** for every contribution, except for minor documentation updates. We strongly recommend to pick an issue labeled `open-to-a-pull-request` for your first contribution to the project.
-We strongly recommend that you open an issue before beginning any code modifications. This is particularly important if the changes involve complex logic or if the existing code isn't immediately clear. By doing so, we can discuss and agree upon the best approach to address a bug or implement a feature, ensuring that our efforts are aligned.
+If you are passioned about a bug/feature, but cannot find an issue describing it, **file an issue first**. This will facilitate the discussion and you might get some early feedback from project maintainers before spending your time on creating a pull request.
-### Getting Code
-
-Make sure you're running Node.js 20 to verify and upgrade NPM do:
+## Make a change
+Make sure you're running Node.js 20 or later.
```bash
node --version
-npm --version
-npm i -g npm@latest
```
-1. Clone this repository
-
- ```bash
- git clone https://github.com/microsoft/playwright
- cd playwright
- ```
+Clone the repository. If you plan to send a pull request, it might be better to [fork the repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) first.
+```bash
+git clone https://github.com/microsoft/playwright
+cd playwright
+```
-2. Install dependencies
+Install dependencies and run the build in watch mode.
+```bash
+npm ci
+npm run watch
+npx playwright install
+```
- ```bash
- npm ci
- ```
+Playwright is a multi-package repository that uses npm workspaces. For browser APIs, look at [`packages/playwright-core`](https://github.com/microsoft/playwright/blob/main/packages/playwright-core). For test runner, see [`packages/playwright`](https://github.com/microsoft/playwright/blob/main/packages/playwright).
-3. Build Playwright
+Note that some files are generated by the build, so the watch process might override your changes if done in the wrong file. For example, TypeScript types for the API are generated from the [`docs/src`](https://github.com/microsoft/playwright/blob/main/docs/src).
- ```bash
- npm run build
- ```
+Coding style is fully defined in [.eslintrc](https://github.com/microsoft/playwright/blob/main/.eslintrc.js). Before creating a pull request, or at any moment during development, run linter to check all kinds of things:
+ ```bash
+ npm run lint
+ ```
-4. Run tests
+Comments should be generally avoided. If the code would not be understood without comments, consider re-writing the code to make it self-explanatory.
- This will run a test on line `23` in `page-fill.spec.ts`:
+### Write documentation
- ```bash
- npm run ctest -- page-fill:23
- ```
+Every part of the public API should be documented in [`docs/src`](https://github.com/microsoft/playwright/blob/main/docs/src), in the same change that adds/changes the API. We use markdown files with custom structure to specify the API. Take a look around for an example.
- See [here](#running--writing-tests) for more information about running and writing tests.
+Various other files are generated from the API specification. If you are running `npm run watch`, these will be re-generated automatically.
-### Code reviews
+Larger changes will require updates to the documentation guides as well. This will be made clear during the code review.
-All submissions, including submissions by project members, require review. We
-use GitHub pull requests for this purpose. Consult
-[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
-information on using pull requests.
+## Add a test
-### Code Style
+Playwright requires a test for almost any new or modified functionality. An exception would be a pure refactoring, but chances are you are doing more than that.
-- Coding style is fully defined in [.eslintrc](https://github.com/microsoft/playwright/blob/main/.eslintrc.js)
-- Comments should be generally avoided. If the code would not be understood without comments, consider re-writing the code to make it self-explanatory.
+There are multiple [test suites](https://github.com/microsoft/playwright/blob/main/tests) in Playwright that will be executed on the CI. The two most important that you need to run locally are:
-To run code linter, use:
+- Library tests cover APIs not related to the test runner.
+ ```bash
+ # fast path runs all tests in Chromium
+ npm run ctest
-```bash
-npm run eslint
-```
+ # slow path runs all tests in three browsers
+ npm run test
+ ```
-### API guidelines
+- Test runner tests.
+ ```bash
+ npm run ttest
+ ```
-When authoring new API methods, consider the following:
+Since Playwright tests are using Playwright under the hood, everything from our documentation applies, for example [this guide on running and debugging tests](https://playwright.dev/docs/running-tests#running-tests).
-- Expose as little information as needed. When in doubt, don’t expose new information.
-- Methods are used in favor of getters/setters.
- - The only exception is namespaces, e.g. `page.keyboard` and `page.coverage`
-- All string literals must be lowercase. This includes event names and option values.
-- Avoid adding "sugar" API (API that is trivially implementable in user-space) unless they're **very** common.
+Note that tests should be *hermetic*, and not depend on external services. Tests should work on all three platforms: macOS, Linux and Windows.
-### Commit Messages
+## Write a commit message
-Commit messages should follow the Semantic Commit Messages format:
+Commit messages should follow the [Semantic Commit Messages](https://www.conventionalcommits.org/en/v1.0.0/) format:
```
label(namespace): title
@@ -97,131 +82,57 @@ footer
```
1. *label* is one of the following:
- - `fix` - playwright bug fixes.
- - `feat` - playwright features.
- - `docs` - changes to docs, e.g. `docs(api): ..` to change documentation.
- - `test` - changes to playwright tests infrastructure.
- - `devops` - build-related work, e.g. CI related patches and general changes to the browser build infrastructure
+ - `fix` - bug fixes
+ - `feat` - new features
+ - `docs` - documentation-only changes
+ - `test` - test-only changes
+ - `devops` - changes to the CI or build
- `chore` - everything that doesn't fall under previous categories
-2. *namespace* is put in parenthesis after label and is optional. Must be lowercase.
-3. *title* is a brief summary of changes.
-4. *description* is **optional**, new-line separated from title and is in present tense.
-5. *footer* is **optional**, new-line separated from *description* and contains "fixes" / "references" attribution to github issues.
+1. *namespace* is put in parenthesis after label and is optional. Must be lowercase.
+1. *title* is a brief summary of changes.
+1. *description* is **optional**, new-line separated from title and is in present tense.
+1. *footer* is **optional**, new-line separated from *description* and contains "fixes" / "references" attribution to github issues.
Example:
```
-fix(firefox): make sure session cookies work
+feat(trace viewer): network panel filtering
-This patch fixes session cookies in the firefox browser.
+This patch adds a filtering toolbar to the network panel.
+
-Fixes #123, fixes #234
+Fixes #123, references #234.
```
-### Writing Documentation
-
-All API classes, methods, and events should have a description in [`docs/src`](https://github.com/microsoft/playwright/blob/main/docs/src). There's a [documentation linter](https://github.com/microsoft/playwright/tree/main/utils/doclint) which makes sure documentation is aligned with the codebase.
-
-To run the documentation linter, use:
-
-```bash
-npm run doc
-```
-
-To build the documentation site locally and test how your changes will look in practice:
-
-1. Clone the [microsoft/playwright.dev](https://github.com/microsoft/playwright.dev) repo
-1. Follow [the playwright.dev README instructions to "roll docs"](https://github.com/microsoft/playwright.dev/#roll-docs) against your local `playwright` repo with your changes in progress
-1. Follow [the playwright.dev README instructions to "run dev server"](https://github.com/microsoft/playwright.dev/#run-dev-server) to view your changes
-
-### Adding New Dependencies
+## Send a pull request
-For all dependencies (both installation and development):
-- **Do not add** a dependency if the desired functionality is easily implementable.
-- If adding a dependency, it should be well-maintained and trustworthy.
+All submissions, including submissions by project members, require review. We use GitHub pull requests for this purpose. Consult [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more information on using pull requests.
-A barrier for introducing new installation dependencies is especially high:
-- **Do not add** installation dependency unless it's critical to project success.
+After a successful code review, one of the maintainers will merge your pull request. Congratulations!
-### Running & Writing Tests
+## More details
-- Every feature should be accompanied by a test.
-- Every public api event/method should be accompanied by a test.
-- Tests should be *hermetic*. Tests should not depend on external services.
-- Tests should work on all three platforms: Mac, Linux and Win. This is especially important for screenshot tests.
+**No new dependencies**
-Playwright tests are located in [`tests`](https://github.com/microsoft/playwright/blob/main/tests) and use `@playwright/test` test runner.
-These are integration tests, making sure public API methods and events work as expected.
+There is a very high bar for new dependencies, including updating to a new version of an existing dependency. We recommend to explicitly discuss this in an issue and get a green light from a maintainer, before creating a pull request that updates dependencies.
-- To run all tests:
+**Custom browser build**
- ```bash
- npx playwright install
- npm run test
- ```
-
- Be sure to run `npm run build` or let `npm run watch` run before you re-run the
- tests after making your changes to check them.
-
-- To run tests in Chromium
-
- ```bash
- npm run ctest # also `ftest` for firefox and `wtest` for WebKit
- npm run ctest -- page-fill:23 # runs line 23 of page-fill.spec.ts
- ```
-
-- To run tests in WebKit / Firefox, use `wtest` or `ftest`.
-
-- To run the Playwright test runner tests
-
- ```bash
- npm run ttest
- npm run ttest -- --grep "specific test"
- ```
-
-- To run a specific test, substitute `it` with `it.only`, or use the `--grep 'My test'` CLI parameter:
-
- ```js
- ...
- // Using "it.only" to run a specific test
- it.only('should work', async ({server, page}) => {
- const response = await page.goto(server.EMPTY_PAGE);
- expect(response.ok).toBe(true);
- });
- // or
- playwright test --config=xxx --grep 'should work'
- ```
-
-- To disable a specific test, substitute `it` with `it.skip`:
-
- ```js
- ...
- // Using "it.skip" to skip a specific test
- it.skip('should work', async ({server, page}) => {
- const response = await page.goto(server.EMPTY_PAGE);
- expect(response.ok).toBe(true);
- });
- ```
-
-- To run tests in non-headless (headed) mode:
-
- ```bash
- npm run ctest -- --headed
- ```
-
-- To run tests with custom browser executable, specify `CRPATH`, `WKPATH` or `FFPATH` env variable that points to browser executable:
+To run tests with custom browser executable, specify `CRPATH`, `WKPATH` or `FFPATH` env variable that points to browser executable:
+```bash
+CRPATH= npm run ctest
+```
- ```bash
- CRPATH= npm run ctest
- ```
+You will also find `DEBUG=pw:browser` useful for debugging custom builds.
-- When should a test be marked with `skip` or `fixme`?
+**Building documentation site**
- - **`skip(condition)`**: This test *should ***never*** work* for `condition`
- where `condition` is usually something like: `test.skip(browserName === 'chromium', 'This does not work because of ...')`.
+The [playwright.dev](https://playwright.dev/) documentation site lives in a separate repository, and documentation from [`docs/src`](https://github.com/microsoft/playwright/blob/main/docs/src) is frequently rolled there.
- - **`fixme(condition)`**: This test *should ***eventually*** work* for `condition`
- where `condition` is usually something like: `test.fixme(browserName === 'chromium', 'We are waiting for version x')`.
+Most of the time this should not concern you. However, if you are doing something unusual in the docs, you can build locally and test how your changes will look in practice:
+1. Clone the [microsoft/playwright.dev](https://github.com/microsoft/playwright.dev) repo.
+1. Follow [the playwright.dev README instructions to "roll docs"](https://github.com/microsoft/playwright.dev/#roll-docs) against your local `playwright` repo with your changes in progress.
+1. Follow [the playwright.dev README instructions to "run dev server"](https://github.com/microsoft/playwright.dev/#run-dev-server) to view your changes.
## Contributor License Agreement
diff --git a/README.md b/README.md
index b7955069a255c..3dcad58f4906d 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# 🎭 Playwright
-[![npm version](https://img.shields.io/npm/v/playwright.svg)](https://www.npmjs.com/package/playwright) [![Chromium version](https://img.shields.io/badge/chromium-130.0.6723.19-blue.svg?logo=google-chrome)](https://www.chromium.org/Home) [![Firefox version](https://img.shields.io/badge/firefox-130.0-blue.svg?logo=firefoxbrowser)](https://www.mozilla.org/en-US/firefox/new/) [![WebKit version](https://img.shields.io/badge/webkit-18.0-blue.svg?logo=safari)](https://webkit.org/) [![Join Discord](https://img.shields.io/badge/join-discord-infomational)](https://aka.ms/playwright/discord)
+[![npm version](https://img.shields.io/npm/v/playwright.svg)](https://www.npmjs.com/package/playwright) [![Chromium version](https://img.shields.io/badge/chromium-131.0.6778.33-blue.svg?logo=google-chrome)](https://www.chromium.org/Home) [![Firefox version](https://img.shields.io/badge/firefox-132.0-blue.svg?logo=firefoxbrowser)](https://www.mozilla.org/en-US/firefox/new/) [![WebKit version](https://img.shields.io/badge/webkit-18.2-blue.svg?logo=safari)](https://webkit.org/) [![Join Discord](https://img.shields.io/badge/join-discord-infomational)](https://aka.ms/playwright/discord)
## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/docs/api/class-playwright)
@@ -8,9 +8,9 @@ Playwright is a framework for Web Testing and Automation. It allows testing [Chr
| | Linux | macOS | Windows |
| :--- | :---: | :---: | :---: |
-| Chromium 130.0.6723.19 | :white_check_mark: | :white_check_mark: | :white_check_mark: |
-| WebKit 18.0 | :white_check_mark: | :white_check_mark: | :white_check_mark: |
-| Firefox 130.0 | :white_check_mark: | :white_check_mark: | :white_check_mark: |
+| Chromium 131.0.6778.33 | :white_check_mark: | :white_check_mark: | :white_check_mark: |
+| WebKit 18.2 | :white_check_mark: | :white_check_mark: | :white_check_mark: |
+| Firefox 132.0 | :white_check_mark: | :white_check_mark: | :white_check_mark: |
Headless execution is supported for all browsers on all platforms. Check out [system requirements](https://playwright.dev/docs/intro#system-requirements) for details.
@@ -46,7 +46,6 @@ npx playwright install
You can optionally install only selected browsers, see [install browsers](https://playwright.dev/docs/cli#install-browsers) for more details. Or you can install no browsers at all and use existing [browser channels](https://playwright.dev/docs/browsers).
* [Getting started](https://playwright.dev/docs/intro)
-* [Installation configuration](https://playwright.dev/docs/installation)
* [API reference](https://playwright.dev/docs/api/class-playwright)
## Capabilities
@@ -163,7 +162,7 @@ test('Intercept network requests', async ({ page }) => {
## Resources
-* [Documentation](https://playwright.dev/docs/intro)
+* [Documentation](https://playwright.dev)
* [API reference](https://playwright.dev/docs/api/class-playwright/)
* [Contribution guide](CONTRIBUTING.md)
* [Changelog](https://github.com/microsoft/playwright/releases)
diff --git a/browser_patches/firefox/UPSTREAM_CONFIG.sh b/browser_patches/firefox/UPSTREAM_CONFIG.sh
index ff333634246d9..7956cc114d58b 100644
--- a/browser_patches/firefox/UPSTREAM_CONFIG.sh
+++ b/browser_patches/firefox/UPSTREAM_CONFIG.sh
@@ -1,3 +1,3 @@
REMOTE_URL="https://github.com/mozilla/gecko-dev"
BASE_BRANCH="release"
-BASE_REVISION="cf0397e3ba298868fdca53f894da5b0d239dc09e"
+BASE_REVISION="bc78b98043438d8ee2727a483b6e10dedfda883f"
diff --git a/browser_patches/firefox/juggler/NetworkObserver.js b/browser_patches/firefox/juggler/NetworkObserver.js
index aa6f8662773de..2ee599606888e 100644
--- a/browser_patches/firefox/juggler/NetworkObserver.js
+++ b/browser_patches/firefox/juggler/NetworkObserver.js
@@ -145,10 +145,13 @@ class NetworkRequest {
}
this._expectingInterception = false;
this._expectingResumedRequest = undefined; // { method, headers, postData }
+ this._overriddenHeadersForRedirect = redirectedFrom?._overriddenHeadersForRedirect;
this._sentOnResponse = false;
this._fulfilled = false;
- if (this._pageNetwork)
+ if (this._overriddenHeadersForRedirect)
+ overrideRequestHeaders(httpChannel, this._overriddenHeadersForRedirect);
+ else if (this._pageNetwork)
appendExtraHTTPHeaders(httpChannel, this._pageNetwork.combinedExtraHTTPHeaders());
this._responseBodyChunks = [];
@@ -230,20 +233,13 @@ class NetworkRequest {
if (!this._expectingResumedRequest)
return;
const { method, headers, postData } = this._expectingResumedRequest;
+ this._overriddenHeadersForRedirect = headers;
this._expectingResumedRequest = undefined;
- if (headers) {
- for (const header of requestHeaders(this.httpChannel)) {
- // We cannot remove the "host" header.
- if (header.name.toLowerCase() === 'host')
- continue;
- this.httpChannel.setRequestHeader(header.name, '', false /* merge */);
- }
- for (const header of headers)
- this.httpChannel.setRequestHeader(header.name, header.value, false /* merge */);
- } else if (this._pageNetwork) {
+ if (headers)
+ overrideRequestHeaders(this.httpChannel, headers);
+ else if (this._pageNetwork)
appendExtraHTTPHeaders(this.httpChannel, this._pageNetwork.combinedExtraHTTPHeaders());
- }
if (method)
this.httpChannel.requestMethod = method;
if (postData !== undefined)
@@ -773,6 +769,20 @@ function requestHeaders(httpChannel) {
return headers;
}
+function clearRequestHeaders(httpChannel) {
+ for (const header of requestHeaders(httpChannel)) {
+ // We cannot remove the "host" header.
+ if (header.name.toLowerCase() === 'host')
+ continue;
+ httpChannel.setRequestHeader(header.name, '', false /* merge */);
+ }
+}
+
+function overrideRequestHeaders(httpChannel, headers) {
+ clearRequestHeaders(httpChannel);
+ appendExtraHTTPHeaders(httpChannel, headers);
+}
+
function causeTypeToString(causeType) {
for (let key in Ci.nsIContentPolicy) {
if (Ci.nsIContentPolicy[key] === causeType)
diff --git a/browser_patches/firefox/juggler/content/FrameTree.js b/browser_patches/firefox/juggler/content/FrameTree.js
index 2d59b3c43aa23..721f392b9bccb 100644
--- a/browser_patches/firefox/juggler/content/FrameTree.js
+++ b/browser_patches/firefox/juggler/content/FrameTree.js
@@ -46,8 +46,6 @@ class FrameTree {
Ci.nsISupportsWeakReference,
]);
- this._addedScrollbarsStylesheetSymbol = Symbol('_addedScrollbarsStylesheetSymbol');
-
this._wdm = Cc["@mozilla.org/dom/workers/workerdebuggermanager;1"].createInstance(Ci.nsIWorkerDebuggerManager);
this._wdmListener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIWorkerDebuggerManagerListener]),
@@ -130,24 +128,12 @@ class FrameTree {
}
_onDOMWindowCreated(window) {
- if (!window[this._addedScrollbarsStylesheetSymbol] && this.scrollbarsHidden) {
- const styleSheetService = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
- const ioService = Cc["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
- const uri = ioService.newURI('chrome://juggler/content/content/hidden-scrollbars.css', null, null);
- const sheet = styleSheetService.preloadSheet(uri, styleSheetService.AGENT_SHEET);
- window.windowUtils.addSheet(sheet, styleSheetService.AGENT_SHEET);
- window[this._addedScrollbarsStylesheetSymbol] = true;
- }
const frame = this.frameForDocShell(window.docShell);
if (!frame)
return;
frame._onGlobalObjectCleared();
}
- setScrollbarsHidden(hidden) {
- this.scrollbarsHidden = hidden;
- }
-
setJavaScriptDisabled(javaScriptDisabled) {
this._javaScriptDisabled = javaScriptDisabled;
for (const frame of this.frames())
diff --git a/browser_patches/firefox/juggler/content/PageAgent.js b/browser_patches/firefox/juggler/content/PageAgent.js
index 70dcf0492164e..255b84f726662 100644
--- a/browser_patches/firefox/juggler/content/PageAgent.js
+++ b/browser_patches/firefox/juggler/content/PageAgent.js
@@ -120,7 +120,8 @@ class PageAgent {
// After the dragStart event is dispatched and handled by Web,
// it might or might not create a new drag session, depending on its preventing default.
setTimeout(() => {
- this._browserPage.emit('pageInputEvent', { type: 'juggler-drag-finalized', dragSessionStarted: !!dragService.getCurrentSession() });
+ const session = this._getCurrentDragSession();
+ this._browserPage.emit('pageInputEvent', { type: 'juggler-drag-finalized', dragSessionStarted: !!session });
}, 0);
}
}),
@@ -526,8 +527,14 @@ class PageAgent {
});
}
+ _getCurrentDragSession() {
+ const frame = this._frameTree.mainFrame();
+ const domWindow = frame?.domWindow();
+ return domWindow ? dragService.getCurrentSession(domWindow) : undefined;
+ }
+
async _dispatchDragEvent({type, x, y, modifiers}) {
- const session = dragService.getCurrentSession();
+ const session = this._getCurrentDragSession();
const dropEffect = session.dataTransfer.dropEffect;
if ((type === 'drop' && dropEffect !== 'none') || type === 'dragover') {
@@ -551,9 +558,8 @@ class PageAgent {
return;
}
if (type === 'dragend') {
- const session = dragService.getCurrentSession();
- if (session)
- dragService.endDragSession(true);
+ const session = this._getCurrentDragSession();
+ session?.endDragSession(true);
return;
}
}
diff --git a/browser_patches/firefox/juggler/content/main.js b/browser_patches/firefox/juggler/content/main.js
index 15986bbed98a7..7eaa704059711 100644
--- a/browser_patches/firefox/juggler/content/main.js
+++ b/browser_patches/firefox/juggler/content/main.js
@@ -45,10 +45,6 @@ function initialize(browsingContext, docShell) {
docShell.languageOverride = locale;
},
- scrollbarsHidden: (hidden) => {
- data.frameTree.setScrollbarsHidden(hidden);
- },
-
javaScriptDisabled: (javaScriptDisabled) => {
data.frameTree.setJavaScriptDisabled(javaScriptDisabled);
},
diff --git a/browser_patches/firefox/juggler/protocol/BrowserHandler.js b/browser_patches/firefox/juggler/protocol/BrowserHandler.js
index 7de276d017b26..6a4688e541eb5 100644
--- a/browser_patches/firefox/juggler/protocol/BrowserHandler.js
+++ b/browser_patches/firefox/juggler/protocol/BrowserHandler.js
@@ -255,10 +255,6 @@ class BrowserHandler {
await this._targetRegistry.browserContextForId(browserContextId).setDefaultViewport(nullToUndefined(viewport));
}
- async ['Browser.setScrollbarsHidden']({browserContextId, hidden}) {
- await this._targetRegistry.browserContextForId(browserContextId).applySetting('scrollbarsHidden', nullToUndefined(hidden));
- }
-
async ['Browser.setInitScripts']({browserContextId, scripts}) {
await this._targetRegistry.browserContextForId(browserContextId).setInitScripts(scripts);
}
diff --git a/browser_patches/firefox/juggler/protocol/Protocol.js b/browser_patches/firefox/juggler/protocol/Protocol.js
index 2b7ad56d6a107..2b93186e545ad 100644
--- a/browser_patches/firefox/juggler/protocol/Protocol.js
+++ b/browser_patches/firefox/juggler/protocol/Protocol.js
@@ -394,12 +394,6 @@ const Browser = {
viewport: t.Nullable(pageTypes.Viewport),
}
},
- 'setScrollbarsHidden': {
- params: {
- browserContextId: t.Optional(t.String),
- hidden: t.Boolean,
- }
- },
'setInitScripts': {
params: {
browserContextId: t.Optional(t.String),
diff --git a/browser_patches/firefox/patches/bootstrap.diff b/browser_patches/firefox/patches/bootstrap.diff
index 4344455a667ab..5902d600c284a 100644
--- a/browser_patches/firefox/patches/bootstrap.diff
+++ b/browser_patches/firefox/patches/bootstrap.diff
@@ -57,10 +57,10 @@ index 8e9bf2b413585b5a3db9370eee5d57fb6c6716ed..5a3b194b54e3813c89989f13a214c989
* Return XPCOM wrapper for the internal accessible.
*/
diff --git a/browser/app/winlauncher/LauncherProcessWin.cpp b/browser/app/winlauncher/LauncherProcessWin.cpp
-index b40e0fceb567c0d217adf284e13f434e49cc8467..2c4e6d5fbf8da40954ad6a5b15e412493e43b14e 100644
+index 8167d2b81c918e02ce757f7f448f22e07c29d140..3ae798880acfd8aa965ae08051f2f81855133711 100644
--- a/browser/app/winlauncher/LauncherProcessWin.cpp
+++ b/browser/app/winlauncher/LauncherProcessWin.cpp
-@@ -22,6 +22,7 @@
+@@ -23,6 +23,7 @@
#include "mozilla/WinHeaderOnlyUtils.h"
#include "nsWindowsHelpers.h"
@@ -68,7 +68,7 @@ index b40e0fceb567c0d217adf284e13f434e49cc8467..2c4e6d5fbf8da40954ad6a5b15e41249
#include
#include
-@@ -421,8 +422,18 @@ Maybe LauncherMain(int& argc, wchar_t* argv[],
+@@ -422,8 +423,18 @@ Maybe LauncherMain(int& argc, wchar_t* argv[],
HANDLE stdHandles[] = {::GetStdHandle(STD_INPUT_HANDLE),
::GetStdHandle(STD_OUTPUT_HANDLE),
::GetStdHandle(STD_ERROR_HANDLE)};
@@ -89,10 +89,10 @@ index b40e0fceb567c0d217adf284e13f434e49cc8467..2c4e6d5fbf8da40954ad6a5b15e41249
DWORD creationFlags = CREATE_SUSPENDED | CREATE_UNICODE_ENVIRONMENT;
diff --git a/browser/installer/allowed-dupes.mn b/browser/installer/allowed-dupes.mn
-index f6d425f36a965f03ac82dbe3ab6cde06f12751ac..d60999ab2658b1e1e5f07a8aee530451c44f2957 100644
+index 213a99ed433d5219c2b9a64baad82d14cdbcd432..ee4f6484cdfe80899c28a1d9607494e520bfc93d 100644
--- a/browser/installer/allowed-dupes.mn
+++ b/browser/installer/allowed-dupes.mn
-@@ -73,6 +73,12 @@ browser/features/webcompat@mozilla.org/shims/empty-shim.txt
+@@ -67,6 +67,12 @@ browser/features/webcompat@mozilla.org/shims/empty-shim.txt
removed-files
#endif
@@ -102,11 +102,11 @@ index f6d425f36a965f03ac82dbe3ab6cde06f12751ac..d60999ab2658b1e1e5f07a8aee530451
+chrome/juggler/content/server/stream-utils.js
+chrome/marionette/content/stream-utils.js
+
- # Bug 1496075 - Switch searchplugins to Web Extensions
- browser/chrome/browser/search-extensions/amazon/favicon.ico
- browser/chrome/browser/search-extensions/amazondotcn/favicon.ico
+ # Bug 1606928 - There's no reliable way to connect Top Sites favicons with the favicons in the Search Service
+ browser/chrome/browser/content/activity-stream/data/content/tippytop/favicons/allegro-pl.ico
+ browser/defaults/settings/main/search-config-icons/96327a73-c433-5eb4-a16d-b090cadfb80b
diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
-index 3bf9d511555510414f39db7f99a6b5a2a743f178..bb0f71dd602193536c23f7b865ec5dce3ee02242 100644
+index da760e143740a166df14d055cf3ec7b095b93d10..a7579b3eae69f3b706094693d9b0edaec049e83b 100644
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -189,6 +189,9 @@
@@ -167,7 +167,7 @@ index d49c6fbf1bf83b832795fa674f6b41f223eef812..7ea3540947ff5f61b15f27fbf4b95564
const transportProvider = {
setListener(upgradeListener) {
diff --git a/docshell/base/BrowsingContext.cpp b/docshell/base/BrowsingContext.cpp
-index db5b5b990727aefcbaa47f89e0f53f4048e60038..bcd2321f46d9bca719fc530054984a2163c21f86 100644
+index e1721f31d491aa8a7977eaca3d2f7f8a048546de..b3bc2d575dc3f794cbc08c603e70d34bbe69efed 100644
--- a/docshell/base/BrowsingContext.cpp
+++ b/docshell/base/BrowsingContext.cpp
@@ -106,8 +106,15 @@ struct ParamTraits
@@ -188,7 +188,7 @@ index db5b5b990727aefcbaa47f89e0f53f4048e60038..bcd2321f46d9bca719fc530054984a21
template <>
struct ParamTraits
-@@ -2807,6 +2814,40 @@ void BrowsingContext::DidSet(FieldIndex,
+@@ -2818,6 +2825,40 @@ void BrowsingContext::DidSet(FieldIndex,
PresContextAffectingFieldChanged();
}
@@ -297,7 +297,7 @@ index 61135ab0d7894c500c3c5d80d107e283c01b6830..cc8eb043f1f78214843ec7b335dd9932
bool CanSet(FieldIndex, bool, ContentParent*) {
diff --git a/docshell/base/CanonicalBrowsingContext.cpp b/docshell/base/CanonicalBrowsingContext.cpp
-index b59a70321b6c5801e4a4f916ee303c999747570b..1eded29480eb4b401327da9ed33a63a18e3297b9 100644
+index f0d8cb25398472d8720fcacc47081d95d3e9887c..a680d4458360c8515712ef0a986415113ae8a4e0 100644
--- a/docshell/base/CanonicalBrowsingContext.cpp
+++ b/docshell/base/CanonicalBrowsingContext.cpp
@@ -324,6 +324,8 @@ void CanonicalBrowsingContext::ReplacedBy(
@@ -323,7 +323,7 @@ index b59a70321b6c5801e4a4f916ee303c999747570b..1eded29480eb4b401327da9ed33a63a1
}
diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
-index 354b2c0d66976fd7fd431902bfc7816131602496..7948aa03c8fd865bf7953faaeea2bda84ade04c8 100644
+index c15a424a05d23287ee21726a5fb21ff5691e4c2b..fa9989e313bbb7bf049ce1519733c4032e9f9b4b 100644
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -15,6 +15,12 @@
@@ -600,7 +600,7 @@ index 354b2c0d66976fd7fd431902bfc7816131602496..7948aa03c8fd865bf7953faaeea2bda8
NS_IMETHODIMP
nsDocShell::GetIsNavigating(bool* aOut) {
*aOut = mIsNavigating;
-@@ -4734,7 +4959,7 @@ nsDocShell::GetVisibility(bool* aVisibility) {
+@@ -4739,7 +4964,7 @@ nsDocShell::GetVisibility(bool* aVisibility) {
}
void nsDocShell::ActivenessMaybeChanged() {
@@ -609,7 +609,7 @@ index 354b2c0d66976fd7fd431902bfc7816131602496..7948aa03c8fd865bf7953faaeea2bda8
if (RefPtr presShell = GetPresShell()) {
presShell->ActivenessMaybeChanged();
}
-@@ -6672,6 +6897,10 @@ bool nsDocShell::CanSavePresentation(uint32_t aLoadType,
+@@ -6688,6 +6913,10 @@ bool nsDocShell::CanSavePresentation(uint32_t aLoadType,
return false; // no entry to save into
}
@@ -620,7 +620,7 @@ index 354b2c0d66976fd7fd431902bfc7816131602496..7948aa03c8fd865bf7953faaeea2bda8
MOZ_ASSERT(!mozilla::SessionHistoryInParent(),
"mOSHE cannot be non-null with SHIP");
nsCOMPtr viewer = mOSHE->GetDocumentViewer();
-@@ -8401,6 +8630,12 @@ nsresult nsDocShell::PerformRetargeting(nsDocShellLoadState* aLoadState) {
+@@ -8420,6 +8649,12 @@ nsresult nsDocShell::PerformRetargeting(nsDocShellLoadState* aLoadState) {
true, // aForceNoOpener
getter_AddRefs(newBC));
MOZ_ASSERT(!newBC);
@@ -633,7 +633,7 @@ index 354b2c0d66976fd7fd431902bfc7816131602496..7948aa03c8fd865bf7953faaeea2bda8
return rv;
}
-@@ -9533,6 +9768,16 @@ nsresult nsDocShell::InternalLoad(nsDocShellLoadState* aLoadState,
+@@ -9556,6 +9791,16 @@ nsresult nsDocShell::InternalLoad(nsDocShellLoadState* aLoadState,
nsINetworkPredictor::PREDICT_LOAD, attrs, nullptr);
nsCOMPtr req;
@@ -650,7 +650,7 @@ index 354b2c0d66976fd7fd431902bfc7816131602496..7948aa03c8fd865bf7953faaeea2bda8
rv = DoURILoad(aLoadState, aCacheKey, getter_AddRefs(req));
if (NS_SUCCEEDED(rv)) {
-@@ -12710,6 +12955,9 @@ class OnLinkClickEvent : public Runnable {
+@@ -12754,6 +12999,9 @@ class OnLinkClickEvent : public Runnable {
mHandler->OnLinkClickSync(mContent, mLoadState, mNoOpenerImplied,
mTriggeringPrincipal);
}
@@ -660,7 +660,7 @@ index 354b2c0d66976fd7fd431902bfc7816131602496..7948aa03c8fd865bf7953faaeea2bda8
return NS_OK;
}
-@@ -12792,6 +13040,8 @@ nsresult nsDocShell::OnLinkClick(
+@@ -12843,6 +13091,8 @@ nsresult nsDocShell::OnLinkClick(
nsCOMPtr ev =
new OnLinkClickEvent(this, aContent, loadState, noOpenerImplied,
aIsTrusted, aTriggeringPrincipal);
@@ -781,10 +781,10 @@ index fdc04f16c6f547077ad8c872f9357d85d4513c50..199f8fdb0670265c715f99f5cac1a2b2
* This attempts to save any applicable layout history state (like
* scroll position) in the nsISHEntry. This is normally done
diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp
-index c6cb09e1955d371cd19f563b30b486bcc2318304..d836946872b8e32360a925be5084472191e04f05 100644
+index 79f3524037e954eb693e2882d91a7632e6e1df41..2b75a1eaff4d166f68ca4a943e10cf9c6ab28bbf 100644
--- a/dom/base/Document.cpp
+++ b/dom/base/Document.cpp
-@@ -3674,6 +3674,9 @@ void Document::SendToConsole(nsCOMArray& aMessages) {
+@@ -3783,6 +3783,9 @@ void Document::SendToConsole(nsCOMArray& aMessages) {
}
void Document::ApplySettingsFromCSP(bool aSpeculative) {
@@ -794,7 +794,7 @@ index c6cb09e1955d371cd19f563b30b486bcc2318304..d836946872b8e32360a925be50844721
nsresult rv = NS_OK;
if (!aSpeculative) {
// 1) apply settings from regular CSP
-@@ -3731,6 +3734,11 @@ nsresult Document::InitCSP(nsIChannel* aChannel) {
+@@ -3840,6 +3843,11 @@ nsresult Document::InitCSP(nsIChannel* aChannel) {
MOZ_ASSERT(!mScriptGlobalObject,
"CSP must be initialized before mScriptGlobalObject is set!");
@@ -806,7 +806,7 @@ index c6cb09e1955d371cd19f563b30b486bcc2318304..d836946872b8e32360a925be50844721
// If this is a data document - no need to set CSP.
if (mLoadedAsData) {
return NS_OK;
-@@ -4501,6 +4509,10 @@ bool Document::HasFocus(ErrorResult& rv) const {
+@@ -4641,6 +4649,10 @@ bool Document::HasFocus(ErrorResult& rv) const {
return false;
}
@@ -817,7 +817,7 @@ index c6cb09e1955d371cd19f563b30b486bcc2318304..d836946872b8e32360a925be50844721
if (!fm->IsInActiveWindow(bc)) {
return false;
}
-@@ -18878,6 +18890,66 @@ ColorScheme Document::PreferredColorScheme(IgnoreRFP aIgnoreRFP) const {
+@@ -19139,6 +19151,66 @@ ColorScheme Document::PreferredColorScheme(IgnoreRFP aIgnoreRFP) const {
return PreferenceSheet::PrefsFor(*this).mColorScheme;
}
@@ -885,10 +885,10 @@ index c6cb09e1955d371cd19f563b30b486bcc2318304..d836946872b8e32360a925be50844721
if (!sLoadingForegroundTopLevelContentDocument) {
return false;
diff --git a/dom/base/Document.h b/dom/base/Document.h
-index 7eea29947d91f6b99363d7bf4c69f4e7b3276636..227314db13631b825b9b0701e8f9e5e630f78a72 100644
+index 7a8d8f2a716fc613c4095eaf1a18017887b9b924..e030e6b7ad63ad7c95227ed8f54e946190a638d8 100644
--- a/dom/base/Document.h
+++ b/dom/base/Document.h
-@@ -4035,6 +4035,9 @@ class Document : public nsINode,
+@@ -4077,6 +4077,9 @@ class Document : public nsINode,
// color-scheme meta tag.
ColorScheme DefaultColorScheme() const;
@@ -899,7 +899,7 @@ index 7eea29947d91f6b99363d7bf4c69f4e7b3276636..227314db13631b825b9b0701e8f9e5e6
static bool AutomaticStorageAccessPermissionCanBeGranted(
diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp
-index a7229fe412644212747646bee5e111cb427bab52..4fdefb186804ed39d4670cca32e495d95f3546d6 100644
+index e26e0968c11905a39bfcfeea60b4989126780084..376165771df0e215d9e1c78ae5d3669e525bcf31 100644
--- a/dom/base/Navigator.cpp
+++ b/dom/base/Navigator.cpp
@@ -344,14 +344,18 @@ void Navigator::GetAppName(nsAString& aAppName) const {
@@ -938,7 +938,7 @@ index a7229fe412644212747646bee5e111cb427bab52..4fdefb186804ed39d4670cca32e495d9
// The returned value is cached by the binding code. The window listens to the
// accept languages change and will clear the cache when needed. It has to
-@@ -2308,7 +2318,8 @@ bool Navigator::Webdriver() {
+@@ -2307,7 +2317,8 @@ bool Navigator::Webdriver() {
}
#endif
@@ -949,7 +949,7 @@ index a7229fe412644212747646bee5e111cb427bab52..4fdefb186804ed39d4670cca32e495d9
AutoplayPolicy Navigator::GetAutoplayPolicy(AutoplayPolicyMediaType aType) {
diff --git a/dom/base/Navigator.h b/dom/base/Navigator.h
-index 4c400554f9b129f4482b513b46b90b780f2b8796..6efdca2363d83327562751757753abd602c80ddd 100644
+index 6abf6cef230c97815f17f6b7abf9f1b1de274a6f..46ead1f32e0d710b5b32e61dff72a4f772d5421e 100644
--- a/dom/base/Navigator.h
+++ b/dom/base/Navigator.h
@@ -218,7 +218,7 @@ class Navigator final : public nsISupports, public nsWrapperCache {
@@ -962,10 +962,10 @@ index 4c400554f9b129f4482b513b46b90b780f2b8796..6efdca2363d83327562751757753abd6
dom::MediaCapabilities* MediaCapabilities();
dom::MediaSession* MediaSession();
diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp
-index 1edbffd5353a77fd84bc9abecb0628557512fa67..33376c1d44dbc0561c210e48401d6b173924067d 100644
+index 8518005d2938d35da7681c1b4230cacbe8fbaf03..e501e7e3351b6f5bdd07020dea658b9f8508b126 100644
--- a/dom/base/nsContentUtils.cpp
+++ b/dom/base/nsContentUtils.cpp
-@@ -8796,7 +8796,8 @@ nsresult nsContentUtils::SendMouseEvent(
+@@ -8809,7 +8809,8 @@ nsresult nsContentUtils::SendMouseEvent(
bool aIgnoreRootScrollFrame, float aPressure,
unsigned short aInputSourceArg, uint32_t aIdentifier, bool aToWindow,
PreventDefaultResult* aPreventDefault, bool aIsDOMEventSynthesized,
@@ -975,67 +975,69 @@ index 1edbffd5353a77fd84bc9abecb0628557512fa67..33376c1d44dbc0561c210e48401d6b17
nsPoint offset;
nsCOMPtr widget = GetWidget(aPresShell, &offset);
if (!widget) return NS_ERROR_FAILURE;
-@@ -8804,6 +8805,7 @@ nsresult nsContentUtils::SendMouseEvent(
+@@ -8817,6 +8818,7 @@ nsresult nsContentUtils::SendMouseEvent(
EventMessage msg;
Maybe exitFrom;
bool contextMenuKey = false;
-+ bool isDragEvent = false;
++ bool isPWDragEventMessage = false;
if (aType.EqualsLiteral("mousedown")) {
msg = eMouseDown;
} else if (aType.EqualsLiteral("mouseup")) {
-@@ -8828,6 +8830,12 @@ nsresult nsContentUtils::SendMouseEvent(
+@@ -8841,6 +8843,12 @@ nsresult nsContentUtils::SendMouseEvent(
msg = eMouseHitTest;
} else if (aType.EqualsLiteral("MozMouseExploreByTouch")) {
msg = eMouseExploreByTouch;
+ } else if (aType.EqualsLiteral("dragover")) {
+ msg = eDragOver;
-+ isDragEvent = true;
++ isPWDragEventMessage = true;
+ } else if (aType.EqualsLiteral("drop")) {
+ msg = eDrop;
-+ isDragEvent = true;
++ isPWDragEventMessage = true;
} else {
return NS_ERROR_FAILURE;
}
-@@ -8836,12 +8844,21 @@ nsresult nsContentUtils::SendMouseEvent(
- aInputSourceArg = MouseEvent_Binding::MOZ_SOURCE_MOUSE;
- }
+@@ -8851,7 +8859,14 @@ nsresult nsContentUtils::SendMouseEvent(
-- WidgetMouseEvent event(true, msg, widget,
-+ std::unique_ptr eventOwner;
-+ if (isDragEvent) {
-+ eventOwner.reset(new WidgetDragEvent(true, msg, widget));
-+ eventOwner->mReason = aIsWidgetEventSynthesized
+ Maybe pointerEvent;
+ Maybe mouseEvent;
+- if (IsPointerEventMessage(msg)) {
++ Maybe pwDragEvent;
++
++ if (isPWDragEventMessage) {
++ pwDragEvent.emplace(true, msg, widget);
++ pwDragEvent->mReason = aIsWidgetEventSynthesized
+ ? WidgetMouseEvent::eSynthesized
+ : WidgetMouseEvent::eReal;
-+ } else {
-+ eventOwner.reset(new WidgetMouseEvent(true, msg, widget,
- aIsWidgetEventSynthesized
- ? WidgetMouseEvent::eSynthesized
- : WidgetMouseEvent::eReal,
- contextMenuKey ? WidgetMouseEvent::eContextMenuKey
-- : WidgetMouseEvent::eNormal);
-+ : WidgetMouseEvent::eNormal));
-+ }
-+ WidgetMouseEvent& event = *eventOwner.get();
- event.pointerId = aIdentifier;
- event.mModifiers = GetWidgetModifiers(aModifiers);
- event.mButton = aButton;
-@@ -8852,8 +8869,10 @@ nsresult nsContentUtils::SendMouseEvent(
- event.mPressure = aPressure;
- event.mInputSource = aInputSourceArg;
- event.mClickCount = aClickCount;
-+ event.mJugglerEventId = aJugglerEventId;
- event.mFlags.mIsSynthesizedForTests = aIsDOMEventSynthesized;
- event.mExitFrom = exitFrom;
-+ event.convertToPointer = convertToPointer;
++ } else if (IsPointerEventMessage(msg)) {
+ MOZ_ASSERT(!aIsWidgetEventSynthesized,
+ "The event shouldn't be dispatched as a synthesized event");
+ if (MOZ_UNLIKELY(aIsWidgetEventSynthesized)) {
+@@ -8870,8 +8885,11 @@ nsresult nsContentUtils::SendMouseEvent(
+ contextMenuKey ? WidgetMouseEvent::eContextMenuKey
+ : WidgetMouseEvent::eNormal);
+ }
++
+ WidgetMouseEvent& mouseOrPointerEvent =
++ pwDragEvent.isSome() ? pwDragEvent.ref() :
+ pointerEvent.isSome() ? pointerEvent.ref() : mouseEvent.ref();
++
+ mouseOrPointerEvent.pointerId = aIdentifier;
+ mouseOrPointerEvent.mModifiers = GetWidgetModifiers(aModifiers);
+ mouseOrPointerEvent.mButton = aButton;
+@@ -8884,6 +8902,8 @@ nsresult nsContentUtils::SendMouseEvent(
+ mouseOrPointerEvent.mClickCount = aClickCount;
+ mouseOrPointerEvent.mFlags.mIsSynthesizedForTests = aIsDOMEventSynthesized;
+ mouseOrPointerEvent.mExitFrom = exitFrom;
++ mouseOrPointerEvent.mJugglerEventId = aJugglerEventId;
++ mouseOrPointerEvent.convertToPointer = convertToPointer;
nsPresContext* presContext = aPresShell->GetPresContext();
if (!presContext) return NS_ERROR_FAILURE;
diff --git a/dom/base/nsContentUtils.h b/dom/base/nsContentUtils.h
-index ef3c1fd7cbb3a6c457ec7d70a50fd412077f4279..bd4e6e5db6273f024684169439fd31e0095b45f4 100644
+index b4b2244ddfbe43efa055788297a103c49989d921..2d22cdf8b25d9ce0e0daabb09f315d61a214a2be 100644
--- a/dom/base/nsContentUtils.h
+++ b/dom/base/nsContentUtils.h
-@@ -3078,7 +3078,8 @@ class nsContentUtils {
+@@ -3047,7 +3047,8 @@ class nsContentUtils {
int32_t aModifiers, bool aIgnoreRootScrollFrame, float aPressure,
unsigned short aInputSourceArg, uint32_t aIdentifier, bool aToWindow,
mozilla::PreventDefaultResult* aPreventDefault,
@@ -1046,10 +1048,10 @@ index ef3c1fd7cbb3a6c457ec7d70a50fd412077f4279..bd4e6e5db6273f024684169439fd31e0
static void FirePageShowEventForFrameLoaderSwap(
nsIDocShellTreeItem* aItem,
diff --git a/dom/base/nsDOMWindowUtils.cpp b/dom/base/nsDOMWindowUtils.cpp
-index 6d611b4a8485325435267c89c88b5511bb37d2f2..13640d6bd8fc34797f5f0088bf12ff016b4b3ae7 100644
+index c77bf80d5e1fc6db342ab47e85b7950f8a15a2d8..2f61c71cdb82b73c1de1a357315d9243a0b8c639 100644
--- a/dom/base/nsDOMWindowUtils.cpp
+++ b/dom/base/nsDOMWindowUtils.cpp
-@@ -684,6 +684,26 @@ nsDOMWindowUtils::GetPresShellId(uint32_t* aPresShellId) {
+@@ -685,6 +685,26 @@ nsDOMWindowUtils::GetPresShellId(uint32_t* aPresShellId) {
return NS_ERROR_FAILURE;
}
@@ -1076,7 +1078,7 @@ index 6d611b4a8485325435267c89c88b5511bb37d2f2..13640d6bd8fc34797f5f0088bf12ff01
NS_IMETHODIMP
nsDOMWindowUtils::SendMouseEvent(
const nsAString& aType, float aX, float aY, int32_t aButton,
-@@ -698,7 +718,7 @@ nsDOMWindowUtils::SendMouseEvent(
+@@ -699,7 +719,7 @@ nsDOMWindowUtils::SendMouseEvent(
aOptionalArgCount >= 7 ? aIdentifier : DEFAULT_MOUSE_POINTER_ID, false,
aPreventDefault, aOptionalArgCount >= 4 ? aIsDOMEventSynthesized : true,
aOptionalArgCount >= 5 ? aIsWidgetEventSynthesized : false,
@@ -1085,7 +1087,7 @@ index 6d611b4a8485325435267c89c88b5511bb37d2f2..13640d6bd8fc34797f5f0088bf12ff01
}
NS_IMETHODIMP
-@@ -716,7 +736,7 @@ nsDOMWindowUtils::SendMouseEventToWindow(
+@@ -717,7 +737,7 @@ nsDOMWindowUtils::SendMouseEventToWindow(
aOptionalArgCount >= 7 ? aIdentifier : DEFAULT_MOUSE_POINTER_ID, true,
nullptr, aOptionalArgCount >= 4 ? aIsDOMEventSynthesized : true,
aOptionalArgCount >= 5 ? aIsWidgetEventSynthesized : false,
@@ -1094,7 +1096,7 @@ index 6d611b4a8485325435267c89c88b5511bb37d2f2..13640d6bd8fc34797f5f0088bf12ff01
}
NS_IMETHODIMP
-@@ -725,13 +745,13 @@ nsDOMWindowUtils::SendMouseEventCommon(
+@@ -726,13 +746,13 @@ nsDOMWindowUtils::SendMouseEventCommon(
int32_t aClickCount, int32_t aModifiers, bool aIgnoreRootScrollFrame,
float aPressure, unsigned short aInputSourceArg, uint32_t aPointerId,
bool aToWindow, bool* aPreventDefault, bool aIsDOMEventSynthesized,
@@ -1111,7 +1113,7 @@ index 6d611b4a8485325435267c89c88b5511bb37d2f2..13640d6bd8fc34797f5f0088bf12ff01
if (aPreventDefault) {
*aPreventDefault = preventDefaultResult != PreventDefaultResult::No;
diff --git a/dom/base/nsDOMWindowUtils.h b/dom/base/nsDOMWindowUtils.h
-index 63968c9b7a4e418e4c0de6e7a75fa215a36a9105..decf3ea3833ccdffd49a7aded2d600f9416e8306 100644
+index 47ff326b202266b1d7d6af8bdfb72776df8a6a93..b8e084b0c788c46345b1455b8257f1719c851404 100644
--- a/dom/base/nsDOMWindowUtils.h
+++ b/dom/base/nsDOMWindowUtils.h
@@ -93,7 +93,7 @@ class nsDOMWindowUtils final : public nsIDOMWindowUtils,
@@ -1124,10 +1126,10 @@ index 63968c9b7a4e418e4c0de6e7a75fa215a36a9105..decf3ea3833ccdffd49a7aded2d600f9
MOZ_CAN_RUN_SCRIPT
nsresult SendTouchEventCommon(
diff --git a/dom/base/nsFocusManager.cpp b/dom/base/nsFocusManager.cpp
-index 587f03849d72d72020e89f4456dec481c9ede9f6..d0a910d3ae25fd4f6545f6d9130c8be04a06ed0e 100644
+index cbd5cb8e4525454cac0470a14bdc63d45bf53b9a..a73297f3faafe5895453f0a6996aa30a77a97267 100644
--- a/dom/base/nsFocusManager.cpp
+++ b/dom/base/nsFocusManager.cpp
-@@ -1684,6 +1684,10 @@ Maybe nsFocusManager::SetFocusInner(Element* aNewContent,
+@@ -1697,6 +1697,10 @@ Maybe nsFocusManager::SetFocusInner(Element* aNewContent,
(GetActiveBrowsingContext() == newRootBrowsingContext);
}
@@ -1138,7 +1140,7 @@ index 587f03849d72d72020e89f4456dec481c9ede9f6..d0a910d3ae25fd4f6545f6d9130c8be0
// Exit fullscreen if a website focuses another window
if (StaticPrefs::full_screen_api_exit_on_windowRaise() &&
!isElementInActiveWindow && (aFlags & FLAG_RAISE)) {
-@@ -2269,6 +2273,7 @@ bool nsFocusManager::BlurImpl(BrowsingContext* aBrowsingContextToClear,
+@@ -2282,6 +2286,7 @@ bool nsFocusManager::BlurImpl(BrowsingContext* aBrowsingContextToClear,
bool aIsLeavingDocument, bool aAdjustWidget,
bool aRemainActive, Element* aElementToFocus,
uint64_t aActionId) {
@@ -1146,7 +1148,7 @@ index 587f03849d72d72020e89f4456dec481c9ede9f6..d0a910d3ae25fd4f6545f6d9130c8be0
LOGFOCUS(("<>", aActionId));
// hold a reference to the focused content, which may be null
-@@ -2315,6 +2320,11 @@ bool nsFocusManager::BlurImpl(BrowsingContext* aBrowsingContextToClear,
+@@ -2328,6 +2333,11 @@ bool nsFocusManager::BlurImpl(BrowsingContext* aBrowsingContextToClear,
return true;
}
@@ -1158,7 +1160,7 @@ index 587f03849d72d72020e89f4456dec481c9ede9f6..d0a910d3ae25fd4f6545f6d9130c8be0
// Keep a ref to presShell since dispatching the DOM event may cause
// the document to be destroyed.
RefPtr presShell = docShell->GetPresShell();
-@@ -2992,7 +3002,9 @@ void nsFocusManager::RaiseWindow(nsPIDOMWindowOuter* aWindow,
+@@ -3005,7 +3015,9 @@ void nsFocusManager::RaiseWindow(nsPIDOMWindowOuter* aWindow,
}
}
@@ -1170,10 +1172,10 @@ index 587f03849d72d72020e89f4456dec481c9ede9f6..d0a910d3ae25fd4f6545f6d9130c8be0
// care of lowering the present active window. This happens in
// a separate runnable to avoid touching multiple windows in
diff --git a/dom/base/nsGlobalWindowOuter.cpp b/dom/base/nsGlobalWindowOuter.cpp
-index 460ccc17f2cd34f172215aaf5616badaa44f8ca5..d294373ca9b8987dd8bf056f4dae72c27903dcd7 100644
+index f2aa07e2c1e6df28e165b1868ad9717248360972..2b1b406c4fdf6d0716b9c29c3e640de210eae749 100644
--- a/dom/base/nsGlobalWindowOuter.cpp
+++ b/dom/base/nsGlobalWindowOuter.cpp
-@@ -2514,10 +2514,16 @@ nsresult nsGlobalWindowOuter::SetNewDocument(Document* aDocument,
+@@ -2516,10 +2516,16 @@ nsresult nsGlobalWindowOuter::SetNewDocument(Document* aDocument,
}();
if (!isContentAboutBlankInChromeDocshell) {
@@ -1194,7 +1196,7 @@ index 460ccc17f2cd34f172215aaf5616badaa44f8ca5..d294373ca9b8987dd8bf056f4dae72c2
}
}
-@@ -2637,6 +2643,19 @@ void nsGlobalWindowOuter::DispatchDOMWindowCreated() {
+@@ -2639,6 +2645,19 @@ void nsGlobalWindowOuter::DispatchDOMWindowCreated() {
}
}
@@ -1215,10 +1217,10 @@ index 460ccc17f2cd34f172215aaf5616badaa44f8ca5..d294373ca9b8987dd8bf056f4dae72c2
void nsGlobalWindowOuter::SetDocShell(nsDocShell* aDocShell) {
diff --git a/dom/base/nsGlobalWindowOuter.h b/dom/base/nsGlobalWindowOuter.h
-index 0039d6d91b23953afbd6aec2b4d1f064db3c3b1c..7a6c5da16651d34ea60c69331365d94886da1993 100644
+index e2a2b560b565e6eb3cd5b4e77eb30051afe7a418..81eaca3fb0acfe90bf07acb4115a0db0786c6998 100644
--- a/dom/base/nsGlobalWindowOuter.h
+++ b/dom/base/nsGlobalWindowOuter.h
-@@ -314,6 +314,7 @@ class nsGlobalWindowOuter final : public mozilla::dom::EventTarget,
+@@ -317,6 +317,7 @@ class nsGlobalWindowOuter final : public mozilla::dom::EventTarget,
// Outer windows only.
void DispatchDOMWindowCreated();
@@ -1227,10 +1229,10 @@ index 0039d6d91b23953afbd6aec2b4d1f064db3c3b1c..7a6c5da16651d34ea60c69331365d948
// Outer windows only.
virtual void EnsureSizeAndPositionUpToDate() override;
diff --git a/dom/base/nsINode.cpp b/dom/base/nsINode.cpp
-index 600fce143a0e1e35a18b980211686436be08533f..ec6f7c60d0a3756dcf8892e4690281e1a65f9b6a 100644
+index 091d04dd79da3acc33aa22405ddb984ba486dfe2..40bb124fd735c2d214221c1a5fac442e26f7564e 100644
--- a/dom/base/nsINode.cpp
+++ b/dom/base/nsINode.cpp
-@@ -1387,6 +1387,61 @@ void nsINode::GetBoxQuadsFromWindowOrigin(const BoxQuadOptions& aOptions,
+@@ -1402,6 +1402,61 @@ void nsINode::GetBoxQuadsFromWindowOrigin(const BoxQuadOptions& aOptions,
mozilla::GetBoxQuadsFromWindowOrigin(this, aOptions, aResult, aRv);
}
@@ -1293,10 +1295,10 @@ index 600fce143a0e1e35a18b980211686436be08533f..ec6f7c60d0a3756dcf8892e4690281e1
DOMQuad& aQuad, const GeometryNode& aFrom,
const ConvertCoordinateOptions& aOptions, CallerType aCallerType,
diff --git a/dom/base/nsINode.h b/dom/base/nsINode.h
-index 2906bbb56c86cd287620b4bd067366f6703299d7..06697f07c7544c816181fa9849ce178bf38303aa 100644
+index 3bc7ff8a3d9e7f3148f51da13f34ea1b3ca2ba77..dcb47740ca93ab237e4f55d4225f77283f5f404b 100644
--- a/dom/base/nsINode.h
+++ b/dom/base/nsINode.h
-@@ -2282,6 +2282,10 @@ class nsINode : public mozilla::dom::EventTarget {
+@@ -2317,6 +2317,10 @@ class nsINode : public mozilla::dom::EventTarget {
nsTArray>& aResult,
ErrorResult& aRv);
@@ -1308,10 +1310,10 @@ index 2906bbb56c86cd287620b4bd067366f6703299d7..06697f07c7544c816181fa9849ce178b
DOMQuad& aQuad, const TextOrElementOrDocument& aFrom,
const ConvertCoordinateOptions& aOptions, CallerType aCallerType,
diff --git a/dom/base/nsJSUtils.cpp b/dom/base/nsJSUtils.cpp
-index cf8037cd580013efe5eb578c43f45c0d21946c6a..583460796fdef633e8075013597f7c315ce4ab06 100644
+index 48df3ae2d30b975269d06e6354b143abd3e5fcd8..87c8d237355668b0ff324f49be879219b1761083 100644
--- a/dom/base/nsJSUtils.cpp
+++ b/dom/base/nsJSUtils.cpp
-@@ -177,6 +177,11 @@ bool nsJSUtils::GetScopeChainForElement(
+@@ -149,6 +149,11 @@ bool nsJSUtils::GetScopeChainForElement(
return true;
}
@@ -1324,10 +1326,10 @@ index cf8037cd580013efe5eb578c43f45c0d21946c6a..583460796fdef633e8075013597f7c31
void nsJSUtils::ResetTimeZone() { JS::ResetTimeZone(); }
diff --git a/dom/base/nsJSUtils.h b/dom/base/nsJSUtils.h
-index cceb725d393d5e5f83c8f87491089c3fa1d57cc3..e906a7fb7c3fd72554613f640dcc272e6984d929 100644
+index 8b4c1492c64884d83eb1553bc40b921e0da601b7..ee66eaa21d8e8c208204ef73fca5b3d78abefb24 100644
--- a/dom/base/nsJSUtils.h
+++ b/dom/base/nsJSUtils.h
-@@ -79,6 +79,7 @@ class nsJSUtils {
+@@ -71,6 +71,7 @@ class nsJSUtils {
JSContext* aCx, mozilla::dom::Element* aElement,
JS::MutableHandleVector aScopeChain);
@@ -1336,7 +1338,7 @@ index cceb725d393d5e5f83c8f87491089c3fa1d57cc3..e906a7fb7c3fd72554613f640dcc272e
static bool DumpEnabled();
diff --git a/dom/chrome-webidl/BrowsingContext.webidl b/dom/chrome-webidl/BrowsingContext.webidl
-index d70f3e18cc8e8f749e5057297161206129871453..2f2be2a6539203d1957bfe580a06ab70a512c053 100644
+index 864890f6a23b21a2a59687e4e2873b6837c05fbb..a34005c323d4b8e35b5bdb2b6eec2a268f8adc4b 100644
--- a/dom/chrome-webidl/BrowsingContext.webidl
+++ b/dom/chrome-webidl/BrowsingContext.webidl
@@ -53,6 +53,24 @@ enum PrefersColorSchemeOverride {
@@ -1378,10 +1380,10 @@ index d70f3e18cc8e8f749e5057297161206129871453..2f2be2a6539203d1957bfe580a06ab70
* A unique identifier for the browser element that is hosting this
* BrowsingContext tree. Every BrowsingContext in the element's tree will
diff --git a/dom/geolocation/Geolocation.cpp b/dom/geolocation/Geolocation.cpp
-index cb9107deb1acfc6f9f3efe87144fcd9bbccd9231..5034c066db8e13dbd01b9bbe79ac2447135f3360 100644
+index 21717aba5547b973e439ae9ba525f358d044d3f8..274cdebc2e0a2eb9f8b7743d24921204a417f76d 100644
--- a/dom/geolocation/Geolocation.cpp
+++ b/dom/geolocation/Geolocation.cpp
-@@ -23,6 +23,7 @@
+@@ -24,6 +24,7 @@
#include "nsComponentManagerUtils.h"
#include "nsContentPermissionHelper.h"
#include "nsContentUtils.h"
@@ -1389,7 +1391,7 @@ index cb9107deb1acfc6f9f3efe87144fcd9bbccd9231..5034c066db8e13dbd01b9bbe79ac2447
#include "nsGlobalWindowInner.h"
#include "mozilla/dom/Document.h"
#include "nsINamed.h"
-@@ -256,10 +257,8 @@ nsGeolocationRequest::Allow(JS::Handle aChoices) {
+@@ -264,10 +265,8 @@ nsGeolocationRequest::Allow(JS::Handle aChoices) {
return NS_OK;
}
@@ -1402,7 +1404,7 @@ index cb9107deb1acfc6f9f3efe87144fcd9bbccd9231..5034c066db8e13dbd01b9bbe79ac2447
CachedPositionAndAccuracy lastPosition = gs->GetCachedPosition();
if (lastPosition.position) {
EpochTimeStamp cachedPositionTime_ms;
-@@ -437,8 +436,7 @@ void nsGeolocationRequest::Shutdown() {
+@@ -475,8 +474,7 @@ void nsGeolocationRequest::Shutdown() {
// If there are no other high accuracy requests, the geolocation service will
// notify the provider to switch to the default accuracy.
if (mOptions && mOptions->mEnableHighAccuracy) {
@@ -1412,7 +1414,7 @@ index cb9107deb1acfc6f9f3efe87144fcd9bbccd9231..5034c066db8e13dbd01b9bbe79ac2447
if (gs) {
gs->UpdateAccuracy();
}
-@@ -727,8 +725,14 @@ void nsGeolocationService::StopDevice() {
+@@ -785,8 +783,14 @@ void nsGeolocationService::StopDevice() {
StaticRefPtr nsGeolocationService::sService;
already_AddRefed
@@ -1428,7 +1430,7 @@ index cb9107deb1acfc6f9f3efe87144fcd9bbccd9231..5034c066db8e13dbd01b9bbe79ac2447
if (nsGeolocationService::sService) {
result = nsGeolocationService::sService;
-@@ -820,7 +824,9 @@ nsresult Geolocation::Init(nsPIDOMWindowInner* aContentDom) {
+@@ -878,7 +882,9 @@ nsresult Geolocation::Init(nsPIDOMWindowInner* aContentDom) {
// If no aContentDom was passed into us, we are being used
// by chrome/c++ and have no mOwner, no mPrincipal, and no need
// to prompt.
@@ -1477,17 +1479,17 @@ index 7e1af00d05fbafa2d828e2c7e4dcc5c82d115f5b..e85af9718d064e4d2865bc944e9d4ba1
~Geolocation();
diff --git a/dom/html/HTMLInputElement.cpp b/dom/html/HTMLInputElement.cpp
-index 30093e5d408caa054a04adddf63ce2bec384eed6..2852746b6f5b50981dba29a65ce25c1fd55390e3 100644
+index d40c2a230c8c86f585935061d05e20b405c906fe..29547e7a0d75fdc8b8b30344db32287424e65fba 100644
--- a/dom/html/HTMLInputElement.cpp
+++ b/dom/html/HTMLInputElement.cpp
-@@ -57,6 +57,7 @@
+@@ -60,6 +60,7 @@
#include "mozilla/dom/Document.h"
#include "mozilla/dom/HTMLDataListElement.h"
#include "mozilla/dom/HTMLOptionElement.h"
+#include "nsDocShell.h"
- #include "nsIFormControlFrame.h"
- #include "nsITextControlFrame.h"
#include "nsIFrame.h"
+ #include "nsRangeFrame.h"
+ #include "nsError.h"
@@ -783,6 +784,13 @@ nsresult HTMLInputElement::InitFilePicker(FilePickerType aType) {
return NS_ERROR_FAILURE;
}
@@ -1499,14 +1501,14 @@ index 30093e5d408caa054a04adddf63ce2bec384eed6..2852746b6f5b50981dba29a65ce25c1f
+ return NS_OK;
+ }
+
- if (IsPopupBlocked(doc)) {
+ if (IsPickerBlocked(doc)) {
return NS_OK;
}
diff --git a/dom/interfaces/base/nsIDOMWindowUtils.idl b/dom/interfaces/base/nsIDOMWindowUtils.idl
-index 9d185e8e7edcde63f0d2e0c05a32dfddaf71609c..9d48d2e33575c7f214152c6f8140f9a3a3313b44 100644
+index 89202fa1ff22593e7cb5e20fc40b3b3b8e114449..61ed40c8454c6e85876cbc7c240496cc96f77239 100644
--- a/dom/interfaces/base/nsIDOMWindowUtils.idl
+++ b/dom/interfaces/base/nsIDOMWindowUtils.idl
-@@ -373,6 +373,26 @@ interface nsIDOMWindowUtils : nsISupports {
+@@ -374,6 +374,26 @@ interface nsIDOMWindowUtils : nsISupports {
[optional] in long aButtons,
[optional] in unsigned long aIdentifier);
@@ -1534,10 +1536,10 @@ index 9d185e8e7edcde63f0d2e0c05a32dfddaf71609c..9d48d2e33575c7f214152c6f8140f9a3
* touchstart, touchend, touchmove, and touchcancel
*
diff --git a/dom/ipc/BrowserChild.cpp b/dom/ipc/BrowserChild.cpp
-index 27fb1239dbd2a635688d022602d4a49dfff0560a..39f9dd48eef038503a50632c5e1395fecea6cae3 100644
+index 0335a887fe157210f9eef58bf63be879f7d5de2b..dfbb8dae406f9d9276a2719f515ac5a51f8a671d 100644
--- a/dom/ipc/BrowserChild.cpp
+++ b/dom/ipc/BrowserChild.cpp
-@@ -1639,6 +1639,21 @@ void BrowserChild::HandleRealMouseButtonEvent(const WidgetMouseEvent& aEvent,
+@@ -1656,6 +1656,21 @@ void BrowserChild::HandleRealMouseButtonEvent(const WidgetMouseEvent& aEvent,
if (postLayerization) {
postLayerization->Register();
}
@@ -1820,7 +1822,7 @@ index 3b39538e51840cd9b1685b2efd2ff2e9ec83608a..c7bf4f2d53b58bbacb22b3ebebf6f3fc
return aGlobalOrNull;
diff --git a/dom/security/nsCSPUtils.cpp b/dom/security/nsCSPUtils.cpp
-index f4aecfaf44d40d651f816c56db4b46c605754132..ef017504972454c12de7d6a7ff38a76a8253a62d 100644
+index ff2e907c0d8fc05c6e39fae612eceed405b62712..40ec25b5588a1628f9d9bd16886bed83dad49b90 100644
--- a/dom/security/nsCSPUtils.cpp
+++ b/dom/security/nsCSPUtils.cpp
@@ -22,6 +22,7 @@
@@ -1867,10 +1869,10 @@ index 2f71b284ee5f7e11f117c447834b48355784448c..2640bd57123c2b03bf4b06a2419cd020
* returned quads are further translated relative to the window
* origin -- which is not the layout origin. Further translation
diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp
-index 4a7ebb25233ce685e73d53085e22337e9ad8bc59..0b7b24a4da5511ff2fa6695eb55f5533b2e574ab 100644
+index 1ba2051ed316956a5a71f85ed5fa0735d54716e5..c0d6f45ce14040a79cfe134a4f8254434a4c53cc 100644
--- a/dom/workers/RuntimeService.cpp
+++ b/dom/workers/RuntimeService.cpp
-@@ -998,7 +998,7 @@ void PrefLanguagesChanged(const char* /* aPrefName */, void* /* aClosure */) {
+@@ -1007,7 +1007,7 @@ void PrefLanguagesChanged(const char* /* aPrefName */, void* /* aClosure */) {
AssertIsOnMainThread();
nsTArray languages;
@@ -1879,7 +1881,7 @@ index 4a7ebb25233ce685e73d53085e22337e9ad8bc59..0b7b24a4da5511ff2fa6695eb55f5533
RuntimeService* runtime = RuntimeService::GetService();
if (runtime) {
-@@ -1185,8 +1185,7 @@ bool RuntimeService::RegisterWorker(WorkerPrivate& aWorkerPrivate) {
+@@ -1194,8 +1194,7 @@ bool RuntimeService::RegisterWorker(WorkerPrivate& aWorkerPrivate) {
}
// The navigator overridden properties should have already been read.
@@ -1889,7 +1891,7 @@ index 4a7ebb25233ce685e73d53085e22337e9ad8bc59..0b7b24a4da5511ff2fa6695eb55f5533
mNavigatorPropertiesLoaded = true;
}
-@@ -1795,6 +1794,13 @@ void RuntimeService::PropagateStorageAccessPermissionGranted(
+@@ -1817,6 +1816,13 @@ void RuntimeService::PropagateStorageAccessPermissionGranted(
}
}
@@ -1903,7 +1905,7 @@ index 4a7ebb25233ce685e73d53085e22337e9ad8bc59..0b7b24a4da5511ff2fa6695eb55f5533
template
void RuntimeService::BroadcastAllWorkers(const Func& aFunc) {
AssertIsOnMainThread();
-@@ -2314,6 +2320,14 @@ void PropagateStorageAccessPermissionGrantedToWorkers(
+@@ -2342,6 +2348,14 @@ void PropagateStorageAccessPermissionGrantedToWorkers(
}
}
@@ -1919,10 +1921,10 @@ index 4a7ebb25233ce685e73d53085e22337e9ad8bc59..0b7b24a4da5511ff2fa6695eb55f5533
MOZ_ASSERT(!NS_IsMainThread());
MOZ_ASSERT(aCx);
diff --git a/dom/workers/RuntimeService.h b/dom/workers/RuntimeService.h
-index f51076ac1480794989999d00577bc9cf1566d5f9..fe15b2e00dc8f0bf203f2af9aad86e16c996d43d 100644
+index 534bbe9ec4f0261189eb3322c1229c1eb5d8802e..6aa99b64fdbbff3704602e944b129879fbdf8c15 100644
--- a/dom/workers/RuntimeService.h
+++ b/dom/workers/RuntimeService.h
-@@ -109,6 +109,8 @@ class RuntimeService final : public nsIObserver {
+@@ -112,6 +112,8 @@ class RuntimeService final : public nsIObserver {
void PropagateStorageAccessPermissionGranted(
const nsPIDOMWindowInner& aWindow);
@@ -1932,10 +1934,10 @@ index f51076ac1480794989999d00577bc9cf1566d5f9..fe15b2e00dc8f0bf203f2af9aad86e16
return mNavigatorProperties;
}
diff --git a/dom/workers/WorkerCommon.h b/dom/workers/WorkerCommon.h
-index d10dabb5c5ff8e17851edf2bd2efc08e74584d8e..53c4070c5fde43b27fb8fbfdcf4c23d8af57fba3 100644
+index 58894a8361c7ef1dddd481ca5877a209a8b8ff5c..c481d40d79b6397b7f1d571bd9f6ae5c0a946217 100644
--- a/dom/workers/WorkerCommon.h
+++ b/dom/workers/WorkerCommon.h
-@@ -44,6 +44,8 @@ void ResumeWorkersForWindow(const nsPIDOMWindowInner& aWindow);
+@@ -47,6 +47,8 @@ void ResumeWorkersForWindow(const nsPIDOMWindowInner& aWindow);
void PropagateStorageAccessPermissionGrantedToWorkers(
const nsPIDOMWindowInner& aWindow);
@@ -1945,10 +1947,10 @@ index d10dabb5c5ff8e17851edf2bd2efc08e74584d8e..53c4070c5fde43b27fb8fbfdcf4c23d8
bool IsWorkerGlobal(JSObject* global);
diff --git a/dom/workers/WorkerPrivate.cpp b/dom/workers/WorkerPrivate.cpp
-index 7fbfdb0eeed2fc9d9a6ba12192150d5bdeed40b3..c31ae2724d09036ec2ba0b71cd94f648e9b90868 100644
+index 2b48cc2980165ce51ded62faef96b93b781ede32..d8dc90983353c2f5cc1db56e327c4533d524cc1d 100644
--- a/dom/workers/WorkerPrivate.cpp
+++ b/dom/workers/WorkerPrivate.cpp
-@@ -682,6 +682,18 @@ class UpdateContextOptionsRunnable final : public WorkerControlRunnable {
+@@ -700,6 +700,18 @@ class UpdateContextOptionsRunnable final : public WorkerControlRunnable {
}
};
@@ -1967,7 +1969,7 @@ index 7fbfdb0eeed2fc9d9a6ba12192150d5bdeed40b3..c31ae2724d09036ec2ba0b71cd94f648
class UpdateLanguagesRunnable final : public WorkerThreadRunnable {
nsTArray mLanguages;
-@@ -2091,6 +2103,16 @@ void WorkerPrivate::UpdateContextOptions(
+@@ -2113,6 +2125,16 @@ void WorkerPrivate::UpdateContextOptions(
}
}
@@ -1984,7 +1986,7 @@ index 7fbfdb0eeed2fc9d9a6ba12192150d5bdeed40b3..c31ae2724d09036ec2ba0b71cd94f648
void WorkerPrivate::UpdateLanguages(const nsTArray& aLanguages) {
AssertIsOnParentThread();
-@@ -5667,6 +5689,15 @@ void WorkerPrivate::UpdateContextOptionsInternal(
+@@ -5740,6 +5762,15 @@ void WorkerPrivate::UpdateContextOptionsInternal(
}
}
@@ -2001,10 +2003,10 @@ index 7fbfdb0eeed2fc9d9a6ba12192150d5bdeed40b3..c31ae2724d09036ec2ba0b71cd94f648
const nsTArray& aLanguages) {
WorkerGlobalScope* globalScope = GlobalScope();
diff --git a/dom/workers/WorkerPrivate.h b/dom/workers/WorkerPrivate.h
-index 57212e01fb75da52187195acfbe052b19464286a..bc75882ee661d5c987187cd11b388443227d59bc 100644
+index da25a495a8930f7b88958553164d86fe2869416f..38f92829438ead78d73d96ee48a3fcab46c337d7 100644
--- a/dom/workers/WorkerPrivate.h
+++ b/dom/workers/WorkerPrivate.h
-@@ -418,6 +418,8 @@ class WorkerPrivate final
+@@ -432,6 +432,8 @@ class WorkerPrivate final
void UpdateContextOptionsInternal(JSContext* aCx,
const JS::ContextOptions& aContextOptions);
@@ -2013,7 +2015,7 @@ index 57212e01fb75da52187195acfbe052b19464286a..bc75882ee661d5c987187cd11b388443
void UpdateLanguagesInternal(const nsTArray& aLanguages);
void UpdateJSWorkerMemoryParameterInternal(JSContext* aCx, JSGCParamKey key,
-@@ -1045,6 +1047,8 @@ class WorkerPrivate final
+@@ -1069,6 +1071,8 @@ class WorkerPrivate final
void UpdateContextOptions(const JS::ContextOptions& aContextOptions);
@@ -2245,10 +2247,10 @@ index 0ec6ee3eb37c6493d8a25352fd0e54e1927bceab..885dba71bc5815e5f6f3ec2700c376aa
// No boxes to return
return;
diff --git a/layout/base/PresShell.cpp b/layout/base/PresShell.cpp
-index 6e588cff05c8d6fdaec53a980fce1bc8d2141953..a173b1154e171d7fa5454b27baf85f72a09501a6 100644
+index 2cc3c5673e246ac38cdaddb457ce36ee4c7356ce..61093cd52fc049ad77d84dd837731071fdace69d 100644
--- a/layout/base/PresShell.cpp
+++ b/layout/base/PresShell.cpp
-@@ -11063,7 +11063,9 @@ bool PresShell::ComputeActiveness() const {
+@@ -11163,7 +11163,9 @@ bool PresShell::ComputeActiveness() const {
if (!browserChild->IsVisible()) {
MOZ_LOG(gLog, LogLevel::Debug,
(" > BrowserChild %p is not visible", browserChild));
@@ -2260,7 +2262,7 @@ index 6e588cff05c8d6fdaec53a980fce1bc8d2141953..a173b1154e171d7fa5454b27baf85f72
// If the browser is visible but just due to be preserving layers
diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp
-index 2ed62888d70663f3560fcaa9bc29ff98cb44c323..f5540c38df6a064094e013c841d943c63049dd75 100644
+index d8995d6d94f5861d8ed839613768eb269b44e362..b946de49a0ecab449a9d1aff24c38f69a431eec0 100644
--- a/layout/base/nsLayoutUtils.cpp
+++ b/layout/base/nsLayoutUtils.cpp
@@ -698,6 +698,10 @@ bool nsLayoutUtils::AllowZoomingForDocument(
@@ -2274,7 +2276,7 @@ index 2ed62888d70663f3560fcaa9bc29ff98cb44c323..f5540c38df6a064094e013c841d943c6
// True if we allow zooming for all documents on this platform, or if we are
// in RDM.
BrowsingContext* bc = aDocument->GetBrowsingContext();
-@@ -9794,6 +9798,9 @@ void nsLayoutUtils::ComputeSystemFont(nsFont* aSystemFont,
+@@ -9768,6 +9772,9 @@ void nsLayoutUtils::ComputeSystemFont(nsFont* aSystemFont,
/* static */
bool nsLayoutUtils::ShouldHandleMetaViewport(const Document* aDocument) {
@@ -2285,10 +2287,10 @@ index 2ed62888d70663f3560fcaa9bc29ff98cb44c323..f5540c38df6a064094e013c841d943c6
return StaticPrefs::dom_meta_viewport_enabled() || (bc && bc->InRDMPane());
}
diff --git a/layout/style/GeckoBindings.h b/layout/style/GeckoBindings.h
-index d273793fc8d92b5c19ec0562730eab249cc41eb8..46b4078c6031318265a8338e01f52ab60bd9c0e8 100644
+index c18d38d8ad2f80bb0d3512d1a9ae965c594bb356..22736c86eb5e3d0a44563c312e34032c157f3abe 100644
--- a/layout/style/GeckoBindings.h
+++ b/layout/style/GeckoBindings.h
-@@ -596,6 +596,7 @@ float Gecko_MediaFeatures_GetResolution(const mozilla::dom::Document*);
+@@ -595,6 +595,7 @@ float Gecko_MediaFeatures_GetResolution(const mozilla::dom::Document*);
bool Gecko_MediaFeatures_PrefersReducedMotion(const mozilla::dom::Document*);
bool Gecko_MediaFeatures_PrefersReducedTransparency(
const mozilla::dom::Document*);
@@ -2318,20 +2320,20 @@ index cc86d1abf6ccfe48530607c41cd675612cbe5582..8cce20c719fee8a0480ae6ea1fd53c66
bool Gecko_MediaFeatures_PrefersReducedTransparency(const Document* aDocument) {
diff --git a/netwerk/base/LoadInfo.cpp b/netwerk/base/LoadInfo.cpp
-index 5ff1c5ad8b265f25ab5a18a639e4e5b420d93443..a788218d4f281daee274d14b7dd15f4c19eeddce 100644
+index 21d5a5e1b4193d058c30268ab73c8d595436b381..11b960ec0ff3ea77857cb915d05bbdbb6772bb37 100644
--- a/netwerk/base/LoadInfo.cpp
+++ b/netwerk/base/LoadInfo.cpp
-@@ -691,7 +691,8 @@ LoadInfo::LoadInfo(const LoadInfo& rhs)
- mInterceptionInfo(rhs.mInterceptionInfo),
+@@ -693,7 +693,8 @@ LoadInfo::LoadInfo(const LoadInfo& rhs)
mHasInjectedCookieForCookieBannerHandling(
rhs.mHasInjectedCookieForCookieBannerHandling),
-- mWasSchemelessInput(rhs.mWasSchemelessInput) {
-+ mWasSchemelessInput(rhs.mWasSchemelessInput),
+ mWasSchemelessInput(rhs.mWasSchemelessInput),
+- mHttpsUpgradeTelemetry(rhs.mHttpsUpgradeTelemetry) {
++ mHttpsUpgradeTelemetry(rhs.mHttpsUpgradeTelemetry),
+ mJugglerLoadIdentifier(rhs.mJugglerLoadIdentifier) {
}
LoadInfo::LoadInfo(
-@@ -2416,4 +2417,16 @@ LoadInfo::SetWasSchemelessInput(bool aWasSchemelessInput) {
+@@ -2461,4 +2462,16 @@ LoadInfo::SetHttpsUpgradeTelemetry(
return NS_OK;
}
@@ -2349,23 +2351,26 @@ index 5ff1c5ad8b265f25ab5a18a639e4e5b420d93443..a788218d4f281daee274d14b7dd15f4c
+
} // namespace mozilla::net
diff --git a/netwerk/base/LoadInfo.h b/netwerk/base/LoadInfo.h
-index e6badeeee816bc74af22fb9ef5f88b58f13ac5b7..994216ee9b26e7cbc85b948165051d5d2bc7efb1 100644
+index 6ba1d8e11efbbf75f4a44d4977587429ad1371f8..d834f1f5528264f59c4547f00825e0a3b433d9dd 100644
--- a/netwerk/base/LoadInfo.h
+++ b/netwerk/base/LoadInfo.h
-@@ -408,6 +408,8 @@ class LoadInfo final : public nsILoadInfo {
+@@ -413,9 +413,10 @@ class LoadInfo final : public nsILoadInfo {
bool mHasInjectedCookieForCookieBannerHandling = false;
bool mWasSchemelessInput = false;
+-
+ nsILoadInfo::HTTPSUpgradeTelemetryType mHttpsUpgradeTelemetry =
+ nsILoadInfo::NOT_INITIALIZED;
+
+ uint64_t mJugglerLoadIdentifier = 0;
};
// This is exposed solely for testing purposes and should not be used outside of
diff --git a/netwerk/base/TRRLoadInfo.cpp b/netwerk/base/TRRLoadInfo.cpp
-index 48560a8b3be4ace3aab241373ff1eab0e5bb2187..b2114472b04b4e837b1c7b080ce8718f5f67f43b 100644
+index 9dc2bb0da6871b905abd17d931e555429977c6c2..b71cf6393492346f16417b3ba745a235a483be22 100644
--- a/netwerk/base/TRRLoadInfo.cpp
+++ b/netwerk/base/TRRLoadInfo.cpp
-@@ -870,5 +870,15 @@ TRRLoadInfo::SetWasSchemelessInput(bool aWasSchemelessInput) {
+@@ -903,5 +903,15 @@ TRRLoadInfo::SetHttpsUpgradeTelemetry(
return NS_ERROR_NOT_IMPLEMENTED;
}
@@ -2382,14 +2387,13 @@ index 48560a8b3be4ace3aab241373ff1eab0e5bb2187..b2114472b04b4e837b1c7b080ce8718f
} // namespace net
} // namespace mozilla
diff --git a/netwerk/base/nsILoadInfo.idl b/netwerk/base/nsILoadInfo.idl
-index 8ff5e556c98689542297517a7bdf57e0a2ccf400..b1429dbe180cbc84cf467991bb24124f5857d62b 100644
+index daccd1dc75fb1f6ba88c8f734e10c14cbdbffe8f..9621ca5dc05f12a8d81da787fa479fe03ea99e4c 100644
--- a/netwerk/base/nsILoadInfo.idl
+++ b/netwerk/base/nsILoadInfo.idl
-@@ -1544,4 +1544,6 @@ interface nsILoadInfo : nsISupports
- * Whether the load has gone through the URL bar, where the fixup had to add * the protocol scheme.
+@@ -1590,4 +1590,5 @@ interface nsILoadInfo : nsISupports
*/
- [infallible] attribute boolean wasSchemelessInput;
-+
+ [infallible] attribute nsILoadInfo_HTTPSUpgradeTelemetryType httpsUpgradeTelemetry;
+
+ [infallible] attribute unsigned long long jugglerLoadIdentifier;
};
diff --git a/netwerk/base/nsINetworkInterceptController.idl b/netwerk/base/nsINetworkInterceptController.idl
@@ -2405,19 +2409,19 @@ index 7f91d2df6f8bb4020c75c132dc8f6bf26625fa1e..ba6569f4be8fc54ec96ee44d5de45a09
/**
* Set the status and reason for the forthcoming synthesized response.
diff --git a/netwerk/ipc/DocumentLoadListener.cpp b/netwerk/ipc/DocumentLoadListener.cpp
-index dfd80e8867ec46464ddcfc30316236c824950cb1..a702bbe63cf56984519000854e9f487dcac3cee4 100644
+index ef946929c9bbd7903c8e3b32bcb373d5096aed52..a2814c5c891e2877aca9fdb4698385282b8743a9 100644
--- a/netwerk/ipc/DocumentLoadListener.cpp
+++ b/netwerk/ipc/DocumentLoadListener.cpp
-@@ -168,6 +168,7 @@ static auto CreateDocumentLoadInfo(CanonicalBrowsingContext* aBrowsingContext,
- loadInfo->SetHasValidUserGestureActivation(
- aLoadState->HasValidUserGestureActivation());
+@@ -171,6 +171,7 @@ static auto CreateDocumentLoadInfo(CanonicalBrowsingContext* aBrowsingContext,
+ loadInfo->SetTextDirectiveUserActivation(
+ aLoadState->GetTextDirectiveUserActivation());
loadInfo->SetIsMetaRefresh(aLoadState->IsMetaRefresh());
+ loadInfo->SetJugglerLoadIdentifier(aLoadState->GetLoadIdentifier());
return loadInfo.forget();
}
diff --git a/netwerk/protocol/http/InterceptedHttpChannel.cpp b/netwerk/protocol/http/InterceptedHttpChannel.cpp
-index 5695d46f924abe6b765f3645d746cc4248051c1c..d28ead55f6a8458f70ca43c693e7396c5dc53858 100644
+index e81a4538fd45c13aa60d933de5f4f32ce69fb5f2..d7945f81295c497485a09696f06ce041c1cd8079 100644
--- a/netwerk/protocol/http/InterceptedHttpChannel.cpp
+++ b/netwerk/protocol/http/InterceptedHttpChannel.cpp
@@ -727,6 +727,14 @@ NS_IMPL_ISUPPORTS(ResetInterceptionHeaderVisitor, nsIHttpHeaderVisitor)
@@ -2455,10 +2459,10 @@ index 5695d46f924abe6b765f3645d746cc4248051c1c..d28ead55f6a8458f70ca43c693e7396c
if (mPump && mLoadFlags & LOAD_CALL_CONTENT_SNIFFERS) {
mPump->PeekStream(CallTypeSniffers, static_cast(this));
diff --git a/parser/html/nsHtml5TreeOpExecutor.cpp b/parser/html/nsHtml5TreeOpExecutor.cpp
-index f25949e6cc907ff18a76d68fc2e8005bd40146ea..9be4cb34517b06b94c6e145aef8a8ea5d2687d97 100644
+index 071ed8da4135102b0b1fedce32326bdc0657c3fd..063b516001a674b558046f9191f08352eb671801 100644
--- a/parser/html/nsHtml5TreeOpExecutor.cpp
+++ b/parser/html/nsHtml5TreeOpExecutor.cpp
-@@ -1389,6 +1389,10 @@ void nsHtml5TreeOpExecutor::UpdateReferrerInfoFromMeta(
+@@ -1391,6 +1391,10 @@ void nsHtml5TreeOpExecutor::UpdateReferrerInfoFromMeta(
void nsHtml5TreeOpExecutor::AddSpeculationCSP(const nsAString& aCSP) {
NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
@@ -2470,10 +2474,10 @@ index f25949e6cc907ff18a76d68fc2e8005bd40146ea..9be4cb34517b06b94c6e145aef8a8ea5
nsCOMPtr preloadCsp = mDocument->GetPreloadCsp();
if (!preloadCsp) {
diff --git a/security/manager/ssl/nsCertOverrideService.cpp b/security/manager/ssl/nsCertOverrideService.cpp
-index fcc2a45e6de8eaeb1af2404a69bd3df58cf2aec8..d4c1df007bf5993cf9e0dadbe91aa2c38afc42ec 100644
+index b2e328e7c7d7a89be34b84fd176c306a3620c77c..54f24b213bcdc78c702e15d4d45a3943bc082281 100644
--- a/security/manager/ssl/nsCertOverrideService.cpp
+++ b/security/manager/ssl/nsCertOverrideService.cpp
-@@ -437,7 +437,12 @@ nsCertOverrideService::HasMatchingOverride(
+@@ -439,7 +439,12 @@ nsCertOverrideService::HasMatchingOverride(
bool disableAllSecurityCheck = false;
{
MutexAutoLock lock(mMutex);
@@ -2487,7 +2491,7 @@ index fcc2a45e6de8eaeb1af2404a69bd3df58cf2aec8..d4c1df007bf5993cf9e0dadbe91aa2c3
}
if (disableAllSecurityCheck) {
*aIsTemporary = false;
-@@ -649,14 +654,24 @@ static bool IsDebugger() {
+@@ -651,14 +656,24 @@ static bool IsDebugger() {
NS_IMETHODIMP
nsCertOverrideService::
@@ -2590,7 +2594,7 @@ index df1c5e464b845b6a8bfedadb86d0e7aab7fd3ffc..34451e791bb59f635134de702d9e5f64
}
diff --git a/toolkit/components/browser/nsIWebBrowserChrome.idl b/toolkit/components/browser/nsIWebBrowserChrome.idl
-index 217beda78edf31bab4c37209964d7a5bf5425195..7ba723410eb93328a8f078c58a96eefc2599feea 100644
+index 75555352b8a15a50e4a21e34fc8ede4e9246c7cc..72855a404effa42b6c55cd0c2fcb8bdd6c2b3f9f 100644
--- a/toolkit/components/browser/nsIWebBrowserChrome.idl
+++ b/toolkit/components/browser/nsIWebBrowserChrome.idl
@@ -74,6 +74,9 @@ interface nsIWebBrowserChrome : nsISupports
@@ -2621,10 +2625,10 @@ index 00a5381133f8cec0de452c31c7151801a1acc0b9..5d3e3d6f566dc724f257beaeb994ceda
if (provider.failed) {
diff --git a/toolkit/components/resistfingerprinting/nsUserCharacteristics.cpp b/toolkit/components/resistfingerprinting/nsUserCharacteristics.cpp
-index 32b1ac481382dd6aa3dda5572f013c2447a1a004..808031fbeb9b99b67c13c99c66b1aa1aff41f48a 100644
+index 6a40d032449e780bfeb77934ba141317b94e7189..1468d38355058b985f18613bd6e3bc84086fae40 100644
--- a/toolkit/components/resistfingerprinting/nsUserCharacteristics.cpp
+++ b/toolkit/components/resistfingerprinting/nsUserCharacteristics.cpp
-@@ -525,7 +525,7 @@ void PopulateLanguages() {
+@@ -553,7 +553,7 @@ void PopulateLanguages() {
// sufficient to only collect this information as the other properties are
// just reformats of Navigator::GetAcceptLanguages.
nsTArray languages;
@@ -2662,10 +2666,10 @@ index 654903fadb709be976b72f36f155e23bc0622152..815b3dc24c9fda6b1db6c4666ac68904
int32_t aMaxSelfProgress,
int32_t aCurTotalProgress,
diff --git a/toolkit/components/windowwatcher/nsWindowWatcher.cpp b/toolkit/components/windowwatcher/nsWindowWatcher.cpp
-index 0767cb1539f940e5f634b58de44d876606903a09..dc0d72b4ff36d5ba7808528aefecb33f05b6672c 100644
+index e3f616c4efd5d7e10ed372afa4b5c4d2d93e6a67..abb7772184c9baf23025c1577d1284b6ed1959fb 100644
--- a/toolkit/components/windowwatcher/nsWindowWatcher.cpp
+++ b/toolkit/components/windowwatcher/nsWindowWatcher.cpp
-@@ -1861,7 +1861,11 @@ uint32_t nsWindowWatcher::CalculateChromeFlagsForContent(
+@@ -1881,7 +1881,11 @@ uint32_t nsWindowWatcher::CalculateChromeFlagsForContent(
// Open a minimal popup.
*aIsPopupRequested = true;
@@ -2679,10 +2683,10 @@ index 0767cb1539f940e5f634b58de44d876606903a09..dc0d72b4ff36d5ba7808528aefecb33f
/**
diff --git a/toolkit/mozapps/update/UpdateService.sys.mjs b/toolkit/mozapps/update/UpdateService.sys.mjs
-index deaed885c759d8e53ebf0beb53c5b7c4d4bd82f0..8e01e16490ab063361220d363494dfdf00442342 100644
+index 6c2b400952492266a184c96b4a1ce71e87df7ffe..6e1fb4f59b6a6d70100e1eb1d15c937d8480988a 100644
--- a/toolkit/mozapps/update/UpdateService.sys.mjs
+++ b/toolkit/mozapps/update/UpdateService.sys.mjs
-@@ -3875,6 +3875,8 @@ export class UpdateService {
+@@ -3894,6 +3894,8 @@ export class UpdateService {
}
get disabledForTesting() {
@@ -2692,10 +2696,10 @@ index deaed885c759d8e53ebf0beb53c5b7c4d4bd82f0..8e01e16490ab063361220d363494dfdf
}
diff --git a/toolkit/toolkit.mozbuild b/toolkit/toolkit.mozbuild
-index 8c2b2bf996bd889651dc7fac1dc351b4c47b567e..07d237eb17a657ce051fd0aa5e53449c0c3159f6 100644
+index f42ed17a4a75689ae9c8e769d7b6e2c3f654b8ee..5af0877335339407160dd7d10b89bd3d62adff9f 100644
--- a/toolkit/toolkit.mozbuild
+++ b/toolkit/toolkit.mozbuild
-@@ -155,6 +155,7 @@ if CONFIG["ENABLE_WEBDRIVER"]:
+@@ -156,6 +156,7 @@ if CONFIG["ENABLE_WEBDRIVER"]:
"/remote",
"/testing/firefox-ui",
"/testing/marionette",
@@ -2756,7 +2760,7 @@ index fe72a2715da8846146377e719559c16e6ef1f7ff..a5959143bac8f62ee359fa3883a844f3
// nsDocumentViewer::LoadComplete that doesn't do various things
// that are not relevant here because this wasn't an actual
diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp
-index b9120ededd25707c90f33f65d3cead26433efdac..4d5728a73786d804d6b32da4d42934da2864eda1 100644
+index 139a43a1780dac34a6d8b135accac9cf39beef3f..2a855c3ae87e4e5a431cb1547cda0ee88490ca33 100644
--- a/uriloader/exthandler/nsExternalHelperAppService.cpp
+++ b/uriloader/exthandler/nsExternalHelperAppService.cpp
@@ -112,6 +112,7 @@
@@ -2767,7 +2771,7 @@ index b9120ededd25707c90f33f65d3cead26433efdac..4d5728a73786d804d6b32da4d42934da
#include "mozilla/Preferences.h"
#include "mozilla/ipc/URIUtils.h"
-@@ -831,6 +832,12 @@ NS_IMETHODIMP nsExternalHelperAppService::ApplyDecodingForExtension(
+@@ -872,6 +873,12 @@ NS_IMETHODIMP nsExternalHelperAppService::ApplyDecodingForExtension(
return NS_OK;
}
@@ -2780,7 +2784,7 @@ index b9120ededd25707c90f33f65d3cead26433efdac..4d5728a73786d804d6b32da4d42934da
nsresult nsExternalHelperAppService::GetFileTokenForPath(
const char16_t* aPlatformAppPath, nsIFile** aFile) {
nsDependentString platformAppPath(aPlatformAppPath);
-@@ -1441,7 +1448,12 @@ nsresult nsExternalAppHandler::SetUpTempFile(nsIChannel* aChannel) {
+@@ -1494,7 +1501,12 @@ nsresult nsExternalAppHandler::SetUpTempFile(nsIChannel* aChannel) {
// Strip off the ".part" from mTempLeafName
mTempLeafName.Truncate(mTempLeafName.Length() - ArrayLength(".part") + 1);
@@ -2793,7 +2797,7 @@ index b9120ededd25707c90f33f65d3cead26433efdac..4d5728a73786d804d6b32da4d42934da
mSaver =
do_CreateInstance(NS_BACKGROUNDFILESAVERSTREAMLISTENER_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
-@@ -1630,7 +1642,36 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) {
+@@ -1683,7 +1695,36 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) {
return NS_OK;
}
@@ -2831,7 +2835,7 @@ index b9120ededd25707c90f33f65d3cead26433efdac..4d5728a73786d804d6b32da4d42934da
if (NS_FAILED(rv)) {
nsresult transferError = rv;
-@@ -1682,6 +1723,9 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) {
+@@ -1744,6 +1785,9 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) {
bool alwaysAsk = true;
mMimeInfo->GetAlwaysAskBeforeHandling(&alwaysAsk);
@@ -2841,7 +2845,7 @@ index b9120ededd25707c90f33f65d3cead26433efdac..4d5728a73786d804d6b32da4d42934da
if (alwaysAsk) {
// But we *don't* ask if this mimeInfo didn't come from
// our user configuration datastore and the user has said
-@@ -2198,6 +2242,16 @@ nsExternalAppHandler::OnSaveComplete(nsIBackgroundFileSaver* aSaver,
+@@ -2260,6 +2304,16 @@ nsExternalAppHandler::OnSaveComplete(nsIBackgroundFileSaver* aSaver,
NotifyTransfer(aStatus);
}
@@ -2858,7 +2862,7 @@ index b9120ededd25707c90f33f65d3cead26433efdac..4d5728a73786d804d6b32da4d42934da
return NS_OK;
}
-@@ -2679,6 +2733,15 @@ NS_IMETHODIMP nsExternalAppHandler::Cancel(nsresult aReason) {
+@@ -2743,6 +2797,15 @@ NS_IMETHODIMP nsExternalAppHandler::Cancel(nsresult aReason) {
}
}
@@ -2875,10 +2879,10 @@ index b9120ededd25707c90f33f65d3cead26433efdac..4d5728a73786d804d6b32da4d42934da
// OnStartRequest)
mDialog = nullptr;
diff --git a/uriloader/exthandler/nsExternalHelperAppService.h b/uriloader/exthandler/nsExternalHelperAppService.h
-index 1f77e095dbfa3acc046779114007d83fc1cfa087..2354abbab7af6f6bdc3bd628722f03ea401d236a 100644
+index e880b90b2df85fb3b1ab3ba8d2fc181b824e2272..dbadd74dea9b245d68da3b2856e16b7b98c655d0 100644
--- a/uriloader/exthandler/nsExternalHelperAppService.h
+++ b/uriloader/exthandler/nsExternalHelperAppService.h
-@@ -257,6 +257,8 @@ class nsExternalHelperAppService : public nsIExternalHelperAppService,
+@@ -258,6 +258,8 @@ class nsExternalHelperAppService : public nsIExternalHelperAppService,
mozilla::dom::BrowsingContext* aContentContext, bool aForceSave,
nsIInterfaceRequestor* aWindowContext,
nsIStreamListener** aStreamListener);
@@ -2887,7 +2891,7 @@ index 1f77e095dbfa3acc046779114007d83fc1cfa087..2354abbab7af6f6bdc3bd628722f03ea
};
/**
-@@ -462,6 +464,9 @@ class nsExternalAppHandler final : public nsIStreamListener,
+@@ -463,6 +465,9 @@ class nsExternalAppHandler final : public nsIStreamListener,
* Upon successful return, both mTempFile and mSaver will be valid.
*/
nsresult SetUpTempFile(nsIChannel* aChannel);
@@ -2898,7 +2902,7 @@ index 1f77e095dbfa3acc046779114007d83fc1cfa087..2354abbab7af6f6bdc3bd628722f03ea
* When we download a helper app, we are going to retarget all load
* notifications into our own docloader and load group instead of
diff --git a/uriloader/exthandler/nsIExternalHelperAppService.idl b/uriloader/exthandler/nsIExternalHelperAppService.idl
-index 4a399acb72d4fd475c9ae43e9eadbc32f261e290..97ace81c82b16a9a993166dd4b0ddb3a721c9872 100644
+index 53ea934dd4876e4b491b724385c8fbf7d00ee6cd..0b7b88c853b21ce778d8e87fea0a2bfe839ad412 100644
--- a/uriloader/exthandler/nsIExternalHelperAppService.idl
+++ b/uriloader/exthandler/nsIExternalHelperAppService.idl
@@ -6,8 +6,11 @@
@@ -2931,10 +2935,11 @@ index 4a399acb72d4fd475c9ae43e9eadbc32f261e290..97ace81c82b16a9a993166dd4b0ddb3a
/**
* The external helper app service is used for finding and launching
* platform specific external applications for a given mime content type.
-@@ -76,6 +90,7 @@ interface nsIExternalHelperAppService : nsISupports
- boolean applyDecodingForExtension(in AUTF8String aExtension,
- in ACString aEncodingType);
-
+@@ -87,6 +101,8 @@ interface nsIExternalHelperAppService : nsISupports
+ * `DownloadIntegration.sys.mjs`, which is implemented on all platforms.
+ */
+ nsIFile getPreferredDownloadsDirectory();
++
+ void setDownloadInterceptor(in nsIDownloadInterceptor interceptor);
};
@@ -2968,45 +2973,21 @@ index 1c25e9d9a101233f71e92288a0f93125b81ac1c5..22cf67b0f6e3ddd2b3ed725a314ba6a9
}
#endif
diff --git a/widget/MouseEvents.h b/widget/MouseEvents.h
-index d29b406524c8b4afe437b559e33b4b2b5824ee58..6bef9c1657f93f90f96735d76fedb6ba3888b5c1 100644
+index 3d469853bbd30c433ee7b6d2be7175caa568196e..214b92f0a8913fb6667b7554410d4cd58c53cad3 100644
--- a/widget/MouseEvents.h
+++ b/widget/MouseEvents.h
-@@ -258,6 +258,7 @@ class WidgetMouseEvent : public WidgetMouseEventBase,
- : mReason(eReal),
- mContextMenuTrigger(eNormal),
- mClickCount(0),
-+ mJugglerEventId(0),
- mIgnoreRootScrollFrame(false),
- mClickEventPrevented(false) {}
-
-@@ -269,6 +270,7 @@ class WidgetMouseEvent : public WidgetMouseEventBase,
- mReason(aReason),
- mContextMenuTrigger(eNormal),
- mClickCount(0),
-+ mJugglerEventId(0),
- mIgnoreRootScrollFrame(false),
- mClickEventPrevented(false) {}
-
-@@ -288,6 +290,7 @@ class WidgetMouseEvent : public WidgetMouseEventBase,
- mReason(aReason),
- mContextMenuTrigger(aContextMenuTrigger),
- mClickCount(0),
-+ mJugglerEventId(0),
- mIgnoreRootScrollFrame(false),
- mClickEventPrevented(false) {
- if (aMessage == eContextMenu) {
-@@ -336,6 +339,9 @@ class WidgetMouseEvent : public WidgetMouseEventBase,
+@@ -327,6 +327,9 @@ class WidgetMouseEvent : public WidgetMouseEventBase,
// Otherwise, this must be 0.
- uint32_t mClickCount;
+ uint32_t mClickCount = 0;
+ // Unique event ID
-+ uint32_t mJugglerEventId;
++ uint32_t mJugglerEventId = 0;
+
// Whether the event should ignore scroll frame bounds during dispatch.
- bool mIgnoreRootScrollFrame;
-
-@@ -348,6 +354,7 @@ class WidgetMouseEvent : public WidgetMouseEventBase,
+ bool mIgnoreRootScrollFrame = false;
+@@ -341,6 +344,7 @@ class WidgetMouseEvent : public WidgetMouseEventBase,
+ mContextMenuTrigger = aEvent.mContextMenuTrigger;
mExitFrom = aEvent.mExitFrom;
mClickCount = aEvent.mClickCount;
+ mJugglerEventId = aEvent.mJugglerEventId;
@@ -3226,7 +3207,7 @@ index facd2bc65afab8ec1aa322faa20a67464964dfb9..d6dea95472bec6006411753c3dfdab2e
} // namespace widget
diff --git a/widget/headless/HeadlessWidget.cpp b/widget/headless/HeadlessWidget.cpp
-index 419b3bf94011e6874588b042fa520e75522ed2c3..07dc3954986d8257dc4fce1aa810623bb5d90bbd 100644
+index c6095751bc1e9bbe907e64fb634b799cac31bb0a..ce1b995015843babeab0e3bf4e357d45066b3cab 100644
--- a/widget/headless/HeadlessWidget.cpp
+++ b/widget/headless/HeadlessWidget.cpp
@@ -111,6 +111,8 @@ void HeadlessWidget::Destroy() {
@@ -3238,7 +3219,7 @@ index 419b3bf94011e6874588b042fa520e75522ed2c3..07dc3954986d8257dc4fce1aa810623b
nsBaseWidget::OnDestroy();
nsBaseWidget::Destroy();
-@@ -620,5 +622,14 @@ nsresult HeadlessWidget::SynthesizeNativeTouchpadPan(
+@@ -613,5 +615,14 @@ nsresult HeadlessWidget::SynthesizeNativeTouchpadPan(
return NS_OK;
}
@@ -3268,7 +3249,7 @@ index 9856991ef32f25f51942f8cd664a09bec2192c70..948947a421179e91c51005aeb83ed0d1
~HeadlessWidget();
bool mEnabled;
diff --git a/widget/nsGUIEventIPC.h b/widget/nsGUIEventIPC.h
-index 8ba46829357fc4acc47bf20842fd869902efa000..a1b5b2c5230d90981bd563d4df2d2bf1c2e05cef 100644
+index 02775a7f27f5697bc33872d997198ce305556970..6c1ae0e371ee012ef47c8e9c74f949da05ad0025 100644
--- a/widget/nsGUIEventIPC.h
+++ b/widget/nsGUIEventIPC.h
@@ -234,6 +234,7 @@ struct ParamTraits {
diff --git a/browser_patches/firefox/preferences/playwright.cfg b/browser_patches/firefox/preferences/playwright.cfg
index 1921f19c3872c..1eb51a0fdbc62 100644
--- a/browser_patches/firefox/preferences/playwright.cfg
+++ b/browser_patches/firefox/preferences/playwright.cfg
@@ -100,6 +100,11 @@ pref("extensions.formautofill.addresses.supported", "off");
// firefox behavior with other browser defaults.
pref("security.enterprise_roots.enabled", true);
+// There's a security features warning that might be shown on certain Linux distributions & configurations:
+// https://support.mozilla.org/en-US/kb/install-firefox-linux#w_security-features-warning
+// This notification should never be shown in automation scenarios.
+pref("security.sandbox.warn_unprivileged_namespaces", false);
+
// Avoid stalling on shutdown, after "xpcom-will-shutdown" phase.
// This at least happens when shutting down soon after launching.
// See AppShutdown.cpp for more details on shutdown phases.
diff --git a/browser_patches/webkit/UPSTREAM_CONFIG.sh b/browser_patches/webkit/UPSTREAM_CONFIG.sh
index c90cb3071225a..3fb94ec302ace 100644
--- a/browser_patches/webkit/UPSTREAM_CONFIG.sh
+++ b/browser_patches/webkit/UPSTREAM_CONFIG.sh
@@ -1,3 +1,3 @@
REMOTE_URL="https://github.com/WebKit/WebKit.git"
BASE_BRANCH="main"
-BASE_REVISION="f371dbc2bb4292037ed394e2162150a16ef977fc"
+BASE_REVISION="8ceb1da47e75a488ae4c12017a861636904acd4f"
diff --git a/browser_patches/webkit/embedder/Playwright/mac/AppDelegate.m b/browser_patches/webkit/embedder/Playwright/mac/AppDelegate.m
index a6c7be8ae48a9..f9708d364df3d 100644
--- a/browser_patches/webkit/embedder/Playwright/mac/AppDelegate.m
+++ b/browser_patches/webkit/embedder/Playwright/mac/AppDelegate.m
@@ -97,7 +97,7 @@ - (id)init
for (NSString *argument in subArray) {
if (![argument hasPrefix:@"--"])
- _initialURL = argument;
+ _initialURL = [argument copy];
if ([argument hasPrefix:@"--user-data-dir="]) {
NSRange range = NSMakeRange(16, [argument length] - 16);
_userDataDir = [[argument substringWithRange:range] copy];
@@ -230,7 +230,7 @@ - (WKWebViewConfiguration *)defaultConfiguration
configuration = [[WKWebViewConfiguration alloc] init];
configuration.websiteDataStore = [self persistentDataStore];
configuration._controlledByAutomation = true;
- configuration.preferences._fullScreenEnabled = YES;
+ configuration.preferences.elementFullscreenEnabled = YES;
configuration.preferences._developerExtrasEnabled = YES;
configuration.preferences._mediaDevicesEnabled = YES;
configuration.preferences._mockCaptureDevicesEnabled = YES;
diff --git a/browser_patches/webkit/patches/bootstrap.diff b/browser_patches/webkit/patches/bootstrap.diff
index 9b8aa596c4c1d..ea833df5fdd3e 100644
--- a/browser_patches/webkit/patches/bootstrap.diff
+++ b/browser_patches/webkit/patches/bootstrap.diff
@@ -1,8 +1,8 @@
diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt
-index 3a1013bab702f71303ee800f6b3e9a65a08f4de6..9448f06498ea591e51516d5ef7b543f63655b6ae 100644
+index db9554ed7eb6ddb62de1bc549a8e7c50944c7869..b6ce1761f11281c6362790ee59d83feed6f717cf 100644
--- a/Source/JavaScriptCore/CMakeLists.txt
+++ b/Source/JavaScriptCore/CMakeLists.txt
-@@ -1392,22 +1392,27 @@ set(JavaScriptCore_INSPECTOR_DOMAINS
+@@ -1398,22 +1398,27 @@ set(JavaScriptCore_INSPECTOR_DOMAINS
${JAVASCRIPTCORE_DIR}/inspector/protocol/CSS.json
${JAVASCRIPTCORE_DIR}/inspector/protocol/Canvas.json
${JAVASCRIPTCORE_DIR}/inspector/protocol/Console.json
@@ -31,10 +31,10 @@ index 3a1013bab702f71303ee800f6b3e9a65a08f4de6..9448f06498ea591e51516d5ef7b543f6
${JAVASCRIPTCORE_DIR}/inspector/protocol/ServiceWorker.json
${JAVASCRIPTCORE_DIR}/inspector/protocol/Target.json
diff --git a/Source/JavaScriptCore/DerivedSources-input.xcfilelist b/Source/JavaScriptCore/DerivedSources-input.xcfilelist
-index b26ef7b2b8f732160ddee36697a61ca7776fc2c3..9a442a4cda7efd7f2bd4e225d8bcbfedf8c4a0c5 100644
+index eebcd3f03aeb560fd70ab52b325e21c5ced74321..340323566ea7c8f5d85303c7adb4570913a41451 100644
--- a/Source/JavaScriptCore/DerivedSources-input.xcfilelist
+++ b/Source/JavaScriptCore/DerivedSources-input.xcfilelist
-@@ -98,21 +98,26 @@ $(PROJECT_DIR)/inspector/protocol/CPUProfiler.json
+@@ -99,21 +99,26 @@ $(PROJECT_DIR)/inspector/protocol/CPUProfiler.json
$(PROJECT_DIR)/inspector/protocol/CSS.json
$(PROJECT_DIR)/inspector/protocol/Canvas.json
$(PROJECT_DIR)/inspector/protocol/Console.json
@@ -62,10 +62,10 @@ index b26ef7b2b8f732160ddee36697a61ca7776fc2c3..9a442a4cda7efd7f2bd4e225d8bcbfed
$(PROJECT_DIR)/inspector/protocol/Security.json
$(PROJECT_DIR)/inspector/protocol/ServiceWorker.json
diff --git a/Source/JavaScriptCore/DerivedSources.make b/Source/JavaScriptCore/DerivedSources.make
-index 3033ef7fc7e1db0e4b6fb85236997ce92b1946a5..87fc65714ad2caa21ac19aabf0a7d93badb4c848 100644
+index 99dd36c7234cecd9c6620c94c4e6e93ff6548d77..d2017ded67f3e811d0f905be238c73ccb0348aa7 100644
--- a/Source/JavaScriptCore/DerivedSources.make
+++ b/Source/JavaScriptCore/DerivedSources.make
-@@ -298,22 +298,27 @@ INSPECTOR_DOMAINS := \
+@@ -299,22 +299,27 @@ INSPECTOR_DOMAINS := \
$(JavaScriptCore)/inspector/protocol/CSS.json \
$(JavaScriptCore)/inspector/protocol/Canvas.json \
$(JavaScriptCore)/inspector/protocol/Console.json \
@@ -367,10 +367,25 @@ index e47c6ca59f37fbf18ca8a393df72e0472363fabd..b393465540595220561ae00afb854082
void InspectorTargetAgent::didCommitProvisionalTarget(const String& oldTargetID, const String& committedTargetID)
diff --git a/Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.h b/Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.h
-index 4edcbf5f4aee2eb8e5675a23b9db67e9d640ef7f..a32b0f3a5de49e58b8a35cec9202b7880e91a2f0 100644
+index 1ccce5707ca2a4743029614777bb6b9938f8a09c..cbb3466a855887d4dac3a6064e5de6ead051c1a6 100644
--- a/Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.h
+++ b/Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.h
-@@ -51,15 +51,20 @@ public:
+@@ -37,12 +37,12 @@ namespace Inspector {
+
+ class InspectorTarget;
+
+-class InspectorTargetAgent final : public InspectorAgentBase, public TargetBackendDispatcherHandler, public CanMakeCheckedPtr {
++class JS_EXPORT_PRIVATE InspectorTargetAgent final : public InspectorAgentBase, public TargetBackendDispatcherHandler, public CanMakeCheckedPtr {
+ WTF_MAKE_NONCOPYABLE(InspectorTargetAgent);
+ WTF_MAKE_TZONE_ALLOCATED(InspectorTargetAgent);
+ WTF_OVERRIDE_DELETE_FOR_CHECKED_PTR(InspectorTargetAgent);
+ public:
+- JS_EXPORT_PRIVATE InspectorTargetAgent(FrontendRouter&, BackendDispatcher&);
++ InspectorTargetAgent(FrontendRouter&, BackendDispatcher&);
+ ~InspectorTargetAgent() final;
+
+ // InspectorAgentBase
+@@ -53,14 +53,19 @@ public:
Protocol::ErrorStringOr setPauseOnStart(bool) final;
Protocol::ErrorStringOr resume(const String& targetId) final;
Protocol::ErrorStringOr sendMessageToTarget(const String& targetId, const String& message) final;
@@ -378,19 +393,22 @@ index 4edcbf5f4aee2eb8e5675a23b9db67e9d640ef7f..a32b0f3a5de49e58b8a35cec9202b788
+ Protocol::ErrorStringOr close(const String& targetId, std::optional&& runBeforeUnload) override;
// Target lifecycle.
- void targetCreated(InspectorTarget&);
- void targetDestroyed(InspectorTarget&);
+- JS_EXPORT_PRIVATE void targetCreated(InspectorTarget&);
+- JS_EXPORT_PRIVATE void targetDestroyed(InspectorTarget&);
+- JS_EXPORT_PRIVATE void didCommitProvisionalTarget(const String& oldTargetID, const String& committedTargetID);
++ void targetCreated(InspectorTarget&);
++ void targetDestroyed(InspectorTarget&);
+ void targetCrashed(InspectorTarget&);
- void didCommitProvisionalTarget(const String& oldTargetID, const String& committedTargetID);
++ void didCommitProvisionalTarget(const String& oldTargetID, const String& committedTargetID);
// Target messages.
- void sendMessageFromTargetToFrontend(const String& targetId, const String& message);
-
-+ bool isConnected() { return m_isConnected; }
+- JS_EXPORT_PRIVATE void sendMessageFromTargetToFrontend(const String& targetId, const String& message);
++ void sendMessageFromTargetToFrontend(const String& targetId, const String& message);
+
++ bool isConnected() { return m_isConnected; }
+
private:
// FrontendChannel
- FrontendChannel::ConnectionType connectionType() const;
diff --git a/Source/JavaScriptCore/inspector/protocol/DOM.json b/Source/JavaScriptCore/inspector/protocol/DOM.json
index 27c65fbda226f1cd5bfd68944fe87fb9b2a688a6..b036f050859ee88004a7bf6daa4bb73835360615 100644
--- a/Source/JavaScriptCore/inspector/protocol/DOM.json
@@ -1677,7 +1695,7 @@ index 52920cded24a9c6b0ef6fb4e518664955db4f9fa..bbbabc4e7259088b9404e8cc07eecd6f
},
{
diff --git a/Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp b/Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp
-index 56a8f09aa0f4985f1af99f31f000b03dcb0c3901..f6f577b897d0b37df5d193df07702a190b8ed6a4 100644
+index 7c2ecd2c9afe3882903a590a76504d98da49f0af..9472d74977234a97e7ede76a042e22884c492594 100644
--- a/Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp
+++ b/Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp
@@ -28,7 +28,6 @@
@@ -1701,7 +1719,7 @@ index 24891ad836086fd23024fcb4d08ca63f6974c812..29f4b6b1923383fec7a99d28a4e815dc
private:
enum ArgumentRequirement { ArgumentRequired, ArgumentNotRequired };
diff --git a/Source/ThirdParty/libwebrtc/CMakeLists.txt b/Source/ThirdParty/libwebrtc/CMakeLists.txt
-index a17275db76e30bf2f42bc8faa6dea14383b2ab27..f630ddaddfa5a5b048e028c233e84e8bec1e0370 100644
+index 2557956d875e6d5be0d83368f4eaaa8083585c26..da7bde1dc256e9e1f4d13469e150970f5090a993 100644
--- a/Source/ThirdParty/libwebrtc/CMakeLists.txt
+++ b/Source/ThirdParty/libwebrtc/CMakeLists.txt
@@ -453,6 +453,7 @@ set(webrtc_SOURCES
@@ -1724,7 +1742,7 @@ index a17275db76e30bf2f42bc8faa6dea14383b2ab27..f630ddaddfa5a5b048e028c233e84e8b
Source/third_party/libyuv/source/compare.cc
Source/third_party/libyuv/source/compare_common.cc
Source/third_party/libyuv/source/compare_gcc.cc
-@@ -2402,6 +2408,10 @@ set(webrtc_INCLUDE_DIRECTORIES PRIVATE
+@@ -2406,6 +2412,10 @@ set(webrtc_INCLUDE_DIRECTORIES PRIVATE
Source/third_party/libsrtp/config
Source/third_party/libsrtp/crypto/include
Source/third_party/libsrtp/include
@@ -1736,25 +1754,26 @@ index a17275db76e30bf2f42bc8faa6dea14383b2ab27..f630ddaddfa5a5b048e028c233e84e8b
Source/third_party/opus/src/celt
Source/third_party/opus/src/include
diff --git a/Source/ThirdParty/libwebrtc/Configurations/Base-libwebrtc.xcconfig b/Source/ThirdParty/libwebrtc/Configurations/Base-libwebrtc.xcconfig
-index 6b20d97d3d46359b2b2f9b4e8454a65c2ddbe9e3..80883fe3659389a3c385fd46ecd905bc0923d3ef 100644
+index 0c5c8e689bdddec766f9de5bffd4444a5e068d77..330dd1f585e530722178c65c883641a2b8c0f1bd 100644
--- a/Source/ThirdParty/libwebrtc/Configurations/Base-libwebrtc.xcconfig
+++ b/Source/ThirdParty/libwebrtc/Configurations/Base-libwebrtc.xcconfig
-@@ -22,6 +22,7 @@
- // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- HEADER_SEARCH_PATHS = Source Source/third_party/libsrtp/crypto/include Source/third_party/libsrtp/include Source/third_party/boringssl/src/include Source/third_party/libyuv/include Source/webrtc/sdk/objc/Framework/Headers Source/webrtc/common_audio/signal_processing/include Source/webrtc/modules/audio_coding/codecs/isac/main/include Source/third_party/opus/src/celt Source/third_party/opus/src/include Source/third_party/opus/src/src Source/webrtc/modules/audio_device/mac Source/webrtc/modules/audio_device/ios Source/webrtc Source/webrtc/sdk/objc Source/webrtc/sdk/objc/base Source/webrtc/sdk/objc/Framework/Classes Source/third_party/libsrtp/config Source/webrtc/sdk/objc/Framework/Classes/Common Source/webrtc/sdk/objc/Framework/Classes/Video Source/webrtc/sdk/objc/Framework/Classes/PeerConnection Source/third_party/abseil-cpp Source/third_party/libvpx/source/libvpx Source/third_party/libwebm/webm_parser/include Source/third_party/crc32c/config Source/third_party/crc32c/include Source/third_party/crc32c/src/include Source/third_party/libaom/source/libaom Source/third_party/protobuf/src;
-+HEADER_SEARCH_PATHS = ${HEADER_SEARCH_PATHS} Source/third_party/libwebm/mkvmuxer Source/third_party/libvpx/source/libvpx/third_party/libwebm;
+@@ -24,6 +24,8 @@
+ HEADER_SEARCH_PATHS = Source Source/third_party/libsrtp/crypto/include Source/third_party/libsrtp/include Source/third_party/boringssl/src/include Source/third_party/libyuv/include Source/webrtc/webkit_sdk/objc/Framework/Headers Source/webrtc/common_audio/signal_processing/include Source/webrtc/modules/audio_coding/codecs/isac/main/include Source/third_party/opus/src/celt Source/third_party/opus/src/include Source/third_party/opus/src/src Source/webrtc/modules/audio_device/mac Source/webrtc/modules/audio_device/ios Source/webrtc Source/webrtc/webkit_sdk/objc Source/webrtc/webkit_sdk/objc/base Source/webrtc/webkit_sdk/objc/Framework/Classes Source/third_party/libsrtp/config Source/webrtc/webkit_sdk/objc/Framework/Classes/Common Source/webrtc/webkit_sdk/objc/Framework/Classes/Video Source/webrtc/webkit_sdk/objc/Framework/Classes/PeerConnection Source/third_party/abseil-cpp Source/third_party/libvpx/source/libvpx Source/third_party/libwebm/webm_parser/include Source/third_party/crc32c/config Source/third_party/crc32c/include Source/third_party/crc32c/src/include Source/third_party/libaom/source/libaom;
USE_HEADERMAP = NO;
++HEADER_SEARCH_PATHS = ${HEADER_SEARCH_PATHS} Source/third_party/libwebm/mkvmuxer Source/third_party/libvpx/source/libvpx/third_party/libwebm;
++
WARNING_CFLAGS = -Wno-deprecated-declarations $(inherited);
+
+ // FIXME: Set WEBRTC_USE_BUILTIN_ISAC_FIX and WEBRTC_USE_BUILTIN_ISAC_FLOAT for iOS and Mac
diff --git a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.exp b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.exp
-index fca61ffe9f0563d87b364e0fa681ceab1d7bb26f..5c0d72f6c0bab0bc0011a123302c5654ec5664ba 100644
+index fe9c7b3f648392219fdf5be8d2bab99e1b4959e4..def7770bc94a1f533add081e907826058f169bbe 100644
--- a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.exp
+++ b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.exp
-@@ -403,3 +403,24 @@ __ZN3rtc17AsyncPacketSocket20NotifyPacketReceivedERKNS_14ReceivedPacketE
- __ZN3rtc17AsyncPacketSocket30RegisterReceivedPacketCallbackEN4absl12AnyInvocableIFvPS0_RKNS_14ReceivedPacketEEEE
- __ZN3rtc17AsyncPacketSocket32DeregisterReceivedPacketCallbackEv
- __ZN3rtc18NetworkManagerBaseC2Ev
+@@ -403,3 +403,24 @@ __ZN3rtc15CountIPMaskBitsERKNS_9IPAddressE
+ __ZN3rtc19IPAddressPrecedenceERKNS_9IPAddressE
+ __ZNK3rtc16InterfaceAddresseqERKS0_
+ __ZNK3rtc16InterfaceAddress8ToStringEv
+__ZN8mkvmuxer11SegmentInfo15set_writing_appEPKc
+__ZN8mkvmuxer11SegmentInfo4InitEv
+__ZN8mkvmuxer7Segment10OutputCuesEb
@@ -1777,7 +1796,7 @@ index fca61ffe9f0563d87b364e0fa681ceab1d7bb26f..5c0d72f6c0bab0bc0011a123302c5654
+_vpx_codec_version_str
+_vpx_codec_vp8_cx
diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc
-index 625cb7fefc6a699d9e2f28c6acc1bc7681ea3984..cd6677a7ffd3321978427a9fc6fbed5179aebb60 100644
+index 9ada3cdc5f6ceecabdc4b17998754a7bf3adb0e9..1136def8438ec98a8f96bfd67fd9b0691bb3ffaf 100644
--- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc
+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc
@@ -16,6 +16,7 @@
@@ -1801,7 +1820,7 @@ index f95c3b6c6b73a01974f26d88bcc533e5032ddb66..6a9368c60824cd32649c93286522d779
#include "api/array_view.h"
diff --git a/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj b/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj
-index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47a131e4ee 100644
+index 4450f961579b52a88876cfc2d72a59bab4ccb863..4a217d81585ce495237aa013d3ace98a7bee394e 100644
--- a/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj
+++ b/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj
@@ -35,6 +35,20 @@
@@ -1825,7 +1844,7 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
/* Begin PBXBuildFile section */
2D6BFF60280A93DF00A1A74F /* video_coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 4131C45B234C81710028A615 /* video_coding.h */; settings = {ATTRIBUTES = (Public, ); }; };
2D6BFF61280A93EC00A1A74F /* video_codec_initializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4131C45E234C81720028A615 /* video_codec_initializer.h */; settings = {ATTRIBUTES = (Public, ); }; };
-@@ -5193,6 +5207,9 @@
+@@ -5144,6 +5158,9 @@
DDF30D9127C5C725006A526F /* receive_side_congestion_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = DDF30D9027C5C725006A526F /* receive_side_congestion_controller.h */; };
DDF30D9527C5C756006A526F /* bwe_defines.h in Headers */ = {isa = PBXBuildFile; fileRef = DDF30D9327C5C756006A526F /* bwe_defines.h */; };
DDF30D9627C5C756006A526F /* remote_bitrate_estimator.h in Headers */ = {isa = PBXBuildFile; fileRef = DDF30D9427C5C756006A526F /* remote_bitrate_estimator.h */; };
@@ -1835,7 +1854,7 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
/* End PBXBuildFile section */
/* Begin PBXBuildRule section */
-@@ -5681,6 +5698,13 @@
+@@ -5632,6 +5649,13 @@
remoteGlobalIDString = DDF30D0527C5C003006A526F;
remoteInfo = absl;
};
@@ -1849,7 +1868,7 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
-@@ -11465,6 +11489,9 @@
+@@ -11217,6 +11241,9 @@
DDF30D9027C5C725006A526F /* receive_side_congestion_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = receive_side_congestion_controller.h; sourceTree = ""; };
DDF30D9327C5C756006A526F /* bwe_defines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bwe_defines.h; sourceTree = ""; };
DDF30D9427C5C756006A526F /* remote_bitrate_estimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remote_bitrate_estimator.h; sourceTree = ""; };
@@ -1859,7 +1878,7 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
FB39D0D11200F0E300088E69 /* libwebrtc.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwebrtc.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
-@@ -20596,6 +20623,7 @@
+@@ -20069,6 +20096,7 @@
isa = PBXGroup;
children = (
CDFD2F9224C4B2F90048DAC3 /* common */,
@@ -1867,7 +1886,7 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
CDEBB19224C0191800ADBD44 /* webm_parser */,
);
path = libwebm;
-@@ -21007,6 +21035,16 @@
+@@ -20480,6 +20508,16 @@
path = include;
sourceTree = "";
};
@@ -1884,7 +1903,7 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
FB39D06E1200ED9200088E69 = {
isa = PBXGroup;
children = (
-@@ -24293,6 +24331,7 @@
+@@ -23772,6 +23810,7 @@
);
dependencies = (
410B3827292B73E90003E515 /* PBXTargetDependency */,
@@ -1892,7 +1911,7 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
DD2E76E827C6B69A00F2A74C /* PBXTargetDependency */,
CDEBB4CC24C01AB400ADBD44 /* PBXTargetDependency */,
411ED040212E0811004320BA /* PBXTargetDependency */,
-@@ -24375,6 +24414,7 @@
+@@ -23854,6 +23893,7 @@
4460B8B92B155B6A00392062 /* vp9_qp_parser_fuzzer */,
444A6EF02AEADFC9005FE121 /* vp9_replay_fuzzer */,
44945C512B9BA1C300447FFD /* webm_fuzzer */,
@@ -1900,7 +1919,7 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
);
};
/* End PBXProject section */
-@@ -24458,6 +24498,23 @@
+@@ -23937,6 +23977,23 @@
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Scripts/create-symlink-to-altroot.sh\"\n";
};
@@ -1924,7 +1943,7 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
-@@ -26471,6 +26528,9 @@
+@@ -25924,6 +25981,9 @@
5CDD865E1E43B8B500621E92 /* min_max_operations.c in Sources */,
4189395B242A71F5007FDC41 /* min_video_bitrate_experiment.cc in Sources */,
41B8D8FB28CB85CB00E5FA37 /* missing_mandatory_parameter_cause.cc in Sources */,
@@ -1934,7 +1953,7 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
4131C387234B957D0028A615 /* moving_average.cc in Sources */,
41FCBB1521B1F7AA00A5DF27 /* moving_average.cc in Sources */,
5CD286101E6A64C90094FDC8 /* moving_max.cc in Sources */,
-@@ -27372,6 +27432,11 @@
+@@ -26796,6 +26856,11 @@
target = DDF30D0527C5C003006A526F /* absl */;
targetProxy = DD2E76E727C6B69A00F2A74C /* PBXContainerItemProxy */;
};
@@ -1946,7 +1965,7 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
-@@ -27947,6 +28012,27 @@
+@@ -27371,6 +27436,27 @@
};
name = Production;
};
@@ -1974,7 +1993,7 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
FB39D0711200ED9200088E69 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 5D7C59C71208C68B001C873E /* DebugRelease.xcconfig */;
-@@ -28249,6 +28335,16 @@
+@@ -27673,6 +27759,16 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Production;
};
@@ -1992,10 +2011,10 @@ index 5e185d2c3aae7eb99b72dbbb1a04af638a6dfc63..d2fbb40ee5d8349d617b287368ae1a47
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml b/Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
-index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba045b1f4aec 100644
+index 5b41178d65c94c1b0e1a51e37b21f9b6e827dbdd..716f80a56e5850b26bc7c0d1b2d91d70506b415d 100644
--- a/Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
+++ b/Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
-@@ -563,6 +563,7 @@ ApplePayEnabled:
+@@ -607,6 +607,7 @@ ApplePayEnabled:
default: false
# FIXME: This is on by default in WebKit2 PLATFORM(COCOA). Perhaps we should consider turning it on for WebKitLegacy as well.
@@ -2003,7 +2022,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
AsyncClipboardAPIEnabled:
type: bool
status: mature
-@@ -573,7 +574,7 @@ AsyncClipboardAPIEnabled:
+@@ -617,7 +618,7 @@ AsyncClipboardAPIEnabled:
default: false
WebKit:
"PLATFORM(COCOA) || PLATFORM(GTK)" : true
@@ -2012,7 +2031,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
WebCore:
default: false
-@@ -1810,6 +1811,7 @@ CrossOriginEmbedderPolicyEnabled:
+@@ -2046,6 +2047,7 @@ CrossOriginEmbedderPolicyEnabled:
WebCore:
default: false
@@ -2020,7 +2039,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
CrossOriginOpenerPolicyEnabled:
type: bool
status: stable
-@@ -1864,7 +1866,7 @@ CustomPasteboardDataEnabled:
+@@ -2086,7 +2088,7 @@ CustomPasteboardDataEnabled:
WebKitLegacy:
default: false
WebKit:
@@ -2029,7 +2048,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
default: false
CustomStateSetEnabled:
-@@ -1923,6 +1925,7 @@ DOMAudioSessionFullEnabled:
+@@ -2145,6 +2147,7 @@ DOMAudioSessionFullEnabled:
WebCore:
default: false
@@ -2037,7 +2056,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
DOMPasteAccessRequestsEnabled:
type: bool
status: internal
-@@ -1934,7 +1937,7 @@ DOMPasteAccessRequestsEnabled:
+@@ -2156,7 +2159,7 @@ DOMPasteAccessRequestsEnabled:
default: false
WebKit:
"PLATFORM(IOS) || PLATFORM(MAC) || PLATFORM(GTK) || PLATFORM(VISION)": true
@@ -2046,7 +2065,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
WebCore:
default: false
-@@ -2278,7 +2281,7 @@ DirectoryUploadEnabled:
+@@ -2516,7 +2519,7 @@ DirectoryUploadEnabled:
WebKitLegacy:
default: false
WebKit:
@@ -2055,7 +2074,20 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
default: false
WebCore:
default: false
-@@ -3304,6 +3307,7 @@ InspectorAttachmentSide:
+@@ -2939,10 +2942,10 @@ FullScreenEnabled:
+ WebKitLegacy:
+ default: false
+ WebKit:
+- "PLATFORM(GTK) || PLATFORM(WPE)": true
++ "PLATFORM(WIN) || PLATFORM(GTK) || PLATFORM(WPE)": true
+ default: false
+ WebCore:
+- "PLATFORM(GTK) || PLATFORM(WPE)": true
++ "PLATFORM(WIN) || PLATFORM(GTK) || PLATFORM(WPE)": true
+ default: false
+ sharedPreferenceForWebProcess: true
+
+@@ -3595,6 +3598,7 @@ InspectorAttachmentSide:
WebKit:
default: 0
@@ -2063,7 +2095,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
InspectorStartsAttached:
type: bool
status: embedder
-@@ -3311,7 +3315,7 @@ InspectorStartsAttached:
+@@ -3602,7 +3606,7 @@ InspectorStartsAttached:
exposed: [ WebKit ]
defaultValue:
WebKit:
@@ -2072,7 +2104,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
InspectorWindowFrame:
type: String
-@@ -3650,9 +3654,10 @@ LayoutViewportHeightExpansionFactor:
+@@ -3953,9 +3957,10 @@ LayoutViewportHeightExpansionFactor:
WebCore:
default: 0
@@ -2084,7 +2116,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
category: html
humanReadableName: "Lazy iframe loading"
humanReadableDescription: "Enable lazy iframe loading support"
-@@ -3660,9 +3665,9 @@ LazyIframeLoadingEnabled:
+@@ -3963,9 +3968,9 @@ LazyIframeLoadingEnabled:
WebKitLegacy:
default: true
WebKit:
@@ -2096,7 +2128,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
LazyImageLoadingEnabled:
type: bool
-@@ -5084,7 +5089,7 @@ PermissionsAPIEnabled:
+@@ -5461,7 +5466,7 @@ PermissionsAPIEnabled:
WebKitLegacy:
default: false
WebKit:
@@ -2105,7 +2137,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
default: false
WebCore:
default: false
-@@ -5143,6 +5148,19 @@ PitchCorrectionAlgorithm:
+@@ -5524,6 +5529,19 @@ PitchCorrectionAlgorithm:
WebCore:
default: MediaPlayerEnums::PitchCorrectionAlgorithm::BestAllAround
@@ -2125,7 +2157,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
PointerLockOptionsEnabled:
type: bool
status: testable
-@@ -5697,7 +5715,7 @@ ScreenOrientationAPIEnabled:
+@@ -6060,7 +6078,7 @@ ScreenOrientationAPIEnabled:
WebKitLegacy:
default: false
WebKit:
@@ -2133,16 +2165,16 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
+ default: true
WebCore:
default: false
-
-@@ -6946,6 +6964,7 @@ UseCGDisplayListsForDOMRendering:
- WebKit:
+ sharedPreferenceForWebProcess: true
+@@ -7389,6 +7407,7 @@ UseCGDisplayListsForDOMRendering:
default: true
+ sharedPreferenceForWebProcess: true
+# Playwright: force-disable on Windows.
UseGPUProcessForCanvasRenderingEnabled:
type: bool
status: stable
-@@ -6958,7 +6977,7 @@ UseGPUProcessForCanvasRenderingEnabled:
+@@ -7401,7 +7420,7 @@ UseGPUProcessForCanvasRenderingEnabled:
defaultValue:
WebKit:
"ENABLE(GPU_PROCESS_BY_DEFAULT)": true
@@ -2151,16 +2183,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
default: false
UseGPUProcessForDOMRenderingEnabled:
-@@ -6968,7 +6987,7 @@ UseGPUProcessForDOMRenderingEnabled:
- humanReadableName: "GPU Process: DOM Rendering"
- humanReadableDescription: "Enable DOM rendering in GPU Process"
- webcoreBinding: none
-- condition: ENABLE(GPU_PROCESS)
-+ condition: ENABLE(GPU_PROCESS) && !PLATFORM(WIN)
- exposed: [ WebKit ]
- defaultValue:
- WebKit:
-@@ -7000,6 +7019,7 @@ UseGPUProcessForMediaEnabled:
+@@ -7444,6 +7463,7 @@ UseGPUProcessForMediaEnabled:
"ENABLE(GPU_PROCESS_BY_DEFAULT)": true
default: false
@@ -2168,7 +2191,7 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
UseGPUProcessForWebGLEnabled:
type: bool
status: internal
-@@ -7011,7 +7031,7 @@ UseGPUProcessForWebGLEnabled:
+@@ -7455,7 +7475,7 @@ UseGPUProcessForWebGLEnabled:
default: false
WebKit:
"ENABLE(GPU_PROCESS_BY_DEFAULT) && ENABLE(GPU_PROCESS_WEBGL_BY_DEFAULT)": true
@@ -2178,10 +2201,10 @@ index 4d6f1829d52f1a0ea19c1a0de58e86304360c177..59a7410430ecc8db82f5b0bfcc11ba04
WebCore:
"ENABLE(GPU_PROCESS_BY_DEFAULT) && ENABLE(GPU_PROCESS_WEBGL_BY_DEFAULT)": true
diff --git a/Source/WTF/wtf/PlatformEnable.h b/Source/WTF/wtf/PlatformEnable.h
-index 48c40a6bfa8ae0a275bbd8f3ae62f4701916fa48..a32e26e01d83999c575649a9fc0d96c71b655259 100644
+index 62e05e9711b88f291833ec11fea15caba8d1826c..279be00347cbe501ba09040a511627ed308ecdbd 100644
--- a/Source/WTF/wtf/PlatformEnable.h
+++ b/Source/WTF/wtf/PlatformEnable.h
-@@ -401,7 +401,7 @@
+@@ -409,7 +409,7 @@
// ORIENTATION_EVENTS should never get enabled on Desktop, only Mobile.
#if !defined(ENABLE_ORIENTATION_EVENTS)
@@ -2190,7 +2213,7 @@ index 48c40a6bfa8ae0a275bbd8f3ae62f4701916fa48..a32e26e01d83999c575649a9fc0d96c7
#endif
#if !defined(ENABLE_OVERFLOW_SCROLLING_TOUCH)
-@@ -506,7 +506,7 @@
+@@ -514,7 +514,7 @@
#endif
#if !defined(ENABLE_TOUCH_EVENTS)
@@ -2200,10 +2223,10 @@ index 48c40a6bfa8ae0a275bbd8f3ae62f4701916fa48..a32e26e01d83999c575649a9fc0d96c7
#if !defined(ENABLE_TOUCH_ACTION_REGIONS)
diff --git a/Source/WTF/wtf/PlatformEnableCocoa.h b/Source/WTF/wtf/PlatformEnableCocoa.h
-index 5fef3978fdfb0dc92609688fdf282ea26a0859ef..70190e180003951e48c4084a1788f504730171ca 100644
+index 256964d0373b4ec43ddccc4c7c50ab9d85259294..c6aff1223553dcdbe2ac5165bc2fd9df763ee191 100644
--- a/Source/WTF/wtf/PlatformEnableCocoa.h
+++ b/Source/WTF/wtf/PlatformEnableCocoa.h
-@@ -781,7 +781,7 @@
+@@ -794,7 +794,7 @@
#endif
#if !defined(ENABLE_SEC_ITEM_SHIM)
@@ -2213,19 +2236,19 @@ index 5fef3978fdfb0dc92609688fdf282ea26a0859ef..70190e180003951e48c4084a1788f504
#if !defined(ENABLE_SERVER_PRECONNECT)
diff --git a/Source/WTF/wtf/PlatformHave.h b/Source/WTF/wtf/PlatformHave.h
-index 33d00e530b23f32e279214a88379041ec2a7c3b7..0d7b3f08bef8f010d96d85df5d1672dac87054ec 100644
+index fff5b0214d7706179adf40c2701018c260c1c657..fa53df1cd9bbe9348636ce70ede2bcdbfbb2af84 100644
--- a/Source/WTF/wtf/PlatformHave.h
+++ b/Source/WTF/wtf/PlatformHave.h
-@@ -425,7 +425,7 @@
+@@ -433,7 +433,7 @@
#define HAVE_FOUNDATION_WITH_SAME_SITE_COOKIE_SUPPORT 1
#endif
--#if PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE)
-+#if PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE) || PLATFORM(WIN)
+-#if PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(HAIKU) || PLATFORM(WPE)
++#if PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(HAIKU) || PLATFORM(WPE) || PLATFORM(WIN)
#define HAVE_OS_DARK_MODE_SUPPORT 1
#endif
-@@ -1248,7 +1248,8 @@
+@@ -1249,7 +1249,8 @@
#endif
#if PLATFORM(MAC)
@@ -2235,6 +2258,41 @@ index 33d00e530b23f32e279214a88379041ec2a7c3b7..0d7b3f08bef8f010d96d85df5d1672da
#endif
#if !defined(HAVE_LOCKDOWN_MODE_PDF_ADDITIONS) && \
+diff --git a/Source/WTF/wtf/StdLibExtras.h b/Source/WTF/wtf/StdLibExtras.h
+index 134f4922b0bd97ff80caaf7e4ac31b387f1c064f..f132cea6ad3306c5f1bd6252a53bb7b411b0bb54 100644
+--- a/Source/WTF/wtf/StdLibExtras.h
++++ b/Source/WTF/wtf/StdLibExtras.h
+@@ -27,6 +27,7 @@
+ #pragma once
+
+ #include
++#include
+ #include
+ #include
+ #include
+@@ -45,6 +46,22 @@
+
+ #define SINGLE_ARG(...) __VA_ARGS__ // useful when a macro argument includes a comma
+
++// FIXME: Custom implementation not needed once all Linux systems use >libstdc++-10.
++#if !defined(__cpp_lib_bit_cast) || __cpp_lib_bit_cast < 201806L
++namespace std {
++
++template ::value
++ && std::is_trivially_copyable::value,
++ int>::type = 0>
++inline constexpr T bit_cast(const U &value) {
++ return __builtin_bit_cast(T, value);
++}
++
++}
++#endif
++
+ // Use this macro to declare and define a debug-only global variable that may have a
+ // non-trivial constructor and destructor. When building with clang, this will suppress
+ // warnings about global constructors and exit-time destructors.
diff --git a/Source/WTF/wtf/unicode/UTF8Conversion.h b/Source/WTF/wtf/unicode/UTF8Conversion.h
index 007b8fe3292f326504013be8198ae020f7aacf35..4439f901b4a9a92d881c7cee24ad9cd28149d276 100644
--- a/Source/WTF/wtf/unicode/UTF8Conversion.h
@@ -2251,10 +2309,10 @@ index 007b8fe3292f326504013be8198ae020f7aacf35..4439f901b4a9a92d881c7cee24ad9cd2
namespace Unicode {
diff --git a/Source/WebCore/DerivedSources.make b/Source/WebCore/DerivedSources.make
-index 3c93bf646040ac804afc9c98b855829e98b87269..366b9c6714aa4f378a156577bd932a31ee5737a6 100644
+index f4df43f3fca6ec439815f3d0f2195abad6b046d6..9706dd76ea82d1dc23226c0ad5fd8cb57ba555b0 100644
--- a/Source/WebCore/DerivedSources.make
+++ b/Source/WebCore/DerivedSources.make
-@@ -1156,6 +1156,10 @@ JS_BINDING_IDLS := \
+@@ -1191,6 +1191,10 @@ JS_BINDING_IDLS := \
$(WebCore)/dom/SubscriberCallback.idl \
$(WebCore)/dom/SubscriptionObserver.idl \
$(WebCore)/dom/SubscriptionObserverCallback.idl \
@@ -2265,7 +2323,7 @@ index 3c93bf646040ac804afc9c98b855829e98b87269..366b9c6714aa4f378a156577bd932a31
$(WebCore)/dom/Text.idl \
$(WebCore)/dom/TextDecoder.idl \
$(WebCore)/dom/TextDecoderStream.idl \
-@@ -1745,9 +1749,6 @@ JS_BINDING_IDLS := \
+@@ -1783,9 +1787,6 @@ JS_BINDING_IDLS := \
ADDITIONAL_BINDING_IDLS = \
DocumentTouch.idl \
GestureEvent.idl \
@@ -2276,7 +2334,7 @@ index 3c93bf646040ac804afc9c98b855829e98b87269..366b9c6714aa4f378a156577bd932a31
vpath %.in $(WEBKITADDITIONS_HEADER_SEARCH_PATHS)
diff --git a/Source/WebCore/Modules/geolocation/Geolocation.cpp b/Source/WebCore/Modules/geolocation/Geolocation.cpp
-index be20114bdebd713c5224893ac73078b03b22e392..4174bdf02631d421a0f1fdadfde21c308e4c7735 100644
+index 268f1dfa20097a708f1531975a908fa782b1adb2..5b5eb45dc77aa09be9df39073998eb7a25f44163 100644
--- a/Source/WebCore/Modules/geolocation/Geolocation.cpp
+++ b/Source/WebCore/Modules/geolocation/Geolocation.cpp
@@ -360,8 +360,9 @@ bool Geolocation::shouldBlockGeolocationRequests()
@@ -2327,19 +2385,20 @@ index 506ebb25fa290f27a75674a6fe5506fc311910d6..07d34c567b42aca08b188243c3f036f6
[self sendSpeechEndIfNeeded];
diff --git a/Source/WebCore/PlatformWPE.cmake b/Source/WebCore/PlatformWPE.cmake
-index c6a03b56d8358316c9ce422c1a11438bd216f80f..69fbd319b7cd084ca125a8db1b5d92ef6a4dc10f 100644
+index 2aada6f29a04eb3fb0530c47d0fb76f8e3d1bb9f..b936f5862a246c9bf30adbb593c348450b1510ba 100644
--- a/Source/WebCore/PlatformWPE.cmake
+++ b/Source/WebCore/PlatformWPE.cmake
-@@ -60,6 +60,7 @@ list(APPEND WebCore_PRIVATE_FRAMEWORK_HEADERS
- platform/graphics/libwpe/PlatformDisplayLibWPE.h
+@@ -59,6 +59,8 @@ list(APPEND WebCore_PRIVATE_FRAMEWORK_HEADERS
+ platform/graphics/gbm/PlatformDisplayGBM.h
- platform/graphics/wayland/PlatformDisplayWayland.h
+ platform/graphics/libwpe/PlatformDisplayLibWPE.h
++
+ platform/wpe/SelectionData.h
)
set(CSS_VALUE_PLATFORM_DEFINES "HAVE_OS_DARK_MODE_SUPPORT=1")
diff --git a/Source/WebCore/SourcesCocoa.txt b/Source/WebCore/SourcesCocoa.txt
-index 8ca60190e2f9110b74e37350ae12de7ff324de0e..0ad2e7621561b0a0eb67dc39555a2b99169df9c2 100644
+index 7b59e7fab81dbf2fa1847b40f1aac9437c6af62d..689a87649ab0a1aef273528d41840cca6ced46fe 100644
--- a/Source/WebCore/SourcesCocoa.txt
+++ b/Source/WebCore/SourcesCocoa.txt
@@ -716,3 +716,9 @@ testing/cocoa/WebViewVisualIdentificationOverlay.mm
@@ -2353,10 +2412,10 @@ index 8ca60190e2f9110b74e37350ae12de7ff324de0e..0ad2e7621561b0a0eb67dc39555a2b99
+JSTouchList.cpp
+// Playwright end
diff --git a/Source/WebCore/SourcesGTK.txt b/Source/WebCore/SourcesGTK.txt
-index af2081f34b9d8d97864a6e9507805abc9e8eb6d7..06ed467b2c6e529baba22a04e03a4858f8552e19 100644
+index cafba5ad19fcce8184f9caeaf50445b3b2065522..75fa95a4f8248ad2d19c2c19dc22166a843f03bb 100644
--- a/Source/WebCore/SourcesGTK.txt
+++ b/Source/WebCore/SourcesGTK.txt
-@@ -110,3 +110,10 @@ platform/unix/LoggingUnix.cpp
+@@ -112,3 +112,10 @@ platform/unix/LoggingUnix.cpp
platform/unix/SharedMemoryUnix.cpp
platform/xdg/MIMETypeRegistryXdg.cpp
@@ -2368,7 +2427,7 @@ index af2081f34b9d8d97864a6e9507805abc9e8eb6d7..06ed467b2c6e529baba22a04e03a4858
+JSSpeechSynthesisEventInit.cpp
+// Playwright: end.
diff --git a/Source/WebCore/SourcesWPE.txt b/Source/WebCore/SourcesWPE.txt
-index 92f1879df295fc63a9194dc54d3f7499c5fe3041..67c40d056aee6a8149ed1ff16ce4c835e19f7f6c 100644
+index 3c68a8ed10cd24cffd26b4b70c3adad8eb6ba91f..b36dee714fdceba5248922bfb6d2046922ca6b34 100644
--- a/Source/WebCore/SourcesWPE.txt
+++ b/Source/WebCore/SourcesWPE.txt
@@ -46,6 +46,8 @@ editing/libwpe/EditorLibWPE.cpp
@@ -2380,7 +2439,7 @@ index 92f1879df295fc63a9194dc54d3f7499c5fe3041..67c40d056aee6a8149ed1ff16ce4c835
page/linux/ResourceUsageOverlayLinux.cpp
page/linux/ResourceUsageThreadLinux.cpp
-@@ -87,6 +89,17 @@ platform/text/LocaleICU.cpp
+@@ -90,6 +92,17 @@ platform/text/LocaleICU.cpp
platform/unix/LoggingUnix.cpp
platform/unix/SharedMemoryUnix.cpp
@@ -2399,10 +2458,10 @@ index 92f1879df295fc63a9194dc54d3f7499c5fe3041..67c40d056aee6a8149ed1ff16ce4c835
+JSSpeechSynthesisEventInit.cpp
+// Playwright: end.
diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj
-index 2dd82a349b4c111364b9032a5e5a3d81e238798e..f18701e5aa5a6dd0bd2619a0cfb92316aee41ffd 100644
+index 391eed371e8c521098e78df1990dd5dd0a2e1c52..0eb1418a2d334e58faf5011bc65f797b0c8cc322 100644
--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj
-@@ -6198,6 +6198,13 @@
+@@ -6224,6 +6224,13 @@
EDE3A5000C7A430600956A37 /* ColorMac.h in Headers */ = {isa = PBXBuildFile; fileRef = EDE3A4FF0C7A430600956A37 /* ColorMac.h */; settings = {ATTRIBUTES = (Private, ); }; };
EDEC98030AED7E170059137F /* WebCorePrefix.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEC98020AED7E170059137F /* WebCorePrefix.h */; };
EFCC6C8F20FE914400A2321B /* CanvasActivityRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = EFCC6C8D20FE914000A2321B /* CanvasActivityRecord.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -2416,8 +2475,8 @@ index 2dd82a349b4c111364b9032a5e5a3d81e238798e..f18701e5aa5a6dd0bd2619a0cfb92316
F12171F616A8CF0B000053CA /* WebVTTElement.h in Headers */ = {isa = PBXBuildFile; fileRef = F12171F416A8BC63000053CA /* WebVTTElement.h */; };
F32BDCD92363AACA0073B6AE /* UserGestureEmulationScope.h in Headers */ = {isa = PBXBuildFile; fileRef = F32BDCD72363AACA0073B6AE /* UserGestureEmulationScope.h */; };
F344C7141125B82C00F26EEE /* InspectorFrontendClient.h in Headers */ = {isa = PBXBuildFile; fileRef = F344C7121125B82C00F26EEE /* InspectorFrontendClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
-@@ -20153,6 +20160,14 @@
- EDEC98020AED7E170059137F /* WebCorePrefix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WebCorePrefix.h; sourceTree = ""; tabWidth = 4; usesTabs = 0; };
+@@ -20367,6 +20374,14 @@
+ EE7A169F2C607BFA0057B563 /* StartViewTransitionOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StartViewTransitionOptions.h; sourceTree = ""; };
EFB7287B2124C73D005C2558 /* CanvasActivityRecord.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CanvasActivityRecord.cpp; sourceTree = ""; };
EFCC6C8D20FE914000A2321B /* CanvasActivityRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CanvasActivityRecord.h; sourceTree = ""; };
+ F050E16623AC9C070011CE47 /* PlatformTouchEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformTouchEvent.h; sourceTree = ""; };
@@ -2431,7 +2490,7 @@ index 2dd82a349b4c111364b9032a5e5a3d81e238798e..f18701e5aa5a6dd0bd2619a0cfb92316
F12171F316A8BC63000053CA /* WebVTTElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebVTTElement.cpp; sourceTree = ""; };
F12171F416A8BC63000053CA /* WebVTTElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebVTTElement.h; sourceTree = ""; };
F32BDCD52363AAC90073B6AE /* UserGestureEmulationScope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserGestureEmulationScope.cpp; sourceTree = ""; };
-@@ -27805,6 +27820,11 @@
+@@ -28052,6 +28067,11 @@
BC4A5324256055590028C592 /* TextDirectionSubmenuInclusionBehavior.h */,
2D4F96F11A1ECC240098BF88 /* TextIndicator.cpp */,
2D4F96F21A1ECC240098BF88 /* TextIndicator.h */,
@@ -2443,7 +2502,7 @@ index 2dd82a349b4c111364b9032a5e5a3d81e238798e..f18701e5aa5a6dd0bd2619a0cfb92316
F48570A42644C76D00C05F71 /* TranslationContextMenuInfo.h */,
F4E1965F21F26E4E00285078 /* UndoItem.cpp */,
2ECDBAD521D8906300F00ECD /* UndoItem.h */,
-@@ -34147,6 +34167,8 @@
+@@ -34451,6 +34471,8 @@
29E4D8DF16B0940F00C84704 /* PlatformSpeechSynthesizer.h */,
1AD8F81A11CAB9E900E93E54 /* PlatformStrategies.cpp */,
1AD8F81911CAB9E900E93E54 /* PlatformStrategies.h */,
@@ -2452,7 +2511,7 @@ index 2dd82a349b4c111364b9032a5e5a3d81e238798e..f18701e5aa5a6dd0bd2619a0cfb92316
0FD7C21D23CE41E30096D102 /* PlatformWheelEvent.cpp */,
935C476A09AC4D4F00A6AAB4 /* PlatformWheelEvent.h */,
F491A66A2A9FEFA300F96146 /* PlatformWheelEvent.serialization.in */,
-@@ -36817,6 +36839,7 @@
+@@ -37208,6 +37230,7 @@
AD6E71AB1668899D00320C13 /* DocumentSharedObjectPool.h */,
6BDB5DC1227BD3B800919770 /* DocumentStorageAccess.cpp */,
6BDB5DC0227BD3B800919770 /* DocumentStorageAccess.h */,
@@ -2460,7 +2519,7 @@ index 2dd82a349b4c111364b9032a5e5a3d81e238798e..f18701e5aa5a6dd0bd2619a0cfb92316
7CE7FA5B1EF882300060C9D6 /* DocumentTouch.cpp */,
7CE7FA591EF882300060C9D6 /* DocumentTouch.h */,
A8185F3209765765005826D9 /* DocumentType.cpp */,
-@@ -41547,6 +41570,8 @@
+@@ -41975,6 +41998,8 @@
F4E90A3C2B52038E002DA469 /* PlatformTextAlternatives.h in Headers */,
0F7D07331884C56C00B4AF86 /* PlatformTextTrack.h in Headers */,
074E82BB18A69F0E007EF54C /* PlatformTimeRanges.h in Headers */,
@@ -2469,7 +2528,7 @@ index 2dd82a349b4c111364b9032a5e5a3d81e238798e..f18701e5aa5a6dd0bd2619a0cfb92316
CDD08ABD277E542600EA3755 /* PlatformTrackConfiguration.h in Headers */,
CD1F9B022700323D00617EB6 /* PlatformVideoColorPrimaries.h in Headers */,
CD1F9B01270020B700617EB6 /* PlatformVideoColorSpace.h in Headers */,
-@@ -42826,6 +42851,7 @@
+@@ -43261,6 +43286,7 @@
0F54DD081881D5F5003EEDBB /* Touch.h in Headers */,
71B7EE0D21B5C6870031C1EF /* TouchAction.h in Headers */,
0F54DD091881D5F5003EEDBB /* TouchEvent.h in Headers */,
@@ -2477,7 +2536,7 @@ index 2dd82a349b4c111364b9032a5e5a3d81e238798e..f18701e5aa5a6dd0bd2619a0cfb92316
0F54DD0A1881D5F5003EEDBB /* TouchList.h in Headers */,
070334D71459FFD5008D8D45 /* TrackBase.h in Headers */,
BE88E0C21715CE2600658D98 /* TrackListBase.h in Headers */,
-@@ -43980,6 +44006,8 @@
+@@ -44423,6 +44449,8 @@
2D22830323A8470700364B7E /* CursorMac.mm in Sources */,
5CBD59592280E926002B22AA /* CustomHeaderFields.cpp in Sources */,
07E4BDBF2A3A5FAB000D5509 /* DictationCaretAnimator.cpp in Sources */,
@@ -2486,7 +2545,7 @@ index 2dd82a349b4c111364b9032a5e5a3d81e238798e..f18701e5aa5a6dd0bd2619a0cfb92316
7CE6CBFD187F394900D46BF5 /* FormatConverter.cpp in Sources */,
4667EA3E2968D9DA00BAB1E2 /* GameControllerHapticEffect.mm in Sources */,
46FE73D32968E52000B8064C /* GameControllerHapticEngines.mm in Sources */,
-@@ -44068,6 +44096,9 @@
+@@ -44511,6 +44539,9 @@
CE88EE262414467B007F29C2 /* TextAlternativeWithRange.mm in Sources */,
BE39137129B267F500FA5D4F /* TextTransformCocoa.cpp in Sources */,
51DF6D800B92A18E00C2DC85 /* ThreadCheck.mm in Sources */,
@@ -2497,18 +2556,18 @@ index 2dd82a349b4c111364b9032a5e5a3d81e238798e..f18701e5aa5a6dd0bd2619a0cfb92316
538EC8021F96AF81004D22A8 /* UnifiedSource1.cpp in Sources */,
538EC8051F96AF81004D22A8 /* UnifiedSource2-mm.mm in Sources */,
diff --git a/Source/WebCore/accessibility/AccessibilityObject.cpp b/Source/WebCore/accessibility/AccessibilityObject.cpp
-index a934d32a2b01e6273e1d97a7b8fd7e0999495dc5..379eee720dda27b29b32f26ab5a10d83ce78f4b9 100644
+index 409ba22d242695a6612a1a2217bb555bd1a382cf..18d6af9e268b353d639aee78642576d6de96fc60 100644
--- a/Source/WebCore/accessibility/AccessibilityObject.cpp
+++ b/Source/WebCore/accessibility/AccessibilityObject.cpp
-@@ -67,6 +67,7 @@
- #include "HTMLSlotElement.h"
+@@ -69,6 +69,7 @@
+ #include "HTMLTableSectionElement.h"
#include "HTMLTextAreaElement.h"
#include "HitTestResult.h"
+#include "InspectorInstrumentation.h"
#include "LocalFrame.h"
#include "LocalizedStrings.h"
#include "MathMLNames.h"
-@@ -3968,9 +3969,14 @@ AccessibilityObjectInclusion AccessibilityObject::defaultObjectInclusion() const
+@@ -4018,7 +4019,12 @@ AccessibilityObjectInclusion AccessibilityObject::defaultObjectInclusion() const
if (roleValue() == AccessibilityRole::ApplicationDialog)
return AccessibilityObjectInclusion::IncludeObject;
@@ -2520,13 +2579,10 @@ index a934d32a2b01e6273e1d97a7b8fd7e0999495dc5..379eee720dda27b29b32f26ab5a10d83
+ }
+ return platformBehavior;
}
--
-+
- bool AccessibilityObject::accessibilityIsIgnored() const
- {
- AXComputedObjectAttributeCache* attributeCache = nullptr;
+
+ bool AccessibilityObject::isWithinHiddenWebArea() const
diff --git a/Source/WebCore/accessibility/atspi/AccessibilityObjectTextAtspi.cpp b/Source/WebCore/accessibility/atspi/AccessibilityObjectTextAtspi.cpp
-index 7641906564fb1e480f56923343a8ee6149f60820..ed530124becb719e66b211f468c24376887c4cc4 100644
+index bdfc31aa68fb0cf0e71351ae86b2af8a903a3c57..fbe06025d4147848cc4c7f3e3bac299da8c98f85 100644
--- a/Source/WebCore/accessibility/atspi/AccessibilityObjectTextAtspi.cpp
+++ b/Source/WebCore/accessibility/atspi/AccessibilityObjectTextAtspi.cpp
@@ -289,7 +289,7 @@ String AccessibilityObjectAtspi::text() const
@@ -2548,10 +2604,10 @@ index 7641906564fb1e480f56923343a8ee6149f60820..ed530124becb719e66b211f468c24376
return textLength;
}
diff --git a/Source/WebCore/bindings/js/WebCoreBuiltinNames.h b/Source/WebCore/bindings/js/WebCoreBuiltinNames.h
-index bec74918c24d17a88bb1583504d00e2a11a5e6c6..8c86fc1552c091e6751e87c60af728b4ce37f2a1 100644
+index 479938f501c65222a5820087c578184d64169dec..9bf7df2bc66c77b92edb1f93887922071d539458 100644
--- a/Source/WebCore/bindings/js/WebCoreBuiltinNames.h
+++ b/Source/WebCore/bindings/js/WebCoreBuiltinNames.h
-@@ -183,6 +183,8 @@ namespace WebCore {
+@@ -185,6 +185,8 @@ namespace WebCore {
macro(DelayNode) \
macro(DeprecationReportBody) \
macro(DigitalCredential) \
@@ -2561,7 +2617,7 @@ index bec74918c24d17a88bb1583504d00e2a11a5e6c6..8c86fc1552c091e6751e87c60af728b4
macro(DynamicsCompressorNode) \
macro(ElementInternals) \
diff --git a/Source/WebCore/css/query/MediaQueryFeatures.cpp b/Source/WebCore/css/query/MediaQueryFeatures.cpp
-index 450c429a76a97ba079087eaecc0deca236f3a419..726765635432192654ee218874813a1d09a83af4 100644
+index a4f2b2d167f77b19104daa9c56f62ae76485cb1a..c877d2439414452c4dfb79a6881dcf85e1d35fa0 100644
--- a/Source/WebCore/css/query/MediaQueryFeatures.cpp
+++ b/Source/WebCore/css/query/MediaQueryFeatures.cpp
@@ -364,7 +364,11 @@ const FeatureSchema& forcedColors()
@@ -2577,7 +2633,7 @@ index 450c429a76a97ba079087eaecc0deca236f3a419..726765635432192654ee218874813a1d
return MatchingIdentifiers { CSSValueNone };
}
};
-@@ -546,6 +550,9 @@ const FeatureSchema& prefersReducedMotion()
+@@ -540,6 +544,9 @@ const FeatureSchema& prefersReducedMotion()
[](auto& context) {
bool userPrefersReducedMotion = [&] {
Ref frame = *context.document->frame();
@@ -2588,10 +2644,10 @@ index 450c429a76a97ba079087eaecc0deca236f3a419..726765635432192654ee218874813a1d
case ForcedAccessibilityValue::On:
return true;
diff --git a/Source/WebCore/dom/DataTransfer.cpp b/Source/WebCore/dom/DataTransfer.cpp
-index b56c600b6159973dc8a33db1deba0cfbb77abf48..a347a85381888e2f6423393552d619938ad34f21 100644
+index 0aec57b302c54f2b02beaeec4a9a6733612212a9..726895552b252b83cdb4f9dd87867a6afc3ed101 100644
--- a/Source/WebCore/dom/DataTransfer.cpp
+++ b/Source/WebCore/dom/DataTransfer.cpp
-@@ -510,6 +510,14 @@ Ref DataTransfer::createForDrag(const Document& document)
+@@ -512,6 +512,14 @@ Ref DataTransfer::createForDrag(const Document& document)
return adoptRef(*new DataTransfer(StoreMode::ReadWrite, Pasteboard::createForDragAndDrop(PagePasteboardContext::create(document.pageID())), Type::DragAndDropData));
}
@@ -2681,23 +2737,25 @@ index 9b344003de17b96d8b9ca8c7f32143a27543b1ea..2208a3f2b7d930bcd291e65b474d4c30
] partial interface Element {
// Returns Promise if PointerLockOptionsEnabled Runtime Flag is set, otherwise returns undefined.
diff --git a/Source/WebCore/dom/PointerEvent.cpp b/Source/WebCore/dom/PointerEvent.cpp
-index 204b5f08ba950ead5f7d853d3c7fc9274ce46a26..e2f117a2a3e221fc4ca14b02c82cda952f0cd63b 100644
+index 2a728c134f837ee36c033971e1c47792f4a3caf2..b1ecb3b2dd2efc43d679bb0f678457188cb2cb3a 100644
--- a/Source/WebCore/dom/PointerEvent.cpp
+++ b/Source/WebCore/dom/PointerEvent.cpp
-@@ -27,9 +27,11 @@
+@@ -27,10 +27,13 @@
#include "PointerEvent.h"
#include "EventNames.h"
+#include "MouseEvent.h"
#include "Node.h"
#include "PlatformMouseEvent.h"
- #include "PointerEventTypeNames.h"
+#include "PlatformTouchEvent.h"
- #include
+ #include "PointerEventTypeNames.h"
+ #include
++#include
namespace WebCore {
-@@ -133,4 +135,51 @@ Vector[> PointerEvent::getCoalescedEvents()
- return m_coalescedEvents;
+
+@@ -292,4 +295,59 @@ void PointerEvent::receivedTarget()
+ predictedEvent->setTarget(this->target());
}
+#if ENABLE(TOUCH_EVENTS) && !PLATFORM(IOS_FAMILY) && !PLATFORM(WPE)
@@ -2722,26 +2780,34 @@ index 204b5f08ba950ead5f7d853d3c7fc9274ce46a26..e2f117a2a3e221fc4ca14b02c82cda95
+ return nullAtom();
+}
+
-+Ref PointerEvent::create(const PlatformTouchEvent& event, unsigned index, bool isPrimary, Ref&& view, const IntPoint& touchDelta)
++Ref PointerEvent::create(const PlatformTouchEvent& event, const Vector][>& coalescedEvents, const Vector][>& predictedEvents, unsigned touchIndex, bool isPrimary, Ref&& view, const IntPoint& touchDelta)
+{
-+ const auto& type = pointerEventType(event.touchPoints().at(index).state());
-+ return adoptRef(*new PointerEvent(type, event, typeIsCancelable(type), index, isPrimary, WTFMove(view), touchDelta));
++ const auto& type = pointerEventType(event.touchPoints().at(touchIndex).state());
++ return adoptRef(*new PointerEvent(type, event, coalescedEvents, predictedEvents, typeCanBubble(type), typeIsCancelable(type), touchIndex, isPrimary, WTFMove(view), touchDelta));
+}
+
-+Ref PointerEvent::create(const AtomString& type, const PlatformTouchEvent& event, unsigned index, bool isPrimary, Ref&& view, const IntPoint& touchDelta)
++Ref PointerEvent::create(const PlatformTouchEvent& event, const Vector][>& coalescedEvents, const Vector][>& predictedEvents, CanBubble canBubble, IsCancelable isCancelable, unsigned touchIndex, bool isPrimary, Ref&& view, const IntPoint& touchDelta)
+{
-+ return adoptRef(*new PointerEvent(type, event, typeIsCancelable(type), index, isPrimary, WTFMove(view), touchDelta));
++ const auto& type = pointerEventType(event.touchPoints().at(touchIndex).state());
++ return adoptRef(*new PointerEvent(type, event, coalescedEvents, predictedEvents, canBubble, isCancelable, touchIndex, isPrimary, WTFMove(view), touchDelta));
+}
+
-+PointerEvent::PointerEvent(const AtomString& type, const PlatformTouchEvent& event, IsCancelable isCancelable, unsigned index, bool isPrimary, Ref&& view, const IntPoint& touchDelta)
-+ : MouseEvent(EventInterfaceType::PointerEvent, type, typeCanBubble(type), isCancelable, typeIsComposed(type), event.timestamp().approximateMonotonicTime(), WTFMove(view), 0,
-+ event.touchPoints().at(index).pos(), event.touchPoints().at(index).pos(), touchDelta.x(), touchDelta.y(), event.modifiers(), buttonForType(type), buttonsForType(type), nullptr, 0, SyntheticClickType::NoTap, IsSimulated::No, IsTrusted::Yes)
-+ , m_pointerId(event.touchPoints().at(index).id())
-+ , m_width(2 * event.touchPoints().at(index).radiusX())
-+ , m_height(2 * event.touchPoints().at(index).radiusY())
-+ , m_pressure(event.touchPoints().at(index).force())
++Ref PointerEvent::create(const AtomString& type, const PlatformTouchEvent& event, const Vector][>& coalescedEvents, const Vector][>& predictedEvents, unsigned touchIndex, bool isPrimary, Ref&& view, const IntPoint& touchDelta)
++{
++ return adoptRef(*new PointerEvent(type, event, coalescedEvents, predictedEvents, typeCanBubble(type), typeIsCancelable(type), touchIndex, isPrimary, WTFMove(view), touchDelta));
++}
++
++PointerEvent::PointerEvent(const AtomString& type, const PlatformTouchEvent& event, const Vector][>& coalescedEvents, const Vector][>& predictedEvents, CanBubble canBubble, IsCancelable isCancelable, unsigned touchIndex, bool isPrimary, Ref&& view, const IntPoint& touchDelta)
++ : MouseEvent(EventInterfaceType::PointerEvent, type, canBubble, isCancelable, typeIsComposed(type), event.timestamp().approximateMonotonicTime(), WTFMove(view), 0,
++ event.touchPoints().at(touchIndex).pos(), event.touchPoints().at(touchIndex).pos(), touchDelta.x(), touchDelta.y(), event.modifiers(), buttonForType(type), buttonsForType(type), nullptr, 0, SyntheticClickType::NoTap, { }, { }, IsSimulated::No, IsTrusted::Yes)
++ , m_pointerId(event.touchPoints().at(touchIndex).id())
++ , m_width(2 * event.touchPoints().at(touchIndex).radiusX())
++ , m_height(2 * event.touchPoints().at(touchIndex).radiusY())
++ , m_pressure(event.touchPoints().at(touchIndex).force())
+ , m_pointerType(touchPointerEventType())
+ , m_isPrimary(isPrimary)
++ , m_coalescedEvents(coalescedEvents)
++ , m_predictedEvents(predictedEvents)
+{
+}
+
@@ -2749,7 +2815,7 @@ index 204b5f08ba950ead5f7d853d3c7fc9274ce46a26..e2f117a2a3e221fc4ca14b02c82cda95
+
} // namespace WebCore
diff --git a/Source/WebCore/dom/PointerEvent.h b/Source/WebCore/dom/PointerEvent.h
-index c54bbf8060253b9000f3da9be8ff327a2625ff86..6b05fc5f61444ea9dc7775491801c585ae44045e 100644
+index b034595d01bb63f3d72183c427fcc14695339ae2..1886e4bbba04c6177fad1562c891f2aeff0a8247 100644
--- a/Source/WebCore/dom/PointerEvent.h
+++ b/Source/WebCore/dom/PointerEvent.h
@@ -34,6 +34,8 @@
@@ -2761,22 +2827,22 @@ index c54bbf8060253b9000f3da9be8ff327a2625ff86..6b05fc5f61444ea9dc7775491801c585
#endif
#if ENABLE(TOUCH_EVENTS) && PLATFORM(WPE)
-@@ -88,7 +90,7 @@ public:
+@@ -94,7 +96,7 @@ public:
static Ref create(const AtomString& type, MouseButton, const MouseEvent&, PointerID, const String& pointerType, CanBubble, IsCancelable);
static Ref create(const AtomString& type, PointerID, const String& pointerType, IsPrimary = IsPrimary::No);
-#if ENABLE(TOUCH_EVENTS) && (PLATFORM(IOS_FAMILY) || PLATFORM(WPE))
+#if ENABLE(TOUCH_EVENTS)
- static Ref create(const PlatformTouchEvent&, unsigned touchIndex, bool isPrimary, Ref&&, const IntPoint& touchDelta = { });
- static Ref create(const AtomString& type, const PlatformTouchEvent&, unsigned touchIndex, bool isPrimary, Ref&&, const IntPoint& touchDelta = { });
- #endif
-@@ -144,7 +146,7 @@ private:
- PointerEvent(const AtomString&, Init&&);
- PointerEvent(const AtomString& type, MouseButton, const MouseEvent&, PointerID, const String& pointerType, CanBubble, IsCancelable);
+ static Ref create(const PlatformTouchEvent&, const Vector][>& coalescedEvents, const Vector][>& predictedEvents, unsigned touchIndex, bool isPrimary, Ref&&, const IntPoint& touchDelta = { });
+ static Ref create(const PlatformTouchEvent&, const Vector][>& coalescedEvents, const Vector][>& predictedEvents, CanBubble, IsCancelable, unsigned touchIndex, bool isPrimary, Ref&& view, const IntPoint& touchDelta = { });
+ static Ref create(const AtomString& type, const PlatformTouchEvent&, const Vector][>& coalescedEvents, const Vector][>& predictedEvents, unsigned touchIndex, bool isPrimary, Ref&&, const IntPoint& touchDelta = { });
+@@ -173,7 +175,7 @@ private:
+ PointerEvent();
+ PointerEvent(const AtomString&, Init&&, IsTrusted);
PointerEvent(const AtomString& type, PointerID, const String& pointerType, IsPrimary);
-#if ENABLE(TOUCH_EVENTS) && (PLATFORM(IOS_FAMILY) || PLATFORM(WPE))
+#if ENABLE(TOUCH_EVENTS)
- PointerEvent(const AtomString& type, const PlatformTouchEvent&, IsCancelable isCancelable, unsigned touchIndex, bool isPrimary, Ref&&, const IntPoint& touchDelta = { });
+ PointerEvent(const AtomString& type, const PlatformTouchEvent&, const Vector][>& coalescedEvents, const Vector][>& predictedEvents, CanBubble canBubble, IsCancelable isCancelable, unsigned touchIndex, bool isPrimary, Ref&&, const IntPoint& touchDelta = { });
#endif
diff --git a/Source/WebCore/editing/libwpe/EditorLibWPE.cpp b/Source/WebCore/editing/libwpe/EditorLibWPE.cpp
@@ -2807,7 +2873,7 @@ index 7813532cc52d582c42aebc979a1ecd1137765f08..c01cbd53ad2430a6ffab9a80fc73e74a
#endif // USE(LIBWPE)
diff --git a/Source/WebCore/html/FileInputType.cpp b/Source/WebCore/html/FileInputType.cpp
-index 7a26cfbbaf3d9583064a5eb30a049b5ac04847f0..1377da39ae4cc134b87358871fdb39431161244b 100644
+index e582d1bc610c7794c4ad181511317d2378b9248b..4c6be4b94913a4649b33f1989def3433455b7109 100644
--- a/Source/WebCore/html/FileInputType.cpp
+++ b/Source/WebCore/html/FileInputType.cpp
@@ -37,6 +37,7 @@
@@ -2842,10 +2908,10 @@ index 7a26cfbbaf3d9583064a5eb30a049b5ac04847f0..1377da39ae4cc134b87358871fdb3943
break;
}
diff --git a/Source/WebCore/inspector/InspectorController.cpp b/Source/WebCore/inspector/InspectorController.cpp
-index 79af2f2040520b6b1bba55c7fbf656828b95d885..1b41cedfe4fd49c1f5073a513df5a80fb492b973 100644
+index 9cffa4217cecadfc6813da5fa1a92ec1ca9b8796..32da50b05bb8563e0ded48734451a8e9967e48af 100644
--- a/Source/WebCore/inspector/InspectorController.cpp
+++ b/Source/WebCore/inspector/InspectorController.cpp
-@@ -287,6 +287,8 @@ void InspectorController::disconnectFrontend(FrontendChannel& frontendChannel)
+@@ -290,6 +290,8 @@ void InspectorController::disconnectFrontend(FrontendChannel& frontendChannel)
// Unplug all instrumentations since they aren't needed now.
InspectorInstrumentation::unregisterInstrumentingAgents(m_instrumentingAgents.get());
@@ -2854,7 +2920,7 @@ index 79af2f2040520b6b1bba55c7fbf656828b95d885..1b41cedfe4fd49c1f5073a513df5a80f
}
m_inspectorClient->frontendCountChanged(m_frontendRouter->frontendCount());
-@@ -306,6 +308,8 @@ void InspectorController::disconnectAllFrontends()
+@@ -309,6 +311,8 @@ void InspectorController::disconnectAllFrontends()
// The frontend should call setInspectorFrontendClient(nullptr) under closeWindow().
ASSERT(!m_inspectorFrontendClient);
@@ -2863,7 +2929,7 @@ index 79af2f2040520b6b1bba55c7fbf656828b95d885..1b41cedfe4fd49c1f5073a513df5a80f
if (!m_frontendRouter->hasFrontends())
return;
-@@ -394,8 +398,8 @@ void InspectorController::inspect(Node* node)
+@@ -397,8 +401,8 @@ void InspectorController::inspect(Node* node)
if (!enabled())
return;
@@ -2874,7 +2940,7 @@ index 79af2f2040520b6b1bba55c7fbf656828b95d885..1b41cedfe4fd49c1f5073a513df5a80f
ensureDOMAgent().inspect(node);
}
-@@ -538,4 +542,24 @@ void InspectorController::didComposite(LocalFrame& frame)
+@@ -541,4 +545,24 @@ void InspectorController::didComposite(LocalFrame& frame)
InspectorInstrumentation::didComposite(frame);
}
@@ -2900,10 +2966,10 @@ index 79af2f2040520b6b1bba55c7fbf656828b95d885..1b41cedfe4fd49c1f5073a513df5a80f
+
} // namespace WebCore
diff --git a/Source/WebCore/inspector/InspectorController.h b/Source/WebCore/inspector/InspectorController.h
-index 3a981b5bf5ca0bbf4d1c9f0b125564742cd8cad9..f8fc2ca6700461627933f149c5837075226a51a9 100644
+index 41cb9b8d298fbb4cb833346015fbf67c78577dbd..fa1b489eadfc5469bfeec6a35336ffa7fba2c8c1 100644
--- a/Source/WebCore/inspector/InspectorController.h
+++ b/Source/WebCore/inspector/InspectorController.h
-@@ -101,6 +101,10 @@ public:
+@@ -103,6 +103,10 @@ public:
WEBCORE_EXPORT void willComposite(LocalFrame&);
WEBCORE_EXPORT void didComposite(LocalFrame&);
@@ -2914,7 +2980,7 @@ index 3a981b5bf5ca0bbf4d1c9f0b125564742cd8cad9..f8fc2ca6700461627933f149c5837075
// Testing support.
WEBCORE_EXPORT bool isUnderTest() const;
void setIsUnderTest(bool isUnderTest) { m_isUnderTest = isUnderTest; }
-@@ -154,6 +158,7 @@ private:
+@@ -156,6 +160,7 @@ private:
bool m_isAutomaticInspection { false };
bool m_pauseAfterInitialization = { false };
bool m_didCreateLazyAgents { false };
@@ -3443,7 +3509,7 @@ index c028341e84e59a6b1b16107fd74feb21f70b12ab..d385418ac34e8f315f201801a2c65226
+
}
diff --git a/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp b/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp
-index ec5000cb553f244224ac2dc5be229c11c42e5d7f..cf6bc9545f04ad7fdba7c2dfaf46ac45e158f15e 100644
+index f2d47e0b0a15f48600bb6edd10430073ea60d9ee..20ee16a8c858599340ae33869baa188f9b17ae3f 100644
--- a/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp
+++ b/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp
@@ -55,6 +55,7 @@
@@ -3485,7 +3551,7 @@ index ec5000cb553f244224ac2dc5be229c11c42e5d7f..cf6bc9545f04ad7fdba7c2dfaf46ac45
#include "StaticNodeList.h"
#include "StyleProperties.h"
#include "StyleResolver.h"
-@@ -146,7 +154,8 @@ using namespace HTMLNames;
+@@ -149,7 +157,8 @@ using namespace HTMLNames;
static const size_t maxTextSize = 10000;
static const UChar horizontalEllipsisUChar[] = { horizontalEllipsis, 0 };
@@ -3495,7 +3561,7 @@ index ec5000cb553f244224ac2dc5be229c11c42e5d7f..cf6bc9545f04ad7fdba7c2dfaf46ac45
{
if (!colorObject)
return std::nullopt;
-@@ -165,7 +174,7 @@ static std::optional parseColor(RefPtr&& colorObject)
+@@ -168,7 +177,7 @@ static std::optional parseColor(RefPtr&& colorObject)
static std::optional parseRequiredConfigColor(const String& fieldName, JSON::Object& configObject)
{
@@ -3504,7 +3570,7 @@ index ec5000cb553f244224ac2dc5be229c11c42e5d7f..cf6bc9545f04ad7fdba7c2dfaf46ac45
}
static Color parseOptionalConfigColor(const String& fieldName, JSON::Object& configObject)
-@@ -193,6 +202,20 @@ static bool parseQuad(Ref&& quadArray, FloatQuad* quad)
+@@ -196,6 +205,20 @@ static bool parseQuad(Ref&& quadArray, FloatQuad* quad)
return true;
}
@@ -3523,9 +3589,9 @@ index ec5000cb553f244224ac2dc5be229c11c42e5d7f..cf6bc9545f04ad7fdba7c2dfaf46ac45
+}
+
class RevalidateStyleAttributeTask {
- WTF_MAKE_FAST_ALLOCATED;
+ WTF_MAKE_TZONE_ALLOCATED_INLINE(RevalidateStyleAttributeTask);
public:
-@@ -467,6 +490,20 @@ Node* InspectorDOMAgent::assertNode(Inspector::Protocol::ErrorString& errorStrin
+@@ -470,6 +493,20 @@ Node* InspectorDOMAgent::assertNode(Inspector::Protocol::ErrorString& errorStrin
return node.get();
}
@@ -3546,7 +3612,7 @@ index ec5000cb553f244224ac2dc5be229c11c42e5d7f..cf6bc9545f04ad7fdba7c2dfaf46ac45
Document* InspectorDOMAgent::assertDocument(Inspector::Protocol::ErrorString& errorString, Inspector::Protocol::DOM::NodeId nodeId)
{
RefPtr node = assertNode(errorString, nodeId);
-@@ -1541,16 +1578,7 @@ Inspector::Protocol::ErrorStringOr InspectorDOMAgent::highlightNode(std::o
+@@ -1544,16 +1581,7 @@ Inspector::Protocol::ErrorStringOr InspectorDOMAgent::highlightNode(std::o
Inspector::Protocol::ErrorStringOr InspectorDOMAgent::highlightNode(std::optional&& nodeId, const Inspector::Protocol::Runtime::RemoteObjectId& objectId, Ref&& highlightInspectorObject, RefPtr&& gridOverlayInspectorObject, RefPtr&& flexOverlayInspectorObject, std::optional&& showRulers)
{
Inspector::Protocol::ErrorString errorString;
@@ -3564,7 +3630,7 @@ index ec5000cb553f244224ac2dc5be229c11c42e5d7f..cf6bc9545f04ad7fdba7c2dfaf46ac45
if (!node)
return makeUnexpected(errorString);
-@@ -1805,15 +1833,155 @@ Inspector::Protocol::ErrorStringOr InspectorDOMAgent::setInspectedNode(Ins
+@@ -1808,15 +1836,155 @@ Inspector::Protocol::ErrorStringOr InspectorDOMAgent::setInspectedNode(Ins
return { };
}
@@ -3723,7 +3789,7 @@ index ec5000cb553f244224ac2dc5be229c11c42e5d7f..cf6bc9545f04ad7fdba7c2dfaf46ac45
if (!object)
return makeUnexpected("Missing injected script for given nodeId"_s);
-@@ -3079,7 +3247,7 @@ Inspector::Protocol::ErrorStringOr InspectorDO
+@@ -3082,7 +3250,7 @@ Inspector::Protocol::ErrorStringOr InspectorDO
return makeUnexpected("Missing node for given path"_s);
}
@@ -3732,7 +3798,7 @@ index ec5000cb553f244224ac2dc5be229c11c42e5d7f..cf6bc9545f04ad7fdba7c2dfaf46ac45
{
Document* document = &node->document();
if (auto* templateHost = document->templateDocumentHost())
-@@ -3088,12 +3256,18 @@ RefPtr InspectorDOMAgent::resolveNod
+@@ -3091,12 +3259,18 @@ RefPtr InspectorDOMAgent::resolveNod
if (!frame)
return nullptr;
@@ -3754,7 +3820,7 @@ index ec5000cb553f244224ac2dc5be229c11c42e5d7f..cf6bc9545f04ad7fdba7c2dfaf46ac45
}
Node* InspectorDOMAgent::scriptValueAsNode(JSC::JSValue value)
-@@ -3201,4 +3375,89 @@ Inspector::Protocol::ErrorStringOr][> In
+@@ -3204,4 +3378,89 @@ Inspector::Protocol::ErrorStringOr][> In
#endif
}
@@ -3845,10 +3911,10 @@ index ec5000cb553f244224ac2dc5be229c11c42e5d7f..cf6bc9545f04ad7fdba7c2dfaf46ac45
+
} // namespace WebCore
diff --git a/Source/WebCore/inspector/agents/InspectorDOMAgent.h b/Source/WebCore/inspector/agents/InspectorDOMAgent.h
-index 5f1dba2bc4d5c2f113a88dcc9ba479679cb79233..73e49d699919b68cffff41f612e461e25235155b 100644
+index 978176d20859bf70ce8e44acbb052ceca9463b06..44fd236a64a05290c9f3cbf0b17398f74c711d3b 100644
--- a/Source/WebCore/inspector/agents/InspectorDOMAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorDOMAgent.h
-@@ -57,6 +57,7 @@ namespace WebCore {
+@@ -58,6 +58,7 @@ namespace WebCore {
class AXCoreObject;
class CharacterData;
@@ -3856,7 +3922,7 @@ index 5f1dba2bc4d5c2f113a88dcc9ba479679cb79233..73e49d699919b68cffff41f612e461e2
class DOMEditor;
class Document;
class Element;
-@@ -91,6 +92,7 @@ public:
+@@ -92,6 +93,7 @@ public:
static String toErrorString(Exception&&);
static String documentURLString(Document*);
@@ -3864,7 +3930,7 @@ index 5f1dba2bc4d5c2f113a88dcc9ba479679cb79233..73e49d699919b68cffff41f612e461e2
// We represent embedded doms as a part of the same hierarchy. Hence we treat children of frame owners differently.
// We also skip whitespace text nodes conditionally. Following methods encapsulate these specifics.
-@@ -134,7 +136,7 @@ public:
+@@ -135,7 +137,7 @@ public:
Inspector::Protocol::ErrorStringOr> performSearch(const String& query, RefPtr&& nodeIds, std::optional&& caseSensitive);
Inspector::Protocol::ErrorStringOr][>> getSearchResults(const String& searchId, int fromIndex, int toIndex);
Inspector::Protocol::ErrorStringOr discardSearchResults(const String& searchId);
@@ -3873,7 +3939,7 @@ index 5f1dba2bc4d5c2f113a88dcc9ba479679cb79233..73e49d699919b68cffff41f612e461e2
Inspector::Protocol::ErrorStringOr][>> getAttributes(Inspector::Protocol::DOM::NodeId);
#if PLATFORM(IOS_FAMILY)
Inspector::Protocol::ErrorStringOr setInspectModeEnabled(bool, RefPtr&& highlightConfig, RefPtr&& gridOverlayConfig, RefPtr&& flexOverlayConfig);
-@@ -171,6 +173,10 @@ public:
+@@ -172,6 +174,10 @@ public:
Inspector::Protocol::ErrorStringOr setInspectedNode(Inspector::Protocol::DOM::NodeId);
Inspector::Protocol::ErrorStringOr setAllowEditingUserAgentShadowTrees(bool);
Inspector::Protocol::ErrorStringOr][> getMediaStats(Inspector::Protocol::DOM::NodeId);
@@ -3884,7 +3950,7 @@ index 5f1dba2bc4d5c2f113a88dcc9ba479679cb79233..73e49d699919b68cffff41f612e461e2
// InspectorInstrumentation
Inspector::Protocol::DOM::NodeId identifierForNode(Node&);
-@@ -212,7 +218,7 @@ public:
+@@ -213,7 +219,7 @@ public:
Node* nodeForId(Inspector::Protocol::DOM::NodeId);
Inspector::Protocol::DOM::NodeId boundNodeId(const Node*);
@@ -3893,7 +3959,7 @@ index 5f1dba2bc4d5c2f113a88dcc9ba479679cb79233..73e49d699919b68cffff41f612e461e2
bool handleMousePress();
void mouseDidMoveOverElement(const HitTestResult&, OptionSet);
void inspect(Node*);
-@@ -224,12 +230,15 @@ public:
+@@ -225,12 +231,15 @@ public:
void reset();
Node* assertNode(Inspector::Protocol::ErrorString&, Inspector::Protocol::DOM::NodeId);
@@ -3909,7 +3975,7 @@ index 5f1dba2bc4d5c2f113a88dcc9ba479679cb79233..73e49d699919b68cffff41f612e461e2
private:
#if ENABLE(VIDEO)
void mediaMetricsTimerFired();
-@@ -259,7 +268,6 @@ private:
+@@ -260,7 +269,6 @@ private:
void processAccessibilityChildren(AXCoreObject&, JSON::ArrayOf&);
Node* nodeForPath(const String& path);
@@ -3918,7 +3984,7 @@ index 5f1dba2bc4d5c2f113a88dcc9ba479679cb79233..73e49d699919b68cffff41f612e461e2
void discardBindings();
diff --git a/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp b/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
-index f8a58175bdaa13ae7d2bb722df119e140ec7618f..b601fdd3d16a3fc016ce3af50d416a0880990d7b 100644
+index adbedee377dad747f03b98cfdcf719b4283e51b2..475365f50feeb28354fa3e86ff847a6fd65c8a21 100644
--- a/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
+++ b/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
@@ -59,6 +59,7 @@
@@ -3929,7 +3995,7 @@ index f8a58175bdaa13ae7d2bb722df119e140ec7618f..b601fdd3d16a3fc016ce3af50d416a08
#include "Page.h"
#include "PlatformStrategies.h"
#include "ProgressTracker.h"
-@@ -340,8 +341,8 @@ static Ref buildObjectForResourceRequest(
+@@ -345,8 +346,8 @@ static Ref buildObjectForResourceRequest(
.release();
if (request.httpBody() && !request.httpBody()->isEmpty()) {
@@ -3940,7 +4006,7 @@ index f8a58175bdaa13ae7d2bb722df119e140ec7618f..b601fdd3d16a3fc016ce3af50d416a08
}
if (resourceLoader) {
-@@ -394,6 +395,8 @@ RefPtr InspectorNetworkAgent::buildObjec
+@@ -399,6 +400,8 @@ RefPtr InspectorNetworkAgent::buildObjec
.setSource(responseSource(response.source()))
.release();
@@ -3949,7 +4015,7 @@ index f8a58175bdaa13ae7d2bb722df119e140ec7618f..b601fdd3d16a3fc016ce3af50d416a08
if (resourceLoader) {
auto* metrics = response.deprecatedNetworkLoadMetricsOrNull();
responseObject->setTiming(buildObjectForTiming(metrics ? *metrics : NetworkLoadMetrics::emptyMetrics(), *resourceLoader));
-@@ -680,6 +683,9 @@ void InspectorNetworkAgent::didFailLoading(ResourceLoaderIdentifier identifier,
+@@ -685,6 +688,9 @@ void InspectorNetworkAgent::didFailLoading(ResourceLoaderIdentifier identifier,
String requestId = IdentifiersFactory::requestId(identifier.toUInt64());
if (loader && m_resourcesData->resourceType(requestId) == InspectorPageAgent::DocumentResource) {
@@ -3959,7 +4025,7 @@ index f8a58175bdaa13ae7d2bb722df119e140ec7618f..b601fdd3d16a3fc016ce3af50d416a08
auto* frame = loader->frame();
if (frame && frame->loader().documentLoader() && frame->document()) {
m_resourcesData->addResourceSharedBuffer(requestId,
-@@ -909,6 +915,7 @@ Inspector::Protocol::ErrorStringOr InspectorNetworkAgent::disable()
+@@ -914,6 +920,7 @@ Inspector::Protocol::ErrorStringOr InspectorNetworkAgent::disable()
m_instrumentingAgents.setEnabledNetworkAgent(nullptr);
m_resourcesData->clear();
m_extraRequestHeaders.clear();
@@ -3967,7 +4033,7 @@ index f8a58175bdaa13ae7d2bb722df119e140ec7618f..b601fdd3d16a3fc016ce3af50d416a08
continuePendingRequests();
continuePendingResponses();
-@@ -961,6 +968,7 @@ void InspectorNetworkAgent::continuePendingResponses()
+@@ -966,6 +973,7 @@ void InspectorNetworkAgent::continuePendingResponses()
Inspector::Protocol::ErrorStringOr InspectorNetworkAgent::setExtraHTTPHeaders(Ref&& headers)
{
@@ -3975,7 +4041,7 @@ index f8a58175bdaa13ae7d2bb722df119e140ec7618f..b601fdd3d16a3fc016ce3af50d416a08
for (auto& entry : headers.get()) {
auto stringValue = entry.value->asString();
if (!!stringValue)
-@@ -1210,6 +1218,11 @@ void InspectorNetworkAgent::interceptResponse(const ResourceResponse& response,
+@@ -1215,6 +1223,11 @@ void InspectorNetworkAgent::interceptResponse(const ResourceResponse& response,
m_frontendDispatcher->responseIntercepted(requestId, resourceResponse.releaseNonNull());
}
@@ -3987,7 +4053,7 @@ index f8a58175bdaa13ae7d2bb722df119e140ec7618f..b601fdd3d16a3fc016ce3af50d416a08
Inspector::Protocol::ErrorStringOr InspectorNetworkAgent::interceptContinue(const Inspector::Protocol::Network::RequestId& requestId, Inspector::Protocol::Network::NetworkStage networkStage)
{
switch (networkStage) {
-@@ -1239,6 +1252,9 @@ Inspector::Protocol::ErrorStringOr InspectorNetworkAgent::interceptWithReq
+@@ -1244,6 +1257,9 @@ Inspector::Protocol::ErrorStringOr InspectorNetworkAgent::interceptWithReq
return makeUnexpected("Missing pending intercept request for given requestId"_s);
auto& loader = *pendingRequest->m_loader;
@@ -3997,7 +4063,7 @@ index f8a58175bdaa13ae7d2bb722df119e140ec7618f..b601fdd3d16a3fc016ce3af50d416a08
ResourceRequest request = loader.request();
if (!!url)
request.setURL(URL({ }, url));
-@@ -1334,14 +1350,23 @@ Inspector::Protocol::ErrorStringOr InspectorNetworkAgent::interceptRequest
+@@ -1339,14 +1355,23 @@ Inspector::Protocol::ErrorStringOr InspectorNetworkAgent::interceptRequest
response.setHTTPStatusCode(status);
response.setHTTPStatusText(String { statusText });
HTTPHeaderMap explicitHeaders;
@@ -4023,7 +4089,7 @@ index f8a58175bdaa13ae7d2bb722df119e140ec7618f..b601fdd3d16a3fc016ce3af50d416a08
if (loader->reachedTerminalState())
return;
-@@ -1404,6 +1429,12 @@ Inspector::Protocol::ErrorStringOr InspectorNetworkAgent::setEmulatedCondi
+@@ -1409,6 +1434,12 @@ Inspector::Protocol::ErrorStringOr InspectorNetworkAgent::setEmulatedCondi
#endif // ENABLE(INSPECTOR_NETWORK_THROTTLING)
@@ -4037,7 +4103,7 @@ index f8a58175bdaa13ae7d2bb722df119e140ec7618f..b601fdd3d16a3fc016ce3af50d416a08
{
return startsWithLettersIgnoringASCIICase(mimeType, "text/"_s)
diff --git a/Source/WebCore/inspector/agents/InspectorNetworkAgent.h b/Source/WebCore/inspector/agents/InspectorNetworkAgent.h
-index dc7e574ee6e9256a1f75ea838d20ca7f5e9190de..03a28b599df29e82392b70cf6b83a700134c53a3 100644
+index eda400879afb10b687fcbb317c9fdbb3be9c94cd..f3a382c44b53e6b1507fc046e22bff684abd55f9 100644
--- a/Source/WebCore/inspector/agents/InspectorNetworkAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorNetworkAgent.h
@@ -34,6 +34,8 @@
@@ -4049,7 +4115,7 @@ index dc7e574ee6e9256a1f75ea838d20ca7f5e9190de..03a28b599df29e82392b70cf6b83a700
#include "WebSocket.h"
#include
#include
-@@ -101,6 +103,7 @@ public:
+@@ -102,6 +104,7 @@ public:
#if ENABLE(INSPECTOR_NETWORK_THROTTLING)
Inspector::Protocol::ErrorStringOr setEmulatedConditions(std::optional&& bytesPerSecondLimit) final;
#endif
@@ -4057,7 +4123,7 @@ index dc7e574ee6e9256a1f75ea838d20ca7f5e9190de..03a28b599df29e82392b70cf6b83a700
// InspectorInstrumentation
void willRecalculateStyle();
-@@ -132,6 +135,7 @@ public:
+@@ -133,6 +136,7 @@ public:
bool shouldInterceptResponse(const ResourceResponse&);
void interceptResponse(const ResourceResponse&, ResourceLoaderIdentifier, CompletionHandler)>&&);
void interceptRequest(ResourceLoader&, Function&&);
@@ -4065,7 +4131,7 @@ index dc7e574ee6e9256a1f75ea838d20ca7f5e9190de..03a28b599df29e82392b70cf6b83a700
void searchOtherRequests(const JSC::Yarr::RegularExpression&, Ref>&);
void searchInRequest(Inspector::Protocol::ErrorString&, const Inspector::Protocol::Network::RequestId&, const String& query, bool caseSensitive, bool isRegex, RefPtr>&);
-@@ -258,6 +262,7 @@ private:
+@@ -259,6 +263,7 @@ private:
bool m_enabled { false };
bool m_loadingXHRSynchronously { false };
bool m_interceptionEnabled { false };
@@ -4074,7 +4140,7 @@ index dc7e574ee6e9256a1f75ea838d20ca7f5e9190de..03a28b599df29e82392b70cf6b83a700
} // namespace WebCore
diff --git a/Source/WebCore/inspector/agents/InspectorPageAgent.cpp b/Source/WebCore/inspector/agents/InspectorPageAgent.cpp
-index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc63f42bf2d 100644
+index 85f9e83e59abc5a1089a4f2b56f0dab99437d948..22843714b46b158faa929be669638cb98c6cc8fb 100644
--- a/Source/WebCore/inspector/agents/InspectorPageAgent.cpp
+++ b/Source/WebCore/inspector/agents/InspectorPageAgent.cpp
@@ -32,19 +32,26 @@
@@ -4119,7 +4185,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
#include "ScriptController.h"
#include "ScriptSourceCode.h"
#include "SecurityOrigin.h"
-@@ -66,14 +76,21 @@
+@@ -66,15 +76,23 @@
#include "StyleScope.h"
#include "Theme.h"
#include
@@ -4133,18 +4199,20 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
+#include
#include
+#include
++#include
+#include
+#include
#include
+ #include
#include
-#include
+#include
#if ENABLE(APPLICATION_MANIFEST)
#include "CachedApplicationManifest.h"
-@@ -92,6 +109,11 @@ namespace WebCore {
+@@ -95,6 +113,11 @@ using namespace Inspector;
- using namespace Inspector;
+ WTF_MAKE_TZONE_ALLOCATED_IMPL(InspectorPageAgent);
+static HashMap>& createdUserWorlds() {
+ static NeverDestroyed>> nameToWorld;
@@ -4154,7 +4222,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
static bool decodeBuffer(std::span buffer, const String& textEncodingName, String* result)
{
if (buffer.data()) {
-@@ -338,6 +360,7 @@ InspectorPageAgent::InspectorPageAgent(PageAgentContext& context, InspectorClien
+@@ -341,6 +364,7 @@ InspectorPageAgent::InspectorPageAgent(PageAgentContext& context, InspectorClien
, m_frontendDispatcher(makeUnique(context.frontendRouter))
, m_backendDispatcher(Inspector::PageBackendDispatcher::create(context.backendDispatcher, this))
, m_inspectedPage(context.inspectedPage)
@@ -4162,7 +4230,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
, m_client(client)
, m_overlay(overlay)
{
-@@ -367,12 +390,20 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::enable()
+@@ -370,12 +394,20 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::enable()
defaultUserPreferencesDidChange();
@@ -4183,7 +4251,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
setShowPaintRects(false);
#if !PLATFORM(IOS_FAMILY)
-@@ -424,6 +455,22 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::reload(std::optiona
+@@ -427,6 +459,22 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::reload(std::optiona
return { };
}
@@ -4206,7 +4274,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
Inspector::Protocol::ErrorStringOr InspectorPageAgent::navigate(const String& url)
{
auto* localMainFrame = dynamicDowncast(m_inspectedPage.mainFrame());
-@@ -447,6 +494,13 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::overrideUserAgent(c
+@@ -450,6 +498,13 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::overrideUserAgent(c
return { };
}
@@ -4220,7 +4288,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
Inspector::Protocol::ErrorStringOr InspectorPageAgent::overrideSetting(Inspector::Protocol::Page::Setting setting, std::optional&& value)
{
auto& inspectedPageSettings = m_inspectedPage.settings();
-@@ -460,6 +514,12 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::overrideSetting(Ins
+@@ -463,6 +518,12 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::overrideSetting(Ins
inspectedPageSettings.setAuthorAndUserStylesEnabledInspectorOverride(value);
return { };
@@ -4233,7 +4301,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
case Inspector::Protocol::Page::Setting::ICECandidateFilteringEnabled:
inspectedPageSettings.setICECandidateFilteringEnabledInspectorOverride(value);
return { };
-@@ -485,6 +545,38 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::overrideSetting(Ins
+@@ -488,6 +549,38 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::overrideSetting(Ins
inspectedPageSettings.setNeedsSiteSpecificQuirksInspectorOverride(value);
return { };
@@ -4272,7 +4340,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
case Inspector::Protocol::Page::Setting::ScriptEnabled:
inspectedPageSettings.setScriptEnabledInspectorOverride(value);
return { };
-@@ -497,6 +589,12 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::overrideSetting(Ins
+@@ -500,6 +593,12 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::overrideSetting(Ins
inspectedPageSettings.setShowRepaintCounterInspectorOverride(value);
return { };
@@ -4285,7 +4353,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
case Inspector::Protocol::Page::Setting::WebSecurityEnabled:
inspectedPageSettings.setWebSecurityEnabledInspectorOverride(value);
return { };
-@@ -897,15 +995,16 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::setShowPaintRects(b
+@@ -900,15 +999,16 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::setShowPaintRects(b
return { };
}
@@ -4307,27 +4375,40 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
}
void InspectorPageAgent::frameNavigated(LocalFrame& frame)
-@@ -913,13 +1012,25 @@ void InspectorPageAgent::frameNavigated(LocalFrame& frame)
+@@ -916,13 +1016,38 @@ void InspectorPageAgent::frameNavigated(LocalFrame& frame)
m_frontendDispatcher->frameNavigated(buildObjectForFrame(&frame));
}
-+String InspectorPageAgent::makeFrameID(ProcessIdentifier processID, FrameIdentifier frameID)
++String InspectorPageAgent::serializeFrameID(FrameIdentifier frameID)
+{
-+ return makeString(processID.toUInt64(), '.', frameID.object().toUInt64());
++ return makeString(frameID.processIdentifier().toUInt64(), '.', frameID.object().toUInt64());
+}
+
-+static String globalIDForFrame(Frame& frame)
++std::optional InspectorPageAgent::parseFrameID(String frameID)
+{
-+ // TODO(playwright): for OOPIF we have to use id of the web process where the frame is hosted.
-+ // Working at the moment because OOPIF is diabled.
-+ return InspectorPageAgent::makeFrameID(Process::identifier(), frame.frameID());
++ size_t dotPos = frameID.find("."_s);
++ if (dotPos == notFound)
++ return std::nullopt;
++
++ if (!frameID.containsOnlyASCII())
++ return std::nullopt;
++
++ String processIDString = frameID.left(dotPos);
++ uint64_t pid = strtoull(processIDString.ascii().data(), 0, 10);
++ auto processID = LegacyNullableObjectIdentifier(pid);
++ String frameIDString = frameID.substring(dotPos + 1);
++ uint64_t frameIDNumber = strtoull(frameIDString.ascii().data(), 0, 10);
++ return WebCore::FrameIdentifier {
++ ObjectIdentifier(frameIDNumber),
++ processID
++ };
+}
+
void InspectorPageAgent::frameDetached(LocalFrame& frame)
{
- auto identifier = m_frameToIdentifier.take(frame);
- if (identifier.isNull())
-+ String identifier = globalIDForFrame(frame);
++ String identifier = serializeFrameID(frame.frameID());
+ if (!m_identifierToFrame.take(identifier))
return;
+
@@ -4336,7 +4417,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
}
Frame* InspectorPageAgent::frameForId(const Inspector::Protocol::Network::FrameId& frameId)
-@@ -931,20 +1042,17 @@ String InspectorPageAgent::frameId(Frame* frame)
+@@ -934,20 +1059,21 @@ String InspectorPageAgent::frameId(Frame* frame)
{
if (!frame)
return emptyString();
@@ -4345,7 +4426,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
- m_identifierToFrame.set(identifier, frame);
- return identifier;
- }).iterator->value;
-+ String identifier = globalIDForFrame(*frame);
++ String identifier = serializeFrameID(frame->frameID());
+ m_identifierToFrame.set(identifier, frame);
+ return identifier;
}
@@ -4358,11 +4439,15 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
- return IdentifiersFactory::createIdentifier();
- }).iterator->value;
+
-+ return String::number(loader->navigationID());
++ auto navigationID = loader->navigationID();
++ if (!navigationID)
++ return emptyString();
++
++ return String::number(navigationID->toUInt64());
}
LocalFrame* InspectorPageAgent::assertFrame(Inspector::Protocol::ErrorString& errorString, const Inspector::Protocol::Network::FrameId& frameId)
-@@ -955,11 +1063,6 @@ LocalFrame* InspectorPageAgent::assertFrame(Inspector::Protocol::ErrorString& er
+@@ -958,11 +1084,6 @@ LocalFrame* InspectorPageAgent::assertFrame(Inspector::Protocol::ErrorString& er
return frame;
}
@@ -4374,7 +4459,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
void InspectorPageAgent::frameStartedLoading(LocalFrame& frame)
{
m_frontendDispatcher->frameStartedLoading(frameId(&frame));
-@@ -970,9 +1073,9 @@ void InspectorPageAgent::frameStoppedLoading(LocalFrame& frame)
+@@ -973,9 +1094,9 @@ void InspectorPageAgent::frameStoppedLoading(LocalFrame& frame)
m_frontendDispatcher->frameStoppedLoading(frameId(&frame));
}
@@ -4386,7 +4471,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
}
void InspectorPageAgent::frameClearedScheduledNavigation(Frame& frame)
-@@ -1019,6 +1122,12 @@ void InspectorPageAgent::defaultUserPreferencesDidChange()
+@@ -1022,6 +1143,12 @@ void InspectorPageAgent::defaultUserPreferencesDidChange()
m_frontendDispatcher->defaultUserPreferencesDidChange(WTFMove(defaultUserPreferences));
}
@@ -4399,7 +4484,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
#if ENABLE(DARK_MODE_CSS) || HAVE(OS_DARK_MODE_SUPPORT)
void InspectorPageAgent::defaultAppearanceDidChange()
{
-@@ -1032,6 +1141,9 @@ void InspectorPageAgent::didClearWindowObjectInWorld(LocalFrame& frame, DOMWrapp
+@@ -1035,6 +1162,9 @@ void InspectorPageAgent::didClearWindowObjectInWorld(LocalFrame& frame, DOMWrapp
return;
if (m_bootstrapScript.isEmpty())
@@ -4409,7 +4494,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
return;
frame.script().evaluateIgnoringException(ScriptSourceCode(m_bootstrapScript, JSC::SourceTaintedOrigin::Untainted, URL { "web-inspector://bootstrap.js"_str }));
-@@ -1079,6 +1191,51 @@ void InspectorPageAgent::didRecalculateStyle()
+@@ -1082,6 +1212,51 @@ void InspectorPageAgent::didRecalculateStyle()
m_overlay->update();
}
@@ -4461,7 +4546,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
Ref InspectorPageAgent::buildObjectForFrame(LocalFrame* frame)
{
ASSERT_ARG(frame, frame);
-@@ -1176,6 +1333,12 @@ void InspectorPageAgent::applyUserAgentOverride(String& userAgent)
+@@ -1179,6 +1354,12 @@ void InspectorPageAgent::applyUserAgentOverride(String& userAgent)
userAgent = m_userAgentOverride;
}
@@ -4474,7 +4559,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
void InspectorPageAgent::applyEmulatedMedia(AtomString& media)
{
if (!m_emulatedMedia.isEmpty())
-@@ -1203,11 +1366,13 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::snapshotNode(Insp
+@@ -1206,11 +1387,13 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::snapshotNode(Insp
return snapshot->toDataURL("image/png"_s, std::nullopt, PreserveResolution::Yes);
}
@@ -4489,7 +4574,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
IntRect rectangle(x, y, width, height);
auto* localMainFrame = dynamicDowncast(m_inspectedPage.mainFrame());
-@@ -1221,6 +1386,43 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::snapshotRect(int
+@@ -1224,6 +1407,43 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::snapshotRect(int
return snapshot->toDataURL("image/png"_s, std::nullopt, PreserveResolution::Yes);
}
@@ -4533,7 +4618,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
#if ENABLE(WEB_ARCHIVE) && USE(CF)
Inspector::Protocol::ErrorStringOr InspectorPageAgent::archive()
{
-@@ -1237,7 +1439,6 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::archive()
+@@ -1240,7 +1460,6 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::archive()
}
#endif
@@ -4541,7 +4626,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
Inspector::Protocol::ErrorStringOr InspectorPageAgent::setScreenSizeOverride(std::optional&& width, std::optional&& height)
{
if (width.has_value() != height.has_value())
-@@ -1255,6 +1456,508 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::setScreenSizeOverri
+@@ -1258,6 +1477,508 @@ Inspector::Protocol::ErrorStringOr InspectorPageAgent::setScreenSizeOverri
localMainFrame->setOverrideScreenSize(FloatSize(width.value_or(0), height.value_or(0)));
return { };
}
@@ -5052,7 +5137,7 @@ index 97fa6f1ae18db5b4a1fc8f8f99ce0605fb76a793..fd761459048e7e976b7351eb8714acc6
} // namespace WebCore
diff --git a/Source/WebCore/inspector/agents/InspectorPageAgent.h b/Source/WebCore/inspector/agents/InspectorPageAgent.h
-index 371bcfcf1d0ae17471f8e69706d2f12356793418..3e1d5a03edf17f42b566b6d0ec062fdd6d32f1c3 100644
+index 4f78a536c4030b8065d189aacc378d56d3451198..8ffac8bf16c00543ab8cf410e603b06204357714 100644
--- a/Source/WebCore/inspector/agents/InspectorPageAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorPageAgent.h
@@ -32,8 +32,10 @@
@@ -5066,8 +5151,8 @@ index 371bcfcf1d0ae17471f8e69706d2f12356793418..3e1d5a03edf17f42b566b6d0ec062fdd
#include
#include
#include
-@@ -41,11 +43,16 @@
- #include
+@@ -42,11 +44,16 @@
+ #include
#include
+namespace Inspector {
@@ -5083,15 +5168,16 @@ index 371bcfcf1d0ae17471f8e69706d2f12356793418..3e1d5a03edf17f42b566b6d0ec062fdd
class InspectorClient;
class InspectorOverlay;
class LocalFrame;
-@@ -78,6 +85,7 @@ public:
+@@ -79,6 +86,8 @@ public:
OtherResource,
};
-+ WEBCORE_EXPORT static String makeFrameID(ProcessIdentifier processID, FrameIdentifier frameID);
++ WEBCORE_EXPORT static String serializeFrameID(FrameIdentifier frameID);
++ WEBCORE_EXPORT static std::optional parseFrameID(String frameID);
static bool sharedBufferContent(RefPtr&&, const String& textEncodingName, bool withBase64Encode, String* result);
static Vector cachedResourcesForFrame(LocalFrame*);
static void resourceContent(Inspector::Protocol::ErrorString&, LocalFrame*, const URL&, String* result, bool* base64Encoded);
-@@ -98,8 +106,11 @@ public:
+@@ -99,8 +108,11 @@ public:
Inspector::Protocol::ErrorStringOr enable();
Inspector::Protocol::ErrorStringOr disable();
Inspector::Protocol::ErrorStringOr reload(std::optional&& ignoreCache, std::optional&& revalidateAllResources);
@@ -5103,7 +5189,7 @@ index 371bcfcf1d0ae17471f8e69706d2f12356793418..3e1d5a03edf17f42b566b6d0ec062fdd
Inspector::Protocol::ErrorStringOr overrideSetting(Inspector::Protocol::Page::Setting, std::optional&& value);
Inspector::Protocol::ErrorStringOr overrideUserPreference(Inspector::Protocol::Page::UserPreferenceName, std::optional&&);
Inspector::Protocol::ErrorStringOr][>> getCookies();
-@@ -115,45 +126,65 @@ public:
+@@ -116,45 +128,65 @@ public:
#endif
Inspector::Protocol::ErrorStringOr setShowPaintRects(bool);
Inspector::Protocol::ErrorStringOr setEmulatedMedia(const String&);
@@ -5176,7 +5262,7 @@ index 371bcfcf1d0ae17471f8e69706d2f12356793418..3e1d5a03edf17f42b566b6d0ec062fdd
static bool mainResourceContent(LocalFrame*, bool withBase64Encode, String* result);
static bool dataContent(std::span data, const String& textEncodingName, bool withBase64Encode, String* result);
-@@ -169,17 +200,21 @@ private:
+@@ -170,17 +202,21 @@ private:
RefPtr m_backendDispatcher;
Page& m_inspectedPage;
@@ -5201,7 +5287,7 @@ index 371bcfcf1d0ae17471f8e69706d2f12356793418..3e1d5a03edf17f42b566b6d0ec062fdd
} // namespace WebCore
diff --git a/Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp b/Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp
-index 61b797e08f5e6d90cc2724dd7a3b45c0f45af4f8..919a8b963d93742cc99c2739e472361deea84e4c 100644
+index 009092f4dd46f22aef63ffa0a9758884859e7385..545da93ce753072c18279c67b1589aefcc7e0b8d 100644
--- a/Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp
+++ b/Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp
@@ -34,6 +34,7 @@
@@ -5220,7 +5306,7 @@ index 61b797e08f5e6d90cc2724dd7a3b45c0f45af4f8..919a8b963d93742cc99c2739e472361d
#include "SecurityOrigin.h"
#include "UserGestureEmulationScope.h"
#include
-@@ -85,13 +87,73 @@ Inspector::Protocol::ErrorStringOr PageRuntimeAgent::disable()
+@@ -88,13 +90,73 @@ Inspector::Protocol::ErrorStringOr]