mirror of
https://github.com/electron/electron.git
synced 2026-02-26 03:01:17 -05:00
Compare commits
29 Commits
roller/nod
...
build-win-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5647226c3f | ||
|
|
e0ffe69212 | ||
|
|
f6f2c70bbf | ||
|
|
d5ead17629 | ||
|
|
a727936a1f | ||
|
|
eb76a7652b | ||
|
|
029147bdeb | ||
|
|
5717f1010b | ||
|
|
d5de8883a2 | ||
|
|
8a11d5afb1 | ||
|
|
89963618d9 | ||
|
|
8c5c6a6088 | ||
|
|
24526ccd39 | ||
|
|
1134d95c6d | ||
|
|
d76608b945 | ||
|
|
d689f76ff9 | ||
|
|
e3142865b2 | ||
|
|
1f8e4079cd | ||
|
|
bad88c6ed4 | ||
|
|
534cb33465 | ||
|
|
51e7753ae9 | ||
|
|
d141934885 | ||
|
|
22e8cf9416 | ||
|
|
5856b2e01c | ||
|
|
49d91dd02b | ||
|
|
2f20d287d1 | ||
|
|
73377af79e | ||
|
|
47766801e4 | ||
|
|
bf0510dc22 |
67
.github/actions/build-electron/action.yml
vendored
67
.github/actions/build-electron/action.yml
vendored
@@ -37,15 +37,14 @@ runs:
|
||||
echo "GN_EXTRA_ARGS=$GN_APPENDED_ARGS" >> $GITHUB_ENV
|
||||
- name: Set GN_EXTRA_ARGS for Windows
|
||||
shell: bash
|
||||
if: ${{inputs.target-arch != 'x64' && inputs.target-platform == 'win' }}
|
||||
if: ${{ inputs.target-platform == 'win' }}
|
||||
run: |
|
||||
GN_APPENDED_ARGS="$GN_EXTRA_ARGS target_cpu=\"${{ inputs.target-arch }}\""
|
||||
GN_APPENDED_ARGS="$GN_EXTRA_ARGS target_cpu=\"${{ inputs.target-arch }}\" use_v8_context_snapshot=true target_os=\"win\""
|
||||
echo "GN_EXTRA_ARGS=$GN_APPENDED_ARGS" >> $GITHUB_ENV
|
||||
- name: Add Clang problem matcher
|
||||
shell: bash
|
||||
run: echo "::add-matcher::src/electron/.github/problem-matchers/clang.json"
|
||||
- name: Build Electron ${{ inputs.step-suffix }}
|
||||
if: ${{ inputs.target-platform != 'win' }}
|
||||
shell: bash
|
||||
run: |
|
||||
rm -rf "src/out/Default/Electron Framework.framework"
|
||||
@@ -71,37 +70,14 @@ runs:
|
||||
|
||||
# Upload build stats to Datadog
|
||||
if ! [ -z $DD_API_KEY ]; then
|
||||
npx node electron/script/build-stats.mjs out/Default/siso.INFO --upload-stats || true
|
||||
if [ "$TARGET_PLATFORM" = "win" ]; then
|
||||
npx node electron/script/build-stats.mjs out/Default/siso.exe.INFO --upload-stats || true
|
||||
else
|
||||
npx node electron/script/build-stats.mjs out/Default/siso.INFO --upload-stats || true
|
||||
fi
|
||||
else
|
||||
echo "Skipping build-stats.mjs upload because DD_API_KEY is not set"
|
||||
fi
|
||||
- name: Build Electron (Windows) ${{ inputs.step-suffix }}
|
||||
if: ${{ inputs.target-platform == 'win' }}
|
||||
shell: powershell
|
||||
run: |
|
||||
cd src\electron
|
||||
git pack-refs
|
||||
cd ..
|
||||
|
||||
$env:NINJA_SUMMARIZE_BUILD = 1
|
||||
if ("${{ inputs.is-release }}" -eq "true") {
|
||||
e build --target electron:release_build
|
||||
} else {
|
||||
e build --target electron:testing_build
|
||||
}
|
||||
Copy-Item out\Default\.ninja_log out\electron_ninja_log
|
||||
node electron\script\check-symlinks.js
|
||||
|
||||
# Upload build stats to Datadog
|
||||
if ($env:DD_API_KEY) {
|
||||
try {
|
||||
npx node electron\script\build-stats.mjs out\Default\siso.exe.INFO --upload-stats
|
||||
} catch {
|
||||
Write-Host "Build stats upload failed, continuing..."
|
||||
}
|
||||
} else {
|
||||
Write-Host "Skipping build-stats.mjs upload because DD_API_KEY is not set"
|
||||
}
|
||||
- name: Verify dist.zip ${{ inputs.step-suffix }}
|
||||
shell: bash
|
||||
run: |
|
||||
@@ -126,15 +102,7 @@ runs:
|
||||
sed $SEDOPTION '/.*builtins-pgo/d' out/Default/mksnapshot_args
|
||||
sed $SEDOPTION '/--turbo-profiling-input/d' out/Default/mksnapshot_args
|
||||
|
||||
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
||||
cd out/Default
|
||||
powershell Compress-Archive -update mksnapshot_args mksnapshot.zip
|
||||
powershell mkdir mktmp\\gen\\v8
|
||||
powershell Copy-Item gen\\v8\\embedded.S mktmp\\gen\\v8
|
||||
powershell Compress-Archive -update -Path mktmp\\gen mksnapshot.zip
|
||||
else
|
||||
(cd out/Default; zip mksnapshot.zip mksnapshot_args gen/v8/embedded.S)
|
||||
fi
|
||||
(cd out/Default; zip mksnapshot.zip mksnapshot_args gen/v8/embedded.S)
|
||||
- name: Generate Cross-Arch Snapshot (arm/arm64) ${{ inputs.step-suffix }}
|
||||
shell: bash
|
||||
if: ${{ (inputs.target-arch == 'arm' || inputs.target-arch == 'arm64') && inputs.target-platform == 'linux' }}
|
||||
@@ -168,12 +136,6 @@ runs:
|
||||
fi
|
||||
electron/script/zip_manifests/check-zip-manifest.py out/Default/chromedriver.zip electron/script/zip_manifests/chromedriver_zip.$target_os.${{ inputs.target-arch }}.manifest
|
||||
fi
|
||||
- name: Create installed_software.json ${{ inputs.step-suffix }}
|
||||
shell: powershell
|
||||
if: ${{ inputs.is-release == 'true' && inputs.target-platform == 'win' }}
|
||||
run: |
|
||||
cd src
|
||||
Get-CimInstance -Namespace root\cimv2 -Class Win32_product | Select vendor, description, @{l='install_location';e='InstallLocation'}, @{l='install_date';e='InstallDate'}, @{l='install_date_2';e='InstallDate2'}, caption, version, name, @{l='sku_number';e='SKUNumber'} | ConvertTo-Json | Out-File -Encoding utf8 -FilePath .\installed_software.json
|
||||
- name: Profile Windows Toolchain ${{ inputs.step-suffix }}
|
||||
shell: bash
|
||||
if: ${{ inputs.is-release == 'true' && inputs.target-platform == 'win' }}
|
||||
@@ -227,7 +189,7 @@ runs:
|
||||
script/release/uploaders/upload.py --verbose
|
||||
fi
|
||||
- name: Generate siso report
|
||||
if: ${{ inputs.target-platform != 'win' && !cancelled() }}
|
||||
if: ${{ !cancelled() }}
|
||||
shell: bash
|
||||
run: |
|
||||
cd src
|
||||
@@ -236,17 +198,6 @@ runs:
|
||||
echo "SISO_REPORT_PATH=$SISO_REPORT_PATH" >> $GITHUB_ENV
|
||||
cat siso_report.txt
|
||||
echo "SISO REPORT AT $SISO_REPORT_PATH"
|
||||
- name: Generate siso report (Windows)
|
||||
if: ${{ inputs.target-platform == 'win' && !cancelled() }}
|
||||
shell: powershell
|
||||
run: |
|
||||
cd src
|
||||
e d siso report -C out\Default > siso_report.txt
|
||||
$SISO_REPORT_PATH = Get-Content "siso_report.txt" | Select-String "report file:\s*(.+)" | ForEach-Object {
|
||||
$_.Matches.Groups[1].Value.Trim()
|
||||
}
|
||||
echo "SISO_REPORT_PATH=$SISO_REPORT_PATH"
|
||||
echo "SISO_REPORT_PATH=$SISO_REPORT_PATH" >> $env:GITHUB_ENV
|
||||
- name: Generate Artifact Key
|
||||
if: always() && !cancelled()
|
||||
shell: bash
|
||||
|
||||
2
.github/workflows/archaeologist-dig.yml
vendored
2
.github/workflows/archaeologist-dig.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Setup Node.js/npm
|
||||
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238
|
||||
with:
|
||||
node-version: 24.12.x
|
||||
- name: Setting Up Dig Site
|
||||
|
||||
2
.github/workflows/audit-branch-ci.yml
vendored
2
.github/workflows/audit-branch-ci.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
with:
|
||||
node-version: 22.17.x
|
||||
- name: Sparse checkout repository
|
||||
|
||||
2
.github/workflows/branch-created.yml
vendored
2
.github/workflows/branch-created.yml
vendored
@@ -68,7 +68,7 @@ jobs:
|
||||
done
|
||||
- name: Generate GitHub App token
|
||||
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
id: generate-token
|
||||
with:
|
||||
creds: ${{ secrets.RELEASE_BOARD_GH_APP_CREDS }}
|
||||
|
||||
17
.github/workflows/build.yml
vendored
17
.github/workflows/build.yml
vendored
@@ -11,12 +11,12 @@ on:
|
||||
skip-macos:
|
||||
type: boolean
|
||||
description: 'Skip macOS builds'
|
||||
default: false
|
||||
default: true
|
||||
required: false
|
||||
skip-linux:
|
||||
type: boolean
|
||||
description: 'Skip Linux builds'
|
||||
default: false
|
||||
default: true
|
||||
required: false
|
||||
skip-windows:
|
||||
type: boolean
|
||||
@@ -107,7 +107,7 @@ jobs:
|
||||
# Checkout Jobs
|
||||
checkout-macos:
|
||||
needs: setup
|
||||
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-macos}}
|
||||
if: ${{ needs.setup.outputs.src == 'true' && inputs.skip-macos == 'false'}}
|
||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -137,7 +137,7 @@ jobs:
|
||||
|
||||
checkout-linux:
|
||||
needs: setup
|
||||
if: ${{ !inputs.skip-linux}}
|
||||
if: ${{ inputs.skip-linux == 'false' }}
|
||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -372,8 +372,9 @@ jobs:
|
||||
needs: checkout-windows
|
||||
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
|
||||
with:
|
||||
build-runs-on: electron-arc-centralus-windows-amd64-16core
|
||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
||||
test-runs-on: windows-latest
|
||||
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-windows.outputs.build-image-sha }}","options":"--user root --device /dev/fuse --cap-add SYS_ADMIN","volumes":["/mnt/win-cache:/mnt/win-cache"]}'
|
||||
target-platform: win
|
||||
target-arch: x64
|
||||
is-release: false
|
||||
@@ -391,8 +392,9 @@ jobs:
|
||||
needs: checkout-windows
|
||||
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
|
||||
with:
|
||||
build-runs-on: electron-arc-centralus-windows-amd64-16core
|
||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
||||
test-runs-on: windows-latest
|
||||
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-windows.outputs.build-image-sha }}","options":"--user root --device /dev/fuse --cap-add SYS_ADMIN","volumes":["/mnt/win-cache:/mnt/win-cache"]}'
|
||||
target-platform: win
|
||||
target-arch: x86
|
||||
is-release: false
|
||||
@@ -410,8 +412,9 @@ jobs:
|
||||
needs: checkout-windows
|
||||
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
|
||||
with:
|
||||
build-runs-on: electron-arc-centralus-windows-amd64-16core
|
||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
||||
test-runs-on: windows-11-arm
|
||||
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-windows.outputs.build-image-sha }}","options":"--user root --device /dev/fuse --cap-add SYS_ADMIN","volumes":["/mnt/win-cache:/mnt/win-cache"]}'
|
||||
target-platform: win
|
||||
target-arch: arm64
|
||||
is-release: false
|
||||
|
||||
2
.github/workflows/issue-commented.yml
vendored
2
.github/workflows/issue-commented.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
AUTHOR_ASSOCIATION=$(gh api /repos/electron/electron/issues/comments/${{ github.event.comment.id }} --jq '.author_association')
|
||||
echo "author_association=$AUTHOR_ASSOCIATION" >> "$GITHUB_OUTPUT"
|
||||
- name: Generate GitHub App token
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
if: ${{ !contains(fromJSON('["MEMBER", "OWNER", "COLLABORATOR"]'), steps.get-author-association.outputs.author_association) }}
|
||||
id: generate-token
|
||||
with:
|
||||
|
||||
6
.github/workflows/issue-labeled.yml
vendored
6
.github/workflows/issue-labeled.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Generate GitHub App token
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
id: generate-token
|
||||
with:
|
||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||
@@ -36,7 +36,7 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Generate GitHub App token
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
id: generate-token
|
||||
with:
|
||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||
@@ -69,7 +69,7 @@ jobs:
|
||||
fi
|
||||
- name: Generate GitHub App token
|
||||
if: ${{ steps.check-for-comment.outputs.SHOULD_COMMENT }}
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
id: generate-token
|
||||
with:
|
||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||
|
||||
4
.github/workflows/issue-opened.yml
vendored
4
.github/workflows/issue-opened.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
permissions: {}
|
||||
steps:
|
||||
- name: Generate GitHub App token
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
id: generate-token
|
||||
with:
|
||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
permissions: {}
|
||||
steps:
|
||||
- name: Generate GitHub App token
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
id: generate-token
|
||||
with:
|
||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||
|
||||
2
.github/workflows/issue-transferred.yml
vendored
2
.github/workflows/issue-transferred.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
if: ${{ !github.event.changes.new_repository.private }}
|
||||
steps:
|
||||
- name: Generate GitHub App token
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
id: generate-token
|
||||
with:
|
||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||
|
||||
2
.github/workflows/issue-unlabeled.yml
vendored
2
.github/workflows/issue-unlabeled.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
||||
fi
|
||||
- name: Generate GitHub App token
|
||||
if: ${{ steps.check-for-blocked-labels.outputs.NOT_BLOCKED }}
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
id: generate-token
|
||||
with:
|
||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||
|
||||
@@ -119,7 +119,7 @@ jobs:
|
||||
run: df -h
|
||||
- name: Setup Node.js/npm
|
||||
if: ${{ inputs.target-platform == 'macos' }}
|
||||
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238
|
||||
with:
|
||||
node-version: 22.21.x
|
||||
cache: yarn
|
||||
@@ -129,6 +129,10 @@ jobs:
|
||||
- name: Install AZCopy
|
||||
if: ${{ inputs.target-platform == 'macos' }}
|
||||
run: brew install azcopy
|
||||
- name: Enable windows toolchain
|
||||
if: ${{ inputs.target-platform == 'win' }}
|
||||
run: |
|
||||
echo "ELECTRON_DEPOT_TOOLS_WIN_TOOLCHAIN=1" >> $GITHUB_ENV
|
||||
- name: Set GN_EXTRA_ARGS for Linux
|
||||
if: ${{ inputs.target-platform == 'linux' }}
|
||||
run: |
|
||||
@@ -155,13 +159,15 @@ jobs:
|
||||
echo "DEPSHASH=$DEPSHASH" >> $GITHUB_ENV
|
||||
echo "CACHE_PATH=$DEPSHASH.tar" >> $GITHUB_ENV
|
||||
- name: Restore src cache via AZCopy
|
||||
if: ${{ inputs.target-platform != 'linux' }}
|
||||
if: ${{ inputs.target-platform == 'macos' }}
|
||||
uses: ./src/electron/.github/actions/restore-cache-azcopy
|
||||
with:
|
||||
target-platform: ${{ inputs.target-platform }}
|
||||
- name: Restore src cache via AKS
|
||||
if: ${{ inputs.target-platform == 'linux' }}
|
||||
if: ${{ inputs.target-platform != 'macos' }}
|
||||
uses: ./src/electron/.github/actions/restore-cache-aks
|
||||
with:
|
||||
target-platform: ${{ inputs.target-platform }}
|
||||
- name: Checkout Electron
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
|
||||
with:
|
||||
@@ -169,7 +175,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
- name: Fix Sync
|
||||
if: ${{ inputs.target-platform != 'linux' }}
|
||||
if: ${{ inputs.target-platform == 'macos' }}
|
||||
uses: ./src/electron/.github/actions/fix-sync
|
||||
with:
|
||||
target-platform: ${{ inputs.target-platform }}
|
||||
@@ -178,9 +184,21 @@ jobs:
|
||||
- name: Init Build Tools
|
||||
run: |
|
||||
e init -f --root=$(pwd) --out=Default ${{ inputs.gn-build-type }} --import ${{ inputs.gn-build-type }} --target-cpu ${{ inputs.target-arch }} --remote-build siso
|
||||
e sanitize-config
|
||||
- name: Run Electron Only Hooks
|
||||
run: |
|
||||
e d gclient runhooks --spec="solutions=[{'name':'src/electron','url':None,'deps_file':'DEPS','custom_vars':{'process_deps':False},'managed':False}]"
|
||||
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
||||
rm -rf src/third_party/depot_tools/win_toolchain/vs_files*
|
||||
fi
|
||||
echo "solutions=[{'name':'src/electron','url':None,'deps_file':'DEPS','custom_vars':{'process_deps':False},'managed':False}]" > tmpgclient
|
||||
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
||||
echo "target_os=['win']" >> tmpgclient
|
||||
fi
|
||||
gclient runhooks --gclientfile=tmpgclient
|
||||
# Fix VS Toolchain
|
||||
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
||||
e d python3 src/build/vs_toolchain.py update --force
|
||||
fi
|
||||
- name: Regenerate DEPS Hash
|
||||
run: |
|
||||
(cd src/electron && git checkout .) && node src/electron/script/generate-deps-hash.js
|
||||
@@ -218,3 +236,11 @@ jobs:
|
||||
generate-symbols: '${{ inputs.generate-symbols }}'
|
||||
upload-to-storage: '${{ inputs.upload-to-storage }}'
|
||||
step-suffix: '(mas)'
|
||||
- name: Wait for active SSH sessions
|
||||
shell: bash
|
||||
if: always() && !cancelled()
|
||||
run: |
|
||||
while [ -f /var/.ssh-lock ]
|
||||
do
|
||||
sleep 60
|
||||
done
|
||||
|
||||
@@ -72,7 +72,7 @@ jobs:
|
||||
cp $(which node) /mnt/runner-externals/node24/bin/
|
||||
- name: Setup Node.js/npm
|
||||
if: ${{ inputs.target-platform == 'win' }}
|
||||
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238
|
||||
with:
|
||||
node-version: 22.21.x
|
||||
- name: Add TCC permissions on macOS
|
||||
|
||||
2
.github/workflows/pull-request-labeled.yml
vendored
2
.github/workflows/pull-request-labeled.yml
vendored
@@ -32,7 +32,7 @@ jobs:
|
||||
permissions: {}
|
||||
steps:
|
||||
- name: Generate GitHub App token
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
id: generate-token
|
||||
with:
|
||||
creds: ${{ secrets.RELEASE_BOARD_GH_APP_CREDS }}
|
||||
|
||||
2
.github/workflows/stable-prep-items.yml
vendored
2
.github/workflows/stable-prep-items.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
permissions: {}
|
||||
steps:
|
||||
- name: Generate GitHub App token
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
id: generate-token
|
||||
with:
|
||||
creds: ${{ secrets.RELEASE_BOARD_GH_APP_CREDS }}
|
||||
|
||||
4
.github/workflows/stale.yml
vendored
4
.github/workflows/stale.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
||||
permissions: {}
|
||||
steps:
|
||||
- name: Generate GitHub App token
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
id: generate-token
|
||||
with:
|
||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||
@@ -37,7 +37,7 @@ jobs:
|
||||
needs: stale
|
||||
steps:
|
||||
- name: Generate GitHub App token
|
||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||
uses: electron/github-app-auth-action@e14e47722ed120360649d0789e25b9baece12725 # v2.0.0
|
||||
id: generate-token
|
||||
with:
|
||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||
|
||||
39
.github/workflows/update-website-docs.yml
vendored
Normal file
39
.github/workflows/update-website-docs.yml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
name: Update Website Docs
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
permissions: {}
|
||||
|
||||
jobs:
|
||||
update-website-docs:
|
||||
name: Update Website Docs
|
||||
runs-on: ubuntu-latest
|
||||
environment: website-docs-updater
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write # needed for secret-service-action
|
||||
steps:
|
||||
- name: Get GitHub App token
|
||||
id: secret-service
|
||||
uses: electron/secret-service-action@3476425e8b30555aac15b1b7096938e254b0e155 # v1.0.0
|
||||
- name: Check if this release is the latest
|
||||
id: check-if-latest-release
|
||||
env:
|
||||
GH_REPO: electron/electron
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
LATEST_RELEASE_TAG="$(gh release view --json tagName --jq '.tagName')"
|
||||
if [ "$LATEST_RELEASE_TAG" = "${GITHUB_REF#refs/tags/}" ]; then
|
||||
echo "isLatestRelease=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "isLatestRelease=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
- name: Trigger website docs update
|
||||
if: ${{ steps.check-if-latest-release.outputs.isLatestRelease }}
|
||||
env:
|
||||
GH_REPO: electron/website
|
||||
GH_TOKEN: ${{ fromJSON(steps.secret-service.outputs.secrets).WEBSITE_DOCS_UPDATER_APP_TOKEN }}
|
||||
run: |
|
||||
gh workflow run update-docs.yml -f sha=$GITHUB_SHA
|
||||
2
DEPS
2
DEPS
@@ -2,7 +2,7 @@ gclient_gn_args_from = 'src'
|
||||
|
||||
vars = {
|
||||
'chromium_version':
|
||||
'146.0.7635.0',
|
||||
'146.0.7645.0',
|
||||
'node_version':
|
||||
'v24.13.0',
|
||||
'nan_version':
|
||||
|
||||
@@ -39,18 +39,18 @@ def init(ctx):
|
||||
"clang_large": step_config["platforms"]["default"],
|
||||
})
|
||||
|
||||
if runtime.os == "windows":
|
||||
# Add additional Windows SDK headers needed by Electron
|
||||
win_toolchain_dir = win_sdk.toolchain_dir(ctx)
|
||||
if win_toolchain_dir:
|
||||
sdk_version = gn_logs.read(ctx).get("windows_sdk_version")
|
||||
step_config["input_deps"][win_toolchain_dir + ":headers"].extend([
|
||||
# third_party/electron_node/deps/uv/include/uv/win.h includes mswsock.h
|
||||
path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/mswsock.h"),
|
||||
# third_party/electron_node/src/debug_utils.cc includes lm.h
|
||||
path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Lm.h"),
|
||||
])
|
||||
|
||||
# Add additional Windows SDK headers needed by Electron
|
||||
win_toolchain_dir = win_sdk.toolchain_dir(ctx)
|
||||
if win_toolchain_dir:
|
||||
sdk_version = gn_logs.read(ctx).get("windows_sdk_version")
|
||||
step_config["input_deps"][win_toolchain_dir + ":headers"].extend([
|
||||
# third_party/electron_node/deps/uv/include/uv/win.h includes mswsock.h
|
||||
path.join(win_toolchain_dir, "Windows Kits", "10/Include", sdk_version, "um/mswsock.h"),
|
||||
# third_party/electron_node/src/debug_utils.cc includes lm.h
|
||||
path.join(win_toolchain_dir, "Windows Kits", "10/Include", sdk_version, "um/Lm.h"),
|
||||
])
|
||||
|
||||
if runtime.os == "windows":
|
||||
# Update platforms to match our default siso config instead of reclient configs.
|
||||
step_config["platforms"].update({
|
||||
"clang-cl": step_config["platforms"]["default"],
|
||||
|
||||
@@ -100,6 +100,13 @@ On Windows only `releaseName` is available.
|
||||
|
||||
### Event: 'before-quit-for-update'
|
||||
|
||||
<!--
|
||||
```YAML history
|
||||
added:
|
||||
- pr-url: https://github.com/electron/electron/pull/12619
|
||||
```
|
||||
-->
|
||||
|
||||
This event is emitted after a user calls `quitAndInstall()`.
|
||||
|
||||
When this API is called, the `before-quit` event is not emitted before all windows are closed. As a result you should listen to this event if you wish to perform actions before the windows are closed while a process is quitting, as well as listening to `before-quit`.
|
||||
@@ -110,6 +117,16 @@ The `autoUpdater` object has the following methods:
|
||||
|
||||
### `autoUpdater.setFeedURL(options)`
|
||||
|
||||
<!--
|
||||
```YAML history
|
||||
changes:
|
||||
- pr-url: https://github.com/electron/electron/pull/5879
|
||||
description: "Added `headers` as a second parameter."
|
||||
- pr-url: https://github.com/electron/electron/pull/11925
|
||||
description: "Changed API to accept a single `options` argument (contains `url`, `headers`, and `serverType` properties)."
|
||||
```
|
||||
-->
|
||||
|
||||
* `options` Object
|
||||
* `url` string
|
||||
* `headers` Record\<string, string\> (optional) _macOS_ - HTTP request headers.
|
||||
|
||||
@@ -9,6 +9,13 @@ For including the share menu as a submenu of other menus, please use the
|
||||
|
||||
## Class: ShareMenu
|
||||
|
||||
<!--
|
||||
```YAML history
|
||||
added:
|
||||
- pr-url: https://github.com/electron/electron/pull/25629
|
||||
```
|
||||
-->
|
||||
|
||||
> Create share menu on macOS.
|
||||
|
||||
Process: [Main](../glossary.md#main-process)
|
||||
|
||||
@@ -29,6 +29,14 @@ Show the given file in a file manager. If possible, select the file.
|
||||
|
||||
### `shell.openPath(path)`
|
||||
|
||||
<!--
|
||||
```YAML history
|
||||
added:
|
||||
- pr-url: https://github.com/electron/electron/pull/20682
|
||||
breaking-changes-header: api-changed-shellopenitem-is-now-shellopenpath
|
||||
```
|
||||
-->
|
||||
|
||||
* `path` string
|
||||
|
||||
Returns `Promise<string>` - Resolves with a string containing the error message corresponding to the failure if a failure occurred, otherwise "".
|
||||
@@ -37,6 +45,18 @@ Open the given file in the desktop's default manner.
|
||||
|
||||
### `shell.openExternal(url[, options])`
|
||||
|
||||
<!--
|
||||
```YAML history
|
||||
changes:
|
||||
- pr-url: https://github.com/electron/electron/pull/4508
|
||||
description: "Added `activate` option."
|
||||
- pr-url: https://github.com/electron/electron/pull/15065
|
||||
description: "Added `workingDirectory` option."
|
||||
- pr-url: https://github.com/electron/electron/pull/37139
|
||||
description: "Added `logUsage` option."
|
||||
```
|
||||
-->
|
||||
|
||||
* `url` string - Max 2081 characters on Windows.
|
||||
* `options` Object (optional)
|
||||
* `activate` boolean (optional) _macOS_ - `true` to bring the opened application to the foreground. The default is `true`.
|
||||
@@ -50,6 +70,14 @@ Open the given external protocol URL in the desktop's default manner. (For examp
|
||||
|
||||
### `shell.trashItem(path)`
|
||||
|
||||
<!--
|
||||
```YAML history
|
||||
added:
|
||||
- pr-url: https://github.com/electron/electron/pull/25114
|
||||
breaking-changes-header: deprecated-shellmoveitemtotrash
|
||||
```
|
||||
-->
|
||||
|
||||
* `path` string - path to the item to be moved to the trash.
|
||||
|
||||
Returns `Promise<void>` - Resolves when the operation has been completed.
|
||||
@@ -58,6 +86,10 @@ Rejects if there was an error while deleting the requested item.
|
||||
This moves a path to the OS-specific trash location (Trash on macOS, Recycle
|
||||
Bin on Windows, and a desktop-environment-specific location on Linux).
|
||||
|
||||
The path must use the default path separator for the platform (backslash on
|
||||
Windows). Use `path.resolve()` from the `node:path` module to ensure correct
|
||||
handling on all filesystems.
|
||||
|
||||
### `shell.beep()`
|
||||
|
||||
Play the beep sound.
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
* `rgba` - 32bpp RGBA (byte-order), 1 plane.
|
||||
* `rgbaf16` - Half float RGBA, 1 plane.
|
||||
* `nv12` - 12bpp with Y plane followed by a 2x2 interleaved UV plane.
|
||||
* `p010le` - 4:2:0 10-bit YUV (little-endian), Y plane followed by a 2x2 interleaved UV plane.
|
||||
* `colorSpace` [ColorSpace](color-space.md) (optional) - The color space of the texture.
|
||||
* `codedSize` [Size](size.md) - The full dimensions of the shared texture.
|
||||
* `visibleRect` [Rectangle](rectangle.md) (optional) - A subsection of [0, 0, codedSize.width, codedSize.height]. In common cases, it is the full section area.
|
||||
|
||||
@@ -94,6 +94,7 @@
|
||||
The actual output pixel format and color space of the texture should refer to [`OffscreenSharedTexture`](../structures/offscreen-shared-texture.md) object in the `paint` event.
|
||||
* `argb` - The requested output texture format is 8-bit unorm RGBA, with SRGB SDR color space.
|
||||
* `rgbaf16` - The requested output texture format is 16-bit float RGBA, with scRGB HDR color space.
|
||||
* `deviceScaleFactor` number (optional) _Experimental_ - The device scale factor of the offscreen rendering output. If not set, will use primary display's scale factor as default.
|
||||
* `contextIsolation` boolean (optional) - Whether to run Electron APIs and
|
||||
the specified `preload` script in a separate JavaScript context. Defaults
|
||||
to `true`. The context that the `preload` script runs in will only have
|
||||
@@ -156,6 +157,8 @@
|
||||
`WebContents` when the preferred size changes. Default is `false`.
|
||||
* `transparent` boolean (optional) - Whether to enable background transparency for the guest page. Default is `true`. **Note:** The guest page's text and background colors are derived from the [color scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme) of its root element. When transparency is enabled, the text color will still change accordingly but the background will remain transparent.
|
||||
* `enableDeprecatedPaste` boolean (optional) _Deprecated_ - Whether to enable the `paste` [execCommand](https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand). Default is `false`.
|
||||
* `focusOnNavigation` boolean (optional) - Whether to focus the WebContents
|
||||
when navigating. Default is `true`.
|
||||
|
||||
[chrome-content-scripts]: https://developer.chrome.com/extensions/content_scripts#execution-environment
|
||||
[runtime-enabled-features]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/platform/runtime_enabled_features.json5
|
||||
|
||||
@@ -12,6 +12,16 @@ This document uses the following convention to categorize breaking changes:
|
||||
* **Deprecated:** An API was marked as deprecated. The API will continue to function, but will emit a deprecation warning, and will be removed in a future release.
|
||||
* **Removed:** An API or feature was removed, and is no longer supported by Electron.
|
||||
|
||||
## Planned Breaking API Changes (42.0)
|
||||
|
||||
### Behavior Changed: Offscreen rendering will use `1.0` as default device scale factor.
|
||||
|
||||
Previously, OSR used the primary display's device scale factor for rendering, which made the output frame size vary across users.
|
||||
Developers had to manually calculate the correct size using `screen.getPrimaryDisplay().scaleFactor`. We now provide an optional property
|
||||
`webPreferences.offscreen.deviceScaleFactor` to specify a custom value when creating an OSR window. At first, if the property is not set, it defaults
|
||||
to the primary display's scale factor (preserving the old behavior). Starting from Electron 42, the default will change to a constant value of `1.0`
|
||||
for more consistent output sizes.
|
||||
|
||||
## Planned Breaking API Changes (41.0)
|
||||
|
||||
### Behavior Changed: PDFs no longer create a separate WebContents
|
||||
@@ -2685,6 +2695,18 @@ Replace with: https://atom.io/download/electron
|
||||
|
||||
The following list includes the breaking API changes made in Electron 2.0.
|
||||
|
||||
### `autoUpdater`
|
||||
|
||||
```js
|
||||
// Deprecated
|
||||
autoUpdater.setFeedURL(url, headers)
|
||||
// Replace with
|
||||
autoUpdater.setFeedURL({
|
||||
url,
|
||||
headers
|
||||
})
|
||||
```
|
||||
|
||||
### `BrowserWindow`
|
||||
|
||||
```js
|
||||
|
||||
@@ -99,7 +99,7 @@ Using `autoUpdater` as an example:
|
||||
|
||||
## Methods
|
||||
|
||||
### `autoUpdater.setFeedURL(url[, requestHeaders])`
|
||||
### `autoUpdater.setFeedURL(options)`
|
||||
```
|
||||
|
||||
### Classes
|
||||
|
||||
@@ -60,7 +60,7 @@ at once, consider the [Chrome Tracing](https://www.chromium.org/developers/how-t
|
||||
## Checklist: Performance recommendations
|
||||
|
||||
Chances are that your app could be a little leaner, faster, and generally less
|
||||
resource-hungry if you attempt these steps.
|
||||
resource-hungry if you avoid the following common pitfalls.
|
||||
|
||||
1. [Carelessly including modules](#1-carelessly-including-modules)
|
||||
2. [Loading and running code too soon](#2-loading-and-running-code-too-soon)
|
||||
|
||||
@@ -44,11 +44,25 @@ have to worry about wiring them all together.
|
||||
You can install Electron Forge's CLI in your project's `devDependencies` and import your
|
||||
existing project with a handy conversion script.
|
||||
|
||||
```sh npm2yarn
|
||||
<Tabs>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```sh
|
||||
npm install --save-dev @electron-forge/cli
|
||||
npx electron-forge import
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="Yarn">
|
||||
|
||||
```sh
|
||||
yarn add --dev @electron-forge/cli
|
||||
yarn electron-forge import
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
Once the conversion script is done, Forge should have added a few scripts
|
||||
to your `package.json` file.
|
||||
|
||||
|
||||
@@ -11,12 +11,14 @@ const { contextIsolationEnabled } = internalContextBridge;
|
||||
* 1) Use menu API to show context menu.
|
||||
*/
|
||||
window.onload = function () {
|
||||
if (contextIsolationEnabled) {
|
||||
internalContextBridge.overrideGlobalValueFromIsolatedWorld([
|
||||
'InspectorFrontendHost', 'showContextMenuAtPoint'
|
||||
], createMenu);
|
||||
} else {
|
||||
window.InspectorFrontendHost!.showContextMenuAtPoint = createMenu;
|
||||
if (window.InspectorFrontendHost) {
|
||||
if (contextIsolationEnabled) {
|
||||
internalContextBridge.overrideGlobalValueFromIsolatedWorld([
|
||||
'InspectorFrontendHost', 'showContextMenuAtPoint'
|
||||
], createMenu);
|
||||
} else {
|
||||
window.InspectorFrontendHost.showContextMenuAtPoint = createMenu;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@ support_mixed_sandbox_with_zygote.patch
|
||||
build_add_electron_tracing_category.patch
|
||||
worker_context_will_destroy.patch
|
||||
frame_host_manager.patch
|
||||
crashpad_pid_check.patch
|
||||
network_service_allow_remote_certificate_verification_logic.patch
|
||||
add_contentgpuclient_precreatemessageloop_callback.patch
|
||||
picture-in-picture.patch
|
||||
@@ -65,7 +64,6 @@ feat_expose_raw_response_headers_from_urlloader.patch
|
||||
process_singleton.patch
|
||||
add_ui_scopedcliboardwriter_writeunsaferawdata.patch
|
||||
feat_add_data_parameter_to_processsingleton.patch
|
||||
load_v8_snapshot_in_browser_process.patch
|
||||
fix_adapt_exclusive_access_for_electron_needs.patch
|
||||
fix_aspect_ratio_with_max_size.patch
|
||||
port_autofill_colors_to_the_color_pipeline.patch
|
||||
@@ -144,3 +142,4 @@ fix_check_for_file_existence_before_setting_mtime.patch
|
||||
fix_linux_tray_id.patch
|
||||
expose_gtk_ui_platform_field.patch
|
||||
fix_os_crypt_async_cookie_encryption.patch
|
||||
patch_osr_control_screen_info.patch
|
||||
|
||||
@@ -23,10 +23,10 @@ index 8077ed85e45e56d6cccb691223216c1f6a94b5ee..dd4cee346f16df703d414bf206bbe6c9
|
||||
int32_t world_id) {}
|
||||
virtual void DidClearWindowObject() {}
|
||||
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
||||
index a53357468a3029b7319fab9d12a9c9a77d9981fb..e0a82ad9bfc78190cc95a0b99c12868226175346 100644
|
||||
index ac7f0b0524eec5cb845205001133a67501a094b5..ce9de143978a35d18be5b1baf7498851de1b2d88 100644
|
||||
--- a/content/renderer/render_frame_impl.cc
|
||||
+++ b/content/renderer/render_frame_impl.cc
|
||||
@@ -4726,6 +4726,12 @@ void RenderFrameImpl::DidCreateScriptContext(v8::Local<v8::Context> context,
|
||||
@@ -4746,6 +4746,12 @@ void RenderFrameImpl::DidCreateScriptContext(v8::Local<v8::Context> context,
|
||||
observer.DidCreateScriptContext(context, world_id);
|
||||
}
|
||||
|
||||
@@ -40,10 +40,10 @@ index a53357468a3029b7319fab9d12a9c9a77d9981fb..e0a82ad9bfc78190cc95a0b99c128682
|
||||
int world_id) {
|
||||
for (auto& observer : observers_)
|
||||
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
|
||||
index 9639e42a6ff5269dbef99cc0ee0b64f179e62998..fdbd5e66f73170cdc70009b183cd07f70db7dbd5 100644
|
||||
index ab62af31a76560c9747abed1c861352528947f8b..6070e33ee15d43bacbdb6a0ce0eaed89e49244d2 100644
|
||||
--- a/content/renderer/render_frame_impl.h
|
||||
+++ b/content/renderer/render_frame_impl.h
|
||||
@@ -606,6 +606,8 @@ class CONTENT_EXPORT RenderFrameImpl
|
||||
@@ -607,6 +607,8 @@ class CONTENT_EXPORT RenderFrameImpl
|
||||
void DidObserveLayoutShift(double score, bool after_input_or_scroll) override;
|
||||
void DidCreateScriptContext(v8::Local<v8::Context> context,
|
||||
int world_id) override;
|
||||
|
||||
@@ -6,7 +6,7 @@ Subject: allow disabling blink scheduler throttling per RenderView
|
||||
This allows us to disable throttling for hidden windows.
|
||||
|
||||
diff --git a/content/browser/renderer_host/navigation_controller_impl_unittest.cc b/content/browser/renderer_host/navigation_controller_impl_unittest.cc
|
||||
index 1390ff8785644a5e2c9d057124bf364972db53cc..8fcb52f033e175703f6695197ae61cd97bc15002 100644
|
||||
index 869a8714996a809eda3e95d03cf8d9db5e8d72b0..23ac62c37e4e9f742a8779dcf83f399c459d8f48 100644
|
||||
--- a/content/browser/renderer_host/navigation_controller_impl_unittest.cc
|
||||
+++ b/content/browser/renderer_host/navigation_controller_impl_unittest.cc
|
||||
@@ -168,6 +168,12 @@ class MockPageBroadcast : public blink::mojom::PageBroadcast {
|
||||
@@ -51,7 +51,7 @@ index c8d6592a2d73bb132c7bdaa6532086da10a4512a..99479aed4911e134914db226094933c3
|
||||
void SendRendererPreferencesToRenderer(
|
||||
const blink::RendererPreferences& preferences);
|
||||
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
|
||||
index 825eb4279756bc2985d63d75f654b3c881b22a7e..16240a7dc12f43b260ccb80db0dbdacfe844c3ef 100644
|
||||
index 722eff1cf2e51fe628b873c67694764c99dae496..b16c96b5682846d897c2f0f4dd3881d386928b68 100644
|
||||
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
|
||||
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
|
||||
@@ -646,8 +646,8 @@ void RenderWidgetHostViewAura::ShowImpl(PageVisibilityState page_visibility) {
|
||||
|
||||
@@ -49,7 +49,7 @@ index ac5d88520a785e12b66ebd96c92c46319a08311c..5c582e4f249c28a5739da2da4e600ee2
|
||||
// its owning reference back to our owning LocalFrame.
|
||||
client_->Detached(type);
|
||||
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
|
||||
index e13a70decf608f5a60d100fa108163d377e10c11..d27f583eb43f63da88e2ebfd67f5f0cd660c193c 100644
|
||||
index 1634aa9d76d9423cfce2df5b752e402f957e271e..e2b4ad7cfbd5ce4dfa0ae7d4992ac6f0d2b916b7 100644
|
||||
--- a/third_party/blink/renderer/core/frame/local_frame.cc
|
||||
+++ b/third_party/blink/renderer/core/frame/local_frame.cc
|
||||
@@ -767,10 +767,6 @@ bool LocalFrame::DetachImpl(FrameDetachType type) {
|
||||
@@ -63,7 +63,7 @@ index e13a70decf608f5a60d100fa108163d377e10c11..d27f583eb43f63da88e2ebfd67f5f0cd
|
||||
if (!Client())
|
||||
return false;
|
||||
|
||||
@@ -824,6 +820,11 @@ bool LocalFrame::DetachImpl(FrameDetachType type) {
|
||||
@@ -827,6 +823,11 @@ bool LocalFrame::DetachImpl(FrameDetachType type) {
|
||||
DCHECK(!view_->IsAttached());
|
||||
Client()->WillBeDetached();
|
||||
|
||||
|
||||
@@ -8,10 +8,10 @@ categories in use are known / declared. This patch is required for us
|
||||
to introduce a new Electron category for Electron-specific tracing.
|
||||
|
||||
diff --git a/base/trace_event/builtin_categories.h b/base/trace_event/builtin_categories.h
|
||||
index 8649b24d17fc9d8acf988f44422134ecc3ed0203..7835ffc1fbcd2b416e199dd73c11e750cd9a0e99 100644
|
||||
index 52d4c2888d80f7c80887609a337f402b4d072451..6b2d090bf53c1e2d80761adabb3843339535d564 100644
|
||||
--- a/base/trace_event/builtin_categories.h
|
||||
+++ b/base/trace_event/builtin_categories.h
|
||||
@@ -131,6 +131,7 @@ PERFETTO_DEFINE_CATEGORIES_IN_NAMESPACE_WITH_ATTRS(
|
||||
@@ -133,6 +133,7 @@ PERFETTO_DEFINE_CATEGORIES_IN_NAMESPACE_WITH_ATTRS(
|
||||
perfetto::Category("drm"),
|
||||
perfetto::Category("drmcursor"),
|
||||
perfetto::Category("dwrite"),
|
||||
|
||||
@@ -10,10 +10,10 @@ Needed for:
|
||||
2) //electron/shell/common:web_contents_utility
|
||||
|
||||
diff --git a/content/public/common/BUILD.gn b/content/public/common/BUILD.gn
|
||||
index b55f12d4f0eb92c515c8fc61e6ec3c15e287edde..027e8f7a943bb6cf13259520cc1992ae5852a72b 100644
|
||||
index c4c12588a21bdb5502dd3c3ffec358278b802e34..85628d8898087895120575af6fc9e26e82e10f45 100644
|
||||
--- a/content/public/common/BUILD.gn
|
||||
+++ b/content/public/common/BUILD.gn
|
||||
@@ -361,6 +361,8 @@ mojom("interfaces") {
|
||||
@@ -362,6 +362,8 @@ mojom("interfaces") {
|
||||
"//content/common/*",
|
||||
"//extensions/common:mojom",
|
||||
"//extensions/common:mojom_blink",
|
||||
|
||||
@@ -11,10 +11,10 @@ This patch can (and should) be removed when we can prevent those symbols
|
||||
from being stripped in the release build.
|
||||
|
||||
diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni
|
||||
index a0b040719c1c08cd2115518d6877ec0f8c12c6d2..4fbec99adf1da7469ad5d58874d3ecb3bbf52d0b 100644
|
||||
index 2e5ce812ab5eef379650912c33aa9d4ebeef9dd2..c40b1c180e4a253df074bcedb9d3d6b17c264a78 100644
|
||||
--- a/build/config/compiler/compiler.gni
|
||||
+++ b/build/config/compiler/compiler.gni
|
||||
@@ -89,7 +89,7 @@ declare_args() {
|
||||
@@ -90,7 +90,7 @@ declare_args() {
|
||||
# Chrome's clang. crbug.com/1033839
|
||||
use_thin_lto =
|
||||
is_cfi || (is_clang && is_official_build && chrome_pgo_phase != 1 &&
|
||||
|
||||
@@ -33,10 +33,10 @@ index f21010994e7e554c63f1bf24d5c09e9904e97bc9..ac151bbddafc76b92af9a7bce56bb405
|
||||
"//base",
|
||||
"//build:branding_buildflags",
|
||||
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
|
||||
index f9ad070cfe93af795417e03c4e76a5e397995a64..af9875ea3afd99e76a1129a76496ec6aef390b44 100644
|
||||
index 324103d42accea76c06490d8f7323a913bdbb81a..587b492f828ccb3179f34102a99326c09dfb3306 100644
|
||||
--- a/chrome/browser/BUILD.gn
|
||||
+++ b/chrome/browser/BUILD.gn
|
||||
@@ -4782,7 +4782,7 @@ static_library("browser") {
|
||||
@@ -4780,7 +4780,7 @@ static_library("browser") {
|
||||
]
|
||||
}
|
||||
|
||||
@@ -46,10 +46,10 @@ index f9ad070cfe93af795417e03c4e76a5e397995a64..af9875ea3afd99e76a1129a76496ec6a
|
||||
# than here in :chrome_dll.
|
||||
deps += [ "//chrome:packed_resources_integrity_header" ]
|
||||
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
|
||||
index 7a97c42c38a43c828a6337fdfd0d20b588bf7110..fe3e317fd38cbe6bff588ce48e1f6b67d429e896 100644
|
||||
index 080d366183b8a43bf4bb9f7784bbdf58d26960d3..6ca2ef279235c88aa9b60db8cb548edd0aea1356 100644
|
||||
--- a/chrome/test/BUILD.gn
|
||||
+++ b/chrome/test/BUILD.gn
|
||||
@@ -7641,9 +7641,12 @@ test("unit_tests") {
|
||||
@@ -7643,9 +7643,12 @@ test("unit_tests") {
|
||||
"//chrome/notification_helper",
|
||||
]
|
||||
|
||||
@@ -63,7 +63,7 @@ index 7a97c42c38a43c828a6337fdfd0d20b588bf7110..fe3e317fd38cbe6bff588ce48e1f6b67
|
||||
"//chrome//services/util_win:unit_tests",
|
||||
"//chrome/app:chrome_dll_resources",
|
||||
"//chrome/app:win_unit_tests",
|
||||
@@ -8604,6 +8607,10 @@ test("unit_tests") {
|
||||
@@ -8605,6 +8608,10 @@ test("unit_tests") {
|
||||
"../browser/performance_manager/policies/background_tab_loading_policy_unittest.cc",
|
||||
]
|
||||
|
||||
@@ -74,7 +74,7 @@ index 7a97c42c38a43c828a6337fdfd0d20b588bf7110..fe3e317fd38cbe6bff588ce48e1f6b67
|
||||
sources += [
|
||||
# The importer code is not used on Android.
|
||||
"../common/importer/firefox_importer_utils_unittest.cc",
|
||||
@@ -8661,7 +8668,6 @@ test("unit_tests") {
|
||||
@@ -8662,7 +8669,6 @@ test("unit_tests") {
|
||||
# TODO(crbug.com/417513088): Maybe merge with the non-android `deps` declaration above?
|
||||
deps += [
|
||||
"../browser/screen_ai:screen_ai_install_state",
|
||||
|
||||
@@ -7,7 +7,7 @@ These are variables we add to the root BUILDCONFIG so that they're available
|
||||
everywhere, without having to import("//electron/.../flags.gni").
|
||||
|
||||
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn
|
||||
index 38719796a381e2dcf22782693f458b6750d2670f..0879a86dbfad7ce3e1333ec2daf5ab98b7cc6470 100644
|
||||
index 4174baa9c0e39b517ade66aab07123eaf9b58e47..9601a32e3b763bb6b84727be509f51326fa08233 100644
|
||||
--- a/build/config/BUILDCONFIG.gn
|
||||
+++ b/build/config/BUILDCONFIG.gn
|
||||
@@ -123,6 +123,9 @@ if (current_os == "") {
|
||||
|
||||
@@ -9,10 +9,10 @@ potentially prevent a window from being created.
|
||||
TODO(loc): this patch is currently broken.
|
||||
|
||||
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
|
||||
index c2b120971d6652c60289f13a1ef7344bc14760f2..e96ede02cb19aab1aa43bbbc9f48e201842312dd 100644
|
||||
index 8b5319856ca98a4320a3857c4a200435be2b5453..bb3b1d7cd446d25f1e9d90b92f0fed8c841973c4 100644
|
||||
--- a/content/browser/renderer_host/render_frame_host_impl.cc
|
||||
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
|
||||
@@ -9924,6 +9924,7 @@ void RenderFrameHostImpl::CreateNewWindow(
|
||||
@@ -9923,6 +9923,7 @@ void RenderFrameHostImpl::CreateNewWindow(
|
||||
last_committed_origin_, params->window_container_type,
|
||||
params->target_url, params->referrer.To<Referrer>(),
|
||||
params->frame_name, params->disposition, *params->features,
|
||||
@@ -77,7 +77,7 @@ index 4c55f0abf8df5a3408f3f90d444ceff3c23ee1bc..72bdb5b5a4c2c21a7192b34bb293bd23
|
||||
|
||||
// Operation result when the renderer asks the browser to create a new window.
|
||||
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
|
||||
index 7f6715e7add2535500ea650bcc39d601ab358093..0f7481ebb83eed5bbe40f7933883f0f57b9f464a 100644
|
||||
index 0f20753a92f64611f8c7f902960324faa4570088..b1e25f142beae77768128bb4467a3485c888a7ad 100644
|
||||
--- a/content/public/browser/content_browser_client.cc
|
||||
+++ b/content/public/browser/content_browser_client.cc
|
||||
@@ -872,6 +872,8 @@ bool ContentBrowserClient::CanCreateWindow(
|
||||
@@ -90,7 +90,7 @@ index 7f6715e7add2535500ea650bcc39d601ab358093..0f7481ebb83eed5bbe40f7933883f0f5
|
||||
bool opener_suppressed,
|
||||
bool* no_javascript_access) {
|
||||
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
|
||||
index 130dfcfa81f5dff35b2a368cc10d155b2dc0206f..4ad0e28385dd11d2b0987cbd597caf246cbbe9b7 100644
|
||||
index 1a080e8613a2aafcb56696ae4b8364c1ba918fec..d97d2e328de91be93ca1fc542ad1d8c8131285d1 100644
|
||||
--- a/content/public/browser/content_browser_client.h
|
||||
+++ b/content/public/browser/content_browser_client.h
|
||||
@@ -204,6 +204,7 @@ class NetworkService;
|
||||
@@ -101,7 +101,7 @@ index 130dfcfa81f5dff35b2a368cc10d155b2dc0206f..4ad0e28385dd11d2b0987cbd597caf24
|
||||
} // namespace network
|
||||
|
||||
namespace sandbox {
|
||||
@@ -1449,6 +1450,8 @@ class CONTENT_EXPORT ContentBrowserClient {
|
||||
@@ -1456,6 +1457,8 @@ class CONTENT_EXPORT ContentBrowserClient {
|
||||
const std::string& frame_name,
|
||||
WindowOpenDisposition disposition,
|
||||
const blink::mojom::WindowFeatures& features,
|
||||
@@ -170,10 +170,10 @@ index 6a72c7925222ed8a11830b68718d7973629a6d2c..a6f0447b6ede476162f555d951f346b0
|
||||
// typically happens when popups are created.
|
||||
virtual void WebContentsCreated(WebContents* source_contents,
|
||||
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
||||
index 535d58a611724fe5729f09414d0ea870d0ac877d..a53357468a3029b7319fab9d12a9c9a77d9981fb 100644
|
||||
index d2b3d5dccde5754972ae44fdf6d1b9cae90aa9fc..ac7f0b0524eec5cb845205001133a67501a094b5 100644
|
||||
--- a/content/renderer/render_frame_impl.cc
|
||||
+++ b/content/renderer/render_frame_impl.cc
|
||||
@@ -6790,6 +6790,10 @@ WebView* RenderFrameImpl::CreateNewWindow(
|
||||
@@ -6810,6 +6810,10 @@ WebView* RenderFrameImpl::CreateNewWindow(
|
||||
request.HasUserGesture(), GetWebFrame()->IsAdFrame(),
|
||||
GetWebFrame()->IsAdScriptInStack());
|
||||
|
||||
@@ -232,7 +232,7 @@ index d92bab531c12c62a5321a23f4a0cb89691668127..c354a79c7c8dd047264df35b873e90c1
|
||||
|
||||
} // namespace blink
|
||||
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc
|
||||
index 9253fb513782b7a3c785bfd5e50bc4fca382b201..8437ce75ff70a69ca381d422ef4e04d840568b8f 100644
|
||||
index fdd1d6e1ee68b824df2de6e0ba97669151cf63d9..da2a47bdb8f78abfe37b845e1c3751806df3acba 100644
|
||||
--- a/third_party/blink/renderer/core/frame/local_dom_window.cc
|
||||
+++ b/third_party/blink/renderer/core/frame/local_dom_window.cc
|
||||
@@ -2335,6 +2335,8 @@ DOMWindow* LocalDOMWindow::open(v8::Isolate* isolate,
|
||||
|
||||
@@ -8,19 +8,21 @@ electron objects that extend gin::Wrappable and gets
|
||||
allocated on the cpp heap
|
||||
|
||||
diff --git a/gin/public/wrappable_pointer_tags.h b/gin/public/wrappable_pointer_tags.h
|
||||
index 573bcb2e56068a2ade6d8ab28964b077487874fd..42add73062b723b03fc15ddcce905e4d5061c384 100644
|
||||
index 573bcb2e56068a2ade6d8ab28964b077487874fd..16145e466cd560784b89681aa642e350d5b28f12 100644
|
||||
--- a/gin/public/wrappable_pointer_tags.h
|
||||
+++ b/gin/public/wrappable_pointer_tags.h
|
||||
@@ -74,7 +74,15 @@ enum WrappablePointerTag : uint16_t {
|
||||
@@ -74,7 +74,17 @@ enum WrappablePointerTag : uint16_t {
|
||||
kTextInputControllerBindings, // content::TextInputControllerBindings
|
||||
kWebAXObjectProxy, // content::WebAXObjectProxy
|
||||
kWrappedExceptionHandler, // extensions::WrappedExceptionHandler
|
||||
- kLastPointerTag = kWrappedExceptionHandler,
|
||||
+ kElectronApp, // electron::api::App
|
||||
+ kElectronDebugger, // electron::api::Debugger
|
||||
+ kElectronDataPipeHolder, // electron::api::DataPipeHolder
|
||||
+ kElectronEvent, // gin_helper::internal::Event
|
||||
+ kElectronMenu, // electron::api::Menu
|
||||
+ kElectronNetLog, // electron::api::NetLog
|
||||
+ kElectronPowerSaveBlocker, // electron::api::PowerSaveBlocker
|
||||
+ kElectronReplyChannel, // gin_helper::internal::ReplyChannel
|
||||
+ kElectronSession, // electron::api::Session
|
||||
+ kElectronWebRequest, // electron::api::WebRequest
|
||||
|
||||
@@ -34,10 +34,10 @@ index dd4cee346f16df703d414bf206bbe6c9f4b1f796..5565f5a9259bd7da0722080bf01b3415
|
||||
virtual void DidClearWindowObject() {}
|
||||
virtual void DidChangeScrollOffset() {}
|
||||
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
||||
index e0a82ad9bfc78190cc95a0b99c12868226175346..85f69c6dfc5c6e26a8987103759c3a6411a080a5 100644
|
||||
index ce9de143978a35d18be5b1baf7498851de1b2d88..0f15ab9ca7ecce3f2e1800c6c03261bf1a71f867 100644
|
||||
--- a/content/renderer/render_frame_impl.cc
|
||||
+++ b/content/renderer/render_frame_impl.cc
|
||||
@@ -4732,10 +4732,11 @@ void RenderFrameImpl::DidInstallConditionalFeatures(
|
||||
@@ -4752,10 +4752,11 @@ void RenderFrameImpl::DidInstallConditionalFeatures(
|
||||
observer.DidInstallConditionalFeatures(context, world_id);
|
||||
}
|
||||
|
||||
@@ -52,10 +52,10 @@ index e0a82ad9bfc78190cc95a0b99c12868226175346..85f69c6dfc5c6e26a8987103759c3a64
|
||||
|
||||
void RenderFrameImpl::DidChangeScrollOffset() {
|
||||
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
|
||||
index fdbd5e66f73170cdc70009b183cd07f70db7dbd5..c82975148cc5afa3bfa023a43d7b69691cebf36f 100644
|
||||
index 6070e33ee15d43bacbdb6a0ce0eaed89e49244d2..30dfb3677875b8a2e2c92babd46e291c9308d992 100644
|
||||
--- a/content/renderer/render_frame_impl.h
|
||||
+++ b/content/renderer/render_frame_impl.h
|
||||
@@ -608,7 +608,8 @@ class CONTENT_EXPORT RenderFrameImpl
|
||||
@@ -609,7 +609,8 @@ class CONTENT_EXPORT RenderFrameImpl
|
||||
int world_id) override;
|
||||
void DidInstallConditionalFeatures(v8::Local<v8::Context> context,
|
||||
int world_id) override;
|
||||
|
||||
@@ -10,7 +10,7 @@ Subject: chore: "grandfather in" Electron Views and Delegates
|
||||
6448510: Lock further access to View::set_owned_by_client(). | https://chromium-review.googlesource.com/c/chromium/src/+/6448510
|
||||
|
||||
diff --git a/ui/views/view.h b/ui/views/view.h
|
||||
index b9f2a484669f128c27d37a31a58accfd88dfe2ae..5e326f20dbb2bb506dc2cbaa03a230d8376fcf3d 100644
|
||||
index b7d13fff1f53e2ce3e53d2d5e97a442627962cd8..295249a582c77b70abf78313439b0100fed0c2ce 100644
|
||||
--- a/ui/views/view.h
|
||||
+++ b/ui/views/view.h
|
||||
@@ -77,6 +77,19 @@ class ArcNotificationContentView;
|
||||
@@ -49,7 +49,7 @@ index b9f2a484669f128c27d37a31a58accfd88dfe2ae..5e326f20dbb2bb506dc2cbaa03a230d8
|
||||
// These existing cases are "grandfathered in", but there shouldn't be more.
|
||||
// See comments atop class.
|
||||
diff --git a/ui/views/widget/widget_delegate.h b/ui/views/widget/widget_delegate.h
|
||||
index 0315a1fac360ecea54cf8c5c065e777508193169..49df61c710fad846a29f074a91ceba2d8d239d5a 100644
|
||||
index d12858dfb35e009892fc7656dfe0823bff3f3b26..bfbcd7dad7689fb612d328ca6e66eca5e6b48107 100644
|
||||
--- a/ui/views/widget/widget_delegate.h
|
||||
+++ b/ui/views/widget/widget_delegate.h
|
||||
@@ -168,6 +168,12 @@ namespace crostini {
|
||||
@@ -65,7 +65,7 @@ index 0315a1fac360ecea54cf8c5c065e777508193169..49df61c710fad846a29f074a91ceba2d
|
||||
namespace exo {
|
||||
class ShellSurfaceBase;
|
||||
}
|
||||
@@ -368,6 +374,7 @@ class VIEWS_EXPORT WidgetDelegate {
|
||||
@@ -364,6 +370,7 @@ class VIEWS_EXPORT WidgetDelegate {
|
||||
|
||||
class OwnedByWidgetPassKey {
|
||||
private:
|
||||
@@ -73,7 +73,7 @@ index 0315a1fac360ecea54cf8c5c065e777508193169..49df61c710fad846a29f074a91ceba2d
|
||||
// DO NOT ADD TO THIS LIST!
|
||||
// These existing cases are "grandfathered in", but there shouldn't be more.
|
||||
// See comments atop `SetOwnedByWidget()`.
|
||||
@@ -461,6 +468,7 @@ class VIEWS_EXPORT WidgetDelegate {
|
||||
@@ -457,6 +464,7 @@ class VIEWS_EXPORT WidgetDelegate {
|
||||
};
|
||||
class RegisterDeleteCallbackPassKey {
|
||||
private:
|
||||
@@ -81,7 +81,7 @@ index 0315a1fac360ecea54cf8c5c065e777508193169..49df61c710fad846a29f074a91ceba2d
|
||||
// DO NOT ADD TO THIS LIST!
|
||||
// These existing cases are "grandfathered in", but there shouldn't be more.
|
||||
// See comments atop `RegisterDeleteDelegateCallback()`.
|
||||
@@ -916,6 +924,7 @@ class VIEWS_EXPORT WidgetDelegateView : public WidgetDelegate, public View {
|
||||
@@ -912,6 +920,7 @@ class VIEWS_EXPORT WidgetDelegateView : public WidgetDelegate, public View {
|
||||
View* GetContentsView() override;
|
||||
|
||||
private:
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Cheng Zhao <zcbenz@gmail.com>
|
||||
Date: Tue, 4 Jun 2019 11:30:12 +0900
|
||||
Subject: crashpad_pid_check.patch
|
||||
|
||||
When both browser process and renderer process are connecting to the pipe,
|
||||
the API may return the PID of browser process as real_pid, which is different
|
||||
from the PID of renderer process.
|
||||
|
||||
This is caused by the crashReporter getting started after the sanbox, after
|
||||
we redesign crashReporter's API to make it alwasy start before the
|
||||
sanbox, we can remove this patch.
|
||||
|
||||
See following links for more:
|
||||
https://github.com/electron/electron/pull/18483#discussion_r292703588
|
||||
https://github.com/electron/electron/pull/18483#issuecomment-501090683
|
||||
|
||||
diff --git a/third_party/crashpad/crashpad/util/win/exception_handler_server.cc b/third_party/crashpad/crashpad/util/win/exception_handler_server.cc
|
||||
index 8af53a62b088fececd558f1436a84d4c2c4feabd..7d9913ae189708475c08d123a404eb5b125ecccc 100644
|
||||
--- a/third_party/crashpad/crashpad/util/win/exception_handler_server.cc
|
||||
+++ b/third_party/crashpad/crashpad/util/win/exception_handler_server.cc
|
||||
@@ -448,9 +448,16 @@ bool ExceptionHandlerServer::ServiceClientConnection(
|
||||
DWORD real_pid = 0;
|
||||
if (get_named_pipe_client_process_id(service_context.pipe(), &real_pid) &&
|
||||
message.registration.client_process_id != real_pid) {
|
||||
+ // Electron: When both browser process and renderer process are connecting
|
||||
+ // to the pipe, the API may return the PID of browser process as real_pid,
|
||||
+ // which is different from the PID of renderer process.
|
||||
+ //
|
||||
+ // I don't understand why Chromium does not have this issue.
|
||||
+#if 0
|
||||
LOG(ERROR) << "forged client pid, real pid: " << real_pid
|
||||
<< ", got: " << message.registration.client_process_id;
|
||||
return false;
|
||||
+#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ By default, chromium sets up one v8 snapshot to be used in all v8 contexts. This
|
||||
to have a dedicated browser process v8 snapshot defined by the file `browser_v8_context_snapshot.bin`.
|
||||
|
||||
diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc
|
||||
index 3aeea292145cd5aaa445a29840156a47379d9d2c..ff5aa0c0dc924ca80800f7cd40d7b1565a8bbe8e 100644
|
||||
index 304e7a9379b012367dae26b425e5cbb3f56ba99e..736deda278d5cdc5f7a149429fc5b9a51dbb63a2 100644
|
||||
--- a/content/app/content_main_runner_impl.cc
|
||||
+++ b/content/app/content_main_runner_impl.cc
|
||||
@@ -276,8 +276,13 @@ void AsanProcessInfoCB(const char* reason,
|
||||
@@ -25,32 +25,17 @@ index 3aeea292145cd5aaa445a29840156a47379d9d2c..ff5aa0c0dc924ca80800f7cd40d7b156
|
||||
#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_MAC)
|
||||
base::FileDescriptorStore& file_descriptor_store =
|
||||
base::FileDescriptorStore::GetInstance();
|
||||
@@ -306,11 +311,12 @@ bool ShouldLoadV8Snapshot(const base::CommandLine& command_line,
|
||||
@@ -945,7 +950,7 @@ int ContentMainRunnerImpl::Initialize(ContentMainParams params) {
|
||||
|
||||
#endif // V8_USE_EXTERNAL_STARTUP_DATA
|
||||
|
||||
-void LoadV8SnapshotIfNeeded(const base::CommandLine& command_line,
|
||||
+void LoadV8SnapshotIfNeeded(const raw_ptr<ContentMainDelegate> delegate,
|
||||
+ const base::CommandLine& command_line,
|
||||
const std::string& process_type) {
|
||||
#if defined(V8_USE_EXTERNAL_STARTUP_DATA)
|
||||
if (ShouldLoadV8Snapshot(command_line, process_type))
|
||||
if (delegate_->ShouldLoadV8Snapshot(process_type)) {
|
||||
- LoadV8SnapshotFile(command_line);
|
||||
+ LoadV8SnapshotFile(delegate, command_line);
|
||||
+ LoadV8SnapshotFile(delegate_, command_line);
|
||||
}
|
||||
#endif // V8_USE_EXTERNAL_STARTUP_DATA
|
||||
}
|
||||
|
||||
@@ -958,7 +964,7 @@ int ContentMainRunnerImpl::Initialize(ContentMainParams params) {
|
||||
return TerminateForFatalInitializationError();
|
||||
#endif // BUILDFLAG(IS_ANDROID) && (ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_FILE)
|
||||
|
||||
- LoadV8SnapshotIfNeeded(command_line, process_type);
|
||||
+ LoadV8SnapshotIfNeeded(delegate_, command_line, process_type);
|
||||
|
||||
blink::TrialTokenValidator::SetOriginTrialPolicyGetter(
|
||||
base::BindRepeating([]() -> blink::OriginTrialPolicy* {
|
||||
diff --git a/content/public/app/content_main_delegate.cc b/content/public/app/content_main_delegate.cc
|
||||
index 3c763519c5fd23967b8f03093e8dce2f7c2b9c49..68e31ed29e25300c5948dd9adb6408cbe68c0672 100644
|
||||
index e56a0985068ee0edcd46a474fec1bb4fa4bf69ea..82549a1e029349373b2ddfbe2415e501f8e2892d 100644
|
||||
--- a/content/public/app/content_main_delegate.cc
|
||||
+++ b/content/public/app/content_main_delegate.cc
|
||||
@@ -5,6 +5,7 @@
|
||||
@@ -60,8 +45,8 @@ index 3c763519c5fd23967b8f03093e8dce2f7c2b9c49..68e31ed29e25300c5948dd9adb6408cb
|
||||
+#include <string_view>
|
||||
|
||||
#include "base/check.h"
|
||||
#include "base/notreached.h"
|
||||
@@ -74,6 +75,10 @@ std::optional<int> ContentMainDelegate::PostEarlyInitialization(
|
||||
#include "base/command_line.h"
|
||||
@@ -76,6 +77,10 @@ std::optional<int> ContentMainDelegate::PostEarlyInitialization(
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
@@ -73,7 +58,7 @@ index 3c763519c5fd23967b8f03093e8dce2f7c2b9c49..68e31ed29e25300c5948dd9adb6408cb
|
||||
return new ContentClient();
|
||||
}
|
||||
diff --git a/content/public/app/content_main_delegate.h b/content/public/app/content_main_delegate.h
|
||||
index 199b5637bc6fe387ed30b03bae39b19ab9300dd9..ecf1440a39bda59b44793a6671715484f1e15967 100644
|
||||
index 8c318a31454c57b0e8db3770a36c45be427f053c..6f809c9672448ed9797e3c9da492ad2ccd76df21 100644
|
||||
--- a/content/public/app/content_main_delegate.h
|
||||
+++ b/content/public/app/content_main_delegate.h
|
||||
@@ -9,6 +9,7 @@
|
||||
@@ -84,9 +69,9 @@ index 199b5637bc6fe387ed30b03bae39b19ab9300dd9..ecf1440a39bda59b44793a6671715484
|
||||
#include <vector>
|
||||
|
||||
#include "base/notreached.h"
|
||||
@@ -185,6 +186,8 @@ class CONTENT_EXPORT ContentMainDelegate {
|
||||
// This is an experimental feature and its tracking bug is crbug.com/423925400
|
||||
virtual bool IsInitFeatureListEarly();
|
||||
@@ -193,6 +194,8 @@ class CONTENT_EXPORT ContentMainDelegate {
|
||||
// process unless it's in single process mode.
|
||||
virtual bool ShouldLoadV8Snapshot(const std::string& process_type);
|
||||
|
||||
+ virtual std::string_view GetBrowserV8SnapshotFilename();
|
||||
+
|
||||
|
||||
@@ -6,7 +6,7 @@ Subject: fix: disabling compositor recycling
|
||||
Compositor recycling is useful for Chrome because there can be many tabs and spinning up a compositor for each one would be costly. In practice, Chrome uses the parent compositor code path of browser_compositor_view_mac.mm; the NSView of each tab is detached when it's hidden and attached when it's shown. For Electron, there is no parent compositor, so we're forced into the "own compositor" code path, which seems to be non-optimal and pretty ruthless in terms of the release of resources. Electron has no real concept of multiple tabs per window, so it should be okay to disable this ruthless recycling altogether in Electron.
|
||||
|
||||
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
|
||||
index 492a3692cd2abec2ed3731e848d67094a1e5eedc..942827bd0086381db799754d6c7597491229b506 100644
|
||||
index 082c24657917671fbee8f755786285af66640a92..d506230061f3bc969cc3cf9b998ec0321a44a1d2 100644
|
||||
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
|
||||
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
|
||||
@@ -559,7 +559,11 @@
|
||||
|
||||
@@ -34,7 +34,7 @@ index 614390e29fa84af4c141102d86f3ebdb7293b813..0bb31ec2e957301e55c81225683ec998
|
||||
// |routing_id| must not be IPC::mojom::kRoutingIdNone.
|
||||
// If this object outlives |delegate|, DetachDelegate() must be called when
|
||||
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
|
||||
index c6ed3e391e0eeb06091bef7cd43c1ac88b87637c..825eb4279756bc2985d63d75f654b3c881b22a7e 100644
|
||||
index 1aeb55dc79528bf36abd25ded50f7365724bf0b2..722eff1cf2e51fe628b873c67694764c99dae496 100644
|
||||
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
|
||||
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
|
||||
@@ -710,7 +710,7 @@ void RenderWidgetHostViewAura::HideImpl() {
|
||||
|
||||
@@ -9,17 +9,17 @@ embedders to make custom schemes allow V8 code cache.
|
||||
Chromium CL: https://chromium-review.googlesource.com/c/chromium/src/+/5019665
|
||||
|
||||
diff --git a/content/browser/code_cache/generated_code_cache.cc b/content/browser/code_cache/generated_code_cache.cc
|
||||
index 7a775f9faac4296806ec1ab421da6dc7e9463a7a..0473112d313d552635f1855a2126b15cec4d8db9 100644
|
||||
index 7a775f9faac4296806ec1ab421da6dc7e9463a7a..251fdb8fb65e1b68056cb9c97a88a2da5450e380 100644
|
||||
--- a/content/browser/code_cache/generated_code_cache.cc
|
||||
+++ b/content/browser/code_cache/generated_code_cache.cc
|
||||
@@ -8,6 +8,7 @@
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include "content/browser/code_cache/generated_code_cache.h"
|
||||
|
||||
+#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <string_view>
|
||||
|
||||
#include "base/compiler_specific.h"
|
||||
+#include "base/containers/contains.h"
|
||||
#include "base/feature_list.h"
|
||||
#include "base/functional/bind.h"
|
||||
#include "base/functional/callback_helpers.h"
|
||||
@@ -33,6 +34,7 @@
|
||||
#include "third_party/blink/public/common/loader/code_cache_util.h"
|
||||
#include "third_party/blink/public/common/scheme_registry.h"
|
||||
@@ -45,8 +45,8 @@ index 7a775f9faac4296806ec1ab421da6dc7e9463a7a..0473112d313d552635f1855a2126b15c
|
||||
- resource_url.SchemeIsHTTPOrHTTPS() ||
|
||||
- resource_url_is_chrome_or_chrome_untrusted ||
|
||||
- blink::CommonSchemeRegistry::IsExtensionScheme(resource_url.GetScheme()));
|
||||
+ const bool resource_url_embedder =
|
||||
+ base::Contains(url::GetCodeCacheSchemes(), resource_url.GetScheme());
|
||||
+ const bool resource_url_embedder = std::ranges::contains(
|
||||
+ url::GetCodeCacheSchemes(), resource_url.GetScheme());
|
||||
+ DCHECK(resource_url_http || resource_url_webui || resource_url_embedder);
|
||||
|
||||
if (!blink::features::IsPersistentCacheForCodeCacheEnabled()) {
|
||||
@@ -84,8 +84,8 @@ index 7a775f9faac4296806ec1ab421da6dc7e9463a7a..0473112d313d552635f1855a2126b15c
|
||||
- blink::CommonSchemeRegistry::IsExtensionScheme(
|
||||
- origin_lock.GetScheme())) &&
|
||||
- !url::Origin::Create(origin_lock).opaque()));
|
||||
+ const bool origin_lock_for_embedder =
|
||||
+ base::Contains(url::GetCodeCacheSchemes(), origin_lock.GetScheme());
|
||||
+ const bool origin_lock_for_embedder = std::ranges::contains(
|
||||
+ url::GetCodeCacheSchemes(), origin_lock.GetScheme());
|
||||
+
|
||||
+ DCHECK(origin_lock_empty || ((origin_lock_for_http || origin_lock_for_webui ||
|
||||
+ origin_lock_for_embedder) &&
|
||||
@@ -262,17 +262,17 @@ index 68a3095a49caf472c83b93b5cef66e5549a2d7cc..aa371ba5576f9fbaf5558e39704f7eb8
|
||||
+
|
||||
} // namespace content
|
||||
diff --git a/content/browser/renderer_host/code_cache_host_impl.cc b/content/browser/renderer_host/code_cache_host_impl.cc
|
||||
index ffc684ad1e2dfbf148bb01b4d185a44619a2dceb..cf1d94f43238fc3166ca0488b72c929be07e3c52 100644
|
||||
index ffc684ad1e2dfbf148bb01b4d185a44619a2dceb..39b15dd921539c17e1038fabc64bf20b0974e20a 100644
|
||||
--- a/content/browser/renderer_host/code_cache_host_impl.cc
|
||||
+++ b/content/browser/renderer_host/code_cache_host_impl.cc
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <utility>
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include "base/check_is_test.h"
|
||||
+#include "base/containers/contains.h"
|
||||
#include "base/functional/bind.h"
|
||||
#include "base/functional/callback_helpers.h"
|
||||
#include "base/memory/weak_ptr.h"
|
||||
#include "content/browser/renderer_host/code_cache_host_impl.h"
|
||||
|
||||
+#include <algorithm>
|
||||
#include <optional>
|
||||
#include <string_view>
|
||||
#include <utility>
|
||||
@@ -42,6 +43,7 @@
|
||||
#include "third_party/perfetto/include/perfetto/tracing/track_event_args.h"
|
||||
#include "url/gurl.h"
|
||||
@@ -281,19 +281,18 @@ index ffc684ad1e2dfbf148bb01b4d185a44619a2dceb..cf1d94f43238fc3166ca0488b72c929b
|
||||
|
||||
using blink::mojom::CacheStorageError;
|
||||
|
||||
@@ -56,6 +58,11 @@ enum class Operation {
|
||||
@@ -56,6 +58,10 @@ enum class Operation {
|
||||
kWrite,
|
||||
};
|
||||
|
||||
+bool ProcessLockURLIsCodeCacheScheme(const ProcessLock& process_lock) {
|
||||
+ return base::Contains(url::GetCodeCacheSchemes(),
|
||||
+ process_lock.GetProcessLockURL().scheme());
|
||||
+ return std::ranges::contains(url::GetCodeCacheSchemes(), process_lock.GetProcessLockURL().scheme());
|
||||
+}
|
||||
+
|
||||
bool CheckSecurityForAccessingCodeCacheData(const GURL& resource_url,
|
||||
int render_process_id,
|
||||
Operation operation) {
|
||||
@@ -67,42 +74,56 @@ bool CheckSecurityForAccessingCodeCacheData(const GURL& resource_url,
|
||||
@@ -67,42 +73,56 @@ bool CheckSecurityForAccessingCodeCacheData(const GURL& resource_url,
|
||||
ChildProcessSecurityPolicyImpl::GetInstance()->GetProcessLock(
|
||||
render_process_id);
|
||||
|
||||
@@ -368,12 +367,12 @@ index ffc684ad1e2dfbf148bb01b4d185a44619a2dceb..cf1d94f43238fc3166ca0488b72c929b
|
||||
- return false;
|
||||
- }
|
||||
- return true;
|
||||
+ if (base::Contains(url::GetCodeCacheSchemes(), resource_url.GetScheme())) {
|
||||
+ if (std::ranges::contains(url::GetCodeCacheSchemes(), resource_url.GetScheme())) {
|
||||
+ return ProcessLockURLIsCodeCacheScheme(process_lock);
|
||||
}
|
||||
|
||||
if (operation == Operation::kWrite) {
|
||||
@@ -180,6 +201,7 @@ std::optional<GURL> GetOriginLock(int render_process_id) {
|
||||
@@ -180,6 +200,7 @@ std::optional<GURL> GetOriginLock(int render_process_id) {
|
||||
process_lock.MatchesScheme(url::kHttpsScheme) ||
|
||||
process_lock.MatchesScheme(content::kChromeUIScheme) ||
|
||||
process_lock.MatchesScheme(content::kChromeUIUntrustedScheme) ||
|
||||
|
||||
@@ -20,7 +20,7 @@ making three primary changes to Blink:
|
||||
* Controls whether the CSS rule is available.
|
||||
|
||||
diff --git a/third_party/blink/public/mojom/use_counter/metrics/css_property_id.mojom b/third_party/blink/public/mojom/use_counter/metrics/css_property_id.mojom
|
||||
index 82fd11ba5dd4987f50a413b7f0600e71ddc195f9..0b16b81ddeee1e35bb1da1752a9952e8a8650473 100644
|
||||
index 2dd22ede8da0ad21251d0df6622a85513651510c..fea4d717fbad2419741d48c5a285909026654b57 100644
|
||||
--- a/third_party/blink/public/mojom/use_counter/metrics/css_property_id.mojom
|
||||
+++ b/third_party/blink/public/mojom/use_counter/metrics/css_property_id.mojom
|
||||
@@ -50,7 +50,7 @@ enum CSSSampleId {
|
||||
@@ -46,10 +46,10 @@ index e189d584f05f2ce6354c03a9b19f56985df8a15e..41b430e8f2416be098494f5c49fb97ca
|
||||
'internal-forced-visited-'):
|
||||
internal_visited_order = 0
|
||||
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5
|
||||
index d98fecdf3bfd4085789c6076c61f1e6c15cc00bb..2818fad9bade98d41d0370318aca4785d159b4c8 100644
|
||||
index a4959f7b3f428cd3e3d51ed020ec576e3a92d0c1..b2bd0b07803e457c2aaee8c382dc01045315febf 100644
|
||||
--- a/third_party/blink/renderer/core/css/css_properties.json5
|
||||
+++ b/third_party/blink/renderer/core/css/css_properties.json5
|
||||
@@ -9222,6 +9222,26 @@
|
||||
@@ -9223,6 +9223,26 @@
|
||||
property_methods: ["ParseShorthand", "CSSValueFromComputedStyleInternal"],
|
||||
},
|
||||
|
||||
@@ -77,7 +77,7 @@ index d98fecdf3bfd4085789c6076c61f1e6c15cc00bb..2818fad9bade98d41d0370318aca4785
|
||||
{
|
||||
name: "-internal-visited-color",
|
||||
diff --git a/third_party/blink/renderer/core/css/css_property_equality.cc b/third_party/blink/renderer/core/css/css_property_equality.cc
|
||||
index 358ab7ffc4af7f55a1ee0e0dba0b68296efe3836..d93152fef81184db7e560154a7f140c3c7bc5e30 100644
|
||||
index e723573b371b489d4908c8dc8a3399d96031f983..bb68dde106578c73c514bd2a809fcaca0f92fc34 100644
|
||||
--- a/third_party/blink/renderer/core/css/css_property_equality.cc
|
||||
+++ b/third_party/blink/renderer/core/css/css_property_equality.cc
|
||||
@@ -402,6 +402,8 @@ bool CSSPropertyEquality::PropertiesEqual(const PropertyHandle& property,
|
||||
@@ -90,17 +90,17 @@ index 358ab7ffc4af7f55a1ee0e0dba0b68296efe3836..d93152fef81184db7e560154a7f140c3
|
||||
return a.EmptyCells() == b.EmptyCells();
|
||||
case CSSPropertyID::kFill:
|
||||
diff --git a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
|
||||
index 1260580d96c01523382fa079aacdbb9777bf682e..f237c8d831dc88d83c081a70ffdffb007464a5a4 100644
|
||||
index 506d6de5d48eadd34df1e9f35398a8756fe0d005..f56613267b5ecf08e5b5535144bc95791e1c6a4c 100644
|
||||
--- a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
|
||||
+++ b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
|
||||
@@ -12610,5 +12610,36 @@ const CSSValue* InternalEmptyLineHeight::ParseSingleValue(
|
||||
@@ -12893,5 +12893,36 @@ const CSSValue* InternalEmptyLineHeight::ParseSingleValue(
|
||||
CSSValueID::kNone>(stream);
|
||||
}
|
||||
|
||||
+const CSSValue* ElectronCornerSmoothing::ParseSingleValue(
|
||||
+ CSSParserTokenStream& stream,
|
||||
+ const CSSParserContext& context,
|
||||
+ CSSParserLocalContext&) const {
|
||||
+ CSSParserLocalContext& local_context) const {
|
||||
+ // Try to parse `system-ui` keyword first.
|
||||
+ if (auto* ident =
|
||||
+ css_parsing_utils::ConsumeIdent<CSSValueID::kSystemUi>(stream)) {
|
||||
@@ -108,7 +108,7 @@ index 1260580d96c01523382fa079aacdbb9777bf682e..f237c8d831dc88d83c081a70ffdffb00
|
||||
+ }
|
||||
+ // Try to parse as percent.
|
||||
+ return css_parsing_utils::ConsumePercent(
|
||||
+ stream, context, CSSPrimitiveValue::ValueRange::kNonNegative);
|
||||
+ stream, context, local_context, CSSPrimitiveValue::ValueRange::kNonNegative);
|
||||
+}
|
||||
+
|
||||
+const CSSValue* ElectronCornerSmoothing::CSSValueFromComputedStyleInternal(
|
||||
@@ -131,10 +131,10 @@ index 1260580d96c01523382fa079aacdbb9777bf682e..f237c8d831dc88d83c081a70ffdffb00
|
||||
} // namespace css_longhand
|
||||
} // namespace blink
|
||||
diff --git a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
|
||||
index d1ec024d45aee048a363c1cef2bd42ba44f3fda5..f89f4e6b703a4e817d555519b2682ffc4d4aef53 100644
|
||||
index 292812c9e36fed429edf72335069ac3c0bbd780f..13a500d99cec9fb733de41d3071611630c3b09e0 100644
|
||||
--- a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
|
||||
+++ b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
|
||||
@@ -4167,6 +4167,15 @@ PositionTryFallback StyleBuilderConverter::ConvertSinglePositionTryFallback(
|
||||
@@ -4172,6 +4172,15 @@ PositionTryFallback StyleBuilderConverter::ConvertSinglePositionTryFallback(
|
||||
return PositionTryFallback(scoped_name, tactic_list);
|
||||
}
|
||||
|
||||
@@ -151,10 +151,10 @@ index d1ec024d45aee048a363c1cef2bd42ba44f3fda5..f89f4e6b703a4e817d555519b2682ffc
|
||||
const CSSValue& value) {
|
||||
const auto& list = To<CSSValueList>(value);
|
||||
diff --git a/third_party/blink/renderer/core/css/resolver/style_builder_converter.h b/third_party/blink/renderer/core/css/resolver/style_builder_converter.h
|
||||
index 4a2738ca16223f4b790cac564b733ee732913a96..76c183682ad5b7974644f18afb0e418e2a614082 100644
|
||||
index beca76bbbe2d31fde75652a73f5bf2dcfaf17731..bc42166596fdab9f0143b851b27ecfcdf6b716b8 100644
|
||||
--- a/third_party/blink/renderer/core/css/resolver/style_builder_converter.h
|
||||
+++ b/third_party/blink/renderer/core/css/resolver/style_builder_converter.h
|
||||
@@ -456,6 +456,7 @@ class StyleBuilderConverter {
|
||||
@@ -457,6 +457,7 @@ class StyleBuilderConverter {
|
||||
StyleResolverState&,
|
||||
const CSSValue&,
|
||||
bool allow_any_keyword_in_position_area = false);
|
||||
@@ -202,7 +202,7 @@ index 19cda703154dab9397827ab6ea66c2ca446c644d..dd5943c511886f4e39b2e7f10e67e60f
|
||||
return result;
|
||||
}
|
||||
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn
|
||||
index 4969253fb0dcbf8347ffe38053631132985852bb..5249663076367413ce600f5a3d4ee998529efe5d 100644
|
||||
index e2256766d7a01aee814ba0281b40921b2e261aa9..d55807d00042027fc91faa4479db4043d4ba4add 100644
|
||||
--- a/third_party/blink/renderer/platform/BUILD.gn
|
||||
+++ b/third_party/blink/renderer/platform/BUILD.gn
|
||||
@@ -1669,6 +1669,8 @@ component("platform") {
|
||||
@@ -313,7 +313,7 @@ index 18f283e625101318ee14b50e6e765dfd1c9a1a44..44a3a55974c9e4b9e715574075f25661
|
||||
|
||||
auto DrawAsSinglePath = [&]() {
|
||||
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
|
||||
index 9eaaf7a89e3bf9e79c24b6fe8454d23abcc3efe1..9e4f244d9248beac8f93a652982af4e3f0f82a0c 100644
|
||||
index 04fcf32ece5fca888f381baf8c818fd4c888391d..17f24e8f71d59a811c69f4692cbe66a9d9974874 100644
|
||||
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
|
||||
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
|
||||
@@ -214,6 +214,10 @@
|
||||
|
||||
@@ -28,10 +28,10 @@ index 33e23680b927d417b0882c7572fe32dc2d2b90c3..9413492f8e0fd6c5371c66329e1ad6d4
|
||||
|
||||
// Returns the http referrer of original request which initited this load.
|
||||
diff --git a/third_party/blink/renderer/core/loader/document_loader.h b/third_party/blink/renderer/core/loader/document_loader.h
|
||||
index d09ec0ea7cfb4f9220ac0923627c024a8a42e3b7..2c7538e85920baef6aa1120b62598bf98717e1a8 100644
|
||||
index f7812c9d0ed9f0295b960b2fef8fcc69defc3f68..3f0e349a46b7996858ae2dfd91e888d68f32340a 100644
|
||||
--- a/third_party/blink/renderer/core/loader/document_loader.h
|
||||
+++ b/third_party/blink/renderer/core/loader/document_loader.h
|
||||
@@ -321,7 +321,7 @@ class CORE_EXPORT DocumentLoader : public GarbageCollected<DocumentLoader>,
|
||||
@@ -322,7 +322,7 @@ class CORE_EXPORT DocumentLoader : public GarbageCollected<DocumentLoader>,
|
||||
std::optional<scheduler::TaskAttributionId> task_state_id,
|
||||
bool should_skip_screenshot);
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ index 638d0ee4fb368d28465322d34dbfca645ecd162d..38c20e7f0c597815ce5ee3333f12183a
|
||||
NUM,
|
||||
MIN_VALUE = MIDI_SYSEX,
|
||||
diff --git a/third_party/blink/public/mojom/permissions/permission.mojom b/third_party/blink/public/mojom/permissions/permission.mojom
|
||||
index f3e787a35976d86cc4e7307745822634df659941..81c4f0bdc89f972464d13f06c7907e5aabff4043 100644
|
||||
index 10ef656b019f46d389de074e5aad292af1728eac..cd200c6aadb304e440df65532a9ef86f0aef4fa7 100644
|
||||
--- a/third_party/blink/public/mojom/permissions/permission.mojom
|
||||
+++ b/third_party/blink/public/mojom/permissions/permission.mojom
|
||||
@@ -47,7 +47,7 @@ enum PermissionName {
|
||||
|
||||
@@ -8,10 +8,10 @@ Check for broken links by confirming the file exists before setting its utime.
|
||||
This patch should be upstreamed & removed.
|
||||
|
||||
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
|
||||
index 87b78b2502bf4556f24f5e955293ec0704edd2af..ccbc6399b31b8ac6e7355a1d1f1afaacff069e76 100755
|
||||
index 91dfea4fa3724a9d8120381503aa9caa9ba36f25..a4136cf157cc2c2df0812f4b7d622d68e0ff386b 100755
|
||||
--- a/tools/clang/scripts/update.py
|
||||
+++ b/tools/clang/scripts/update.py
|
||||
@@ -202,10 +202,9 @@ def DownloadAndUnpack(url, output_dir, path_prefixes=None, is_known_zip=False):
|
||||
@@ -201,10 +201,9 @@ def DownloadAndUnpack(url, output_dir, path_prefixes=None, is_known_zip=False):
|
||||
# The nicest way to do this would be by passing a filter to extractall,
|
||||
# but that functionality is not available in macOS system Python (3.9.6).
|
||||
for m in members:
|
||||
|
||||
@@ -28,10 +28,10 @@ The patch should be removed in favor of either:
|
||||
Upstream bug https://bugs.chromium.org/p/chromium/issues/detail?id=1081397.
|
||||
|
||||
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
|
||||
index fffe121f9617345c5a63cb3218917af601b6d673..5fcec71e71d866934a776caf6bd52ca466b206f2 100644
|
||||
index 24f3887d312dba39306a9e4fbd15d1e03c9eb560..8ca943f732e28ba3c8b4e59f73ea5bb3c29db1e9 100644
|
||||
--- a/content/browser/renderer_host/navigation_request.cc
|
||||
+++ b/content/browser/renderer_host/navigation_request.cc
|
||||
@@ -11593,6 +11593,11 @@ url::Origin NavigationRequest::GetOriginForURLLoaderFactoryUnchecked() {
|
||||
@@ -11623,6 +11623,11 @@ url::Origin NavigationRequest::GetOriginForURLLoaderFactoryUnchecked() {
|
||||
target_rph_id);
|
||||
}
|
||||
|
||||
@@ -44,10 +44,10 @@ index fffe121f9617345c5a63cb3218917af601b6d673..5fcec71e71d866934a776caf6bd52ca4
|
||||
// origin of |common_params.url| and/or |common_params.initiator_origin|.
|
||||
url::Origin resolved_origin = url::Origin::Resolve(
|
||||
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc
|
||||
index 3b1bebbfd0d12e99002a5534508e3982d28794ad..c4f1018c015cbbf58a65ea7fa6bc3e66205a826f 100644
|
||||
index 724a294f596437c5f9fd14f4a5bc2ca8744c20cf..b511c58463cccb3bbaa32ba6ad7b7737a853630a 100644
|
||||
--- a/third_party/blink/renderer/core/loader/document_loader.cc
|
||||
+++ b/third_party/blink/renderer/core/loader/document_loader.cc
|
||||
@@ -2332,6 +2332,7 @@ Frame* DocumentLoader::CalculateOwnerFrame() {
|
||||
@@ -2321,6 +2321,7 @@ Frame* DocumentLoader::CalculateOwnerFrame() {
|
||||
scoped_refptr<SecurityOrigin> DocumentLoader::CalculateOrigin(
|
||||
Document* owner_document) {
|
||||
scoped_refptr<SecurityOrigin> origin;
|
||||
@@ -55,7 +55,7 @@ index 3b1bebbfd0d12e99002a5534508e3982d28794ad..c4f1018c015cbbf58a65ea7fa6bc3e66
|
||||
// Whether the origin is newly created within this call, instead of copied
|
||||
// from an existing document's origin or from `origin_to_commit_`. If this is
|
||||
// true, we won't try to compare the nonce of this origin (if it's opaque) to
|
||||
@@ -2368,6 +2369,9 @@ scoped_refptr<SecurityOrigin> DocumentLoader::CalculateOrigin(
|
||||
@@ -2357,6 +2358,9 @@ scoped_refptr<SecurityOrigin> DocumentLoader::CalculateOrigin(
|
||||
// non-renderer only origin bits will be the same, which will be asserted at
|
||||
// the end of this function.
|
||||
origin = origin_to_commit_;
|
||||
|
||||
@@ -4,7 +4,7 @@ Date: Wed, 28 Jun 2023 21:11:40 +0900
|
||||
Subject: fix: harden blink::ScriptState::MaybeFrom
|
||||
|
||||
NOTE: since https://chromium-review.googlesource.com/c/chromium/src/+/6973697
|
||||
the patch is only needed for 32-bit builds.
|
||||
the patch is only needed for 32-bit builds or builds where the V8 sandbox is disabled.
|
||||
|
||||
This is needed as side effect of https://chromium-review.googlesource.com/c/chromium/src/+/4609446
|
||||
which now gets blink::ExecutionContext from blink::ScriptState
|
||||
@@ -56,18 +56,18 @@ index cecf528475cb832ed1876381878eade582bc83d6..71308b2d963c2d083328aad6be356dc5
|
||||
|
||||
enum EmbedderDataTag : uint16_t {
|
||||
diff --git a/third_party/blink/renderer/platform/bindings/script_state.cc b/third_party/blink/renderer/platform/bindings/script_state.cc
|
||||
index 8b6522c9299bef5ab766795b64a1ba30bc382a12..a714aeb8a62886bedb3820b33b49b1ebdb9c7cc0 100644
|
||||
index 8b6522c9299bef5ab766795b64a1ba30bc382a12..4615dc04a3814a096898a36c7bbeb30f960a8b4d 100644
|
||||
--- a/third_party/blink/renderer/platform/bindings/script_state.cc
|
||||
+++ b/third_party/blink/renderer/platform/bindings/script_state.cc
|
||||
@@ -14,6 +14,12 @@ namespace blink {
|
||||
|
||||
ScriptState::CreateCallback ScriptState::s_create_callback_ = nullptr;
|
||||
|
||||
+#if defined(ARCH_CPU_32_BITS)
|
||||
+#if !defined(V8_ENABLE_SANDBOX)
|
||||
+int const ScriptState::kScriptStateTag = 0x6e6f64;
|
||||
+void* const ScriptState::kScriptStateTagPtr = const_cast<void*>(
|
||||
+ static_cast<const void*>(&ScriptState::kScriptStateTag));
|
||||
+#endif // defined(ARCH_CPU_32_BITS)
|
||||
+#endif // !defined(V8_ENABLE_SANDBOX)
|
||||
+
|
||||
// static
|
||||
void ScriptState::SetCreateCallback(CreateCallback create_callback) {
|
||||
@@ -76,10 +76,10 @@ index 8b6522c9299bef5ab766795b64a1ba30bc382a12..a714aeb8a62886bedb3820b33b49b1eb
|
||||
context_.SetWeak(this, &OnV8ContextCollectedCallback);
|
||||
context->SetAlignedPointerInEmbedderData(kV8ContextPerContextDataIndex, this,
|
||||
gin::kBlinkScriptState);
|
||||
+#if defined(ARCH_CPU_32_BITS)
|
||||
+#if !defined(V8_ENABLE_SANDBOX)
|
||||
+ context->SetAlignedPointerInEmbedderData(
|
||||
+ kV8ContextPerContextDataTagIndex, ScriptState::kScriptStateTagPtr, v8::kEmbedderDataTypeTagDefault);
|
||||
+#endif // defined(ARCH_CPU_32_BITS)
|
||||
+#endif // !defined(V8_ENABLE_SANDBOX)
|
||||
RendererResourceCoordinator::Get()->OnScriptStateCreated(this,
|
||||
execution_context);
|
||||
}
|
||||
@@ -87,15 +87,15 @@ index 8b6522c9299bef5ab766795b64a1ba30bc382a12..a714aeb8a62886bedb3820b33b49b1eb
|
||||
// Cut the reference from V8 context to ScriptState.
|
||||
GetContext()->SetAlignedPointerInEmbedderData(
|
||||
kV8ContextPerContextDataIndex, nullptr, gin::kBlinkScriptState);
|
||||
+#if defined(ARCH_CPU_32_BITS)
|
||||
+#if !defined(V8_ENABLE_SANDBOX)
|
||||
+ GetContext()->SetAlignedPointerInEmbedderData(
|
||||
+ kV8ContextPerContextDataTagIndex, nullptr, v8::kEmbedderDataTypeTagDefault);
|
||||
+#endif // defined(ARCH_CPU_32_BITS)
|
||||
+#endif // !defined(V8_ENABLE_SANDBOX)
|
||||
reference_from_v8_context_.Clear();
|
||||
|
||||
// Cut the reference from ScriptState to V8 context.
|
||||
diff --git a/third_party/blink/renderer/platform/bindings/script_state.h b/third_party/blink/renderer/platform/bindings/script_state.h
|
||||
index 5ccdf26cead17031d510589b74288cbe79692779..bf3023d5305c05c5d92953b5bf5f655f964e5c28 100644
|
||||
index 5ccdf26cead17031d510589b74288cbe79692779..54ede003ebe0a46e624c9d67f7272b8898bbc83e 100644
|
||||
--- a/third_party/blink/renderer/platform/bindings/script_state.h
|
||||
+++ b/third_party/blink/renderer/platform/bindings/script_state.h
|
||||
@@ -6,6 +6,7 @@
|
||||
@@ -110,7 +110,7 @@ index 5ccdf26cead17031d510589b74288cbe79692779..bf3023d5305c05c5d92953b5bf5f655f
|
||||
kV8ContextPerContextDataIndex) {
|
||||
return nullptr;
|
||||
}
|
||||
+#if defined(ARCH_CPU_32_BITS)
|
||||
+#if !defined(V8_ENABLE_SANDBOX)
|
||||
+ if (context->GetNumberOfEmbedderDataFields() <=
|
||||
+ kV8ContextPerContextDataTagIndex ||
|
||||
+ context->GetAlignedPointerFromEmbedderData(
|
||||
@@ -119,7 +119,7 @@ index 5ccdf26cead17031d510589b74288cbe79692779..bf3023d5305c05c5d92953b5bf5f655f
|
||||
+ ScriptState::kScriptStateTagPtr) {
|
||||
+ return nullptr;
|
||||
+ }
|
||||
+#endif // defined(ARCH_CPU_32_BITS)
|
||||
+#endif // !defined(V8_ENABLE_SANDBOX)
|
||||
ScriptState* script_state =
|
||||
static_cast<ScriptState*>(context->GetAlignedPointerFromEmbedderData(
|
||||
isolate, kV8ContextPerContextDataIndex, gin::kBlinkScriptState));
|
||||
@@ -127,13 +127,13 @@ index 5ccdf26cead17031d510589b74288cbe79692779..bf3023d5305c05c5d92953b5bf5f655f
|
||||
static_cast<int>(gin::kPerContextDataStartIndex) +
|
||||
static_cast<int>(gin::kEmbedderBlink);
|
||||
|
||||
+#if defined(ARCH_CPU_32_BITS)
|
||||
+#if !defined(V8_ENABLE_SANDBOX)
|
||||
+ static void* const kScriptStateTagPtr;
|
||||
+ static int const kScriptStateTag;
|
||||
+ static constexpr int kV8ContextPerContextDataTagIndex =
|
||||
+ static_cast<int>(gin::kPerContextDataStartIndex) +
|
||||
+ static_cast<int>(gin::kEmbedderBlinkTag);
|
||||
+#endif // defined(ARCH_CPU_32_BITS)
|
||||
+#endif // !defined(V8_ENABLE_SANDBOX)
|
||||
+
|
||||
// For accessing information about the last script compilation via
|
||||
// internals.idl.
|
||||
|
||||
@@ -9,10 +9,10 @@ focus node change via TextInputManager.
|
||||
chromium-bug: https://crbug.com/1369605
|
||||
|
||||
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
|
||||
index 16240a7dc12f43b260ccb80db0dbdacfe844c3ef..1c2b00f29df493b7029802d3ee83f50a8983d25e 100644
|
||||
index b16c96b5682846d897c2f0f4dd3881d386928b68..2ae3a467ca4be802cd53b5823f23bf0224c3a761 100644
|
||||
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
|
||||
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
|
||||
@@ -3379,6 +3379,12 @@ void RenderWidgetHostViewAura::OnTextSelectionChanged(
|
||||
@@ -3382,6 +3382,12 @@ void RenderWidgetHostViewAura::OnTextSelectionChanged(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,10 +17,10 @@ Revert "Reland "Port net::CookieCryptoDelegate to os_crypt async""
|
||||
This reverts commit f01b115c7e21a09cc762f65bf7fd9c6ea9d9d0f8.
|
||||
|
||||
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
|
||||
index af9875ea3afd99e76a1129a76496ec6aef390b44..296aae791288b9d13689b3979204a1d9d18c88d9 100644
|
||||
index 587b492f828ccb3179f34102a99326c09dfb3306..7364814ecb4fd49e44db869b37655d5b4ea09306 100644
|
||||
--- a/chrome/browser/BUILD.gn
|
||||
+++ b/chrome/browser/BUILD.gn
|
||||
@@ -739,6 +739,8 @@ static_library("browser") {
|
||||
@@ -737,6 +737,8 @@ static_library("browser") {
|
||||
"net/chrome_report_sender.h",
|
||||
"net/convert_explicitly_allowed_network_ports_pref.cc",
|
||||
"net/convert_explicitly_allowed_network_ports_pref.h",
|
||||
@@ -192,7 +192,7 @@ index b862afe7663111a6cbd342d33723942770bb0490..9dc46cedb109cea63bf71aa43fc7a2b6
|
||||
#include "services/network/public/mojom/network_context.mojom.h"
|
||||
#include "testing/gtest/include/gtest/gtest.h"
|
||||
diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc
|
||||
index 2fc099db479ac4bd8bd28292e30c24090d50f498..06f49761d2a4fcc236ecaaf611e69361b664d711 100644
|
||||
index 2c6ab9af9f5eebaf68e4b78834b5ce7fdd31d000..04262d11bbf7cbf0d8ece06448df9606922f239b 100644
|
||||
--- a/chrome/browser/net/system_network_context_manager.cc
|
||||
+++ b/chrome/browser/net/system_network_context_manager.cc
|
||||
@@ -917,13 +917,8 @@ void SystemNetworkContextManager::DisableQuic() {
|
||||
@@ -209,20 +209,20 @@ index 2fc099db479ac4bd8bd28292e30c24090d50f498..06f49761d2a4fcc236ecaaf611e69361
|
||||
+ cookie_encryption_provider_.BindNewRemote();
|
||||
}
|
||||
|
||||
void SystemNetworkContextManager::
|
||||
void SystemNetworkContextManager::AddSSLConfigToNetworkContextParams(
|
||||
diff --git a/chrome/browser/net/system_network_context_manager.h b/chrome/browser/net/system_network_context_manager.h
|
||||
index c8bfb5752a1ffe42c9392522195c4385341376ce..4a2e9db46d3aedc18ff68e61d590bbc5e4c1d2b7 100644
|
||||
index 611833bce86135d792670a2cbfbfc661bcedf8dd..6d39b73f77d294ec21aa2d9c328e7f1fa9aad47d 100644
|
||||
--- a/chrome/browser/net/system_network_context_manager.h
|
||||
+++ b/chrome/browser/net/system_network_context_manager.h
|
||||
@@ -15,6 +15,7 @@
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "base/memory/raw_ptr.h"
|
||||
#include "base/memory/scoped_refptr.h"
|
||||
#include "chrome/browser/enterprise/encryption/cache_encryption_provider_impl.h"
|
||||
#include "chrome/browser/net/cert_verifier_service_time_updater.h"
|
||||
+#include "chrome/browser/net/cookie_encryption_provider_impl.h"
|
||||
#include "chrome/browser/net/proxy_config_monitor.h"
|
||||
#include "chrome/browser/net/stub_resolver_config_reader.h"
|
||||
#include "chrome/browser/ssl/ssl_config_service_manager.h"
|
||||
@@ -24,7 +25,6 @@
|
||||
@@ -23,7 +24,6 @@
|
||||
#include "mojo/public/cpp/bindings/pending_receiver.h"
|
||||
#include "mojo/public/cpp/bindings/remote.h"
|
||||
#include "services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom-forward.h"
|
||||
@@ -230,15 +230,15 @@ index c8bfb5752a1ffe42c9392522195c4385341376ce..4a2e9db46d3aedc18ff68e61d590bbc5
|
||||
#include "services/network/public/mojom/host_resolver.mojom-forward.h"
|
||||
#include "services/network/public/mojom/network_context.mojom.h"
|
||||
#include "services/network/public/mojom/network_service.mojom.h"
|
||||
@@ -309,7 +309,7 @@ class SystemNetworkContextManager {
|
||||
@@ -303,7 +303,7 @@ class SystemNetworkContextManager {
|
||||
GssapiLibraryLoadObserver gssapi_library_loader_observer_{this};
|
||||
#endif // BUILDFLAG(IS_LINUX)
|
||||
|
||||
- std::unique_ptr<CookieEncryptionProviderImpl> cookie_encryption_provider_;
|
||||
+ CookieEncryptionProviderImpl cookie_encryption_provider_;
|
||||
|
||||
std::unique_ptr<enterprise_encryption::CacheEncryptionProviderImpl>
|
||||
cache_encryption_provider_;
|
||||
std::unique_ptr<CertVerifierServiceTimeUpdater> cert_verifier_time_updater_;
|
||||
};
|
||||
diff --git a/components/cookie_config/BUILD.gn b/components/cookie_config/BUILD.gn
|
||||
index e348b0d1a59470c5cf153ae02e420b9dd6bd1892..a7a51003386fe7b62aaf5b7008c63acefd428942 100644
|
||||
--- a/components/cookie_config/BUILD.gn
|
||||
|
||||
@@ -59,10 +59,10 @@ index cba373664bec3a32abad6fe0396bd67b53b7e67f..a54f1b3351efd2d8f324436f7f35cd43
|
||||
|
||||
#endif // THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_SCRIPT_EXECUTION_CALLBACK_H_
|
||||
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
|
||||
index d27f583eb43f63da88e2ebfd67f5f0cd660c193c..2b6cb959591e493b1725df25d6398c838a38eb3b 100644
|
||||
index e2b4ad7cfbd5ce4dfa0ae7d4992ac6f0d2b916b7..aa454d1fabb0c1076dfae712c91696c0f2d3c894 100644
|
||||
--- a/third_party/blink/renderer/core/frame/local_frame.cc
|
||||
+++ b/third_party/blink/renderer/core/frame/local_frame.cc
|
||||
@@ -3202,6 +3202,7 @@ void LocalFrame::RequestExecuteScript(
|
||||
@@ -3205,6 +3205,7 @@ void LocalFrame::RequestExecuteScript(
|
||||
mojom::blink::EvaluationTiming evaluation_timing,
|
||||
mojom::blink::LoadEventBlockingOption blocking_option,
|
||||
WebScriptExecutionCallback callback,
|
||||
@@ -70,7 +70,7 @@ index d27f583eb43f63da88e2ebfd67f5f0cd660c193c..2b6cb959591e493b1725df25d6398c83
|
||||
BackForwardCacheAware back_forward_cache_aware,
|
||||
mojom::blink::WantResultOption want_result_option,
|
||||
mojom::blink::PromiseResultOption promise_behavior) {
|
||||
@@ -3259,7 +3260,7 @@ void LocalFrame::RequestExecuteScript(
|
||||
@@ -3262,7 +3263,7 @@ void LocalFrame::RequestExecuteScript(
|
||||
PausableScriptExecutor::CreateAndRun(
|
||||
script_state, std::move(script_sources), execute_script_policy,
|
||||
user_gesture, evaluation_timing, blocking_option, want_result_option,
|
||||
@@ -223,7 +223,7 @@ index d270f1c458a4003fc652eecd3f6ca231038be3d2..6dcbe1bc0e35d4e3d9830549ac1fccea
|
||||
mojom::blink::WantResultOption::kWantResult, wait_for_promise);
|
||||
}
|
||||
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
|
||||
index ed7c68c19364ddc5ea3f9435a122d04ca8d1683a..2516e25e6f9ed222af886e9998e50ae5237dbc57 100644
|
||||
index a030f42836966a384ea1a0452bac139cf214d171..bbf8b9a169c292e991f5b862ba1ac3351482ce45 100644
|
||||
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
|
||||
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
|
||||
@@ -1128,14 +1128,15 @@ void WebLocalFrameImpl::RequestExecuteScript(
|
||||
|
||||
@@ -6,10 +6,10 @@ Subject: fix: select the first menu item when opened via keyboard
|
||||
This fixes an accessibility issue where the root view is 'focused' to the screen reader instead of the first menu item as with all other native menus. This patch will be upstreamed.
|
||||
|
||||
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc
|
||||
index 0ba6f7703ec8a6acb38e6722b8f66de8892d4e45..a7bd3cf249f2bd5d63002ebec84fd2284d8251b3 100644
|
||||
index f84caf2bba616b52ae572f0195c02baa2e05d21e..2e2e3df20b1fa8acbf859300f3de3e24b5cf5efd 100644
|
||||
--- a/ui/views/controls/menu/menu_controller.cc
|
||||
+++ b/ui/views/controls/menu/menu_controller.cc
|
||||
@@ -717,6 +717,16 @@ void MenuController::Run(Widget* parent,
|
||||
@@ -724,6 +724,16 @@ void MenuController::Run(Widget* parent,
|
||||
SetSelection(root, SELECTION_OPEN_SUBMENU | SELECTION_UPDATE_IMMEDIATELY);
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ index 0ba6f7703ec8a6acb38e6722b8f66de8892d4e45..a7bd3cf249f2bd5d63002ebec84fd228
|
||||
if (button_controller) {
|
||||
pressed_lock_ = button_controller->TakeLock(
|
||||
false, ui::LocatedEvent::FromIfValid(event));
|
||||
@@ -2516,18 +2526,15 @@ void MenuController::OpenMenuImpl(MenuItemView* item, bool show) {
|
||||
@@ -2523,18 +2533,15 @@ void MenuController::OpenMenuImpl(MenuItemView* item, bool show) {
|
||||
}
|
||||
item->GetSubmenu()->ShowAt(params);
|
||||
|
||||
|
||||
@@ -20,10 +20,10 @@ index 581d86c4ec4f437d7195c003d8776795f59cf696..632d2645d4ed3a8e83070f08320b2252
|
||||
}
|
||||
|
||||
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
|
||||
index 4ad0e28385dd11d2b0987cbd597caf246cbbe9b7..6cd44536ba5e956b6cb08c9807817c6f01fb0665 100644
|
||||
index d97d2e328de91be93ca1fc542ad1d8c8131285d1..185e0c86bc02a80121af3c213aa496ca62565c31 100644
|
||||
--- a/content/public/browser/content_browser_client.h
|
||||
+++ b/content/public/browser/content_browser_client.h
|
||||
@@ -342,6 +342,11 @@ class CONTENT_EXPORT ContentBrowserClient {
|
||||
@@ -349,6 +349,11 @@ class CONTENT_EXPORT ContentBrowserClient {
|
||||
|
||||
virtual ~ContentBrowserClient() = default;
|
||||
|
||||
|
||||
@@ -6,10 +6,10 @@ Subject: gritsettings_resource_ids.patch
|
||||
Add electron resources file to the list of resource ids generation.
|
||||
|
||||
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec
|
||||
index a476485cfaaa65b2868ff2b911d1e1dd3456b53c..00cad7a698ca96ffb42d8c6d57adbce5585e7b3e 100644
|
||||
index 9c95ec9dc4923c0a4d1b4aef7102821f12124fb8..6a5b88a70392f99b1fdf34a3ea7f222f29f38803 100644
|
||||
--- a/tools/gritsettings/resource_ids.spec
|
||||
+++ b/tools/gritsettings/resource_ids.spec
|
||||
@@ -1625,6 +1625,11 @@
|
||||
@@ -1629,6 +1629,11 @@
|
||||
"messages": [10120],
|
||||
},
|
||||
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: John Kleinschmidt <jkleinsc@electronjs.org>
|
||||
Date: Mon, 11 Oct 2021 14:08:06 -0400
|
||||
Subject: load v8 snapshot in browser process
|
||||
|
||||
https://chromium-review.googlesource.com/c/chromium/src/+/3183394
|
||||
made a change to not load the v8 snapshot in the browser process,
|
||||
but due to the nature of electron, we need to load the v8 snapshot
|
||||
in the browser process.
|
||||
|
||||
diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc
|
||||
index ed476de46617f416982a4257fe1750ee301ba4f8..3aeea292145cd5aaa445a29840156a47379d9d2c 100644
|
||||
--- a/content/app/content_main_runner_impl.cc
|
||||
+++ b/content/app/content_main_runner_impl.cc
|
||||
@@ -297,11 +297,8 @@ void LoadV8SnapshotFile(const base::CommandLine& command_line) {
|
||||
|
||||
bool ShouldLoadV8Snapshot(const base::CommandLine& command_line,
|
||||
const std::string& process_type) {
|
||||
- // The gpu does not need v8, and the browser only needs v8 when in single
|
||||
- // process mode.
|
||||
- if (process_type == switches::kGpuProcess ||
|
||||
- (process_type.empty() &&
|
||||
- !command_line.HasSwitch(switches::kSingleProcess))) {
|
||||
+ // The gpu does not need v8
|
||||
+ if (process_type == switches::kGpuProcess) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -47,10 +47,10 @@ system font by checking if it's kCTFontPriorityAttribute is set to
|
||||
system priority.
|
||||
|
||||
diff --git a/base/BUILD.gn b/base/BUILD.gn
|
||||
index 9b83881f61c52789ff377911f65a5e7440988aea..b09e6f2b64e63a45b28b11d5a83582b6b0184f36 100644
|
||||
index d97f936a5c26dcf6b39c8ed50630f183d5083d5d..0719808270ddce00c8dd324eff72675278ae7aa7 100644
|
||||
--- a/base/BUILD.gn
|
||||
+++ b/base/BUILD.gn
|
||||
@@ -1083,6 +1083,7 @@ component("base") {
|
||||
@@ -1082,6 +1082,7 @@ component("base") {
|
||||
"//build:ios_buildflags",
|
||||
"//build/config/compiler:compiler_buildflags",
|
||||
"//third_party/modp_b64",
|
||||
@@ -793,7 +793,7 @@ index 712d59e1f7d9681c122e6d05a8b65bccbfacb492..de24209bbd3cd4a530c6f32990a0f93a
|
||||
return kAttributes;
|
||||
}
|
||||
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
|
||||
index 1c268292e081f54f9c71ad71d8ff1a69c802036b..6702cd695aa1db5f58d6c6f0534f757f470783a4 100644
|
||||
index 93ee33b10227da37b9404865df15eae16de2f9a9..5bb4a91572634a5ec296b0ec704b331cec319540 100644
|
||||
--- a/content/browser/BUILD.gn
|
||||
+++ b/content/browser/BUILD.gn
|
||||
@@ -344,6 +344,7 @@ source_set("browser") {
|
||||
@@ -839,7 +839,7 @@ index 367834e678f44d6e71c4218d293e11c3569daf2b..c97fb8f0411b45c1a01e4fab8dc40cc3
|
||||
// Used to force the NSApplication's focused accessibility element to be the
|
||||
// content::BrowserAccessibilityCocoa accessibility tree when the NSView for
|
||||
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
|
||||
index 227613945d5d4afa485aabf34f1ecec6aacb04d4..492a3692cd2abec2ed3731e848d67094a1e5eedc 100644
|
||||
index d93c66c9997dbaa912195d1d99a021486fd81e14..082c24657917671fbee8f755786285af66640a92 100644
|
||||
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
|
||||
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
|
||||
@@ -52,6 +52,7 @@
|
||||
@@ -886,7 +886,7 @@ index 227613945d5d4afa485aabf34f1ecec6aacb04d4..492a3692cd2abec2ed3731e848d67094
|
||||
}
|
||||
|
||||
bool RenderWidgetHostViewMac::SyncIsWidgetForMainFrame(
|
||||
@@ -2233,20 +2240,26 @@ void CombineTextNodesAndMakeCallback(SpeechCallback callback,
|
||||
@@ -2255,20 +2262,26 @@ void CombineTextNodesAndMakeCallback(SpeechCallback callback,
|
||||
void RenderWidgetHostViewMac::GetRenderWidgetAccessibilityToken(
|
||||
GetRenderWidgetAccessibilityTokenCallback callback) {
|
||||
base::ProcessId pid = getpid();
|
||||
@@ -914,7 +914,7 @@ index 227613945d5d4afa485aabf34f1ecec6aacb04d4..492a3692cd2abec2ed3731e848d67094
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn
|
||||
index 1df402ca32ab9774f9b130e9ab699557eff9aaef..b2af61152fb65b08e28642e3daab18fedff1e191 100644
|
||||
index 605f250c1f94e4b12a6790bd9fb4623d1f1a9d45..d5cf3b48e1b35527ec69b49e375710cc5f12cf9d 100644
|
||||
--- a/content/common/BUILD.gn
|
||||
+++ b/content/common/BUILD.gn
|
||||
@@ -270,6 +270,7 @@ source_set("common") {
|
||||
@@ -926,10 +926,10 @@ index 1df402ca32ab9774f9b130e9ab699557eff9aaef..b2af61152fb65b08e28642e3daab18fe
|
||||
|
||||
defines = []
|
||||
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
|
||||
index ee387002e8dbb54ddeb1f61f1973560cc91bfb42..5a46859e916fd3510b7add5a6af7cea1cf4b4827 100644
|
||||
index dc4ac3b6aa8d57ea8dd5357d3865c4d418942f87..5aaa899b8c92b473d3c6cf5d24da34ed74285ec1 100644
|
||||
--- a/content/renderer/BUILD.gn
|
||||
+++ b/content/renderer/BUILD.gn
|
||||
@@ -323,6 +323,7 @@ target(link_target_type, "renderer") {
|
||||
@@ -325,6 +325,7 @@ target(link_target_type, "renderer") {
|
||||
"//ui/strings:auto_image_annotation_strings_grit",
|
||||
"//url",
|
||||
"//v8",
|
||||
@@ -1008,7 +1008,7 @@ index a1068589ad844518038ee7bc15a3de9bc5cba525..1ff781c49f086ec8015c7d3c44567dbe
|
||||
|
||||
} // namespace content
|
||||
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
|
||||
index 669d96a275ef693a3ce0eab7ddfb564e11daf2ee..3e5b7d6ca446fbfd60afa7fbd6b5284945730df8 100644
|
||||
index 9e0752536c531454b08cd0473958dbda4c3338cc..ed15bfd6bbfca8ed420115e42d3b0988aed15d65 100644
|
||||
--- a/content/test/BUILD.gn
|
||||
+++ b/content/test/BUILD.gn
|
||||
@@ -701,6 +701,7 @@ static_library("test_support") {
|
||||
@@ -1607,10 +1607,10 @@ index eb81a70e4d5d5cd3e6ae9b45f8cd1c795ea76c51..9921ccb10d3455600eddd85f77f10228
|
||||
|
||||
} // namespace sandbox
|
||||
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn
|
||||
index 4dabfb153a0ef874b22ac958c39114fc78fbf009..40a0e30239ec74e9dfc5c3b16c81f580097dac38 100644
|
||||
index c8135570f00e9bd737bd775478ea5a8642507d7a..44265e4f5a7c3bcafe26e6ee1db83bbd048e6ebf 100644
|
||||
--- a/third_party/blink/renderer/core/BUILD.gn
|
||||
+++ b/third_party/blink/renderer/core/BUILD.gn
|
||||
@@ -438,6 +438,7 @@ component("core") {
|
||||
@@ -439,6 +439,7 @@ component("core") {
|
||||
"//ui/gfx/geometry",
|
||||
"//ui/gfx/geometry:geometry_skia",
|
||||
"//ui/strings",
|
||||
|
||||
@@ -133,10 +133,10 @@ index 9bf238e64af483294ae3c3f18a4e9aed49a8658d..b9b2a4c8c387b8e8b4eb1f02fc0f891c
|
||||
const GURL& document_url,
|
||||
const WeakDocumentPtr& weak_document_ptr,
|
||||
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
|
||||
index d7071ea7de931a29dc7e30dc7ee3420b47653cb3..fa75aa0c973821442c13931fc797bb55a5e18be3 100644
|
||||
index 3ecc3180b816116659a6d76ea21817971c69afe2..713dcec09c194d1f648811a50a28746418bb16a6 100644
|
||||
--- a/content/browser/renderer_host/render_process_host_impl.cc
|
||||
+++ b/content/browser/renderer_host/render_process_host_impl.cc
|
||||
@@ -2361,7 +2361,7 @@ void RenderProcessHostImpl::CreateNotificationService(
|
||||
@@ -2364,7 +2364,7 @@ void RenderProcessHostImpl::CreateNotificationService(
|
||||
case RenderProcessHost::NotificationServiceCreatorType::kSharedWorker:
|
||||
case RenderProcessHost::NotificationServiceCreatorType::kDedicatedWorker: {
|
||||
storage_partition_impl_->GetPlatformNotificationContext()->CreateService(
|
||||
@@ -145,7 +145,7 @@ index d7071ea7de931a29dc7e30dc7ee3420b47653cb3..fa75aa0c973821442c13931fc797bb55
|
||||
creator_type, std::move(receiver));
|
||||
break;
|
||||
}
|
||||
@@ -2369,7 +2369,7 @@ void RenderProcessHostImpl::CreateNotificationService(
|
||||
@@ -2372,7 +2372,7 @@ void RenderProcessHostImpl::CreateNotificationService(
|
||||
CHECK(rfh);
|
||||
|
||||
storage_partition_impl_->GetPlatformNotificationContext()->CreateService(
|
||||
|
||||
22
patches/chromium/patch_osr_control_screen_info.patch
Normal file
22
patches/chromium/patch_osr_control_screen_info.patch
Normal file
@@ -0,0 +1,22 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: reito <reito@chromium.org>
|
||||
Date: Wed, 29 Oct 2025 00:50:03 +0800
|
||||
Subject: patch: osr control screen info
|
||||
|
||||
We need to override GetNewScreenInfosForUpdate to ensure the screen info
|
||||
is updated correctly, instead of overriding GetScreenInfo which seems not
|
||||
working.
|
||||
|
||||
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
|
||||
index 1a18bdda39f76cfae36adc0ffde136e788a98262..1062bada30908399f5429b51031e245f4d010f84 100644
|
||||
--- a/content/browser/renderer_host/render_widget_host_view_base.h
|
||||
+++ b/content/browser/renderer_host/render_widget_host_view_base.h
|
||||
@@ -680,7 +680,7 @@ class CONTENT_EXPORT RenderWidgetHostViewBase
|
||||
|
||||
// Generates the most current set of ScreenInfos from the current set of
|
||||
// displays in the system for use in UpdateScreenInfo.
|
||||
- display::ScreenInfos GetNewScreenInfosForUpdate();
|
||||
+ virtual display::ScreenInfos GetNewScreenInfosForUpdate();
|
||||
|
||||
// Called when display properties that need to be synchronized with the
|
||||
// renderer process changes. This method is called before notifying
|
||||
@@ -61,7 +61,7 @@ index 8817142344cc9abed442f07b5cbe759b82901c06..edf6d4ca1bfce93f8dcbeb2585c9ec07
|
||||
CompleteDefaultWebNativeRendererColorIdsDefinition(
|
||||
mixer, dark_mode,
|
||||
diff --git a/ui/color/win/native_color_mixers_win.cc b/ui/color/win/native_color_mixers_win.cc
|
||||
index dadb94f18feccb570680fc74a899a957f8f7ce1b..dac1ab13e5bb91d5a0901b7988d4ee02a725837d 100644
|
||||
index 3a9c0fe7771d3c48b428ce15186abc489f87f511..8ed3e1ed471dfeba885c807888e145993fa23a1e 100644
|
||||
--- a/ui/color/win/native_color_mixers_win.cc
|
||||
+++ b/ui/color/win/native_color_mixers_win.cc
|
||||
@@ -145,6 +145,10 @@ void AddNativeUiColorMixer(ColorProvider* provider,
|
||||
|
||||
@@ -182,7 +182,7 @@ index 38c20e7f0c597815ce5ee3333f12183ac1e18c62..7bce804a8ed1c8a2f2ac18524c6317db
|
||||
MIN_VALUE = MIDI_SYSEX,
|
||||
};
|
||||
diff --git a/third_party/blink/public/mojom/permissions/permission.mojom b/third_party/blink/public/mojom/permissions/permission.mojom
|
||||
index 81c4f0bdc89f972464d13f06c7907e5aabff4043..cfeb183f2c3bdf75d90f5ad19bc7254edc9d4d31 100644
|
||||
index cd200c6aadb304e440df65532a9ef86f0aef4fa7..88448c95da18953402b6de44676edfb19f657c05 100644
|
||||
--- a/third_party/blink/public/mojom/permissions/permission.mojom
|
||||
+++ b/third_party/blink/public/mojom/permissions/permission.mojom
|
||||
@@ -47,8 +47,16 @@ enum PermissionName {
|
||||
|
||||
@@ -254,7 +254,7 @@ index 8fa50db5b7aee7f8138d2b9be41d15e567059c36..c5bb7897b00ee5a6be6789096f9a55f7
|
||||
}
|
||||
|
||||
diff --git a/content/common/features.cc b/content/common/features.cc
|
||||
index 7f3e8486099e43c7ed3b18cb3c6aa4e64ee676bc..945cd3a48c1df45a7f49424ce31eb61432e674f0 100644
|
||||
index ee57a03b5f673534960e7e59cbde29911dcee7c4..b66c1a906c800354c86173ee7a77bafc4ae666f5 100644
|
||||
--- a/content/common/features.cc
|
||||
+++ b/content/common/features.cc
|
||||
@@ -359,6 +359,14 @@ BASE_FEATURE(kInterestGroupUpdateIfOlderThan, base::FEATURE_ENABLED_BY_DEFAULT);
|
||||
@@ -273,7 +273,7 @@ index 7f3e8486099e43c7ed3b18cb3c6aa4e64ee676bc..945cd3a48c1df45a7f49424ce31eb614
|
||||
BASE_FEATURE(kKeepChildProcessAfterIPCReset, base::FEATURE_DISABLED_BY_DEFAULT);
|
||||
|
||||
diff --git a/content/common/features.h b/content/common/features.h
|
||||
index 61c793e766747b1eac9a87a18fc6bfffb82ff110..12bbe8b94a880ec7060f8f115c92d96167342685 100644
|
||||
index 1f0da9ad14a61c055e38f9dac54c8654c67f73e5..d21af11d91149a0cec2cf9400b44a9f670662340 100644
|
||||
--- a/content/common/features.h
|
||||
+++ b/content/common/features.h
|
||||
@@ -138,6 +138,9 @@ CONTENT_EXPORT BASE_DECLARE_FEATURE(kInterestGroupUpdateIfOlderThan);
|
||||
|
||||
@@ -10,10 +10,10 @@ on Windows. We should refactor our code so that this patch isn't
|
||||
necessary.
|
||||
|
||||
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
|
||||
index 6fd09f45a701c39c102ad71149a5fb9299d49959..237f7f642e9466e02dcc30a50e4f1c28369b0b56 100644
|
||||
index 57a355cecfce2db904dde6c9acfff52c8f1b0253..e8e4a07f9db1a5fd95fa647972e328770c7064ee 100644
|
||||
--- a/testing/variations/fieldtrial_testing_config.json
|
||||
+++ b/testing/variations/fieldtrial_testing_config.json
|
||||
@@ -25949,6 +25949,21 @@
|
||||
@@ -26155,6 +26155,21 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
@@ -6,7 +6,7 @@ Subject: scroll_bounce_flag.patch
|
||||
Patch to make scrollBounce option work.
|
||||
|
||||
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
|
||||
index 16057c4a0ed0f700262c1c5835ca93a1db96bf6f..7d87c92682e4f7b5e5ee5e51850ce57eaf5d0cf2 100644
|
||||
index 816c1f06fe475873f10a270a05ea52f12020e971..73bcb6cf18f488f0d5dd8bd526c3df34c78e4abf 100644
|
||||
--- a/content/renderer/render_thread_impl.cc
|
||||
+++ b/content/renderer/render_thread_impl.cc
|
||||
@@ -1154,11 +1154,11 @@ bool RenderThreadImpl::IsLcdTextEnabled() {
|
||||
|
||||
@@ -22,10 +22,10 @@ However, the patch would need to be reviewed by the security team, as it
|
||||
does touch a security-sensitive class.
|
||||
|
||||
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
|
||||
index fa75aa0c973821442c13931fc797bb55a5e18be3..c1a7f41ec3250740a00c050c95b4f5ad5dce774b 100644
|
||||
index 713dcec09c194d1f648811a50a28746418bb16a6..7dedc2302f7bac673222fbb5b6c036b29ad54dad 100644
|
||||
--- a/content/browser/renderer_host/render_process_host_impl.cc
|
||||
+++ b/content/browser/renderer_host/render_process_host_impl.cc
|
||||
@@ -1933,6 +1933,10 @@ bool RenderProcessHostImpl::Init() {
|
||||
@@ -1936,6 +1936,10 @@ bool RenderProcessHostImpl::Init() {
|
||||
std::unique_ptr<SandboxedProcessLauncherDelegate> sandbox_delegate =
|
||||
std::make_unique<RendererSandboxedProcessLauncherDelegateWin>(
|
||||
*cmd_line, IsPdf(), IsJitDisabled());
|
||||
|
||||
@@ -15,10 +15,10 @@ Note that we also need to manually update embedder's
|
||||
`api::WebContents::IsFullscreenForTabOrPending` value.
|
||||
|
||||
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
|
||||
index e96ede02cb19aab1aa43bbbc9f48e201842312dd..aff5ae9cdffd5c49038716d708b2344934e7ff17 100644
|
||||
index bb3b1d7cd446d25f1e9d90b92f0fed8c841973c4..c6185443d3c8d15eb3a0de98555aeb8b8b39470d 100644
|
||||
--- a/content/browser/renderer_host/render_frame_host_impl.cc
|
||||
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
|
||||
@@ -9030,6 +9030,17 @@ void RenderFrameHostImpl::EnterFullscreen(
|
||||
@@ -9029,6 +9029,17 @@ void RenderFrameHostImpl::EnterFullscreen(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,10 +10,10 @@ to handle this without patching, but this is fairly clean for now and no longer
|
||||
patching legacy devtools code.
|
||||
|
||||
diff --git a/front_end/entrypoints/main/MainImpl.ts b/front_end/entrypoints/main/MainImpl.ts
|
||||
index 8058b3edc5632c9e38f46bfed05dee2a52eff67b..9a2ef2aba5fcc5f92e54cda577c11f6b6a4da821 100644
|
||||
index 39d7757f9199584bae3d04934b8d0108fcd6cd76..034e68cce73b7bd63b10ac00e309dbf61ffce957 100644
|
||||
--- a/front_end/entrypoints/main/MainImpl.ts
|
||||
+++ b/front_end/entrypoints/main/MainImpl.ts
|
||||
@@ -773,6 +773,8 @@ export class MainImpl {
|
||||
@@ -775,6 +775,8 @@ export class MainImpl {
|
||||
globalThis.Main = globalThis.Main || {};
|
||||
// @ts-expect-error Exported for Tests.js
|
||||
globalThis.Main.Main = MainImpl;
|
||||
|
||||
@@ -7,3 +7,4 @@ fix_deprecation_of_v8_context_and_v8_object_api_methods.patch
|
||||
remove_accesscontrol_enum_for_v8_14_4_59.patch
|
||||
chore_add_yarnrc_yml_and_yarn_lock_file_to_use_yarn_v4.patch
|
||||
chore_handle_deprecation_of_v8_returnvalue_void_set_local_s.patch
|
||||
chore_handle_removal_of_v8_propertycallbackinfo_t_this.patch
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: David Sanders <dsanders11@ucsbalum.com>
|
||||
Date: Wed, 21 Jan 2026 17:32:51 -0800
|
||||
Subject: chore: handle removal of v8::PropertyCallbackInfo<T>::This()
|
||||
|
||||
Refs https://chromium-review.googlesource.com/c/v8/v8/+/7474608
|
||||
See https://issues.chromium.org/issues/455600234
|
||||
|
||||
diff --git a/nan_callbacks_12_inl.h b/nan_callbacks_12_inl.h
|
||||
index 24979fb0d66595f5e80f493c78291d6600bfc34a..5cb6d98406ada00186289cc471726fa2a5ae711d 100644
|
||||
--- a/nan_callbacks_12_inl.h
|
||||
+++ b/nan_callbacks_12_inl.h
|
||||
@@ -176,7 +176,20 @@ class PropertyCallbackInfo {
|
||||
|
||||
inline v8::Isolate* GetIsolate() const { return info_.GetIsolate(); }
|
||||
inline v8::Local<v8::Value> Data() const { return data_; }
|
||||
- inline v8::Local<v8::Object> This() const { return info_.This(); }
|
||||
+ inline v8::Local<v8::Object> This() const {
|
||||
+#if defined(V8_MAJOR_VERSION) && \
|
||||
+ (V8_MAJOR_VERSION > 14 || \
|
||||
+ (V8_MAJOR_VERSION == 14 && \
|
||||
+ (defined(V8_MINOR_VERSION) && \
|
||||
+ (V8_MINOR_VERSION > 6 || \
|
||||
+ (V8_MINOR_VERSION == 6 && defined(V8_BUILD_NUMBER) && \
|
||||
+ V8_BUILD_NUMBER >= 40)))))
|
||||
+ return info_.HolderV2();
|
||||
+#else
|
||||
+ return info_.This();
|
||||
+#endif
|
||||
+ }
|
||||
+
|
||||
inline v8::Local<v8::Object> Holder() const { return info_.HolderV2(); }
|
||||
inline ReturnValue<T> GetReturnValue() const {
|
||||
return ReturnValue<T>(info_.GetReturnValue());
|
||||
@@ -11,7 +11,6 @@ feat_add_uv_loop_interrupt_on_io_change_option_to_uv_loop_configure.patch
|
||||
support_v8_sandboxed_pointers.patch
|
||||
build_ensure_native_module_compilation_fails_if_not_using_a_new.patch
|
||||
fix_expose_the_built-in_electron_module_via_the_esm_loader.patch
|
||||
enable_crashpad_linux_node_processes.patch
|
||||
fix_lazyload_fs_in_esm_loaders_to_apply_asar_patches.patch
|
||||
chore_expose_importmoduledynamically_and.patch
|
||||
test_formally_mark_some_tests_as_flaky.patch
|
||||
@@ -45,3 +44,4 @@ fix_suppress_nodiscard_warning_for_copy_options_operator.patch
|
||||
test_make_buffer_sizes_32bit-aware_in.patch
|
||||
src_refactor_module_wrap_cc_to_update_fixedarray_get_params.patch
|
||||
src_refactor_wasmstreaming_finish_to_accept_a_callback.patch
|
||||
src_stop_using_v8_propertycallbackinfo_t_this.patch
|
||||
|
||||
@@ -6,10 +6,10 @@ Subject: Delete deprecated fields on v8::Isolate
|
||||
https://chromium-review.googlesource.com/c/v8/v8/+/7081397
|
||||
|
||||
diff --git a/src/api/environment.cc b/src/api/environment.cc
|
||||
index cb1e4e6176e7385f8bc2bc9510761d3fc9c3182d..730254bfc16eceb7394f5aa766b648da4b96511f 100644
|
||||
index cfc9b3157d08d62f43e2e5bb01229fe663f3ca61..cce0e1cdc37aa324aa2c52ba134fc1a9a55b10ba 100644
|
||||
--- a/src/api/environment.cc
|
||||
+++ b/src/api/environment.cc
|
||||
@@ -226,8 +226,6 @@ void SetIsolateCreateParamsForNode(Isolate::CreateParams* params) {
|
||||
@@ -218,8 +218,6 @@ void SetIsolateCreateParamsForNode(Isolate::CreateParams* params) {
|
||||
// heap based on the actual physical memory.
|
||||
params->constraints.ConfigureDefaults(total_memory, 0);
|
||||
}
|
||||
|
||||
@@ -44,10 +44,10 @@ index 37d83e41b618a07aca98118260abe9618f11256d..26d5c1bd3c8191fce1d22b969996b6bf
|
||||
|
||||
template <typename T>
|
||||
diff --git a/src/env-inl.h b/src/env-inl.h
|
||||
index 5dfbd564d5bbd22ebf3b529a07b73e85cbe51986..b0c3c52cab63c6ae67079aa752bd58dd4f162451 100644
|
||||
index 97c43afb487b58c0c77bd59b4a6b6d7a13690053..23a4d7b651935a4029249fb2f1dd3ed46ea3b26f 100644
|
||||
--- a/src/env-inl.h
|
||||
+++ b/src/env-inl.h
|
||||
@@ -199,7 +199,8 @@ inline Environment* Environment::GetCurrent(v8::Local<v8::Context> context) {
|
||||
@@ -189,7 +189,8 @@ inline Environment* Environment::GetCurrent(v8::Local<v8::Context> context) {
|
||||
}
|
||||
return static_cast<Environment*>(
|
||||
context->GetAlignedPointerFromEmbedderData(
|
||||
|
||||
@@ -6,10 +6,10 @@ Subject: Remove deprecated `GetIsolate`
|
||||
https://chromium-review.googlesource.com/c/v8/v8/+/6905244
|
||||
|
||||
diff --git a/src/api/environment.cc b/src/api/environment.cc
|
||||
index 0f19cb09ea0963a9c505c51f89d1c7a939f2730b..cb1e4e6176e7385f8bc2bc9510761d3fc9c3182d 100644
|
||||
index d753ad6c6b49b26b86920124f7ac90c1e052638e..cfc9b3157d08d62f43e2e5bb01229fe663f3ca61 100644
|
||||
--- a/src/api/environment.cc
|
||||
+++ b/src/api/environment.cc
|
||||
@@ -682,7 +682,7 @@ std::unique_ptr<MultiIsolatePlatform> MultiIsolatePlatform::Create(
|
||||
@@ -668,7 +668,7 @@ std::unique_ptr<MultiIsolatePlatform> MultiIsolatePlatform::Create(
|
||||
|
||||
MaybeLocal<Object> GetPerContextExports(Local<Context> context,
|
||||
IsolateData* isolate_data) {
|
||||
@@ -18,7 +18,7 @@ index 0f19cb09ea0963a9c505c51f89d1c7a939f2730b..cb1e4e6176e7385f8bc2bc9510761d3f
|
||||
EscapableHandleScope handle_scope(isolate);
|
||||
|
||||
Local<Object> global = context->Global();
|
||||
@@ -728,7 +728,7 @@ void ProtoThrower(const FunctionCallbackInfo<Value>& info) {
|
||||
@@ -714,7 +714,7 @@ void ProtoThrower(const FunctionCallbackInfo<Value>& info) {
|
||||
// This runs at runtime, regardless of whether the context
|
||||
// is created from a snapshot.
|
||||
Maybe<void> InitializeContextRuntime(Local<Context> context) {
|
||||
@@ -27,7 +27,7 @@ index 0f19cb09ea0963a9c505c51f89d1c7a939f2730b..cb1e4e6176e7385f8bc2bc9510761d3f
|
||||
HandleScope handle_scope(isolate);
|
||||
|
||||
// When `IsCodeGenerationFromStringsAllowed` is true, V8 takes the fast path
|
||||
@@ -807,7 +807,7 @@ Maybe<void> InitializeContextRuntime(Local<Context> context) {
|
||||
@@ -793,7 +793,7 @@ Maybe<void> InitializeContextRuntime(Local<Context> context) {
|
||||
}
|
||||
|
||||
Maybe<void> InitializeBaseContextForSnapshot(Local<Context> context) {
|
||||
@@ -36,7 +36,7 @@ index 0f19cb09ea0963a9c505c51f89d1c7a939f2730b..cb1e4e6176e7385f8bc2bc9510761d3f
|
||||
HandleScope handle_scope(isolate);
|
||||
|
||||
// Delete `Intl.v8BreakIterator`
|
||||
@@ -832,7 +832,7 @@ Maybe<void> InitializeBaseContextForSnapshot(Local<Context> context) {
|
||||
@@ -818,7 +818,7 @@ Maybe<void> InitializeBaseContextForSnapshot(Local<Context> context) {
|
||||
}
|
||||
|
||||
Maybe<void> InitializeMainContextForSnapshot(Local<Context> context) {
|
||||
@@ -45,7 +45,7 @@ index 0f19cb09ea0963a9c505c51f89d1c7a939f2730b..cb1e4e6176e7385f8bc2bc9510761d3f
|
||||
HandleScope handle_scope(isolate);
|
||||
|
||||
// Initialize the default values.
|
||||
@@ -850,7 +850,7 @@ Maybe<void> InitializeMainContextForSnapshot(Local<Context> context) {
|
||||
@@ -836,7 +836,7 @@ Maybe<void> InitializeMainContextForSnapshot(Local<Context> context) {
|
||||
MaybeLocal<Object> InitializePrivateSymbols(Local<Context> context,
|
||||
IsolateData* isolate_data) {
|
||||
CHECK(isolate_data);
|
||||
@@ -54,7 +54,7 @@ index 0f19cb09ea0963a9c505c51f89d1c7a939f2730b..cb1e4e6176e7385f8bc2bc9510761d3f
|
||||
EscapableHandleScope scope(isolate);
|
||||
Context::Scope context_scope(context);
|
||||
|
||||
@@ -874,7 +874,7 @@ MaybeLocal<Object> InitializePrivateSymbols(Local<Context> context,
|
||||
@@ -860,7 +860,7 @@ MaybeLocal<Object> InitializePrivateSymbols(Local<Context> context,
|
||||
MaybeLocal<Object> InitializePerIsolateSymbols(Local<Context> context,
|
||||
IsolateData* isolate_data) {
|
||||
CHECK(isolate_data);
|
||||
@@ -63,7 +63,7 @@ index 0f19cb09ea0963a9c505c51f89d1c7a939f2730b..cb1e4e6176e7385f8bc2bc9510761d3f
|
||||
EscapableHandleScope scope(isolate);
|
||||
Context::Scope context_scope(context);
|
||||
|
||||
@@ -900,7 +900,7 @@ MaybeLocal<Object> InitializePerIsolateSymbols(Local<Context> context,
|
||||
@@ -886,7 +886,7 @@ MaybeLocal<Object> InitializePerIsolateSymbols(Local<Context> context,
|
||||
Maybe<void> InitializePrimordials(Local<Context> context,
|
||||
IsolateData* isolate_data) {
|
||||
// Run per-context JS files.
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: VerteDinde <keeleymhammond@gmail.com>
|
||||
Date: Sun, 20 Nov 2022 21:45:20 -0800
|
||||
Subject: fix: enable crashpad for ELECTRON_RUN_AS_NODE linux processes
|
||||
|
||||
Passes the crashpad handler PID and crashdump signal file descriptor
|
||||
to child processes spawned with `ELECTRON_RUN_AS_NODE` which is used
|
||||
by the crashpad client to connect with the handler process.
|
||||
|
||||
diff --git a/lib/child_process.js b/lib/child_process.js
|
||||
index 17c6b69c118a759f9fcf254a035f1a07fcc4059f..c8576fbf889d13f951a9ad2ffeb93389cfe2445b 100644
|
||||
--- a/lib/child_process.js
|
||||
+++ b/lib/child_process.js
|
||||
@@ -62,6 +62,7 @@ let debug = require('internal/util/debuglog').debuglog(
|
||||
);
|
||||
const { Buffer } = require('buffer');
|
||||
const { Pipe, constants: PipeConstants } = internalBinding('pipe_wrap');
|
||||
+const { getCrashdumpSignalFD, getCrashpadHandlerPID } = process._linkedBinding('electron_common_crashpad_support');
|
||||
|
||||
const {
|
||||
AbortError,
|
||||
@@ -156,7 +157,6 @@ function fork(modulePath, args = [], options) {
|
||||
ArrayPrototypeSplice(execArgv, index - 1, 2);
|
||||
}
|
||||
}
|
||||
-
|
||||
args = [...execArgv, modulePath, ...args];
|
||||
|
||||
if (typeof options.stdio === 'string') {
|
||||
@@ -638,6 +638,22 @@ function normalizeSpawnArguments(file, args, options) {
|
||||
'options.windowsVerbatimArguments');
|
||||
}
|
||||
|
||||
+ const env = options.env || { ...process.env };
|
||||
+
|
||||
+ if ((process.platform === 'linux') &&
|
||||
+ ObjectPrototypeHasOwnProperty(env, 'ELECTRON_RUN_AS_NODE') &&
|
||||
+ (file === process.execPath)) {
|
||||
+ // On Linux, pass the file descriptor which crashpad handler process
|
||||
+ // uses to monitor the child process and PID of the handler process.
|
||||
+ // https://source.chromium.org/chromium/chromium/src/+/110.0.5415.0:components/crash/core/app/crashpad_linux.cc;l=199-206
|
||||
+ const fd = getCrashdumpSignalFD();
|
||||
+ const pid = getCrashpadHandlerPID();
|
||||
+ if (fd !== -1 && pid !== -1) {
|
||||
+ env.CRASHDUMP_SIGNAL_FD = fd;
|
||||
+ env.CRASHPAD_HANDLER_PID = pid;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (options.shell) {
|
||||
validateArgumentNullCheck(options.shell, 'options.shell');
|
||||
if (args.length > 0 && !emittedDEP0190Already) {
|
||||
@@ -680,8 +696,6 @@ function normalizeSpawnArguments(file, args, options) {
|
||||
ArrayPrototypeUnshift(args, file);
|
||||
}
|
||||
|
||||
- // Shallow copy to guarantee changes won't impact process.env
|
||||
- const env = options.env || { ...process.env };
|
||||
const envPairs = [];
|
||||
|
||||
// process.env.NODE_V8_COVERAGE always propagates, making it possible to
|
||||
@@ -18,10 +18,10 @@ This can be removed when Node.js upgrades to a version of V8 containing CLs
|
||||
from the above issue.
|
||||
|
||||
diff --git a/src/api/environment.cc b/src/api/environment.cc
|
||||
index 5c8bc870dcf2e974036cf3bcb60fd288e59045d9..0f19cb09ea0963a9c505c51f89d1c7a939f2730b 100644
|
||||
index 53f05293bd94e159dfedf48735989e668acdd08e..d753ad6c6b49b26b86920124f7ac90c1e052638e 100644
|
||||
--- a/src/api/environment.cc
|
||||
+++ b/src/api/environment.cc
|
||||
@@ -331,6 +331,10 @@ Isolate* NewIsolate(Isolate::CreateParams* params,
|
||||
@@ -323,6 +323,10 @@ Isolate* NewIsolate(Isolate::CreateParams* params,
|
||||
MultiIsolatePlatform* platform,
|
||||
const SnapshotData* snapshot_data,
|
||||
const IsolateSettings& settings) {
|
||||
@@ -32,7 +32,7 @@ index 5c8bc870dcf2e974036cf3bcb60fd288e59045d9..0f19cb09ea0963a9c505c51f89d1c7a9
|
||||
IsolateGroup group = GetOrCreateIsolateGroup();
|
||||
Isolate* isolate = Isolate::Allocate(group);
|
||||
if (isolate == nullptr) return nullptr;
|
||||
@@ -387,9 +391,12 @@ Isolate* NewIsolate(ArrayBufferAllocator* allocator,
|
||||
@@ -373,9 +377,12 @@ Isolate* NewIsolate(ArrayBufferAllocator* allocator,
|
||||
uv_loop_t* event_loop,
|
||||
MultiIsolatePlatform* platform,
|
||||
const EmbedderSnapshotData* snapshot_data,
|
||||
|
||||
157
patches/node/src_stop_using_v8_propertycallbackinfo_t_this.patch
Normal file
157
patches/node/src_stop_using_v8_propertycallbackinfo_t_this.patch
Normal file
@@ -0,0 +1,157 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Igor Sheludko <isheludko@gmail.com>
|
||||
Date: Sun, 7 Dec 2025 21:25:15 +0100
|
||||
Subject: src: stop using `v8::PropertyCallbackInfo<T>::This()`
|
||||
|
||||
Refs: https://github.com/nodejs/node/issues/60616
|
||||
|
||||
diff --git a/src/module_wrap.cc b/src/module_wrap.cc
|
||||
index 2c95ac99be70b0750372e9c858753bf519498e3d..5ab30502fd232196739ca2b450e35cc995f02d74 100644
|
||||
--- a/src/module_wrap.cc
|
||||
+++ b/src/module_wrap.cc
|
||||
@@ -1000,7 +1000,7 @@ void ModuleWrap::HasAsyncGraph(Local<Name> property,
|
||||
Isolate* isolate = args.GetIsolate();
|
||||
Environment* env = Environment::GetCurrent(isolate);
|
||||
ModuleWrap* obj;
|
||||
- ASSIGN_OR_RETURN_UNWRAP(&obj, args.This());
|
||||
+ ASSIGN_OR_RETURN_UNWRAP(&obj, args.HolderV2());
|
||||
|
||||
Local<Module> module = obj->module_.Get(isolate);
|
||||
if (module->GetStatus() < Module::kInstantiated) {
|
||||
diff --git a/src/node_contextify.cc b/src/node_contextify.cc
|
||||
index e66d4fcb0c064f96cdb819c783027d864fe88d12..619980b36db457ef7e476eacd446e3bf2a9a71d2 100644
|
||||
--- a/src/node_contextify.cc
|
||||
+++ b/src/node_contextify.cc
|
||||
@@ -460,7 +460,7 @@ ContextifyContext* ContextifyContext::Get(const PropertyCallbackInfo<T>& args) {
|
||||
// args.GetIsolate()->GetCurrentContext() and take the pointer at
|
||||
// ContextEmbedderIndex::kContextifyContext, as V8 is supposed to
|
||||
// push the creation context before invoking these callbacks.
|
||||
- return Get(args.This());
|
||||
+ return Get(args.HolderV2());
|
||||
}
|
||||
|
||||
ContextifyContext* ContextifyContext::Get(Local<Object> object) {
|
||||
@@ -593,10 +593,21 @@ Intercepted ContextifyContext::PropertySetterCallback(
|
||||
return Intercepted::kNo;
|
||||
}
|
||||
|
||||
+ // V8 comment: As long as the context is not detached the contextual accesses
|
||||
+ // are the same as regular accesses to `context->Global()`s data property.
|
||||
+ // The only difference is that after detaching `args.Holder()` will
|
||||
+ // become a new identity and will no longer be equal to `context->Global()`.
|
||||
+ // TODO(Node.js): revise the code below as the "contextual"-ness of the
|
||||
+ // store is not actually relevant here. Also, new variable declaration is
|
||||
+ // reported by V8 via PropertyDefinerCallback.
|
||||
+ bool is_declared = is_declared_on_global_proxy || is_declared_on_sandbox;
|
||||
+
|
||||
+/*
|
||||
// true for x = 5
|
||||
// false for this.x = 5
|
||||
// false for Object.defineProperty(this, 'foo', ...)
|
||||
// false for vmResult.x = 5 where vmResult = vm.runInContext();
|
||||
+
|
||||
bool is_contextual_store = ctx->global_proxy() != args.This();
|
||||
|
||||
// Indicator to not return before setting (undeclared) function declarations
|
||||
@@ -613,7 +624,7 @@ Intercepted ContextifyContext::PropertySetterCallback(
|
||||
!is_function) {
|
||||
return Intercepted::kNo;
|
||||
}
|
||||
-
|
||||
+*/
|
||||
if (!is_declared && property->IsSymbol()) {
|
||||
return Intercepted::kNo;
|
||||
}
|
||||
diff --git a/src/node_modules.cc b/src/node_modules.cc
|
||||
index b5425122b54d91673e184ccfe88dd3a0ca2ff634..d1db60e59ac0f1f3e3bfceecc81c81cd038bac66 100644
|
||||
--- a/src/node_modules.cc
|
||||
+++ b/src/node_modules.cc
|
||||
@@ -645,7 +645,7 @@ static void PathHelpersLazyGetter(Local<v8::Name> name,
|
||||
// When this getter is invoked in a vm context, the `Realm::GetCurrent(info)`
|
||||
// returns a nullptr and retrieve the creation context via `this` object and
|
||||
// get the creation Realm.
|
||||
- Local<Value> receiver_val = info.This();
|
||||
+ Local<Value> receiver_val = info.HolderV2();
|
||||
if (!receiver_val->IsObject()) {
|
||||
THROW_ERR_INVALID_INVOCATION(isolate);
|
||||
return;
|
||||
diff --git a/src/node_util.cc b/src/node_util.cc
|
||||
index 2e4d98a8a66a18248ed292895671709abca155ad..0306e0b5d85269a7381356b53d34b7cc73f963d4 100644
|
||||
--- a/src/node_util.cc
|
||||
+++ b/src/node_util.cc
|
||||
@@ -370,7 +370,7 @@ static void DefineLazyPropertiesGetter(
|
||||
// When this getter is invoked in a vm context, the `Realm::GetCurrent(info)`
|
||||
// returns a nullptr and retrieve the creation context via `this` object and
|
||||
// get the creation Realm.
|
||||
- Local<Value> receiver_val = info.This();
|
||||
+ Local<Value> receiver_val = info.HolderV2();
|
||||
if (!receiver_val->IsObject()) {
|
||||
THROW_ERR_INVALID_INVOCATION(isolate);
|
||||
return;
|
||||
diff --git a/src/node_webstorage.cc b/src/node_webstorage.cc
|
||||
index 5819d9bca845e0eed6d4d93564469d8f3c36200b..f4139f25f22b0744b0819ea4570f23254c80ec13 100644
|
||||
--- a/src/node_webstorage.cc
|
||||
+++ b/src/node_webstorage.cc
|
||||
@@ -531,7 +531,7 @@ template <typename T>
|
||||
static bool ShouldIntercept(Local<Name> property,
|
||||
const PropertyCallbackInfo<T>& info) {
|
||||
Environment* env = Environment::GetCurrent(info);
|
||||
- Local<Value> proto = info.This()->GetPrototypeV2();
|
||||
+ Local<Value> proto = info.HolderV2()->GetPrototypeV2();
|
||||
|
||||
if (proto->IsObject()) {
|
||||
bool has_prop;
|
||||
@@ -555,7 +555,7 @@ static Intercepted StorageGetter(Local<Name> property,
|
||||
}
|
||||
|
||||
Storage* storage;
|
||||
- ASSIGN_OR_RETURN_UNWRAP(&storage, info.This(), Intercepted::kNo);
|
||||
+ ASSIGN_OR_RETURN_UNWRAP(&storage, info.HolderV2(), Intercepted::kNo);
|
||||
Local<Value> result;
|
||||
|
||||
if (storage->Load(property).ToLocal(&result) && !result->IsNull()) {
|
||||
@@ -569,7 +569,7 @@ static Intercepted StorageSetter(Local<Name> property,
|
||||
Local<Value> value,
|
||||
const PropertyCallbackInfo<void>& info) {
|
||||
Storage* storage;
|
||||
- ASSIGN_OR_RETURN_UNWRAP(&storage, info.This(), Intercepted::kNo);
|
||||
+ ASSIGN_OR_RETURN_UNWRAP(&storage, info.HolderV2(), Intercepted::kNo);
|
||||
|
||||
if (storage->Store(property, value).IsNothing()) {
|
||||
info.GetReturnValue().SetFalse();
|
||||
@@ -585,7 +585,7 @@ static Intercepted StorageQuery(Local<Name> property,
|
||||
}
|
||||
|
||||
Storage* storage;
|
||||
- ASSIGN_OR_RETURN_UNWRAP(&storage, info.This(), Intercepted::kNo);
|
||||
+ ASSIGN_OR_RETURN_UNWRAP(&storage, info.HolderV2(), Intercepted::kNo);
|
||||
Local<Value> result;
|
||||
if (!storage->Load(property).ToLocal(&result) || result->IsNull()) {
|
||||
return Intercepted::kNo;
|
||||
@@ -598,7 +598,7 @@ static Intercepted StorageQuery(Local<Name> property,
|
||||
static Intercepted StorageDeleter(Local<Name> property,
|
||||
const PropertyCallbackInfo<Boolean>& info) {
|
||||
Storage* storage;
|
||||
- ASSIGN_OR_RETURN_UNWRAP(&storage, info.This(), Intercepted::kNo);
|
||||
+ ASSIGN_OR_RETURN_UNWRAP(&storage, info.HolderV2(), Intercepted::kNo);
|
||||
|
||||
info.GetReturnValue().Set(storage->Remove(property).IsJust());
|
||||
|
||||
@@ -607,7 +607,7 @@ static Intercepted StorageDeleter(Local<Name> property,
|
||||
|
||||
static void StorageEnumerator(const PropertyCallbackInfo<Array>& info) {
|
||||
Storage* storage;
|
||||
- ASSIGN_OR_RETURN_UNWRAP(&storage, info.This());
|
||||
+ ASSIGN_OR_RETURN_UNWRAP(&storage, info.HolderV2());
|
||||
Local<Array> result;
|
||||
if (!storage->Enumerate().ToLocal(&result)) {
|
||||
return;
|
||||
@@ -619,7 +619,7 @@ static Intercepted StorageDefiner(Local<Name> property,
|
||||
const PropertyDescriptor& desc,
|
||||
const PropertyCallbackInfo<void>& info) {
|
||||
Storage* storage;
|
||||
- ASSIGN_OR_RETURN_UNWRAP(&storage, info.This(), Intercepted::kNo);
|
||||
+ ASSIGN_OR_RETURN_UNWRAP(&storage, info.HolderV2(), Intercepted::kNo);
|
||||
|
||||
if (desc.has_value()) {
|
||||
return StorageSetter(property, desc.value(), info);
|
||||
@@ -6,75 +6,6 @@ Subject: support V8 sandboxed pointers
|
||||
This refactors several allocators to allocate within the V8 memory cage,
|
||||
allowing them to be compatible with the V8_SANDBOXED_POINTERS feature.
|
||||
|
||||
diff --git a/src/api/environment.cc b/src/api/environment.cc
|
||||
index 53f05293bd94e159dfedf48735989e668acdd08e..5c8bc870dcf2e974036cf3bcb60fd288e59045d9 100644
|
||||
--- a/src/api/environment.cc
|
||||
+++ b/src/api/environment.cc
|
||||
@@ -111,6 +111,14 @@ MaybeLocal<Value> PrepareStackTraceCallback(Local<Context> context,
|
||||
return result;
|
||||
}
|
||||
|
||||
+NodeArrayBufferAllocator::NodeArrayBufferAllocator() {
|
||||
+ zero_fill_field_ = static_cast<uint32_t*>(allocator_->Allocate(sizeof(*zero_fill_field_)));
|
||||
+}
|
||||
+
|
||||
+NodeArrayBufferAllocator::~NodeArrayBufferAllocator() {
|
||||
+ allocator_->Free(zero_fill_field_, sizeof(*zero_fill_field_));
|
||||
+}
|
||||
+
|
||||
void* NodeArrayBufferAllocator::Allocate(size_t size) {
|
||||
void* ret;
|
||||
COUNT_GENERIC_USAGE("NodeArrayBufferAllocator.Allocate.ZeroFilled");
|
||||
@@ -337,6 +345,12 @@ Isolate* NewIsolate(Isolate::CreateParams* params,
|
||||
// but also otherwise just doesn't work, and the only real alternative
|
||||
// is disabling shared-readonly-heap mode altogether.
|
||||
static Isolate::CreateParams first_params = *params;
|
||||
+ // Clear allocator pointers to prevent use-after-free during static
|
||||
+ // destruction. The static first_params can outlive V8's internal
|
||||
+ // allocator systems, causing crashes when its destructor tries to
|
||||
+ // free resources after V8 has shut down.
|
||||
+ first_params.array_buffer_allocator = nullptr;
|
||||
+ first_params.array_buffer_allocator_shared.reset();
|
||||
params->snapshot_blob = first_params.snapshot_blob;
|
||||
params->external_references = first_params.external_references;
|
||||
}
|
||||
diff --git a/src/crypto/crypto_dh.cc b/src/crypto/crypto_dh.cc
|
||||
index 46a7d1396dc1a175ae99f4e403721f1730fdd320..bbb0abb3b9563074d350578e0f5a8fa211046b17 100644
|
||||
--- a/src/crypto/crypto_dh.cc
|
||||
+++ b/src/crypto/crypto_dh.cc
|
||||
@@ -61,17 +61,22 @@ MaybeLocal<Value> DataPointerToBuffer(Environment* env, DataPointer&& data) {
|
||||
bool secure;
|
||||
};
|
||||
#ifdef V8_ENABLE_SANDBOX
|
||||
- auto backing = ArrayBuffer::NewBackingStore(
|
||||
- env->isolate(),
|
||||
- data.size(),
|
||||
- BackingStoreInitializationMode::kUninitialized,
|
||||
- BackingStoreOnFailureMode::kReturnNull);
|
||||
- if (!backing) {
|
||||
- THROW_ERR_MEMORY_ALLOCATION_FAILED(env);
|
||||
- return MaybeLocal<Value>();
|
||||
- }
|
||||
+ std::unique_ptr<v8::BackingStore> backing;
|
||||
if (data.size() > 0) {
|
||||
- memcpy(backing->Data(), data.get(), data.size());
|
||||
+ std::unique_ptr<ArrayBuffer::Allocator> allocator(ArrayBuffer::Allocator::NewDefaultAllocator());
|
||||
+ void* v8_data = allocator->Allocate(data.size());
|
||||
+ CHECK(v8_data);
|
||||
+ memcpy(v8_data, data.get(), data.size());
|
||||
+ backing = ArrayBuffer::NewBackingStore(
|
||||
+ v8_data,
|
||||
+ data.size(),
|
||||
+ [](void* data, size_t length, void*) {
|
||||
+ std::unique_ptr<ArrayBuffer::Allocator> allocator(ArrayBuffer::Allocator::NewDefaultAllocator());
|
||||
+ allocator->Free(data, length);
|
||||
+ }, nullptr);
|
||||
+ } else {
|
||||
+ NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data());
|
||||
+ backing = v8::ArrayBuffer::NewBackingStore(env->isolate(), data.size());
|
||||
}
|
||||
#else
|
||||
auto backing = ArrayBuffer::NewBackingStore(
|
||||
diff --git a/src/crypto/crypto_util.cc b/src/crypto/crypto_util.cc
|
||||
index 12b0d804c6f1d4998b85160b0aac8eb7a3b5576b..27bd93769233dc65a064710db4095d9cdc3a8b1a 100644
|
||||
--- a/src/crypto/crypto_util.cc
|
||||
@@ -189,110 +120,11 @@ index b30297eac08ad9587642b723f91d7e3b954294d4..4c5427596d1c90d3a413cdd9ff4f1151
|
||||
#else
|
||||
auto backing = ArrayBuffer::NewBackingStore(
|
||||
mem->data,
|
||||
diff --git a/src/env-inl.h b/src/env-inl.h
|
||||
index 97c43afb487b58c0c77bd59b4a6b6d7a13690053..5dfbd564d5bbd22ebf3b529a07b73e85cbe51986 100644
|
||||
--- a/src/env-inl.h
|
||||
+++ b/src/env-inl.h
|
||||
@@ -44,6 +44,16 @@
|
||||
|
||||
namespace node {
|
||||
|
||||
+NoArrayBufferZeroFillScope::NoArrayBufferZeroFillScope(
|
||||
+ IsolateData* isolate_data)
|
||||
+ : node_allocator_(isolate_data->node_allocator()) {
|
||||
+ if (node_allocator_ != nullptr) node_allocator_->zero_fill_field()[0] = 0;
|
||||
+}
|
||||
+
|
||||
+NoArrayBufferZeroFillScope::~NoArrayBufferZeroFillScope() {
|
||||
+ if (node_allocator_ != nullptr) node_allocator_->zero_fill_field()[0] = 1;
|
||||
+}
|
||||
+
|
||||
inline v8::Isolate* IsolateData::isolate() const {
|
||||
return isolate_;
|
||||
}
|
||||
diff --git a/src/env.h b/src/env.h
|
||||
index 84a650885a79bc5c49efdc26f62ec8db48de775c..ba442937bf0d7831c9a84b5a57211e9f90c81705 100644
|
||||
--- a/src/env.h
|
||||
+++ b/src/env.h
|
||||
@@ -111,6 +111,19 @@ class ModuleWrap;
|
||||
class Environment;
|
||||
class Realm;
|
||||
|
||||
+// Disables zero-filling for ArrayBuffer allocations in this scope. This is
|
||||
+// similar to how we implement Buffer.allocUnsafe() in JS land.
|
||||
+class NoArrayBufferZeroFillScope {
|
||||
+ public:
|
||||
+ inline explicit NoArrayBufferZeroFillScope(IsolateData* isolate_data);
|
||||
+ inline ~NoArrayBufferZeroFillScope();
|
||||
+
|
||||
+ private:
|
||||
+ NodeArrayBufferAllocator* node_allocator_;
|
||||
+
|
||||
+ friend class Environment;
|
||||
+};
|
||||
+
|
||||
struct IsolateDataSerializeInfo {
|
||||
std::vector<SnapshotIndex> primitive_values;
|
||||
std::vector<PropInfo> template_values;
|
||||
diff --git a/src/node_buffer.cc b/src/node_buffer.cc
|
||||
index 49df0b4284748effb27b05ecd69f05699dd8be75..eb104ab80fd2052d1523cb2f2ecdb6d23ac3be98 100644
|
||||
index 49df0b4284748effb27b05ecd69f05699dd8be75..77da37881bb351249c45e405289193c10d083e0c 100644
|
||||
--- a/src/node_buffer.cc
|
||||
+++ b/src/node_buffer.cc
|
||||
@@ -81,6 +81,7 @@ using v8::SharedArrayBuffer;
|
||||
using v8::String;
|
||||
using v8::Uint32;
|
||||
using v8::Uint8Array;
|
||||
+using v8::Uint32Array;
|
||||
using v8::Value;
|
||||
|
||||
namespace {
|
||||
@@ -1243,6 +1244,45 @@ void SetBufferPrototype(const FunctionCallbackInfo<Value>& args) {
|
||||
realm->set_buffer_prototype_object(proto);
|
||||
}
|
||||
|
||||
+void GetZeroFillToggle(const FunctionCallbackInfo<Value>& args) {
|
||||
+ Environment* env = Environment::GetCurrent(args);
|
||||
+ NodeArrayBufferAllocator* allocator = env->isolate_data()->node_allocator();
|
||||
+ Local<ArrayBuffer> ab;
|
||||
+ // It can be a nullptr when running inside an isolate where we
|
||||
+ // do not own the ArrayBuffer allocator.
|
||||
+ if (allocator == nullptr || env->isolate_data()->is_building_snapshot()) {
|
||||
+ // Create a dummy Uint32Array - the JS land can only toggle the C++ land
|
||||
+ // setting when the allocator uses our toggle. With this the toggle in JS
|
||||
+ // land results in no-ops.
|
||||
+ // When building a snapshot, just use a dummy toggle as well to avoid
|
||||
+ // introducing the dynamic external reference. We'll re-initialize the
|
||||
+ // toggle with a real one connected to the C++ allocator after snapshot
|
||||
+ // deserialization.
|
||||
+
|
||||
+ ab = ArrayBuffer::New(env->isolate(), sizeof(uint32_t));
|
||||
+ } else {
|
||||
+ // TODO(joyeecheung): save ab->GetBackingStore()->Data() in the Node.js
|
||||
+ // array buffer allocator and include it into the C++ toggle while the
|
||||
+ // Environment is still alive.
|
||||
+ uint32_t* zero_fill_field = allocator->zero_fill_field();
|
||||
+ std::unique_ptr<BackingStore> backing =
|
||||
+ ArrayBuffer::NewBackingStore(zero_fill_field,
|
||||
+ sizeof(*zero_fill_field),
|
||||
+ [](void*, size_t, void*) {},
|
||||
+ nullptr);
|
||||
+ ab = ArrayBuffer::New(env->isolate(), std::move(backing));
|
||||
+ }
|
||||
+
|
||||
+ if (ab->SetPrivate(env->context(),
|
||||
+ env->untransferable_object_private_symbol(),
|
||||
+ True(env->isolate()))
|
||||
+ .IsNothing()) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ args.GetReturnValue().Set(Uint32Array::New(ab, 0, 1));
|
||||
+}
|
||||
+
|
||||
static void Btoa(const FunctionCallbackInfo<Value>& args) {
|
||||
CHECK_EQ(args.Length(), 1);
|
||||
Environment* env = Environment::GetCurrent(args);
|
||||
@@ -1420,7 +1460,7 @@ inline size_t CheckNumberToSize(Local<Value> number) {
|
||||
@@ -1420,7 +1420,7 @@ inline size_t CheckNumberToSize(Local<Value> number) {
|
||||
CHECK(value >= 0 && value < maxSize);
|
||||
size_t size = static_cast<size_t>(value);
|
||||
#ifdef V8_ENABLE_SANDBOX
|
||||
@@ -301,22 +133,6 @@ index 49df0b4284748effb27b05ecd69f05699dd8be75..eb104ab80fd2052d1523cb2f2ecdb6d2
|
||||
#endif
|
||||
return size;
|
||||
}
|
||||
@@ -1638,6 +1678,7 @@ void Initialize(Local<Object> target,
|
||||
"utf8WriteStatic",
|
||||
SlowWriteString<UTF8>,
|
||||
&fast_write_string_utf8);
|
||||
+ SetMethod(context, target, "getZeroFillToggle", GetZeroFillToggle);
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
@@ -1686,6 +1727,7 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
|
||||
registry->Register(StringWrite<HEX>);
|
||||
registry->Register(StringWrite<UCS2>);
|
||||
registry->Register(StringWrite<UTF8>);
|
||||
+ registry->Register(GetZeroFillToggle);
|
||||
|
||||
registry->Register(CopyArrayBuffer);
|
||||
registry->Register(CreateUnsafeArrayBuffer);
|
||||
diff --git a/src/node_i18n.cc b/src/node_i18n.cc
|
||||
index 3c4f419aa29470b3280174b58680b9421b0340b5..3b24ad2a2316f89d98b067e2c13988f87a9a00d2 100644
|
||||
--- a/src/node_i18n.cc
|
||||
@@ -357,28 +173,6 @@ index 3c4f419aa29470b3280174b58680b9421b0340b5..3b24ad2a2316f89d98b067e2c13988f8
|
||||
}
|
||||
|
||||
constexpr const char* EncodingName(const enum encoding encoding) {
|
||||
diff --git a/src/node_internals.h b/src/node_internals.h
|
||||
index 61a58b6ccfb26efefd6d3b61a1c8741f9550ae8d..29d1ecc2b209c9c3c2e956263ba2d57fb688b34c 100644
|
||||
--- a/src/node_internals.h
|
||||
+++ b/src/node_internals.h
|
||||
@@ -124,6 +124,9 @@ v8::MaybeLocal<v8::Object> InitializePrivateSymbols(
|
||||
|
||||
class NodeArrayBufferAllocator : public ArrayBufferAllocator {
|
||||
public:
|
||||
+ NodeArrayBufferAllocator();
|
||||
+ ~NodeArrayBufferAllocator() override;
|
||||
+ inline uint32_t* zero_fill_field() { return zero_fill_field_; }
|
||||
void* Allocate(size_t size) override; // Defined in src/node.cc
|
||||
void* AllocateUninitialized(size_t size) override;
|
||||
void Free(void* data, size_t size) override;
|
||||
@@ -140,6 +143,7 @@ class NodeArrayBufferAllocator : public ArrayBufferAllocator {
|
||||
}
|
||||
|
||||
private:
|
||||
+ uint32_t* zero_fill_field_ = nullptr; // Boolean but exposed as uint32 to JS land.
|
||||
std::atomic<size_t> total_mem_usage_ {0};
|
||||
|
||||
// Delegate to V8's allocator for compatibility with the V8 memory cage.
|
||||
diff --git a/src/node_serdes.cc b/src/node_serdes.cc
|
||||
index 00fcd4b6afccce47ff21c4447d9cd60f25c11835..5f96ee2051e5339456185efddb149c4d43093f31 100644
|
||||
--- a/src/node_serdes.cc
|
||||
|
||||
@@ -9,7 +9,11 @@ elif [ "`uname`" == "Darwin" ]; then
|
||||
BUILD_TYPE="mas"
|
||||
fi
|
||||
elif [ "`uname`" == "Linux" ]; then
|
||||
BUILD_TYPE="linux"
|
||||
if [ "$ELECTRON_DEPOT_TOOLS_WIN_TOOLCHAIN" == "1" ]; then
|
||||
BUILD_TYPE="win"
|
||||
else
|
||||
BUILD_TYPE="linux"
|
||||
fi
|
||||
else
|
||||
echo "Unsupported platform"
|
||||
exit 1
|
||||
|
||||
@@ -88,7 +88,7 @@ async function main () {
|
||||
}
|
||||
|
||||
const versionString = `v${args.electronVersion}`;
|
||||
console.log(`Running against Electron ${versionString.green}`);
|
||||
console.log(`Running against Electron ${chalk.green(versionString)}`);
|
||||
}
|
||||
|
||||
const [lastSpecHash, lastSpecInstallHash] = loadLastSpecHash();
|
||||
|
||||
@@ -502,6 +502,15 @@ bool ElectronMainDelegate::ShouldInitializeMojo(InvokedIn invoked_in) {
|
||||
return ShouldCreateFeatureList(invoked_in);
|
||||
}
|
||||
|
||||
bool ElectronMainDelegate::ShouldLoadV8Snapshot(
|
||||
const std::string& process_type) {
|
||||
// The gpu does not need v8
|
||||
if (process_type == ::switches::kGpuProcess) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ElectronMainDelegate::ShouldLockSchemeRegistry() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ class ElectronMainDelegate : public content::ContentMainDelegate {
|
||||
content::MainFunctionParams main_function_params) override;
|
||||
bool ShouldCreateFeatureList(InvokedIn invoked_in) override;
|
||||
bool ShouldInitializeMojo(InvokedIn invoked_in) override;
|
||||
bool ShouldLoadV8Snapshot(const std::string& process_type) override;
|
||||
bool ShouldLockSchemeRegistry() override;
|
||||
#if BUILDFLAG(IS_LINUX)
|
||||
void ZygoteForked() override;
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "base/containers/flat_map.h"
|
||||
#include "base/containers/map_util.h"
|
||||
#include "base/memory/weak_ptr.h"
|
||||
#include "base/no_destructor.h"
|
||||
#include "base/strings/string_number_conversions.h"
|
||||
@@ -14,10 +16,10 @@
|
||||
#include "mojo/public/cpp/system/data_pipe.h"
|
||||
#include "mojo/public/cpp/system/simple_watcher.h"
|
||||
#include "net/base/net_errors.h"
|
||||
#include "shell/common/gin_helper/handle.h"
|
||||
#include "shell/common/gin_helper/promise.h"
|
||||
#include "shell/common/key_weak_map.h"
|
||||
#include "shell/common/node_util.h"
|
||||
#include "v8/include/cppgc/allocation.h"
|
||||
#include "v8/include/v8-cppgc.h"
|
||||
|
||||
#include "shell/common/node_includes.h"
|
||||
|
||||
@@ -29,9 +31,11 @@ namespace {
|
||||
int g_next_id = 0;
|
||||
|
||||
// Map that manages all the DataPipeHolder objects.
|
||||
KeyWeakMap<std::string>& AllDataPipeHolders() {
|
||||
static base::NoDestructor<KeyWeakMap<std::string>> weak_map;
|
||||
return *weak_map.get();
|
||||
[[nodiscard]] auto& AllDataPipeHolders() {
|
||||
static base::NoDestructor<
|
||||
base::flat_map<std::string, cppgc::WeakPersistent<DataPipeHolder>>>
|
||||
weak_map;
|
||||
return *weak_map;
|
||||
}
|
||||
|
||||
// Utility class to read from data pipe.
|
||||
@@ -143,8 +147,9 @@ class DataPipeReader {
|
||||
|
||||
} // namespace
|
||||
|
||||
gin::DeprecatedWrapperInfo DataPipeHolder::kWrapperInfo = {
|
||||
gin::kEmbedderNativeGin};
|
||||
const gin::WrapperInfo DataPipeHolder::kWrapperInfo = {
|
||||
{gin::kEmbedderNativeGin},
|
||||
gin::kElectronDataPipeHolder};
|
||||
|
||||
DataPipeHolder::DataPipeHolder(const network::DataElement& element)
|
||||
: id_(base::NumberToString(++g_next_id)) {
|
||||
@@ -166,30 +171,28 @@ v8::Local<v8::Promise> DataPipeHolder::ReadAll(v8::Isolate* isolate) {
|
||||
return handle;
|
||||
}
|
||||
|
||||
const char* DataPipeHolder::GetTypeName() {
|
||||
return "DataPipeHolder";
|
||||
const gin::WrapperInfo* DataPipeHolder::wrapper_info() const {
|
||||
return &kWrapperInfo;
|
||||
}
|
||||
|
||||
const char* DataPipeHolder::GetHumanReadableName() const {
|
||||
return "Electron / DataPipeHolder";
|
||||
}
|
||||
|
||||
// static
|
||||
gin_helper::Handle<DataPipeHolder> DataPipeHolder::Create(
|
||||
v8::Isolate* isolate,
|
||||
const network::DataElement& element) {
|
||||
auto handle = gin_helper::CreateHandle(isolate, new DataPipeHolder(element));
|
||||
AllDataPipeHolders().Set(isolate, handle->id(),
|
||||
handle->GetWrapper(isolate).ToLocalChecked());
|
||||
return handle;
|
||||
DataPipeHolder* DataPipeHolder::Create(v8::Isolate* isolate,
|
||||
const network::DataElement& element) {
|
||||
auto* holder = cppgc::MakeGarbageCollected<DataPipeHolder>(
|
||||
isolate->GetCppHeap()->GetAllocationHandle(), element);
|
||||
AllDataPipeHolders().insert_or_assign(holder->id(), holder);
|
||||
return holder;
|
||||
}
|
||||
|
||||
// static
|
||||
gin_helper::Handle<DataPipeHolder> DataPipeHolder::From(v8::Isolate* isolate,
|
||||
const std::string& id) {
|
||||
v8::MaybeLocal<v8::Object> object = AllDataPipeHolders().Get(isolate, id);
|
||||
if (!object.IsEmpty()) {
|
||||
gin_helper::Handle<DataPipeHolder> handle;
|
||||
if (gin::ConvertFromV8(isolate, object.ToLocalChecked(), &handle))
|
||||
return handle;
|
||||
}
|
||||
return {};
|
||||
DataPipeHolder* DataPipeHolder::From(v8::Isolate* isolate,
|
||||
const std::string_view id) {
|
||||
auto* found = base::FindOrNull(AllDataPipeHolders(), id);
|
||||
return found ? found->Get() : nullptr;
|
||||
}
|
||||
|
||||
} // namespace electron::api
|
||||
|
||||
@@ -7,31 +7,28 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "gin/wrappable.h"
|
||||
#include "mojo/public/cpp/bindings/remote.h"
|
||||
#include "services/network/public/cpp/data_element.h"
|
||||
#include "services/network/public/mojom/data_pipe_getter.mojom.h"
|
||||
#include "shell/common/gin_helper/wrappable.h"
|
||||
|
||||
namespace gin_helper {
|
||||
template <typename T>
|
||||
class Handle;
|
||||
} // namespace gin_helper
|
||||
|
||||
namespace electron::api {
|
||||
|
||||
// Retains reference to the data pipe.
|
||||
class DataPipeHolder final
|
||||
: public gin_helper::DeprecatedWrappable<DataPipeHolder> {
|
||||
class DataPipeHolder final : public gin::Wrappable<DataPipeHolder> {
|
||||
public:
|
||||
// gin_helper::Wrappable
|
||||
static gin::DeprecatedWrapperInfo kWrapperInfo;
|
||||
const char* GetTypeName() override;
|
||||
// gin::Wrappable
|
||||
static const gin::WrapperInfo kWrapperInfo;
|
||||
const gin::WrapperInfo* wrapper_info() const override;
|
||||
const char* GetHumanReadableName() const override;
|
||||
|
||||
static gin_helper::Handle<DataPipeHolder> Create(
|
||||
v8::Isolate* isolate,
|
||||
const network::DataElement& element);
|
||||
static gin_helper::Handle<DataPipeHolder> From(v8::Isolate* isolate,
|
||||
const std::string& id);
|
||||
static DataPipeHolder* Create(v8::Isolate* isolate,
|
||||
const network::DataElement& element);
|
||||
static DataPipeHolder* From(v8::Isolate* isolate, std::string_view id);
|
||||
|
||||
// Make public for cppgc::MakeGarbageCollected.
|
||||
explicit DataPipeHolder(const network::DataElement& element);
|
||||
~DataPipeHolder() override;
|
||||
|
||||
// Read all data at once.
|
||||
//
|
||||
@@ -47,9 +44,6 @@ class DataPipeHolder final
|
||||
DataPipeHolder& operator=(const DataPipeHolder&) = delete;
|
||||
|
||||
private:
|
||||
explicit DataPipeHolder(const network::DataElement& element);
|
||||
~DataPipeHolder() override;
|
||||
|
||||
std::string id_;
|
||||
mojo::Remote<network::mojom::DataPipeGetter> data_pipe_;
|
||||
};
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
#include "shell/browser/javascript_environment.h"
|
||||
#include "shell/common/gin_helper/handle.h"
|
||||
#include "shell/common/node_includes.h"
|
||||
#include "v8/include/cppgc/allocation.h"
|
||||
#include "v8/include/v8-cppgc.h"
|
||||
|
||||
namespace gin {
|
||||
|
||||
@@ -41,14 +43,39 @@ struct Converter<device::mojom::WakeLockType> {
|
||||
|
||||
namespace electron::api {
|
||||
|
||||
gin::DeprecatedWrapperInfo PowerSaveBlocker::kWrapperInfo = {
|
||||
gin::kEmbedderNativeGin};
|
||||
const gin::WrapperInfo PowerSaveBlocker::kWrapperInfo = {
|
||||
{gin::kEmbedderNativeGin},
|
||||
gin::kElectronPowerSaveBlocker};
|
||||
|
||||
PowerSaveBlocker::PowerSaveBlocker(v8::Isolate* isolate)
|
||||
: current_lock_type_(device::mojom::WakeLockType::kPreventAppSuspension) {}
|
||||
|
||||
PowerSaveBlocker::~PowerSaveBlocker() = default;
|
||||
|
||||
// static
|
||||
gin_helper::Handle<PowerSaveBlocker> PowerSaveBlocker::Create(
|
||||
v8::Isolate* isolate) {
|
||||
return gin_helper::CreateHandle(
|
||||
isolate, cppgc::MakeGarbageCollected<PowerSaveBlocker>(
|
||||
isolate->GetCppHeap()->GetAllocationHandle(), isolate));
|
||||
}
|
||||
|
||||
const gin::WrapperInfo* PowerSaveBlocker::wrapper_info() const {
|
||||
return &kWrapperInfo;
|
||||
}
|
||||
|
||||
const char* PowerSaveBlocker::GetHumanReadableName() const {
|
||||
return "Electron / PowerSaveBlocker";
|
||||
}
|
||||
|
||||
gin::ObjectTemplateBuilder PowerSaveBlocker::GetObjectTemplateBuilder(
|
||||
v8::Isolate* isolate) {
|
||||
return gin::Wrappable<PowerSaveBlocker>::GetObjectTemplateBuilder(isolate)
|
||||
.SetMethod("start", &PowerSaveBlocker::Start)
|
||||
.SetMethod("stop", &PowerSaveBlocker::Stop)
|
||||
.SetMethod("isStarted", &PowerSaveBlocker::IsStarted);
|
||||
}
|
||||
|
||||
void PowerSaveBlocker::UpdatePowerSaveBlocker() {
|
||||
if (wake_lock_types_.empty()) {
|
||||
if (is_wake_lock_active_) {
|
||||
@@ -66,6 +93,7 @@ void PowerSaveBlocker::UpdatePowerSaveBlocker() {
|
||||
// Only the highest-precedence blocker type takes effect.
|
||||
device::mojom::WakeLockType new_lock_type =
|
||||
device::mojom::WakeLockType::kPreventAppSuspension;
|
||||
|
||||
for (const auto& element : wake_lock_types_) {
|
||||
if (element.second == device::mojom::WakeLockType::kPreventDisplaySleep) {
|
||||
new_lock_type = device::mojom::WakeLockType::kPreventDisplaySleep;
|
||||
@@ -114,25 +142,6 @@ bool PowerSaveBlocker::IsStarted(int id) const {
|
||||
return wake_lock_types_.contains(id);
|
||||
}
|
||||
|
||||
// static
|
||||
gin_helper::Handle<PowerSaveBlocker> PowerSaveBlocker::Create(
|
||||
v8::Isolate* isolate) {
|
||||
return gin_helper::CreateHandle(isolate, new PowerSaveBlocker(isolate));
|
||||
}
|
||||
|
||||
gin::ObjectTemplateBuilder PowerSaveBlocker::GetObjectTemplateBuilder(
|
||||
v8::Isolate* isolate) {
|
||||
return gin_helper::DeprecatedWrappable<
|
||||
PowerSaveBlocker>::GetObjectTemplateBuilder(isolate)
|
||||
.SetMethod("start", &PowerSaveBlocker::Start)
|
||||
.SetMethod("stop", &PowerSaveBlocker::Stop)
|
||||
.SetMethod("isStarted", &PowerSaveBlocker::IsStarted);
|
||||
}
|
||||
|
||||
const char* PowerSaveBlocker::GetTypeName() {
|
||||
return "PowerSaveBlocker";
|
||||
}
|
||||
|
||||
} // namespace electron::api
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
#define ELECTRON_SHELL_BROWSER_API_ELECTRON_API_POWER_SAVE_BLOCKER_H_
|
||||
|
||||
#include "base/containers/flat_map.h"
|
||||
#include "gin/wrappable.h"
|
||||
#include "mojo/public/cpp/bindings/remote.h"
|
||||
#include "services/device/public/mojom/wake_lock.mojom.h"
|
||||
#include "shell/common/gin_helper/wrappable.h"
|
||||
|
||||
namespace gin {
|
||||
class ObjectTemplateBuilder;
|
||||
@@ -21,25 +21,25 @@ class Handle;
|
||||
|
||||
namespace electron::api {
|
||||
|
||||
class PowerSaveBlocker final
|
||||
: public gin_helper::DeprecatedWrappable<PowerSaveBlocker> {
|
||||
class PowerSaveBlocker final : public gin::Wrappable<PowerSaveBlocker> {
|
||||
public:
|
||||
static gin_helper::Handle<PowerSaveBlocker> Create(v8::Isolate* isolate);
|
||||
|
||||
// gin_helper::Wrappable
|
||||
static gin::DeprecatedWrapperInfo kWrapperInfo;
|
||||
// gin::Wrappable
|
||||
static const gin::WrapperInfo kWrapperInfo;
|
||||
const gin::WrapperInfo* wrapper_info() const override;
|
||||
const char* GetHumanReadableName() const override;
|
||||
gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
|
||||
v8::Isolate* isolate) override;
|
||||
const char* GetTypeName() override;
|
||||
|
||||
// Make public for cppgc::MakeGarbageCollected.
|
||||
explicit PowerSaveBlocker(v8::Isolate* isolate);
|
||||
~PowerSaveBlocker() override;
|
||||
|
||||
// disable copy
|
||||
PowerSaveBlocker(const PowerSaveBlocker&) = delete;
|
||||
PowerSaveBlocker& operator=(const PowerSaveBlocker&) = delete;
|
||||
|
||||
protected:
|
||||
explicit PowerSaveBlocker(v8::Isolate* isolate);
|
||||
~PowerSaveBlocker() override;
|
||||
|
||||
private:
|
||||
void UpdatePowerSaveBlocker();
|
||||
int Start(device::mojom::WakeLockType type);
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
#include "shell/browser/api/electron_api_protocol.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <string_view>
|
||||
#include <vector>
|
||||
|
||||
#include "base/command_line.h"
|
||||
#include "base/containers/contains.h"
|
||||
#include "base/no_destructor.h"
|
||||
#include "content/common/url_schemes.h"
|
||||
#include "content/public/browser/child_process_security_policy.h"
|
||||
@@ -269,7 +269,7 @@ v8::Local<v8::Promise> Protocol::IsProtocolHandled(v8::Isolate* const isolate,
|
||||
// So we have to test against a hard-coded builtin schemes
|
||||
// list make it work with old code. We should deprecate
|
||||
// this API with the new |isProtocolRegistered| API.
|
||||
base::Contains(kBuiltinSchemes, scheme));
|
||||
std::ranges::contains(kBuiltinSchemes, scheme));
|
||||
}
|
||||
|
||||
void Protocol::HandleOptionalCallback(gin::Arguments* args, Error error) {
|
||||
|
||||
@@ -1044,15 +1044,13 @@ bool Session::IsPersistent() {
|
||||
|
||||
v8::Local<v8::Promise> Session::GetBlobData(v8::Isolate* isolate,
|
||||
const std::string& uuid) {
|
||||
gin_helper::Handle<DataPipeHolder> holder =
|
||||
DataPipeHolder::From(isolate, uuid);
|
||||
if (holder.IsEmpty()) {
|
||||
gin_helper::Promise<v8::Local<v8::Value>> promise(isolate);
|
||||
promise.RejectWithErrorMessage("Could not get blob data handle");
|
||||
return promise.GetHandle();
|
||||
if (DataPipeHolder* holder = DataPipeHolder::From(isolate, uuid)) {
|
||||
return holder->ReadAll(isolate);
|
||||
}
|
||||
|
||||
return holder->ReadAll(isolate);
|
||||
gin_helper::Promise<v8::Local<v8::Value>> promise(isolate);
|
||||
promise.RejectWithErrorMessage("Could not get blob data handle");
|
||||
return promise.GetHandle();
|
||||
}
|
||||
|
||||
void Session::DownloadURL(const GURL& url, gin::Arguments* args) {
|
||||
|
||||
@@ -544,6 +544,28 @@ constexpr std::string_view CursorTypeToString(
|
||||
}
|
||||
}
|
||||
|
||||
// Refs
|
||||
// https://source.chromium.org/chromium/chromium/src/+/main:components/page_content_annotations/content/page_context_fetcher.cc;l=206-223;drc=376a51732fd3b17b83451ceb93eea7ad07204798
|
||||
std::string_view CopyFromSurfaceErrorToString(
|
||||
content::CopyFromSurfaceError error) {
|
||||
switch (error) {
|
||||
case content::CopyFromSurfaceError::kUnknown:
|
||||
return "Unknown";
|
||||
case content::CopyFromSurfaceError::kNotImplemented:
|
||||
return "Not implemented";
|
||||
case content::CopyFromSurfaceError::kFrameGone:
|
||||
return "Frame Gone";
|
||||
case content::CopyFromSurfaceError::kTimeout:
|
||||
return "Timeout";
|
||||
case content::CopyFromSurfaceError::kEmbeddingTokenChanged:
|
||||
return "EmbeddingTokenChanged";
|
||||
case content::CopyFromSurfaceError::kVizSentEmptyBitmap:
|
||||
return "VizSentEmptyBitmap";
|
||||
case content::CopyFromSurfaceError::kUnknownVizError:
|
||||
return "UnknownVizError";
|
||||
}
|
||||
}
|
||||
|
||||
base::IDMap<WebContents*>& GetAllWebContents() {
|
||||
static base::NoDestructor<base::IDMap<WebContents*>> s_all_web_contents;
|
||||
return *s_all_web_contents;
|
||||
@@ -561,7 +583,8 @@ void OnCapturePageDone(gin_helper::Promise<gfx::Image> promise,
|
||||
}
|
||||
|
||||
if (!result.has_value()) {
|
||||
promise.RejectWithErrorMessage(result.error());
|
||||
promise.RejectWithErrorMessage(
|
||||
CopyFromSurfaceErrorToString(result.error()));
|
||||
capture_handle.RunAndReset();
|
||||
return;
|
||||
}
|
||||
@@ -826,6 +849,8 @@ WebContents::WebContents(v8::Isolate* isolate,
|
||||
&offscreen_use_shared_texture_);
|
||||
use_offscreen_dict.Get(options::kSharedTexturePixelFormat,
|
||||
&offscreen_shared_texture_pixel_format_);
|
||||
use_offscreen_dict.Get(options::kDeviceScaleFactor,
|
||||
&offscreen_device_scale_factor_);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -864,6 +889,7 @@ WebContents::WebContents(v8::Isolate* isolate,
|
||||
auto* view = new OffScreenWebContentsView(
|
||||
false, offscreen_use_shared_texture_,
|
||||
offscreen_shared_texture_pixel_format_,
|
||||
offscreen_device_scale_factor_,
|
||||
base::BindRepeating(&WebContents::OnPaint, base::Unretained(this)));
|
||||
params.view = view;
|
||||
params.delegate_view = view;
|
||||
@@ -885,7 +911,7 @@ WebContents::WebContents(v8::Isolate* isolate,
|
||||
content::WebContents::CreateParams params(session->browser_context());
|
||||
auto* view = new OffScreenWebContentsView(
|
||||
transparent, offscreen_use_shared_texture_,
|
||||
offscreen_shared_texture_pixel_format_,
|
||||
offscreen_shared_texture_pixel_format_, offscreen_device_scale_factor_,
|
||||
base::BindRepeating(&WebContents::OnPaint, base::Unretained(this)));
|
||||
params.view = view;
|
||||
params.delegate_view = view;
|
||||
@@ -1249,6 +1275,7 @@ void WebContents::MaybeOverrideCreateParamsForNewWindow(
|
||||
auto* view = new OffScreenWebContentsView(
|
||||
false, offscreen_use_shared_texture_,
|
||||
offscreen_shared_texture_pixel_format_,
|
||||
offscreen_device_scale_factor_,
|
||||
base::BindRepeating(&WebContents::OnPaint, base::Unretained(this)));
|
||||
create_params->view = view;
|
||||
create_params->delegate_view = view;
|
||||
@@ -2071,6 +2098,10 @@ void WebContents::ReadyToCommitNavigation(
|
||||
// Only focus for top-level contents.
|
||||
if (type_ != Type::kBrowserWindow)
|
||||
return;
|
||||
// Don't focus if focusOnNavigation is disabled.
|
||||
auto* prefs = WebContentsPreferences::From(web_contents());
|
||||
if (prefs && !prefs->ShouldFocusOnNavigation())
|
||||
return;
|
||||
web_contents()->SetInitialFocus();
|
||||
}
|
||||
|
||||
|
||||
@@ -820,6 +820,13 @@ class WebContents final : public ExclusiveAccessContext,
|
||||
bool offscreen_use_shared_texture_ = false;
|
||||
std::string offscreen_shared_texture_pixel_format_ = "argb";
|
||||
|
||||
// TODO(reito): 0.0f means the device scale factor is not set, it's a
|
||||
// migration of the breaking change so that we can read the device scale
|
||||
// factor from physical primary screen's info. In Electron 42, we need to set
|
||||
// this to 1.0f so that the offscreen rendering use 1.0 as default when
|
||||
// `deviceScaleFactor` is not specified in webPreferences.
|
||||
float offscreen_device_scale_factor_ = 0.0f;
|
||||
|
||||
// Whether window is fullscreened by HTML5 api.
|
||||
bool html_fullscreen_ = false;
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include <string>
|
||||
|
||||
#include "components/keyed_service/core/keyed_service.h"
|
||||
#include "content/public/browser/child_process_id.h"
|
||||
#include "content/public/common/child_process_id.h"
|
||||
#include "mojo/public/cpp/bindings/receiver_set.h"
|
||||
#include "third_party/blink/public/mojom/badging/badging.mojom.h"
|
||||
#include "url/gurl.h"
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#include <utility>
|
||||
|
||||
#include "base/command_line.h"
|
||||
#include "base/containers/contains.h"
|
||||
#include "base/functional/bind.h"
|
||||
#include "content/public/browser/web_contents.h"
|
||||
#include "gin/data_object_builder.h"
|
||||
@@ -153,7 +152,7 @@ void HidChooserController::OnDeviceAdded(
|
||||
|
||||
void HidChooserController::OnDeviceRemoved(
|
||||
const device::mojom::HidDeviceInfo& device) {
|
||||
if (!base::Contains(items_, PhysicalDeviceIdFromDeviceInfo(device)))
|
||||
if (!std::ranges::contains(items_, PhysicalDeviceIdFromDeviceInfo(device)))
|
||||
return;
|
||||
|
||||
gin::WeakCell<api::Session>* session = GetSession();
|
||||
@@ -173,7 +172,7 @@ void HidChooserController::OnDeviceRemoved(
|
||||
void HidChooserController::OnDeviceChanged(
|
||||
const device::mojom::HidDeviceInfo& device) {
|
||||
bool has_chooser_item =
|
||||
base::Contains(items_, PhysicalDeviceIdFromDeviceInfo(device));
|
||||
std::ranges::contains(items_, PhysicalDeviceIdFromDeviceInfo(device));
|
||||
if (!DisplayDevice(device)) {
|
||||
if (has_chooser_item)
|
||||
OnDeviceRemoved(device);
|
||||
@@ -264,8 +263,8 @@ bool HidChooserController::DisplayDevice(
|
||||
// devices may be displayed if the origin is privileged or the blocklist is
|
||||
// disabled.
|
||||
const bool has_fido_collection =
|
||||
base::Contains(device.collections, device::mojom::kPageFido,
|
||||
[](const auto& c) { return c->usage->usage_page; });
|
||||
std::ranges::contains(device.collections, device::mojom::kPageFido,
|
||||
[](const auto& c) { return c->usage->usage_page; });
|
||||
|
||||
if (has_fido_collection) {
|
||||
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "base/containers/contains.h"
|
||||
#include "base/memory/ptr_util.h"
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "base/values.h"
|
||||
@@ -692,7 +691,7 @@ int NativeWindow::NonClientHitTest(const gfx::Point& point) {
|
||||
|
||||
void NativeWindow::AddDraggableRegionProvider(
|
||||
DraggableRegionProvider* provider) {
|
||||
if (!base::Contains(draggable_region_providers_, provider)) {
|
||||
if (!std::ranges::contains(draggable_region_providers_, provider)) {
|
||||
draggable_region_providers_.push_back(provider);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
#include "content/public/browser/context_factory.h"
|
||||
#include "content/public/browser/gpu_data_manager.h"
|
||||
#include "content/public/browser/render_process_host.h"
|
||||
#include "gpu/command_buffer/client/gl_helper.h"
|
||||
#include "shell/browser/osr/osr_host_display_client.h"
|
||||
#include "third_party/blink/public/common/input/web_input_event.h"
|
||||
#include "third_party/skia/include/core/SkCanvas.h"
|
||||
@@ -53,8 +52,6 @@ namespace electron {
|
||||
|
||||
namespace {
|
||||
|
||||
const float kDefaultScaleFactor = 1.0;
|
||||
|
||||
ui::MouseEvent UiMouseEventFromWebMouseEvent(blink::WebMouseEvent event) {
|
||||
int button_flags = 0;
|
||||
switch (event.button) {
|
||||
@@ -96,6 +93,15 @@ ui::MouseWheelEvent UiMouseWheelEventFromWebMouseEvent(
|
||||
base::ClampFloor<int>(event.delta_y)};
|
||||
}
|
||||
|
||||
// TODO(reito): Remove this function and use default 1.0f when Electron 42.
|
||||
float GetDefaultDeviceScaleFactorFromDisplayInfo() {
|
||||
display::Display display =
|
||||
display::Screen::Get()->GetDisplayNearestView(gfx::NativeView());
|
||||
|
||||
const float factor = display.device_scale_factor();
|
||||
return factor > 0 ? factor : 1.0f;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
class ElectronDelegatedFrameHostClient
|
||||
@@ -155,6 +161,7 @@ OffScreenRenderWidgetHostView::OffScreenRenderWidgetHostView(
|
||||
bool transparent,
|
||||
bool offscreen_use_shared_texture,
|
||||
const std::string& offscreen_shared_texture_pixel_format,
|
||||
float offscreen_device_scale_factor,
|
||||
bool painting,
|
||||
int frame_rate,
|
||||
const OnPaintCallback& callback,
|
||||
@@ -168,6 +175,7 @@ OffScreenRenderWidgetHostView::OffScreenRenderWidgetHostView(
|
||||
offscreen_use_shared_texture_(offscreen_use_shared_texture),
|
||||
offscreen_shared_texture_pixel_format_(
|
||||
offscreen_shared_texture_pixel_format),
|
||||
offscreen_device_scale_factor_(offscreen_device_scale_factor),
|
||||
callback_(callback),
|
||||
frame_rate_(frame_rate),
|
||||
size_(initial_size),
|
||||
@@ -184,11 +192,11 @@ OffScreenRenderWidgetHostView::OffScreenRenderWidgetHostView(
|
||||
DCHECK(render_widget_host_);
|
||||
DCHECK(!render_widget_host_->GetView());
|
||||
|
||||
// Initialize a screen_infos_ struct as needed, to cache the scale factor.
|
||||
if (screen_infos_.screen_infos.empty()) {
|
||||
UpdateScreenInfo();
|
||||
// TODO(reito): Remove this when Electron 42.
|
||||
if (cc::MathUtil::IsWithinEpsilon(offscreen_device_scale_factor_, 0.0f)) {
|
||||
offscreen_device_scale_factor_ =
|
||||
GetDefaultDeviceScaleFactorFromDisplayInfo();
|
||||
}
|
||||
screen_infos_.mutable_current().device_scale_factor = kDefaultScaleFactor;
|
||||
|
||||
delegated_frame_host_allocator_.GenerateId();
|
||||
delegated_frame_host_surface_id_ =
|
||||
@@ -210,15 +218,6 @@ OffScreenRenderWidgetHostView::OffScreenRenderWidgetHostView(
|
||||
compositor_->SetDelegate(this);
|
||||
compositor_->SetRootLayer(root_layer_.get());
|
||||
|
||||
// For offscreen rendering with format rgbaf16, we need to set correct display
|
||||
// color spaces to the compositor, otherwise it won't support hdr.
|
||||
if (offscreen_use_shared_texture_ &&
|
||||
offscreen_shared_texture_pixel_format_ == "rgbaf16") {
|
||||
gfx::DisplayColorSpaces hdr_display_color_spaces(
|
||||
gfx::ColorSpace::CreateSRGBLinear(), viz::SinglePlaneFormat::kRGBA_F16);
|
||||
compositor_->SetDisplayColorSpaces(hdr_display_color_spaces);
|
||||
}
|
||||
|
||||
ResizeRootLayer(false);
|
||||
|
||||
render_widget_host_->SetView(this);
|
||||
@@ -504,19 +503,6 @@ void OffScreenRenderWidgetHostView::CopyFromSurface(
|
||||
src_rect, output_size, base::TimeDelta(), std::move(callback));
|
||||
}
|
||||
|
||||
display::ScreenInfo OffScreenRenderWidgetHostView::GetScreenInfo() const {
|
||||
display::ScreenInfo screen_info;
|
||||
screen_info.depth = 24;
|
||||
screen_info.depth_per_component = 8;
|
||||
screen_info.orientation_angle = 0;
|
||||
screen_info.device_scale_factor = GetDeviceScaleFactor();
|
||||
screen_info.orientation_type =
|
||||
display::mojom::ScreenOrientation::kLandscapePrimary;
|
||||
screen_info.rect = gfx::Rect(size_);
|
||||
screen_info.available_rect = gfx::Rect(size_);
|
||||
return screen_info;
|
||||
}
|
||||
|
||||
gfx::Rect OffScreenRenderWidgetHostView::GetBoundsInRootWindow() {
|
||||
return gfx::Rect(size_);
|
||||
}
|
||||
@@ -562,8 +548,8 @@ OffScreenRenderWidgetHostView::CreateViewForWidget(
|
||||
|
||||
return new OffScreenRenderWidgetHostView(
|
||||
transparent_, offscreen_use_shared_texture_,
|
||||
offscreen_shared_texture_pixel_format_, true,
|
||||
embedder_host_view->frame_rate(), callback_, render_widget_host,
|
||||
offscreen_shared_texture_pixel_format_, offscreen_device_scale_factor_,
|
||||
true, embedder_host_view->frame_rate(), callback_, render_widget_host,
|
||||
embedder_host_view, size());
|
||||
}
|
||||
|
||||
@@ -971,35 +957,55 @@ void OffScreenRenderWidgetHostView::InvalidateBounds(const gfx::Rect& bounds) {
|
||||
CompositeFrame(bounds);
|
||||
}
|
||||
|
||||
display::ScreenInfos
|
||||
OffScreenRenderWidgetHostView::GetNewScreenInfosForUpdate() {
|
||||
display::ScreenInfo screen_info;
|
||||
screen_info.depth = 24;
|
||||
screen_info.depth_per_component = 8;
|
||||
screen_info.orientation_angle = 0;
|
||||
screen_info.orientation_type =
|
||||
display::mojom::ScreenOrientation::kLandscapePrimary;
|
||||
screen_info.rect = gfx::Rect(size_);
|
||||
screen_info.available_rect = gfx::Rect(size_);
|
||||
screen_info.device_scale_factor = offscreen_device_scale_factor_;
|
||||
|
||||
// When pixel format is 'rgbaf16', we need to set screen info to support HDR.
|
||||
if (offscreen_use_shared_texture_ &&
|
||||
offscreen_shared_texture_pixel_format_ == "rgbaf16") {
|
||||
gfx::DisplayColorSpaces hdr_display_color_spaces{
|
||||
gfx::ColorSpace::CreateSRGBLinear(), viz::SinglePlaneFormat::kRGBA_F16};
|
||||
// The max luminance value doesn't matter so we set to a large value.
|
||||
hdr_display_color_spaces.SetHDRMaxLuminanceRelative(100.0f);
|
||||
screen_info.display_color_spaces = hdr_display_color_spaces;
|
||||
}
|
||||
|
||||
display::ScreenInfos screen_infos{screen_info};
|
||||
return screen_infos;
|
||||
}
|
||||
|
||||
void OffScreenRenderWidgetHostView::ResizeRootLayer(bool force) {
|
||||
SetupFrameRate(false);
|
||||
|
||||
display::Display display =
|
||||
display::Screen::Get()->GetDisplayNearestView(GetNativeView());
|
||||
const float scaleFactor = display.device_scale_factor();
|
||||
float sf = GetDeviceScaleFactor();
|
||||
const bool sf_did_change = scaleFactor != sf;
|
||||
|
||||
// Initialize a screen_infos_ struct as needed, to cache the scale factor.
|
||||
if (screen_infos_.screen_infos.empty()) {
|
||||
UpdateScreenInfo();
|
||||
}
|
||||
screen_infos_.mutable_current().device_scale_factor = scaleFactor;
|
||||
auto old_screen_info = screen_infos_.current();
|
||||
UpdateScreenInfo();
|
||||
|
||||
auto new_screen_info = screen_infos_.current();
|
||||
gfx::Size size = GetViewBounds().size();
|
||||
|
||||
if (!force && !sf_did_change && size == root_layer()->bounds().size())
|
||||
if (!force && size == root_layer()->bounds().size() &&
|
||||
old_screen_info == new_screen_info)
|
||||
return;
|
||||
|
||||
root_layer()->SetBounds(gfx::Rect(size));
|
||||
|
||||
const gfx::Size& size_in_pixels =
|
||||
gfx::ToFlooredSize(gfx::ConvertSizeToPixels(size, sf));
|
||||
auto sf = GetDeviceScaleFactor();
|
||||
const gfx::Size& size_in_pixels = SizeInPixels();
|
||||
|
||||
if (compositor_) {
|
||||
compositor_allocator_.GenerateId();
|
||||
compositor_surface_id_ = compositor_allocator_.GetCurrentLocalSurfaceId();
|
||||
compositor_->SetScaleAndSize(sf, size_in_pixels, compositor_surface_id_);
|
||||
compositor_->SetDisplayColorSpaces(new_screen_info.display_color_spaces);
|
||||
}
|
||||
|
||||
delegated_frame_host_allocator_.GenerateId();
|
||||
|
||||
@@ -73,6 +73,7 @@ class OffScreenRenderWidgetHostView
|
||||
bool transparent,
|
||||
bool offscreen_use_shared_texture,
|
||||
const std::string& offscreen_shared_texture_pixel_format,
|
||||
float offscreen_device_scale_factor,
|
||||
bool painting,
|
||||
int frame_rate,
|
||||
const OnPaintCallback& callback,
|
||||
@@ -151,7 +152,6 @@ class OffScreenRenderWidgetHostView
|
||||
base::TimeDelta timeout,
|
||||
base::OnceCallback<void(const content::CopyFromSurfaceResult&)> callback)
|
||||
override;
|
||||
display::ScreenInfo GetScreenInfo() const override;
|
||||
void TransformPointToRootSurface(gfx::PointF* point) override {}
|
||||
gfx::Rect GetBoundsInRootWindow() override;
|
||||
std::optional<content::DisplayFeature> GetDisplayFeature() override;
|
||||
@@ -171,6 +171,7 @@ class OffScreenRenderWidgetHostView
|
||||
const std::optional<std::vector<gfx::Rect>>& character_bounds) override {}
|
||||
gfx::Size GetCompositorViewportPixelSize() override;
|
||||
ui::Compositor* GetCompositor() override;
|
||||
display::ScreenInfos GetNewScreenInfosForUpdate() override;
|
||||
|
||||
content::RenderWidgetHostViewBase* CreateViewForWidget(
|
||||
content::RenderWidgetHost*,
|
||||
@@ -293,6 +294,8 @@ class OffScreenRenderWidgetHostView
|
||||
const bool transparent_;
|
||||
const bool offscreen_use_shared_texture_;
|
||||
const std::string offscreen_shared_texture_pixel_format_;
|
||||
float offscreen_device_scale_factor_;
|
||||
|
||||
OnPaintCallback callback_;
|
||||
OnPopupPaintCallback parent_callback_;
|
||||
|
||||
|
||||
@@ -77,9 +77,10 @@ OffScreenVideoConsumer::~OffScreenVideoConsumer() = default;
|
||||
void OffScreenVideoConsumer::SetActive(bool active) {
|
||||
if (active) {
|
||||
video_capturer_->Start(
|
||||
this, view_->offscreen_use_shared_texture()
|
||||
? viz::mojom::BufferFormatPreference::kPreferGpuMemoryBuffer
|
||||
: viz::mojom::BufferFormatPreference::kDefault);
|
||||
this,
|
||||
view_->offscreen_use_shared_texture()
|
||||
? viz::mojom::BufferFormatPreference::kPreferMappableSharedImage
|
||||
: viz::mojom::BufferFormatPreference::kDefault);
|
||||
} else {
|
||||
video_capturer_->Stop();
|
||||
}
|
||||
|
||||
@@ -17,11 +17,13 @@ OffScreenWebContentsView::OffScreenWebContentsView(
|
||||
bool transparent,
|
||||
bool offscreen_use_shared_texture,
|
||||
const std::string& offscreen_shared_texture_pixel_format,
|
||||
float offscreen_device_scale_factor,
|
||||
const OnPaintCallback& callback)
|
||||
: transparent_(transparent),
|
||||
offscreen_use_shared_texture_(offscreen_use_shared_texture),
|
||||
offscreen_shared_texture_pixel_format_(
|
||||
offscreen_shared_texture_pixel_format),
|
||||
offscreen_device_scale_factor_(offscreen_device_scale_factor),
|
||||
callback_(callback) {
|
||||
#if BUILDFLAG(IS_MAC)
|
||||
PlatformCreate();
|
||||
@@ -116,8 +118,9 @@ OffScreenWebContentsView::CreateViewForWidget(
|
||||
|
||||
return new OffScreenRenderWidgetHostView(
|
||||
transparent_, offscreen_use_shared_texture_,
|
||||
offscreen_shared_texture_pixel_format_, painting_, GetFrameRate(),
|
||||
callback_, render_widget_host, nullptr, GetSize());
|
||||
offscreen_shared_texture_pixel_format_, offscreen_device_scale_factor_,
|
||||
painting_, GetFrameRate(), callback_, render_widget_host, nullptr,
|
||||
GetSize());
|
||||
}
|
||||
|
||||
content::RenderWidgetHostViewBase*
|
||||
@@ -137,9 +140,9 @@ OffScreenWebContentsView::CreateViewForChildWidget(
|
||||
|
||||
return new OffScreenRenderWidgetHostView(
|
||||
transparent_, offscreen_use_shared_texture_,
|
||||
offscreen_shared_texture_pixel_format_, painting_,
|
||||
embedder_host_view->frame_rate(), callback_, render_widget_host,
|
||||
embedder_host_view, GetSize());
|
||||
offscreen_shared_texture_pixel_format_, offscreen_device_scale_factor_,
|
||||
painting_, embedder_host_view->frame_rate(), callback_,
|
||||
render_widget_host, embedder_host_view, GetSize());
|
||||
}
|
||||
|
||||
void OffScreenWebContentsView::RenderViewReady() {
|
||||
|
||||
@@ -38,6 +38,7 @@ class OffScreenWebContentsView : public content::WebContentsView,
|
||||
bool transparent,
|
||||
bool offscreen_use_shared_texture,
|
||||
const std::string& offscreen_shared_texture_pixel_format,
|
||||
float offscreen_device_scale_factor,
|
||||
const OnPaintCallback& callback);
|
||||
~OffScreenWebContentsView() override;
|
||||
|
||||
@@ -113,6 +114,7 @@ class OffScreenWebContentsView : public content::WebContentsView,
|
||||
const bool transparent_;
|
||||
const bool offscreen_use_shared_texture_;
|
||||
const std::string offscreen_shared_texture_pixel_format_;
|
||||
const float offscreen_device_scale_factor_;
|
||||
bool painting_ = true;
|
||||
int frame_rate_ = 60;
|
||||
OnPaintCallback callback_;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user