mirror of
https://github.com/electron/electron.git
synced 2026-02-26 03:01:17 -05:00
Compare commits
28 Commits
v38.0.0-be
...
v38.1.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d60ae17998 | ||
|
|
f43348e75c | ||
|
|
5e51c882ee | ||
|
|
8cd29d24b1 | ||
|
|
35639ad801 | ||
|
|
2d397883a5 | ||
|
|
79433861fe | ||
|
|
a7335142a4 | ||
|
|
d5907878bc | ||
|
|
0098160f2a | ||
|
|
207f64fec8 | ||
|
|
441cff700b | ||
|
|
9eede35fc1 | ||
|
|
6812b13161 | ||
|
|
a64175ff1c | ||
|
|
b34e618285 | ||
|
|
818743493d | ||
|
|
9e631b62d8 | ||
|
|
f28d08ad86 | ||
|
|
0c2271a515 | ||
|
|
cc67728226 | ||
|
|
1a38293926 | ||
|
|
2cb262b280 | ||
|
|
20a563c27d | ||
|
|
aa022ce30e | ||
|
|
fead821311 | ||
|
|
37b5a62daa | ||
|
|
3e0378340e |
80
.github/actions/build-electron/action.yml
vendored
80
.github/actions/build-electron/action.yml
vendored
@@ -17,9 +17,6 @@ inputs:
|
||||
is-release:
|
||||
description: 'Is release build'
|
||||
required: true
|
||||
strip-binaries:
|
||||
description: 'Strip binaries (Linux only)'
|
||||
required: false
|
||||
generate-symbols:
|
||||
description: 'Generate symbols'
|
||||
required: true
|
||||
@@ -47,6 +44,14 @@ runs:
|
||||
- name: Add Clang problem matcher
|
||||
shell: bash
|
||||
run: echo "::add-matcher::src/electron/.github/problem-matchers/clang.json"
|
||||
- name: Setup Siso for fork pull requests
|
||||
if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
|
||||
shell: bash
|
||||
run: |
|
||||
# Use Local Execution, Remote Caching (LERC). Checks the remote cache for action
|
||||
# matches and uses existing results if a match is found. If not, execution of the
|
||||
# action is performed locally.
|
||||
echo "RBE_exec_strategy=local" >> $GITHUB_ENV
|
||||
- name: Build Electron ${{ inputs.step-suffix }}
|
||||
shell: bash
|
||||
run: |
|
||||
@@ -63,22 +68,14 @@ runs:
|
||||
sudo launchctl limit maxfiles 65536 200000
|
||||
fi
|
||||
|
||||
NINJA_SUMMARIZE_BUILD=1 e build -j $NUMBER_OF_NINJA_PROCESSES
|
||||
NINJA_SUMMARIZE_BUILD=1 e build
|
||||
cp out/Default/.ninja_log out/electron_ninja_log
|
||||
node electron/script/check-symlinks.js
|
||||
- name: Strip Electron Binaries ${{ inputs.step-suffix }}
|
||||
shell: bash
|
||||
if: ${{ inputs.strip-binaries == 'true' }}
|
||||
run: |
|
||||
cd src
|
||||
electron/script/copy-debug-symbols.py --target-cpu="${{ inputs.target-arch }}" --out-dir=out/Default/debug --compress
|
||||
electron/script/strip-binaries.py --target-cpu="${{ inputs.target-arch }}" --verbose
|
||||
electron/script/add-debug-link.py --target-cpu="${{ inputs.target-arch }}" --debug-dir=out/Default/debug
|
||||
- name: Build Electron dist.zip ${{ inputs.step-suffix }}
|
||||
shell: bash
|
||||
run: |
|
||||
cd src
|
||||
e build --target electron:electron_dist_zip -j $NUMBER_OF_NINJA_PROCESSES -d explain
|
||||
e build --target electron:electron_dist_zip
|
||||
if [ "${{ inputs.is-asan }}" != "true" ]; then
|
||||
target_os=${{ inputs.target-platform == 'macos' && 'mac' || inputs.target-platform }}
|
||||
if [ "${{ inputs.artifact-platform }}" = "mas" ]; then
|
||||
@@ -90,7 +87,7 @@ runs:
|
||||
shell: bash
|
||||
run: |
|
||||
cd src
|
||||
e build --target electron:electron_mksnapshot -j $NUMBER_OF_NINJA_PROCESSES
|
||||
e build --target electron:electron_mksnapshot
|
||||
ELECTRON_DEPOT_TOOLS_DISABLE_LOG=1 e d gn desc out/Default v8:run_mksnapshot_default args > out/Default/mksnapshot_args
|
||||
# Remove unused args from mksnapshot_args
|
||||
SEDOPTION="-i"
|
||||
@@ -100,20 +97,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 }}" = "linux" ]; then
|
||||
if [ "${{ inputs.target-arch }}" = "arm" ]; then
|
||||
electron/script/strip-binaries.py --file $PWD/out/Default/clang_x86_v8_arm/mksnapshot
|
||||
electron/script/strip-binaries.py --file $PWD/out/Default/clang_x86_v8_arm/v8_context_snapshot_generator
|
||||
elif [ "${{ inputs.target-arch }}" = "arm64" ]; then
|
||||
electron/script/strip-binaries.py --file $PWD/out/Default/clang_x64_v8_arm64/mksnapshot
|
||||
electron/script/strip-binaries.py --file $PWD/out/Default/clang_x64_v8_arm64/v8_context_snapshot_generator
|
||||
else
|
||||
electron/script/strip-binaries.py --file $PWD/out/Default/mksnapshot
|
||||
electron/script/strip-binaries.py --file $PWD/out/Default/v8_context_snapshot_generator
|
||||
fi
|
||||
fi
|
||||
|
||||
e build --target electron:electron_mksnapshot_zip -j $NUMBER_OF_NINJA_PROCESSES
|
||||
e build --target electron:electron_mksnapshot_zip
|
||||
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
||||
cd out/Default
|
||||
powershell Compress-Archive -update mksnapshot_args mksnapshot.zip
|
||||
@@ -147,7 +131,7 @@ runs:
|
||||
shell: bash
|
||||
run: |
|
||||
cd src
|
||||
e build --target electron:electron_chromedriver -j $NUMBER_OF_NINJA_PROCESSES
|
||||
e build --target electron:electron_chromedriver
|
||||
e build --target electron:electron_chromedriver_zip
|
||||
- name: Build Node.js headers ${{ inputs.step-suffix }}
|
||||
shell: bash
|
||||
@@ -190,24 +174,24 @@ runs:
|
||||
electron/script/zip-symbols.py -b $BUILD_PATH
|
||||
fi
|
||||
- name: Generate FFMpeg ${{ inputs.step-suffix }}
|
||||
if: ${{ inputs.is-release == 'true' }}
|
||||
shell: bash
|
||||
if: ${{ inputs.is-release == 'true' }}
|
||||
run: |
|
||||
cd src
|
||||
gn gen out/ffmpeg --args="import(\"//electron/build/args/ffmpeg.gn\") use_remoteexec=true $GN_EXTRA_ARGS"
|
||||
e build --target electron:electron_ffmpeg_zip -C ../../out/ffmpeg -j $NUMBER_OF_NINJA_PROCESSES
|
||||
gn gen out/ffmpeg --args="import(\"//electron/build/args/ffmpeg.gn\") use_remoteexec=true use_siso=true $GN_EXTRA_ARGS"
|
||||
e build --target electron:electron_ffmpeg_zip -C ../../out/ffmpeg
|
||||
- name: Generate Hunspell Dictionaries ${{ inputs.step-suffix }}
|
||||
shell: bash
|
||||
if: ${{ inputs.is-release == 'true' && inputs.target-platform == 'linux' }}
|
||||
run: |
|
||||
e build --target electron:hunspell_dictionaries_zip -j $NUMBER_OF_NINJA_PROCESSES
|
||||
e build --target electron:hunspell_dictionaries_zip
|
||||
- name: Generate Libcxx ${{ inputs.step-suffix }}
|
||||
shell: bash
|
||||
if: ${{ inputs.is-release == 'true' && inputs.target-platform == 'linux' }}
|
||||
run: |
|
||||
e build --target electron:libcxx_headers_zip -j $NUMBER_OF_NINJA_PROCESSES
|
||||
e build --target electron:libcxxabi_headers_zip -j $NUMBER_OF_NINJA_PROCESSES
|
||||
e build --target electron:libcxx_objects_zip -j $NUMBER_OF_NINJA_PROCESSES
|
||||
e build --target electron:libcxx_headers_zip
|
||||
e build --target electron:libcxxabi_headers_zip
|
||||
e build --target electron:libcxx_objects_zip
|
||||
- name: Remove Clang problem matcher
|
||||
shell: bash
|
||||
run: echo "::remove-matcher owner=clang::"
|
||||
@@ -230,7 +214,29 @@ runs:
|
||||
echo 'Uploading Electron release distribution to GitHub releases'
|
||||
script/release/uploaders/upload.py --verbose
|
||||
fi
|
||||
- name: Generate siso report
|
||||
if: ${{ inputs.target-platform != 'win' && !cancelled() }}
|
||||
shell: bash
|
||||
run: |
|
||||
cd src
|
||||
e d siso report -C out/Default > siso_report.txt
|
||||
SISO_REPORT_PATH=$(grep -o '/.*siso-report-[^ ]*' siso_report.txt)
|
||||
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
|
||||
run: |
|
||||
if [ "${{ inputs.is-asan }}" = "true" ]; then
|
||||
@@ -242,9 +248,11 @@ runs:
|
||||
# The current generated_artifacts_<< artifact.key >> name was taken from CircleCI
|
||||
# to ensure we don't break anything, but we may be able to improve that.
|
||||
- name: Move all Generated Artifacts to Upload Folder ${{ inputs.step-suffix }}
|
||||
if: always() && !cancelled()
|
||||
shell: bash
|
||||
run: ./src/electron/script/actions/move-artifacts.sh
|
||||
- name: Upload Generated Artifacts ${{ inputs.step-suffix }}
|
||||
if: always() && !cancelled()
|
||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808
|
||||
with:
|
||||
name: generated_artifacts_${{ env.ARTIFACT_KEY }}
|
||||
|
||||
17
.github/actions/cipd-install/action.yml
vendored
17
.github/actions/cipd-install/action.yml
vendored
@@ -14,6 +14,9 @@ inputs:
|
||||
description: 'Target platform, should be linux, win, macos'
|
||||
package:
|
||||
description: 'Package to install'
|
||||
dependency-version:
|
||||
description: 'Version of the dependency to install'
|
||||
default: ''
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
@@ -22,15 +25,23 @@ runs:
|
||||
run : |
|
||||
rm -rf ${{ inputs.cipd-root-prefix-path }}${{ inputs.installation-dir }}
|
||||
- name: Create ensure file for ${{ inputs.dependency }}
|
||||
if: ${{ inputs.dependency-version == '' }}
|
||||
shell: bash
|
||||
run: |
|
||||
echo '${{ inputs.package }}' `e d gclient getdep --deps-file=${{ inputs.deps-file }} -r '${{ inputs.installation-dir }}:${{ inputs.package }}'` > ${{ inputs.dependency }}_ensure_file
|
||||
cat ${{ inputs.dependency }}_ensure_file
|
||||
- name: CIPD installation of ${{ inputs.dependency }} (macOS)
|
||||
if: ${{ inputs.target-platform == 'macos' }}
|
||||
|
||||
- name: Create ensure file for ${{ inputs.dependency }} from dependency-version
|
||||
if: ${{ inputs.dependency-version != '' }}
|
||||
shell: bash
|
||||
run: |
|
||||
echo "ensuring ${{ inputs.dependency }} on macOS"
|
||||
echo '${{ inputs.package }} ${{ inputs.dependency-version }}' > ${{ inputs.dependency }}_ensure_file
|
||||
cat ${{ inputs.dependency }}_ensure_file
|
||||
- name: CIPD installation of ${{ inputs.dependency }} (macOS)
|
||||
if: ${{ inputs.target-platform != 'win' }}
|
||||
shell: bash
|
||||
run: |
|
||||
echo "ensuring ${{ inputs.dependency }}"
|
||||
e d cipd ensure --root ${{ inputs.cipd-root-prefix-path }}${{ inputs.installation-dir }} -ensure-file ${{ inputs.dependency }}_ensure_file
|
||||
- name: CIPD installation of ${{ inputs.dependency }} (Windows)
|
||||
if: ${{ inputs.target-platform == 'win' }}
|
||||
|
||||
16
.github/actions/fix-sync/action.yml
vendored
16
.github/actions/fix-sync/action.yml
vendored
@@ -20,6 +20,7 @@ runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Fix llvm toolchain
|
||||
if: ${{ inputs.target-platform != 'linux' }}
|
||||
shell: bash
|
||||
run : |
|
||||
rm -rf src/third_party/llvm-build
|
||||
@@ -27,6 +28,7 @@ runs:
|
||||
# Refs https://chromium-review.googlesource.com/c/chromium/src/+/6667681
|
||||
python3 src/tools/clang/scripts/update.py --package objdump
|
||||
- name: Fix esbuild
|
||||
if: ${{ inputs.target-platform != 'linux' }}
|
||||
uses: ./src/electron/.github/actions/cipd-install
|
||||
with:
|
||||
cipd-root-prefix-path: src/third_party/devtools-frontend/src/
|
||||
@@ -36,6 +38,7 @@ runs:
|
||||
target-platform: ${{ inputs.target-platform }}
|
||||
package: infra/3pp/tools/esbuild/${platform}
|
||||
- name: Fix rustc
|
||||
if: ${{ inputs.target-platform != 'linux' }}
|
||||
shell: bash
|
||||
run : |
|
||||
rm -rf src/third_party/rust-toolchain
|
||||
@@ -59,6 +62,7 @@ runs:
|
||||
target-platform: ${{ inputs.target-platform }}
|
||||
package: gn/gn/windows-amd64
|
||||
- name: Fix reclient
|
||||
if: ${{ inputs.target-platform != 'linux' }}
|
||||
uses: ./src/electron/.github/actions/cipd-install
|
||||
with:
|
||||
dependency: reclient
|
||||
@@ -67,6 +71,7 @@ runs:
|
||||
target-platform: ${{ inputs.target-platform }}
|
||||
package: infra/rbe/client/${platform}
|
||||
- name: Configure reclient configs
|
||||
if: ${{ inputs.target-platform != 'linux' }}
|
||||
shell: bash
|
||||
run : |
|
||||
python3 src/buildtools/reclient_cfgs/configure_reclient_cfgs.py --rbe_instance "projects/rbe-chrome-untrusted/instances/default_instance" --reproxy_cfg_template reproxy.cfg.template --rewrapper_cfg_project "" --skip_remoteexec_cfg_fetch
|
||||
@@ -84,6 +89,7 @@ runs:
|
||||
python3 src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --bucket chromium-browser-clang -s $DSYM_SHA_FILE -o src/tools/clang/dsymutil/bin/dsymutil
|
||||
fi
|
||||
- name: Fix ninja
|
||||
if: ${{ inputs.target-platform != 'linux' }}
|
||||
uses: ./src/electron/.github/actions/cipd-install
|
||||
with:
|
||||
dependency: ninja
|
||||
@@ -92,10 +98,20 @@ runs:
|
||||
target-platform: ${{ inputs.target-platform }}
|
||||
package: infra/3pp/tools/ninja/${platform}
|
||||
- name: Set ninja in path
|
||||
if: ${{ inputs.target-platform != 'linux' }}
|
||||
shell: bash
|
||||
run : |
|
||||
echo "$(pwd)/src/third_party/ninja" >> $GITHUB_PATH
|
||||
- name: Fix siso
|
||||
uses: ./src/electron/.github/actions/cipd-install
|
||||
with:
|
||||
dependency: siso
|
||||
deps-file: src/DEPS
|
||||
installation-dir: src/third_party/siso/cipd
|
||||
target-platform: ${{ inputs.target-platform }}
|
||||
package: infra/build/siso/${platform}
|
||||
- name: Fixup angle git
|
||||
if: ${{ inputs.target-platform != 'linux' }}
|
||||
shell: bash
|
||||
run : |
|
||||
cd src/third_party/angle
|
||||
|
||||
@@ -13,8 +13,9 @@ runs:
|
||||
git config --global core.fscache true
|
||||
git config --global core.longpaths true
|
||||
git config --global core.preloadindex true
|
||||
git config --global core.longpaths true
|
||||
fi
|
||||
export BUILD_TOOLS_SHA=274cba0474f0d1e4e6adbb66c1da48556cb0add5
|
||||
export BUILD_TOOLS_SHA=8559e5d325d61f195a255f41077ffc9e5b70b0e5
|
||||
npm i -g @electron/build-tools
|
||||
# Update depot_tools to ensure python
|
||||
e d update_depot_tools
|
||||
|
||||
@@ -97,7 +97,7 @@ runs:
|
||||
|
||||
$TEMP_DIR=New-Item -ItemType Directory -Path temp-cache
|
||||
$TEMP_DIR_PATH = $TEMP_DIR.FullName
|
||||
C:\ProgramData\Chocolatey\bin\7z.exe -y -snld x $src_cache -o"$TEMP_DIR_PATH"
|
||||
C:\ProgramData\Chocolatey\bin\7z.exe -y -snld20 x $src_cache -o"$TEMP_DIR_PATH"
|
||||
|
||||
- name: Move Src Cache (Windows)
|
||||
if: ${{ inputs.target-platform == 'win' }}
|
||||
|
||||
15
.github/workflows/build.yml
vendored
15
.github/workflows/build.yml
vendored
@@ -86,11 +86,11 @@ jobs:
|
||||
|
||||
# Docs Only Jobs
|
||||
docs-only:
|
||||
needs: setup
|
||||
needs: [setup, checkout-linux]
|
||||
if: ${{ needs.setup.outputs.docs-only == 'true' }}
|
||||
uses: ./.github/workflows/pipeline-electron-docs-only.yml
|
||||
with:
|
||||
container: '{"image":"ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}","options":"--user root"}'
|
||||
container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
||||
secrets: inherit
|
||||
|
||||
# Checkout Jobs
|
||||
@@ -124,7 +124,7 @@ jobs:
|
||||
|
||||
checkout-linux:
|
||||
needs: setup
|
||||
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-linux}}
|
||||
if: ${{ !inputs.skip-linux}}
|
||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
||||
container:
|
||||
image: ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}
|
||||
@@ -196,6 +196,7 @@ jobs:
|
||||
linux-gn-check:
|
||||
uses: ./.github/workflows/pipeline-segment-electron-gn-check.yml
|
||||
needs: checkout-linux
|
||||
if: ${{ needs.setup.outputs.src == 'true' }}
|
||||
with:
|
||||
target-platform: linux
|
||||
target-archs: x64 arm arm64
|
||||
@@ -261,6 +262,7 @@ jobs:
|
||||
pull-requests: read
|
||||
uses: ./.github/workflows/pipeline-electron-build-and-test-and-nan.yml
|
||||
needs: checkout-linux
|
||||
if: ${{ needs.setup.outputs.src == 'true' }}
|
||||
with:
|
||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
||||
test-runs-on: electron-arc-centralus-linux-amd64-4core
|
||||
@@ -281,6 +283,7 @@ jobs:
|
||||
pull-requests: read
|
||||
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
||||
needs: checkout-linux
|
||||
if: ${{ needs.setup.outputs.src == 'true' }}
|
||||
with:
|
||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
||||
test-runs-on: electron-arc-centralus-linux-amd64-4core
|
||||
@@ -302,6 +305,7 @@ jobs:
|
||||
pull-requests: read
|
||||
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
||||
needs: checkout-linux
|
||||
if: ${{ needs.setup.outputs.src == 'true' }}
|
||||
with:
|
||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
||||
test-runs-on: electron-arc-centralus-linux-arm64-4core
|
||||
@@ -322,9 +326,10 @@ jobs:
|
||||
pull-requests: read
|
||||
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
||||
needs: checkout-linux
|
||||
if: ${{ needs.setup.outputs.src == 'true' }}
|
||||
with:
|
||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
||||
test-runs-on: electron-arc-centralus-linux-arm64-4core
|
||||
test-runs-on: ubuntu-22.04-arm
|
||||
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
||||
test-container: '{"image":"ghcr.io/electron/test:arm64v8-${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init"}'
|
||||
target-platform: linux
|
||||
@@ -383,7 +388,7 @@ jobs:
|
||||
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
|
||||
with:
|
||||
build-runs-on: electron-arc-centralus-windows-amd64-16core
|
||||
test-runs-on: electron-hosted-windows-arm64-4core
|
||||
test-runs-on: windows-11-arm
|
||||
target-platform: win
|
||||
target-arch: arm64
|
||||
is-release: false
|
||||
|
||||
3
.github/workflows/linux-publish.yml
vendored
3
.github/workflows/linux-publish.yml
vendored
@@ -50,7 +50,6 @@ jobs:
|
||||
is-release: true
|
||||
gn-build-type: release
|
||||
generate-symbols: true
|
||||
strip-binaries: true
|
||||
upload-to-storage: ${{ inputs.upload-to-storage }}
|
||||
secrets: inherit
|
||||
|
||||
@@ -66,7 +65,6 @@ jobs:
|
||||
is-release: true
|
||||
gn-build-type: release
|
||||
generate-symbols: true
|
||||
strip-binaries: true
|
||||
upload-to-storage: ${{ inputs.upload-to-storage }}
|
||||
secrets: inherit
|
||||
|
||||
@@ -82,6 +80,5 @@ jobs:
|
||||
is-release: true
|
||||
gn-build-type: release
|
||||
generate-symbols: true
|
||||
strip-binaries: true
|
||||
upload-to-storage: ${{ inputs.upload-to-storage }}
|
||||
secrets: inherit
|
||||
|
||||
@@ -12,6 +12,9 @@ concurrency:
|
||||
group: electron-docs-only-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
GCLIENT_EXTRA_ARGS: --custom-var=checkout_arm=True --custom-var=checkout_arm64=True
|
||||
|
||||
jobs:
|
||||
docs-only:
|
||||
name: Docs Only Compile
|
||||
@@ -19,6 +22,22 @@ jobs:
|
||||
timeout-minutes: 20
|
||||
container: ${{ fromJSON(inputs.container) }}
|
||||
steps:
|
||||
- name: Checkout Electron
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||
with:
|
||||
path: src/electron
|
||||
fetch-depth: 0
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
- name: Generate DEPS Hash
|
||||
run: |
|
||||
node src/electron/script/generate-deps-hash.js
|
||||
DEPSHASH=v1-src-cache-$(cat src/electron/.depshash)
|
||||
echo "DEPSHASH=$DEPSHASH" >> $GITHUB_ENV
|
||||
echo "CACHE_PATH=$DEPSHASH.tar" >> $GITHUB_ENV
|
||||
- name: Restore src cache via AKS
|
||||
uses: ./src/electron/.github/actions/restore-cache-aks
|
||||
with:
|
||||
target-platform: linux
|
||||
- name: Checkout Electron
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||
with:
|
||||
|
||||
@@ -48,11 +48,6 @@ on:
|
||||
required: true
|
||||
type: string
|
||||
default: '0'
|
||||
strip-binaries:
|
||||
description: 'Strip the binaries before release (Linux only)'
|
||||
required: false
|
||||
type: boolean
|
||||
default: false
|
||||
is-asan:
|
||||
description: 'Building the Address Sanitizer (ASan) Linux build'
|
||||
required: false
|
||||
@@ -176,7 +171,7 @@ jobs:
|
||||
ELECTRON_DEPOT_TOOLS_DISABLE_LOG: true
|
||||
- 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 }}
|
||||
e init -f --root=$(pwd) --out=Default ${{ inputs.gn-build-type }} --import ${{ inputs.gn-build-type }} --target-cpu ${{ inputs.target-arch }} --remote-build siso
|
||||
- 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}]"
|
||||
@@ -186,9 +181,6 @@ jobs:
|
||||
echo "DEPSHASH=$(cat src/electron/.depshash)" >> $GITHUB_ENV
|
||||
- name: Add CHROMIUM_BUILDTOOLS_PATH to env
|
||||
run: echo "CHROMIUM_BUILDTOOLS_PATH=$(pwd)/src/buildtools" >> $GITHUB_ENV
|
||||
- name: Setup Number of Ninja Processes
|
||||
run: |
|
||||
echo "NUMBER_OF_NINJA_PROCESSES=${{ inputs.target-platform != 'macos' && '300' || '200' }}" >> $GITHUB_ENV
|
||||
- name: Free up space (macOS)
|
||||
if: ${{ inputs.target-platform == 'macos' }}
|
||||
uses: ./src/electron/.github/actions/free-space-macos
|
||||
@@ -201,7 +193,6 @@ jobs:
|
||||
artifact-platform: ${{ inputs.target-platform == 'macos' && 'darwin' || inputs.target-platform }}
|
||||
is-release: '${{ inputs.is-release }}'
|
||||
generate-symbols: '${{ inputs.generate-symbols }}'
|
||||
strip-binaries: '${{ inputs.strip-binaries }}'
|
||||
upload-to-storage: '${{ inputs.upload-to-storage }}'
|
||||
is-asan: '${{ inputs.is-asan }}'
|
||||
- name: Set GN_EXTRA_ARGS for MAS Build
|
||||
|
||||
@@ -68,21 +68,6 @@ jobs:
|
||||
if: ${{ inputs.target-arch == 'arm' && inputs.target-platform == 'linux' }}
|
||||
run: |
|
||||
cp $(which node) /mnt/runner-externals/node20/bin/
|
||||
- name: Install Git on Windows arm64 runners
|
||||
if: ${{ inputs.target-arch == 'arm64' && inputs.target-platform == 'win' }}
|
||||
shell: powershell
|
||||
run: |
|
||||
Set-ExecutionPolicy Bypass -Scope Process -Force
|
||||
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
|
||||
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
|
||||
choco install -y --no-progress git.install --params "'/GitAndUnixToolsOnPath'"
|
||||
choco install -y --no-progress git
|
||||
choco install -y --no-progress python --version 3.11.9
|
||||
choco install -y --no-progress visualstudio2022-workload-vctools --package-parameters "--add Microsoft.VisualStudio.Component.VC.Tools.ARM64"
|
||||
echo "C:\Program Files\Git\cmd" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||
echo "C:\Program Files\Git\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||
echo "C:\Python311" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||
cp "C:\Python311\python.exe" "C:\Python311\python3.exe"
|
||||
- name: Setup Node.js/npm
|
||||
if: ${{ inputs.target-platform == 'win' }}
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
|
||||
@@ -154,6 +139,7 @@ jobs:
|
||||
git config --global core.fscache true
|
||||
git config --global core.longpaths true
|
||||
git config --global core.preloadindex true
|
||||
git config --global core.longpaths true
|
||||
git clone --filter=tree:0 https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||||
# Ensure depot_tools does not update.
|
||||
test -d depot_tools && cd depot_tools
|
||||
|
||||
99
BUILD.gn
99
BUILD.gn
@@ -44,6 +44,7 @@ if (is_mac) {
|
||||
|
||||
if (is_linux) {
|
||||
import("//build/config/linux/pkg_config.gni")
|
||||
import("//electron/build/linux/strip_binary.gni")
|
||||
import("//tools/generate_stubs/rules.gni")
|
||||
|
||||
pkg_config("gio_unix") {
|
||||
@@ -686,6 +687,7 @@ source_set("electron_lib") {
|
||||
deps += [
|
||||
"//components/app_launch_prefetch",
|
||||
"//components/crash/core/app:crash_export_thunks",
|
||||
"//third_party/libxml:xml_writer",
|
||||
"//ui/native_theme:native_theme_browser",
|
||||
"//ui/wm",
|
||||
"//ui/wm/public",
|
||||
@@ -1421,6 +1423,18 @@ dist_zip("electron_dist_zip") {
|
||||
":licenses",
|
||||
]
|
||||
if (is_linux) {
|
||||
if (is_official_build) {
|
||||
data_deps += [
|
||||
":strip_chrome_crashpad_handler",
|
||||
":strip_chrome_sandbox",
|
||||
":strip_electron_binary",
|
||||
":strip_libEGL_shlib",
|
||||
":strip_libGLESv2_shlib",
|
||||
":strip_libffmpeg_shlib",
|
||||
":strip_libvk_swiftshader_shlib",
|
||||
]
|
||||
}
|
||||
|
||||
data_deps += [ "//sandbox/linux:chrome_sandbox" ]
|
||||
}
|
||||
deps = data_deps
|
||||
@@ -1466,6 +1480,16 @@ group("electron_mksnapshot") {
|
||||
|
||||
dist_zip("electron_mksnapshot_zip") {
|
||||
data_deps = mksnapshot_deps
|
||||
if (is_linux && is_official_build) {
|
||||
data_deps += [
|
||||
":strip_libEGL_shlib",
|
||||
":strip_libGLESv2_shlib",
|
||||
":strip_libffmpeg_shlib",
|
||||
":strip_libvk_swiftshader_shlib",
|
||||
":strip_mksnapshot_binary",
|
||||
":strip_v8_context_snapshot_generator_binary",
|
||||
]
|
||||
}
|
||||
deps = data_deps
|
||||
outputs = [ "$root_build_dir/mksnapshot.zip" ]
|
||||
}
|
||||
@@ -1590,3 +1614,78 @@ group("copy_node_headers") {
|
||||
group("node_headers") {
|
||||
public_deps = [ ":tar_node_headers" ]
|
||||
}
|
||||
|
||||
if (is_linux && is_official_build) {
|
||||
strip_binary("strip_electron_binary") {
|
||||
binary_input = "$root_out_dir/$electron_project_name"
|
||||
symbol_output = "$root_out_dir/debug/$electron_project_name.debug"
|
||||
compress_debug_sections = true
|
||||
deps = [ ":electron_app" ]
|
||||
}
|
||||
|
||||
strip_binary("strip_chrome_crashpad_handler") {
|
||||
binary_input = "$root_out_dir/chrome_crashpad_handler"
|
||||
symbol_output = "$root_out_dir/debug/chrome_crashpad_handler.debug"
|
||||
compress_debug_sections = true
|
||||
deps = [ "//components/crash/core/app:chrome_crashpad_handler" ]
|
||||
}
|
||||
|
||||
strip_binary("strip_chrome_sandbox") {
|
||||
binary_input = "$root_out_dir/chrome_sandbox"
|
||||
symbol_output = "$root_out_dir/debug/chrome-sandbox.debug"
|
||||
compress_debug_sections = true
|
||||
deps = [ "//sandbox/linux:chrome_sandbox" ]
|
||||
}
|
||||
|
||||
strip_binary("strip_libEGL_shlib") {
|
||||
binary_input = "$root_out_dir/libEGL.so"
|
||||
symbol_output = "$root_out_dir/debug/libEGL.so.debug"
|
||||
compress_debug_sections = true
|
||||
deps = [ "//third_party/angle:libEGL" ]
|
||||
}
|
||||
|
||||
strip_binary("strip_libGLESv2_shlib") {
|
||||
binary_input = "$root_out_dir/libGLESv2.so"
|
||||
symbol_output = "$root_out_dir/debug/libGLESv2.so.debug"
|
||||
compress_debug_sections = true
|
||||
deps = [ "//third_party/angle:libGLESv2" ]
|
||||
}
|
||||
|
||||
strip_binary("strip_libffmpeg_shlib") {
|
||||
binary_input = "$root_out_dir/libffmpeg.so"
|
||||
symbol_output = "$root_out_dir/debug/libffmpeg.so.debug"
|
||||
compress_debug_sections = true
|
||||
deps = [ "//third_party/ffmpeg" ]
|
||||
}
|
||||
|
||||
strip_binary("strip_libvk_swiftshader_shlib") {
|
||||
binary_input = "$root_out_dir/libvk_swiftshader.so"
|
||||
symbol_output = "$root_out_dir/debug/libvk_swiftshader.so.debug"
|
||||
compress_debug_sections = true
|
||||
deps = [ "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan" ]
|
||||
}
|
||||
|
||||
strip_binary("strip_mksnapshot_binary") {
|
||||
_binary_path = rebase_path(
|
||||
get_label_info(
|
||||
":v8_context_snapshot_generator($v8_snapshot_toolchain)",
|
||||
"root_out_dir") + "/mksnapshot",
|
||||
root_build_dir)
|
||||
binary_input = "$root_out_dir/$_binary_path"
|
||||
symbol_output = "$root_out_dir/debug/${_binary_path}.debug"
|
||||
compress_debug_sections = true
|
||||
deps = mksnapshot_deps
|
||||
}
|
||||
|
||||
strip_binary("strip_v8_context_snapshot_generator_binary") {
|
||||
_binary_path = rebase_path(
|
||||
get_label_info(
|
||||
":v8_context_snapshot_generator($v8_snapshot_toolchain)",
|
||||
"root_out_dir") + "/v8_context_snapshot_generator",
|
||||
root_build_dir)
|
||||
binary_input = "$root_out_dir/$_binary_path"
|
||||
symbol_output = "$root_out_dir/debug/${_binary_path}.debug"
|
||||
compress_debug_sections = true
|
||||
deps = mksnapshot_deps
|
||||
}
|
||||
}
|
||||
|
||||
4
DEPS
4
DEPS
@@ -2,9 +2,9 @@ gclient_gn_args_from = 'src'
|
||||
|
||||
vars = {
|
||||
'chromium_version':
|
||||
'140.0.7339.2',
|
||||
'140.0.7339.133',
|
||||
'node_version':
|
||||
'v22.18.0',
|
||||
'v22.19.0',
|
||||
'nan_version':
|
||||
'e14bdcd1f72d62bca1d541b66da43130384ec213',
|
||||
'squirrel.mac_version':
|
||||
|
||||
@@ -70,6 +70,5 @@ v8_expose_public_symbols = true
|
||||
# sensitive content by enterprise users.
|
||||
enterprise_cloud_content_analysis = false
|
||||
|
||||
# Disable siso until we are ready to use it.
|
||||
# https://chromium-review.googlesource.com/c/chromium/src/+/6638830
|
||||
use_siso = false
|
||||
# We don't use anything from here, and it causes target collisions
|
||||
enable_linux_installer = false
|
||||
|
||||
70
build/linux/strip_binary.gni
Normal file
70
build/linux/strip_binary.gni
Normal file
@@ -0,0 +1,70 @@
|
||||
# Copyright 2021 The Chromium Authors
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
# This has been adapted from https://source.chromium.org/chromium/chromium/src/+/main:build/linux/strip_binary.gni;drc=c220a41e0422d45f1657c28146d32e99cc53640b
|
||||
# The notable difference is it has an option to compress the debug sections
|
||||
|
||||
import("//build/config/clang/clang.gni")
|
||||
import("//build/toolchain/toolchain.gni")
|
||||
|
||||
# Extracts symbols from a binary into a symbol file.
|
||||
#
|
||||
# Args:
|
||||
# binary_input: Path to the binary containing symbols to extract, e.g.:
|
||||
# "$root_out_dir/chrome"
|
||||
# symbol_output: Desired output file for symbols, e.g.:
|
||||
# "$root_out_dir/chrome.debug"
|
||||
# stripped_binary_output: Desired output file for stripped file, e.g.:
|
||||
# "$root_out_dir/chrome.stripped"
|
||||
# compress_debug_sections: If true, compress the extracted debug sections
|
||||
template("strip_binary") {
|
||||
forward_variables_from(invoker,
|
||||
[
|
||||
"deps",
|
||||
"testonly",
|
||||
])
|
||||
action("${target_name}") {
|
||||
llvm_strip_binary = "${clang_base_path}/bin/llvm-strip"
|
||||
llvm_objcopy_binary = "${clang_base_path}/bin/llvm-objcopy"
|
||||
script = "//electron/build/linux/strip_binary.py"
|
||||
|
||||
if (defined(invoker.stripped_binary_output)) {
|
||||
stripped_binary_output = invoker.stripped_binary_output
|
||||
} else {
|
||||
stripped_binary_output = invoker.binary_input + ".stripped"
|
||||
}
|
||||
if (defined(invoker.symbol_output)) {
|
||||
symbol_output = invoker.symbol_output
|
||||
} else {
|
||||
symbol_output = invoker.binary_input + ".debug"
|
||||
}
|
||||
|
||||
inputs = [
|
||||
invoker.binary_input,
|
||||
llvm_strip_binary,
|
||||
llvm_objcopy_binary,
|
||||
]
|
||||
outputs = [
|
||||
symbol_output,
|
||||
stripped_binary_output,
|
||||
]
|
||||
args = [
|
||||
"--llvm-strip-binary-path",
|
||||
rebase_path(llvm_strip_binary, root_build_dir),
|
||||
"--llvm-objcopy-binary-path",
|
||||
rebase_path(llvm_objcopy_binary, root_build_dir),
|
||||
"--symbol-output",
|
||||
rebase_path(symbol_output, root_build_dir),
|
||||
"--stripped-binary-output",
|
||||
rebase_path(stripped_binary_output, root_build_dir),
|
||||
"--binary-input",
|
||||
rebase_path(invoker.binary_input, root_build_dir),
|
||||
]
|
||||
|
||||
if (defined(invoker.compress_debug_sections) &&
|
||||
invoker.compress_debug_sections) {
|
||||
args += [ "--compress-debug-sections" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
63
build/linux/strip_binary.py
Normal file
63
build/linux/strip_binary.py
Normal file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Copyright 2021 The Chromium Authors
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
# This has been adapted from https://source.chromium.org/chromium/chromium/src/+/main:build/linux/strip_binary.py;drc=c220a41e0422d45f1657c28146d32e99cc53640b
|
||||
# The notable difference is it has an option to compress the debug sections
|
||||
|
||||
import argparse
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description="Strip binary using LLVM tools.")
|
||||
parser.add_argument("--llvm-strip-binary-path",
|
||||
help="Path to llvm-strip executable.")
|
||||
parser.add_argument("--llvm-objcopy-binary-path",
|
||||
required=True,
|
||||
help="Path to llvm-objcopy executable.")
|
||||
parser.add_argument("--binary-input", help="Input ELF binary.")
|
||||
parser.add_argument("--symbol-output",
|
||||
help="File to write extracted debug info (.debug).")
|
||||
parser.add_argument("--compress-debug-sections",
|
||||
action="store_true",
|
||||
help="Compress extracted debug info.")
|
||||
parser.add_argument("--stripped-binary-output",
|
||||
help="File to write stripped binary.")
|
||||
args = parser.parse_args()
|
||||
|
||||
# Replicate the behavior of:
|
||||
# eu-strip <binary_input> -o <stripped_binary_output> -f <symbol_output>
|
||||
|
||||
objcopy_args = [
|
||||
"--only-keep-debug",
|
||||
args.binary_input,
|
||||
args.symbol_output,
|
||||
]
|
||||
|
||||
if args.compress_debug_sections:
|
||||
objcopy_args.insert(0, "--compress-debug-sections")
|
||||
|
||||
subprocess.check_output([args.llvm_objcopy_binary_path] + objcopy_args)
|
||||
subprocess.check_output([
|
||||
args.llvm_strip_binary_path,
|
||||
"--strip-debug",
|
||||
"--strip-unneeded",
|
||||
"-o",
|
||||
args.stripped_binary_output,
|
||||
args.binary_input,
|
||||
])
|
||||
subprocess.check_output([
|
||||
args.llvm_objcopy_binary_path,
|
||||
f"--add-gnu-debuglink={args.symbol_output}",
|
||||
args.stripped_binary_output,
|
||||
])
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -3,7 +3,7 @@
|
||||
load("@builtin//struct.star", "module")
|
||||
|
||||
def __platform_properties(ctx):
|
||||
container_image = "docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:ef35d347f4a4a2d32b76fd908e66e96f59bf8ba7379fd5626548244c45343b2b"
|
||||
container_image = "docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:d7cb1ab14a0f20aa669c23f22c15a9dead761dcac19f43985bf9dd5f41fbef3a"
|
||||
return {
|
||||
"default": {
|
||||
"OSFamily": "Linux",
|
||||
|
||||
66
build/siso/main.star
Normal file
66
build/siso/main.star
Normal file
@@ -0,0 +1,66 @@
|
||||
load("@builtin//encoding.star", "json")
|
||||
load("@builtin//path.star", "path")
|
||||
load("@builtin//runtime.star", "runtime")
|
||||
load("@builtin//struct.star", "module")
|
||||
load("@config//main.star", upstream_init = "init")
|
||||
load("@config//win_sdk.star", "win_sdk")
|
||||
load("@config//gn_logs.star", "gn_logs")
|
||||
|
||||
def init(ctx):
|
||||
mod = upstream_init(ctx)
|
||||
step_config = json.decode(mod.step_config)
|
||||
|
||||
# Buildbarn doesn't support input_root_absolute_path so disable that
|
||||
for rule in step_config["rules"]:
|
||||
input_root_absolute_path = rule.get("input_root_absolute_path", False)
|
||||
if input_root_absolute_path:
|
||||
rule.pop("input_root_absolute_path", None)
|
||||
|
||||
# Only wrap clang rules with a remote wrapper if not on Linux. These are currently only
|
||||
# needed for X-Compile builds, which run on Windows and Mac.
|
||||
if runtime.os != "linux":
|
||||
for rule in step_config["rules"]:
|
||||
if rule["name"].startswith("clang/") or rule["name"].startswith("clang-cl/"):
|
||||
rule["remote_wrapper"] = "../../buildtools/reclient_cfgs/chromium-browser-clang/clang_remote_wrapper"
|
||||
if "inputs" not in rule:
|
||||
rule["inputs"] = []
|
||||
rule["inputs"].append("buildtools/reclient_cfgs/chromium-browser-clang/clang_remote_wrapper")
|
||||
rule["inputs"].append("third_party/llvm-build/Release+Asserts_linux/bin/clang")
|
||||
|
||||
if "executables" not in step_config:
|
||||
step_config["executables"] = []
|
||||
step_config["executables"].append("buildtools/reclient_cfgs/chromium-browser-clang/clang_remote_wrapper")
|
||||
step_config["executables"].append("third_party/llvm-build/Release+Asserts_linux/bin/clang")
|
||||
|
||||
if runtime.os == "darwin":
|
||||
# Update platforms to match our default siso config instead of reclient configs.
|
||||
step_config["platforms"].update({
|
||||
"clang": step_config["platforms"]["default"],
|
||||
"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"),
|
||||
])
|
||||
|
||||
# Update platforms to match our default siso config instead of reclient configs.
|
||||
step_config["platforms"].update({
|
||||
"clang-cl": step_config["platforms"]["default"],
|
||||
"clang-cl_large": step_config["platforms"]["default"],
|
||||
"lld-link": step_config["platforms"]["default"],
|
||||
})
|
||||
|
||||
return module(
|
||||
"config",
|
||||
step_config = json.encode(step_config),
|
||||
filegroups = mod.filegroups,
|
||||
handlers = mod.handlers,
|
||||
)
|
||||
12
build/zip.py
12
build/zip.py
@@ -41,6 +41,8 @@ PATHS_TO_SKIP = [
|
||||
'resources/inspector',
|
||||
'gen/third_party/devtools-frontend/src',
|
||||
'gen/ui/webui',
|
||||
# Skip because these get zipped separately in script/zip-symbols.py
|
||||
'debug',
|
||||
]
|
||||
|
||||
def skip_path(dep, dist_zip, target_cpu):
|
||||
@@ -80,6 +82,11 @@ def main(argv):
|
||||
dep = dep.strip()
|
||||
if not skip_path(dep, dist_zip, target_cpu):
|
||||
dist_files.add(dep)
|
||||
# On Linux, filter out any files which have a .stripped companion
|
||||
if sys.platform == 'linux':
|
||||
dist_files = {
|
||||
dep for dep in dist_files if f"{dep.removeprefix('./')}.stripped" not in dist_files
|
||||
}
|
||||
if sys.platform == 'darwin' and not should_flatten:
|
||||
execute(['zip', '-r', '-y', dist_zip] + list(dist_files))
|
||||
else:
|
||||
@@ -96,10 +103,13 @@ def main(argv):
|
||||
dirname = os.path.dirname(dep)
|
||||
arcname = (
|
||||
os.path.join(dirname, 'chrome-sandbox')
|
||||
if basename == 'chrome_sandbox'
|
||||
if basename.removesuffix('.stripped') == 'chrome_sandbox'
|
||||
else dep
|
||||
)
|
||||
name_to_write = arcname
|
||||
# On Linux, strip the .stripped suffix from the name before zipping
|
||||
if sys.platform == 'linux':
|
||||
name_to_write = name_to_write.removesuffix('.stripped')
|
||||
if should_flatten:
|
||||
if flatten_relative_to:
|
||||
if name_to_write.startswith(flatten_relative_to):
|
||||
|
||||
@@ -125,16 +125,6 @@ Options:
|
||||
* `kioclient5`
|
||||
* `kioclient`
|
||||
|
||||
### `ELECTRON_OZONE_PLATFORM_HINT` _Linux_ _Deprecated_
|
||||
|
||||
Selects the preferred platform backend used on Linux. `auto` selects Wayland if possible, X11 otherwise.
|
||||
|
||||
Options:
|
||||
|
||||
* `auto` (Default)
|
||||
* `wayland`
|
||||
* `x11`
|
||||
|
||||
## Development Variables
|
||||
|
||||
The following environment variables are intended primarily for development and
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# MenuItem
|
||||
|
||||
## Class: MenuItem
|
||||
|
||||
> Add items to native application menus and context menus.
|
||||
|
||||
@@ -211,6 +211,10 @@ Returns `Object`:
|
||||
system.
|
||||
* `free` Integer - The total amount of memory not being used by applications or disk
|
||||
cache.
|
||||
* `fileBacked` Integer _macOS_ - The amount of memory that currently has been paged out to storage.
|
||||
Includes memory for file caches, network buffers, and other system services.
|
||||
* `purgeable` Integer _macOS_ - The amount of memory that is marked as "purgeable". The system can reclaim it
|
||||
if memory pressure increases.
|
||||
* `swapTotal` Integer _Windows_ _Linux_ - The total amount of swap memory in Kilobytes available to the
|
||||
system.
|
||||
* `swapFree` Integer _Windows_ _Linux_ - The free amount of swap memory in Kilobytes available to the
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
# ServiceWorkerMain
|
||||
## Class: ServiceWorkerMain
|
||||
|
||||
> An instance of a Service Worker representing a version of a script for a given scope.
|
||||
|
||||
Process: [Main](../glossary.md#main-process)
|
||||
|
||||
## Class: ServiceWorkerMain
|
||||
|
||||
Process: [Main](../glossary.md#main-process)<br />
|
||||
_This class is not exported from the `'electron'` module. It is only available as a return value of other methods in the Electron API._
|
||||
|
||||
|
||||
@@ -79,7 +79,15 @@ app.whenReady().then(() => {
|
||||
### `new Tray(image, [guid])`
|
||||
|
||||
* `image` ([NativeImage](native-image.md) | string)
|
||||
* `guid` string (optional) _Windows_ - Assigns a GUID to the tray icon. If the executable is signed and the signature contains an organization in the subject line then the GUID is permanently associated with that signature. OS level settings like the position of the tray icon in the system tray will persist even if the path to the executable changes. If the executable is not code-signed then the GUID is permanently associated with the path to the executable. Changing the path to the executable will break the creation of the tray icon and a new GUID must be used. However, it is highly recommended to use the GUID parameter only in conjunction with code-signed executable. If an App defines multiple tray icons then each icon must use a separate GUID.
|
||||
* `guid` string (optional) _Windows_ _macOS_ - A unique string used to identify the tray icon. Must adhere to [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) format.
|
||||
|
||||
**Windows**
|
||||
|
||||
On Windows, if the executable is signed and the signature contains an organization in the subject line then the GUID is permanently associated with that signature. OS level settings like the position of the tray icon in the system tray will persist even if the path to the executable changes. If the executable is not code-signed then the GUID is permanently associated with the path to the executable. Changing the path to the executable will break the creation of the tray icon and a new GUID must be used. However, it is highly recommended to use the GUID parameter only in conjunction with code-signed executable. If an App defines multiple tray icons then each icon must use a separate GUID.
|
||||
|
||||
**MacOS**
|
||||
|
||||
On macOS, the `guid` is a string used to uniquely identify the tray icon and allow it to retain its position between relaunches. Using the same string for a new tray item will create it in the same position as the previous tray item to use the string.
|
||||
|
||||
Creates a new tray icon associated with the `image`.
|
||||
|
||||
@@ -327,6 +335,10 @@ Returns [`Rectangle`](structures/rectangle.md)
|
||||
|
||||
The `bounds` of this tray icon as `Object`.
|
||||
|
||||
#### `tray.getGUID()` _macOS_ _Windows_
|
||||
|
||||
Returns `string | null` - The GUID used to uniquely identify the tray icon and allow it to retain its position between relaunches, or null if none is set.
|
||||
|
||||
#### `tray.isDestroyed()`
|
||||
|
||||
Returns `boolean` - Whether the tray icon is destroyed.
|
||||
|
||||
@@ -14,14 +14,12 @@ This document uses the following convention to categorize breaking changes:
|
||||
|
||||
## Planned Breaking API Changes (38.0)
|
||||
|
||||
### Deprecated: `ELECTRON_OZONE_PLATFORM_HINT` environment variable
|
||||
### Removed: `ELECTRON_OZONE_PLATFORM_HINT` environment variable
|
||||
|
||||
The default value of the `--ozone-plaftform` flag [changed to `auto`](https://chromium-review.googlesource.com/c/chromium/src/+/6775426).
|
||||
|
||||
You should use the `XDG_SESSION_TYPE=wayland` environment variable instead to use Wayland.
|
||||
|
||||
This environment variable will be [removed soon](https://chromium-review.googlesource.com/c/chromium/src/+/6819616).
|
||||
|
||||
### Removed: macOS 11 support
|
||||
|
||||
macOS 11 (Big Sur) is no longer supported by [Chromium](https://chromium-review.googlesource.com/c/chromium/src/+/6594615).
|
||||
|
||||
@@ -191,12 +191,6 @@ $ ./out/Testing/electron
|
||||
|
||||
### Packaging
|
||||
|
||||
On linux, first strip the debugging and symbol information:
|
||||
|
||||
```sh
|
||||
$ electron/script/strip-binaries.py -d out/Release
|
||||
```
|
||||
|
||||
To package the electron build as a distributable zip file:
|
||||
|
||||
```sh
|
||||
|
||||
@@ -9,10 +9,11 @@ check out our [Electron Versioning](./electron-versioning.md) doc.
|
||||
|
||||
| Electron | Alpha | Beta | Stable | EOL | Chrome | Node | Supported |
|
||||
| ------- | ----- | ------- | ------ | ------ | ---- | ---- | ---- |
|
||||
| 38.0.0 | 2025-Jun-26 | 2025-Aug-06 | 2025-Sep-02 | 2026-Mar-10 | M140 | TBD | ✅ |
|
||||
| 39.0.0 | 2025-Sep-04 | 2025-Oct-01 | 2025-Oct-28 | 2026-May-05 | M142 | TBD | ✅ |
|
||||
| 38.0.0 | 2025-Jun-26 | 2025-Aug-06 | 2025-Sep-02 | 2026-Mar-10 | M140 | v22.18 | ✅ |
|
||||
| 37.0.0 | 2025-May-01 | 2025-May-28 | 2025-Jun-24 | 2026-Jan-13 | M138 | v22.16 | ✅ |
|
||||
| 36.0.0 | 2025-Mar-06 | 2025-Apr-02 | 2025-Apr-29 | 2025-Oct-28 | M136 | v22.14 | ✅ |
|
||||
| 35.0.0 | 2025-Jan-16 | 2025-Feb-05 | 2025-Mar-04 | 2025-Sep-02 | M134 | v22.14 | ✅ |
|
||||
| 35.0.0 | 2025-Jan-16 | 2025-Feb-05 | 2025-Mar-04 | 2025-Sep-02 | M134 | v22.14 | 🚫 |
|
||||
| 34.0.0 | 2024-Oct-17 | 2024-Nov-13 | 2025-Jan-14 | 2025-Jun-24 | M132 | v20.18 | 🚫 |
|
||||
| 33.0.0 | 2024-Aug-22 | 2024-Sep-18 | 2024-Oct-15 | 2025-Apr-29 | M130 | v20.18 | 🚫 |
|
||||
| 32.0.0 | 2024-Jun-14 | 2024-Jul-24 | 2024-Aug-20 | 2025-Mar-04 | M128 | v20.16 | 🚫 |
|
||||
|
||||
@@ -23,7 +23,6 @@ filenames = {
|
||||
|
||||
lib_sources_linux = [
|
||||
"shell/browser/browser_linux.cc",
|
||||
"shell/browser/electron_browser_main_parts_linux.cc",
|
||||
"shell/browser/lib/power_observer_linux.cc",
|
||||
"shell/browser/lib/power_observer_linux.h",
|
||||
"shell/browser/linux/unity_service.cc",
|
||||
|
||||
@@ -199,7 +199,14 @@ BrowserWindow.prototype.setBackgroundThrottling = function (allowed: boolean) {
|
||||
};
|
||||
|
||||
BrowserWindow.prototype.addBrowserView = function (browserView: BrowserView) {
|
||||
if (browserView.ownerWindow) { browserView.ownerWindow.removeBrowserView(browserView); }
|
||||
if (this._browserViews.includes(browserView)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const ownerWindow = browserView.ownerWindow;
|
||||
if (ownerWindow && ownerWindow !== this) {
|
||||
ownerWindow.removeBrowserView(browserView);
|
||||
}
|
||||
this.contentView.addChildView(browserView.webContentsView);
|
||||
browserView.ownerWindow = this;
|
||||
browserView.webContents._setOwnerWindow(this);
|
||||
|
||||
@@ -132,9 +132,8 @@ chore_grandfather_in_electron_views_and_delegates.patch
|
||||
refactor_patch_electron_permissiontypes_into_blink.patch
|
||||
revert_views_remove_desktopwindowtreehostwin_window_enlargement.patch
|
||||
build_partial_revert_mac_fullscreen_top_chrome_mouse_events.patch
|
||||
revert_update_siso-chromium_image.patch
|
||||
build_set_mac_sdk_minimum_to_10.patch
|
||||
fix_add_macos_memory_query_fallback_to_avoid_crash.patch
|
||||
fix_resolve_dynamic_background_material_update_issue_on_windows_11.patch
|
||||
chore_restore_some_deprecated_wrapper_utility_in_gin.patch
|
||||
feat_add_support_for_embedder_snapshot_validation.patch
|
||||
band-aid_over_an_issue_with_using_deprecated_nsopenpanel_api.patch
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Avi Drissman <avi@chromium.org>
|
||||
Date: Thu, 21 Aug 2025 07:33:53 -0700
|
||||
Subject: Band-aid over an issue with using deprecated NSOpenPanel API
|
||||
|
||||
Because deprecated and broken NSOpenPanel API is used, the open panel
|
||||
will sometimes incorrectly misunderstand a folder to be a package and
|
||||
return it as a user selection when folders are disallowed from
|
||||
selection. In that case, skip it.
|
||||
|
||||
Bug: 40861123
|
||||
Bug: 41275486
|
||||
Bug: 440106155
|
||||
Change-Id: Ia0459a2bb76a30f4e126bd83069d7e13894d62f6
|
||||
Fixed: 438779953
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6867298
|
||||
Commit-Queue: Avi Drissman <avi@chromium.org>
|
||||
Reviewed-by: Christine Hollingsworth <christinesm@chromium.org>
|
||||
Cr-Commit-Position: refs/heads/main@{#1504534}
|
||||
|
||||
diff --git a/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm b/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm
|
||||
index f0b8108a7f8a63f66664c6c5ad3ada0bf60805b3..67380a76c699d1c2db0d3a96671bb92657c4a6d3 100644
|
||||
--- a/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm
|
||||
+++ b/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm
|
||||
@@ -225,7 +225,7 @@ - (void)popupAction:(id)sender {
|
||||
// Unfortunately, there's no great way to do strict type matching with
|
||||
// NSOpenPanel. Setting explicit extensions via -allowedFileTypes is
|
||||
// deprecated, and there's no way to specify that strict type equality should
|
||||
- // be used for -allowedContentTypes (FB13721802).
|
||||
+ // be used for -allowedContentTypes (https://crbug.com/41275486, FB13721802).
|
||||
//
|
||||
// -[NSOpenSavePanelDelegate panel:shouldEnableURL:] could be used to enforce
|
||||
// strict type matching, however its presence on the delegate means that all
|
||||
@@ -235,6 +235,10 @@ - (void)popupAction:(id)sender {
|
||||
//
|
||||
// Therefore, use the deprecated API, because it's the only way to remain
|
||||
// performant while achieving strict type matching.
|
||||
+ //
|
||||
+ // TODO(https://crbug.com/440106155): Possibly reconsider using
|
||||
+ // -panel:shouldEnableURL: if the speed impact is judged to be acceptable
|
||||
+ // nowadays.
|
||||
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
@@ -479,8 +483,8 @@ - (void)popupAction:(id)sender {
|
||||
|
||||
// See -[ExtensionDropdownHandler popupAction:] as to why file extensions
|
||||
// are collected here rather than being converted to UTTypes.
|
||||
- // TODO(FB13721802): Use UTTypes when strict type matching can be
|
||||
- // specified.
|
||||
+ // TODO(https://crbug.com/440106155, FB13721802): Use UTTypes when strict
|
||||
+ // type matching can be specified.
|
||||
NSString* ext_ns = base::SysUTF8ToNSString(ext);
|
||||
if (![file_extensions_array containsObject:ext_ns]) {
|
||||
[file_extensions_array addObject:ext_ns];
|
||||
@@ -571,18 +575,46 @@ - (void)popupAction:(id)sender {
|
||||
}
|
||||
NSString* path = url.path;
|
||||
|
||||
- // There is a bug in macOS where, despite a request to disallow file
|
||||
- // selection, files/packages are able to be selected. If indeed file
|
||||
- // selection was disallowed, drop any files selected.
|
||||
- // https://crbug.com/40861123, FB11405008
|
||||
- if (!open_panel.canChooseFiles) {
|
||||
+ if (base::mac::MacOSMajorVersion() < 14) {
|
||||
+ // There is a bug in macOS (https://crbug.com/40861123, FB11405008)
|
||||
+ // where, despite a request to disallow file selection, files/packages
|
||||
+ // are able to be selected. If indeed file selection was disallowed,
|
||||
+ // drop any files selected. This issue is fixed in macOS 14, so only
|
||||
+ // do the workaround on previous releases.
|
||||
+ if (!open_panel.canChooseFiles) {
|
||||
+ BOOL is_directory;
|
||||
+ BOOL exists =
|
||||
+ [NSFileManager.defaultManager fileExistsAtPath:path
|
||||
+ isDirectory:&is_directory];
|
||||
+ BOOL is_package =
|
||||
+ [NSWorkspace.sharedWorkspace isFilePackageAtPath:path];
|
||||
+ if (!exists || !is_directory || is_package) {
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ // As long as FB13721802 remains unfixed, this class uses extensions to
|
||||
+ // filter what files are available rather than UTTypes. This deprecated
|
||||
+ // API has a problem, however. If you specify an extension to be shown
|
||||
+ // as available, then the NSOpenPanel will assume that any directory
|
||||
+ // that has that extension is a package, and will offer it to the user
|
||||
+ // for selection even if directory selection isn't otherwise allowed.
|
||||
+ // Therefore, if directories are disallowed, filter out any that find
|
||||
+ // their way in if they're not actually packages.
|
||||
+ //
|
||||
+ // TODO(https://crbug.com/440106155, FB13721802): Possibly reconsider
|
||||
+ // using -panel:shouldEnableURL: if the speed impact is judged to be
|
||||
+ // acceptable nowadays, and drop this band-aid.
|
||||
+ if (!open_panel.canChooseDirectories) {
|
||||
BOOL is_directory;
|
||||
BOOL exists =
|
||||
[NSFileManager.defaultManager fileExistsAtPath:path
|
||||
isDirectory:&is_directory];
|
||||
BOOL is_package =
|
||||
[NSWorkspace.sharedWorkspace isFilePackageAtPath:path];
|
||||
- if (!exists || !is_directory || is_package) {
|
||||
+ if (!exists || (is_directory && !is_package)) {
|
||||
+ NSLog(@"dropping %@", path);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -33,10 +33,10 @@ index e648bb4ed2ff72441faa8773e449e0b6174f5af5..fd2c1d3ac575d10de7d5c09e4418d172
|
||||
"//base",
|
||||
"//build:branding_buildflags",
|
||||
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
|
||||
index 9c4efeae559f3f752ea9f83904417a35ef436434..ed40f8c920714e6c241cedcbbff6b38ad311489b 100644
|
||||
index 42292200196b51af4dc57e95f65876761bf6b892..ba90ea9e26330b4becf7931ec2421bebd8d0f527 100644
|
||||
--- a/chrome/browser/BUILD.gn
|
||||
+++ b/chrome/browser/BUILD.gn
|
||||
@@ -4753,7 +4753,7 @@ static_library("browser") {
|
||||
@@ -4754,7 +4754,7 @@ static_library("browser") {
|
||||
]
|
||||
}
|
||||
|
||||
@@ -46,10 +46,10 @@ index 9c4efeae559f3f752ea9f83904417a35ef436434..ed40f8c920714e6c241cedcbbff6b38a
|
||||
# than here in :chrome_dll.
|
||||
deps += [ "//chrome:packed_resources_integrity_header" ]
|
||||
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
|
||||
index b950e537f5fc2d8fd6137d9c9131858404e78d9c..dde9dfd95521ceac67dced54efe90e5068eba797 100644
|
||||
index 572de58b1cb6b643cdcc73509685eb4f615bd39e..b26a87e617c14f80652b7daaa57ada59740e3bcd 100644
|
||||
--- a/chrome/test/BUILD.gn
|
||||
+++ b/chrome/test/BUILD.gn
|
||||
@@ -7455,9 +7455,12 @@ test("unit_tests") {
|
||||
@@ -7449,9 +7449,12 @@ test("unit_tests") {
|
||||
"//chrome/notification_helper",
|
||||
]
|
||||
|
||||
@@ -63,7 +63,7 @@ index b950e537f5fc2d8fd6137d9c9131858404e78d9c..dde9dfd95521ceac67dced54efe90e50
|
||||
"//chrome//services/util_win:unit_tests",
|
||||
"//chrome/app:chrome_dll_resources",
|
||||
"//chrome/app:win_unit_tests",
|
||||
@@ -8394,6 +8397,10 @@ test("unit_tests") {
|
||||
@@ -8389,6 +8392,10 @@ test("unit_tests") {
|
||||
"../browser/performance_manager/policies/background_tab_loading_policy_unittest.cc",
|
||||
]
|
||||
|
||||
@@ -74,7 +74,7 @@ index b950e537f5fc2d8fd6137d9c9131858404e78d9c..dde9dfd95521ceac67dced54efe90e50
|
||||
sources += [
|
||||
# The importer code is not used on Android.
|
||||
"../common/importer/firefox_importer_utils_unittest.cc",
|
||||
@@ -8450,7 +8457,6 @@ test("unit_tests") {
|
||||
@@ -8445,7 +8452,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",
|
||||
|
||||
@@ -9,7 +9,7 @@ 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 04ab9256afe51df82b2c5a34334a7e98f49bc82a..861468d545856eb894b3eaae943028b954c83b82 100644
|
||||
index 1aec55ce3bbe48bfcc11c7b60eb9039e0f5d9b72..63d85f0d13672f5007553e5b116211ea33004b57 100644
|
||||
--- a/content/browser/renderer_host/render_frame_host_impl.cc
|
||||
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
|
||||
@@ -9816,6 +9816,7 @@ void RenderFrameHostImpl::CreateNewWindow(
|
||||
@@ -77,10 +77,10 @@ index fc433c5802ecb880f3f144f09c3d318814672213..6a1e1f2cfc60451bb097b3625245fbfb
|
||||
|
||||
// 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 5fb9980e5f7672a9b518776bcfc9e54726d24a62..707b3ca716d5654ddfcf40f43582524e0c2b6492 100644
|
||||
index 689203b138adf10a27c47dea61d3fe352df80b1e..2988ef70882ed30105d888491feb88db429c85ca 100644
|
||||
--- a/content/public/browser/content_browser_client.cc
|
||||
+++ b/content/public/browser/content_browser_client.cc
|
||||
@@ -862,6 +862,8 @@ bool ContentBrowserClient::CanCreateWindow(
|
||||
@@ -867,6 +867,8 @@ bool ContentBrowserClient::CanCreateWindow(
|
||||
const std::string& frame_name,
|
||||
WindowOpenDisposition disposition,
|
||||
const blink::mojom::WindowFeatures& features,
|
||||
@@ -90,7 +90,7 @@ index 5fb9980e5f7672a9b518776bcfc9e54726d24a62..707b3ca716d5654ddfcf40f43582524e
|
||||
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 7e953576d8be22f2efa49ee8eb349ddab63fd276..84b2ec91bc0ec42f74e91c4d4a9d71b0ffc0bcd8 100644
|
||||
index ff5eca7750ef324cd036251affc0263f230710bb..f9372f547ef0d5914ba53b75aba44580a573fba0 100644
|
||||
--- a/content/public/browser/content_browser_client.h
|
||||
+++ b/content/public/browser/content_browser_client.h
|
||||
@@ -199,6 +199,7 @@ class NetworkService;
|
||||
@@ -101,7 +101,7 @@ index 7e953576d8be22f2efa49ee8eb349ddab63fd276..84b2ec91bc0ec42f74e91c4d4a9d71b0
|
||||
} // namespace network
|
||||
|
||||
namespace sandbox {
|
||||
@@ -1428,6 +1429,8 @@ class CONTENT_EXPORT ContentBrowserClient {
|
||||
@@ -1435,6 +1436,8 @@ class CONTENT_EXPORT ContentBrowserClient {
|
||||
const std::string& frame_name,
|
||||
WindowOpenDisposition disposition,
|
||||
const blink::mojom::WindowFeatures& features,
|
||||
|
||||
@@ -34,10 +34,10 @@ index 2dc44d4787d5198cff7be2cf98ad5acf2d3a9a0b..27a0335aac2bd4239616cf71f5d015c9
|
||||
|
||||
class ScrollEvent;
|
||||
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
|
||||
index 896721c02c1cf0dac03d98b152af210e6382ccee..f84b915edfd76df977aaa4fc7f0c1ae694726784 100644
|
||||
index 315356b513e9f2c0ce7658aefeb69d0ac327c4de..54a94e1348fa196eaee8314076c47286c9ab0bcc 100644
|
||||
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
|
||||
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
|
||||
@@ -1358,6 +1358,10 @@ HBRUSH DesktopWindowTreeHostWin::GetBackgroundPaintBrush() {
|
||||
@@ -1367,6 +1367,10 @@ HBRUSH DesktopWindowTreeHostWin::GetBackgroundPaintBrush() {
|
||||
return background_paint_brush_;
|
||||
}
|
||||
|
||||
@@ -61,10 +61,10 @@ index dcda976f4c3cc0ba6bcf015d5bf7435df009ae30..13cfa18bf406f244ec361a1230ccce44
|
||||
Widget* GetWidget();
|
||||
const Widget* GetWidget() const;
|
||||
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
|
||||
index eb1bc6840fcf026ed2ab902bae534607af84abee..88a4eeea8ff5226600c804c6df5832f93585b327 100644
|
||||
index 3637176c05a7074cb9042b74f7c9ea2e29af5ee5..3ed583cf09dec0ae83c3c9449e6ef7e1fa92aa8d 100644
|
||||
--- a/ui/views/win/hwnd_message_handler.cc
|
||||
+++ b/ui/views/win/hwnd_message_handler.cc
|
||||
@@ -3220,15 +3220,19 @@ LRESULT HWNDMessageHandler::HandleMouseEventInternal(UINT message,
|
||||
@@ -3239,15 +3239,19 @@ LRESULT HWNDMessageHandler::HandleMouseEventInternal(UINT message,
|
||||
}
|
||||
// We must let Windows handle the caption buttons if it's drawing them, or
|
||||
// they won't work.
|
||||
@@ -86,7 +86,7 @@ index eb1bc6840fcf026ed2ab902bae534607af84abee..88a4eeea8ff5226600c804c6df5832f9
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -3251,6 +3255,7 @@ LRESULT HWNDMessageHandler::HandleMouseEventInternal(UINT message,
|
||||
@@ -3270,6 +3274,7 @@ LRESULT HWNDMessageHandler::HandleMouseEventInternal(UINT message,
|
||||
// handle alt-space, or in the frame itself.
|
||||
is_right_mouse_pressed_on_caption_ = false;
|
||||
ReleaseCapture();
|
||||
@@ -94,7 +94,7 @@ index eb1bc6840fcf026ed2ab902bae534607af84abee..88a4eeea8ff5226600c804c6df5832f9
|
||||
// |point| is in window coordinates, but WM_NCHITTEST and TrackPopupMenu()
|
||||
// expect screen coordinates.
|
||||
POINT screen_point = CR_POINT_INITIALIZER_FROM_LPARAM(l_param);
|
||||
@@ -3258,7 +3263,17 @@ LRESULT HWNDMessageHandler::HandleMouseEventInternal(UINT message,
|
||||
@@ -3277,7 +3282,17 @@ LRESULT HWNDMessageHandler::HandleMouseEventInternal(UINT message,
|
||||
w_param = static_cast<WPARAM>(SendMessage(
|
||||
hwnd(), WM_NCHITTEST, 0, MAKELPARAM(screen_point.x, screen_point.y)));
|
||||
if (w_param == HTCAPTION || w_param == HTSYSMENU) {
|
||||
|
||||
@@ -7,7 +7,7 @@ Electron does not support Profiles, so we need to patch it out of any
|
||||
code that we use.
|
||||
|
||||
diff --git a/chrome/browser/pdf/chrome_pdf_stream_delegate.cc b/chrome/browser/pdf/chrome_pdf_stream_delegate.cc
|
||||
index e3b9f14a4cf2167064ce6716053e663adffa1542..65f13a4607c8145858fd47d81cb9960c44272d79 100644
|
||||
index c390a83277f564f1a67a7dcffa36b9d77a35bc0b..b13273a4b194ad5e8ca2d1639ebca831f9607b1e 100644
|
||||
--- a/chrome/browser/pdf/chrome_pdf_stream_delegate.cc
|
||||
+++ b/chrome/browser/pdf/chrome_pdf_stream_delegate.cc
|
||||
@@ -45,6 +45,7 @@ namespace {
|
||||
|
||||
@@ -80,10 +80,10 @@ index b6582b4013d9682d32bd524b4053b443a4df00f8..afcbce72e0f247b4d5a637b27c9f25d9
|
||||
content::WebContents* source,
|
||||
const content::OpenURLParams& params,
|
||||
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
|
||||
index dec508b3eb4d55b661e258a6d8b01aea8309ef14..b91e06a75592fdb672ba9b4628cc81a4e538e883 100644
|
||||
index e099f30e5fdad38660acba7c2b6edea745991c61..0a9b3151af2e6d0544472a6b827edb72f974c61d 100644
|
||||
--- a/chrome/browser/ui/browser.cc
|
||||
+++ b/chrome/browser/ui/browser.cc
|
||||
@@ -2348,8 +2348,7 @@ bool Browser::IsWebContentsCreationOverridden(
|
||||
@@ -2352,8 +2352,7 @@ bool Browser::IsWebContentsCreationOverridden(
|
||||
content::SiteInstance* source_site_instance,
|
||||
content::mojom::WindowContainerType window_container_type,
|
||||
const GURL& opener_url,
|
||||
@@ -93,7 +93,7 @@ index dec508b3eb4d55b661e258a6d8b01aea8309ef14..b91e06a75592fdb672ba9b4628cc81a4
|
||||
if (IsActorOperatingOnWebContents(
|
||||
profile(), content::WebContents::FromRenderFrameHost(opener))) {
|
||||
// If an ExecutionEngine is acting on the opener, prevent it from creating
|
||||
@@ -2361,7 +2360,7 @@ bool Browser::IsWebContentsCreationOverridden(
|
||||
@@ -2365,7 +2364,7 @@ bool Browser::IsWebContentsCreationOverridden(
|
||||
return (window_container_type ==
|
||||
content::mojom::WindowContainerType::BACKGROUND &&
|
||||
ShouldCreateBackgroundContents(source_site_instance, opener_url,
|
||||
@@ -103,7 +103,7 @@ index dec508b3eb4d55b661e258a6d8b01aea8309ef14..b91e06a75592fdb672ba9b4628cc81a4
|
||||
|
||||
WebContents* Browser::CreateCustomWebContents(
|
||||
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
|
||||
index a87e55f9381c9a59096fe90dfa15e2a25bb3ad0d..6067bab9ad7ace935f319c27fab8471db0cd3acc 100644
|
||||
index bf7925f401a45314d6ac9e71ff0113a792610ba7..b4bd5b6821b2ce9638abb40637454c91b5eac733 100644
|
||||
--- a/chrome/browser/ui/browser.h
|
||||
+++ b/chrome/browser/ui/browser.h
|
||||
@@ -944,8 +944,7 @@ class Browser : public TabStripModelObserver,
|
||||
|
||||
@@ -1,174 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: deepak1556 <hop2deep@gmail.com>
|
||||
Date: Tue, 5 Aug 2025 02:26:29 +0900
|
||||
Subject: chore: restore some deprecated wrapper utility in gin
|
||||
|
||||
Restores part of https://chromium-review.googlesource.com/c/chromium/src/+/6799157
|
||||
|
||||
Patch can be removed once cppgc migration is complete
|
||||
https://github.com/electron/electron/issues/47922
|
||||
|
||||
diff --git a/gin/object_template_builder.cc b/gin/object_template_builder.cc
|
||||
index 5a31687bbd0fca61db3a7c41ed73d938340d6446..b84f5fd336bc4b61b2cd0b2fc92382b00e928701 100644
|
||||
--- a/gin/object_template_builder.cc
|
||||
+++ b/gin/object_template_builder.cc
|
||||
@@ -141,7 +141,7 @@ ObjectTemplateBuilder::ObjectTemplateBuilder(v8::Isolate* isolate,
|
||||
: "Objects of this type cannot be created using the "
|
||||
"constructor"))),
|
||||
template_(constructor_template_->InstanceTemplate()) {
|
||||
- template_->SetInternalFieldCount(0);
|
||||
+ template_->SetInternalFieldCount(kNumberOfInternalFields);
|
||||
}
|
||||
|
||||
ObjectTemplateBuilder::ObjectTemplateBuilder(v8::Isolate* isolate,
|
||||
diff --git a/gin/per_isolate_data.cc b/gin/per_isolate_data.cc
|
||||
index 884990426f13a6abca22a60dd8cc0685f8435b23..64ac0a64a05105532f3cda898aeac68c21338e60 100644
|
||||
--- a/gin/per_isolate_data.cc
|
||||
+++ b/gin/per_isolate_data.cc
|
||||
@@ -68,12 +68,32 @@ PerIsolateData* PerIsolateData::From(Isolate* isolate) {
|
||||
return static_cast<PerIsolateData*>(isolate->GetData(kEmbedderNativeGin));
|
||||
}
|
||||
|
||||
+void PerIsolateData::DeprecatedSetObjectTemplate(DeprecatedWrapperInfo* info,
|
||||
+ Local<ObjectTemplate> templ) {
|
||||
+ deprecated_object_templates_[info] = Eternal<ObjectTemplate>(isolate_, templ);
|
||||
+}
|
||||
+
|
||||
void PerIsolateData::SetObjectTemplate(
|
||||
const WrapperInfo* info,
|
||||
Local<ObjectTemplate> templ) {
|
||||
object_templates_[info] = Eternal<ObjectTemplate>(isolate_, templ);
|
||||
}
|
||||
|
||||
+void PerIsolateData::SetFunctionTemplate(DeprecatedWrapperInfo* info,
|
||||
+ Local<FunctionTemplate> templ) {
|
||||
+ function_templates_[info] = Eternal<FunctionTemplate>(isolate_, templ);
|
||||
+}
|
||||
+
|
||||
+v8::Local<v8::ObjectTemplate> PerIsolateData::DeprecatedGetObjectTemplate(
|
||||
+ DeprecatedWrapperInfo* info) {
|
||||
+ DeprecatedObjectTemplateMap::iterator it =
|
||||
+ deprecated_object_templates_.find(info);
|
||||
+ if (it == deprecated_object_templates_.end()) {
|
||||
+ return v8::Local<v8::ObjectTemplate>();
|
||||
+ }
|
||||
+ return it->second.Get(isolate_);
|
||||
+}
|
||||
+
|
||||
v8::Local<v8::ObjectTemplate> PerIsolateData::GetObjectTemplate(
|
||||
const WrapperInfo* info) {
|
||||
ObjectTemplateMap::iterator it = object_templates_.find(info);
|
||||
@@ -83,6 +103,15 @@ v8::Local<v8::ObjectTemplate> PerIsolateData::GetObjectTemplate(
|
||||
return it->second.Get(isolate_);
|
||||
}
|
||||
|
||||
+v8::Local<v8::FunctionTemplate> PerIsolateData::GetFunctionTemplate(
|
||||
+ DeprecatedWrapperInfo* info) {
|
||||
+ FunctionTemplateMap::iterator it = function_templates_.find(info);
|
||||
+ if (it == function_templates_.end()) {
|
||||
+ return v8::Local<v8::FunctionTemplate>();
|
||||
+ }
|
||||
+ return it->second.Get(isolate_);
|
||||
+}
|
||||
+
|
||||
void PerIsolateData::AddDisposeObserver(DisposeObserver* observer) {
|
||||
dispose_observers_.AddObserver(observer);
|
||||
}
|
||||
diff --git a/gin/per_isolate_data.h b/gin/per_isolate_data.h
|
||||
index bce889749415da341e6e6e4082ac06bbeb4bb80a..d748c1cf8cef7da90686686f1b8072bcd530541d 100644
|
||||
--- a/gin/per_isolate_data.h
|
||||
+++ b/gin/per_isolate_data.h
|
||||
@@ -51,11 +51,24 @@ class GIN_EXPORT PerIsolateData {
|
||||
|
||||
static PerIsolateData* From(v8::Isolate* isolate);
|
||||
|
||||
+ void DeprecatedSetObjectTemplate(
|
||||
+ DeprecatedWrapperInfo* info,
|
||||
+ v8::Local<v8::ObjectTemplate> object_template);
|
||||
+
|
||||
void SetObjectTemplate(const WrapperInfo* info,
|
||||
v8::Local<v8::ObjectTemplate> object_template);
|
||||
|
||||
+ void SetFunctionTemplate(DeprecatedWrapperInfo* info,
|
||||
+ v8::Local<v8::FunctionTemplate> function_template);
|
||||
+
|
||||
+ v8::Local<v8::ObjectTemplate> DeprecatedGetObjectTemplate(
|
||||
+ DeprecatedWrapperInfo* info);
|
||||
+
|
||||
v8::Local<v8::ObjectTemplate> GetObjectTemplate(const WrapperInfo* info);
|
||||
|
||||
+ v8::Local<v8::FunctionTemplate> GetFunctionTemplate(
|
||||
+ DeprecatedWrapperInfo* info);
|
||||
+
|
||||
void AddDisposeObserver(DisposeObserver* observer);
|
||||
void RemoveDisposeObserver(DisposeObserver* observer);
|
||||
void NotifyBeforeDispose();
|
||||
@@ -74,14 +87,20 @@ class GIN_EXPORT PerIsolateData {
|
||||
}
|
||||
|
||||
private:
|
||||
+ typedef std::map<DeprecatedWrapperInfo*, v8::Eternal<v8::ObjectTemplate>>
|
||||
+ DeprecatedObjectTemplateMap;
|
||||
typedef std::map<const WrapperInfo*, v8::Eternal<v8::ObjectTemplate>>
|
||||
ObjectTemplateMap;
|
||||
+ typedef std::map<DeprecatedWrapperInfo*, v8::Eternal<v8::FunctionTemplate>>
|
||||
+ FunctionTemplateMap;
|
||||
|
||||
// PerIsolateData doesn't actually own |isolate_|. Instead, the isolate is
|
||||
// owned by the IsolateHolder, which also owns the PerIsolateData.
|
||||
raw_ptr<v8::Isolate, AcrossTasksDanglingUntriaged> isolate_;
|
||||
raw_ptr<v8::ArrayBuffer::Allocator, DanglingUntriaged> allocator_;
|
||||
+ DeprecatedObjectTemplateMap deprecated_object_templates_;
|
||||
ObjectTemplateMap object_templates_;
|
||||
+ FunctionTemplateMap function_templates_;
|
||||
base::ObserverList<DisposeObserver> dispose_observers_;
|
||||
std::shared_ptr<V8ForegroundTaskRunnerBase> task_runner_;
|
||||
std::shared_ptr<V8ForegroundTaskRunnerBase> user_visible_task_runner_;
|
||||
diff --git a/gin/public/wrapper_info.h b/gin/public/wrapper_info.h
|
||||
index 34b5f1c30c05152122f23708a1df62f00296fcd6..dac3459dc822db1b242288293605ab4c4a6cf76f 100644
|
||||
--- a/gin/public/wrapper_info.h
|
||||
+++ b/gin/public/wrapper_info.h
|
||||
@@ -13,6 +13,17 @@
|
||||
|
||||
namespace gin {
|
||||
|
||||
+enum InternalFields {
|
||||
+ kWrapperInfoIndex,
|
||||
+ kEncodedValueIndex,
|
||||
+ kNumberOfInternalFields,
|
||||
+};
|
||||
+
|
||||
+struct GIN_EXPORT DeprecatedWrapperInfo {
|
||||
+ static DeprecatedWrapperInfo* From(v8::Local<v8::Object> object);
|
||||
+ const GinEmbedder embedder;
|
||||
+};
|
||||
+
|
||||
struct GIN_EXPORT WrapperInfo : v8::Object::WrapperTypeInfo {
|
||||
const WrappablePointerTag pointer_tag;
|
||||
};
|
||||
diff --git a/gin/wrappable.cc b/gin/wrappable.cc
|
||||
index 803b5648e1c3ec3621149e98850bebfbf7f2de75..dd49202103993ee03379acd6873b92bc8fccb786 100644
|
||||
--- a/gin/wrappable.cc
|
||||
+++ b/gin/wrappable.cc
|
||||
@@ -48,7 +48,7 @@ v8::MaybeLocal<v8::Object> WrappableBase::GetWrapper(v8::Isolate* isolate) {
|
||||
CHECK(!templ.IsEmpty());
|
||||
data->SetObjectTemplate(info, templ);
|
||||
}
|
||||
- CHECK_EQ(0, templ->InternalFieldCount());
|
||||
+ CHECK_EQ(kNumberOfInternalFields, templ->InternalFieldCount());
|
||||
v8::Local<v8::Object> wrapper;
|
||||
// |wrapper| may be empty in some extreme cases, e.g., when
|
||||
// Object.prototype.constructor is overwritten.
|
||||
@@ -56,6 +56,12 @@ v8::MaybeLocal<v8::Object> WrappableBase::GetWrapper(v8::Isolate* isolate) {
|
||||
return {};
|
||||
}
|
||||
|
||||
+ // Delete the internal fields once gin_helper::DeprecatedWrappable does
|
||||
+ // not exist anymore.
|
||||
+ int indices[] = {kWrapperInfoIndex, kEncodedValueIndex};
|
||||
+ void* values[] = {nullptr, nullptr};
|
||||
+ wrapper->SetAlignedPointerInInternalFields(2, indices, values);
|
||||
+
|
||||
AssociateWithWrapper(isolate, wrapper);
|
||||
return wrapper;
|
||||
}
|
||||
@@ -8,10 +8,10 @@ Allow registering custom protocols to handle service worker main script fetching
|
||||
Refs https://bugs.chromium.org/p/chromium/issues/detail?id=996511
|
||||
|
||||
diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc
|
||||
index 3202822020573106b0ee2305f08971b3b542be69..9a033cb1f48288802fb349e885a152952fe95b98 100644
|
||||
index e08dddd88f7787884f0162966db6297c67d92770..847e6a6941486879972fb593ce510a4b76c8b72e 100644
|
||||
--- a/content/browser/service_worker/service_worker_context_wrapper.cc
|
||||
+++ b/content/browser/service_worker/service_worker_context_wrapper.cc
|
||||
@@ -1941,6 +1941,26 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
|
||||
@@ -1947,6 +1947,26 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
|
||||
loader_factory_bundle_info =
|
||||
context()->loader_factory_bundle_for_update_check()->Clone();
|
||||
|
||||
@@ -38,7 +38,7 @@ index 3202822020573106b0ee2305f08971b3b542be69..9a033cb1f48288802fb349e885a15295
|
||||
if (auto* config = content::WebUIConfigMap::GetInstance().GetConfig(
|
||||
browser_context(), scope)) {
|
||||
// If this is a Service Worker for a WebUI, the WebUI's URLDataSource
|
||||
@@ -1960,9 +1980,7 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
|
||||
@@ -1966,9 +1986,7 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
|
||||
features::kEnableServiceWorkersForChromeScheme) &&
|
||||
scope.scheme_piece() == kChromeUIScheme) {
|
||||
config->RegisterURLDataSource(browser_context());
|
||||
@@ -49,7 +49,7 @@ index 3202822020573106b0ee2305f08971b3b542be69..9a033cb1f48288802fb349e885a15295
|
||||
.emplace(kChromeUIScheme, CreateWebUIServiceWorkerLoaderFactory(
|
||||
browser_context(), kChromeUIScheme,
|
||||
base::flat_set<std::string>()));
|
||||
@@ -1970,9 +1988,7 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
|
||||
@@ -1976,9 +1994,7 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
|
||||
features::kEnableServiceWorkersForChromeUntrusted) &&
|
||||
scope.scheme_piece() == kChromeUIUntrustedScheme) {
|
||||
config->RegisterURLDataSource(browser_context());
|
||||
|
||||
@@ -6,10 +6,10 @@ Subject: feat: enable setting aspect ratio to 0
|
||||
Make SetAspectRatio accept 0 as valid input, which would reset to null.
|
||||
|
||||
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
|
||||
index 671960fb876b656abc572664cd1f28492c799123..896721c02c1cf0dac03d98b152af210e6382ccee 100644
|
||||
index 95f034ecf921265304cde98d2ce163a2ab09887a..315356b513e9f2c0ce7658aefeb69d0ac327c4de 100644
|
||||
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
|
||||
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
|
||||
@@ -610,7 +610,7 @@ void DesktopWindowTreeHostWin::SetOpacity(float opacity) {
|
||||
@@ -619,7 +619,7 @@ void DesktopWindowTreeHostWin::SetOpacity(float opacity) {
|
||||
void DesktopWindowTreeHostWin::SetAspectRatio(
|
||||
const gfx::SizeF& aspect_ratio,
|
||||
const gfx::Size& excluded_margin) {
|
||||
@@ -19,10 +19,10 @@ index 671960fb876b656abc572664cd1f28492c799123..896721c02c1cf0dac03d98b152af210e
|
||||
excluded_margin);
|
||||
}
|
||||
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
|
||||
index 6c7e1291817f3eea03da90c206bd5b3a9b9d9beb..16efdf8effa060e489ba02f0cc086bfb0246cc26 100644
|
||||
index df17e97666de639f05b92a79ee7fbd4a3da6c64f..f404c718e0242ec9269e7d14eb236aa928fb5d58 100644
|
||||
--- a/ui/views/win/hwnd_message_handler.cc
|
||||
+++ b/ui/views/win/hwnd_message_handler.cc
|
||||
@@ -1049,8 +1049,11 @@ void HWNDMessageHandler::SetFullscreen(bool fullscreen,
|
||||
@@ -1050,8 +1050,11 @@ void HWNDMessageHandler::SetFullscreen(bool fullscreen,
|
||||
|
||||
void HWNDMessageHandler::SetAspectRatio(float aspect_ratio,
|
||||
const gfx::Size& excluded_margin) {
|
||||
|
||||
@@ -10,11 +10,11 @@ Electron needs this constructor, namely for gin_helper::Constructible
|
||||
objects.
|
||||
|
||||
diff --git a/gin/object_template_builder.cc b/gin/object_template_builder.cc
|
||||
index 9f9ae85ad432ce71f308d6c56265a96985f42766..5a31687bbd0fca61db3a7c41ed73d938340d6446 100644
|
||||
index a694f7dc4da4f1bba579ab8c032eea21d8459995..8aaaba327166b1d3b884fe390a389c0c50890af9 100644
|
||||
--- a/gin/object_template_builder.cc
|
||||
+++ b/gin/object_template_builder.cc
|
||||
@@ -144,6 +144,13 @@ ObjectTemplateBuilder::ObjectTemplateBuilder(v8::Isolate* isolate,
|
||||
template_->SetInternalFieldCount(0);
|
||||
@@ -146,6 +146,13 @@ ObjectTemplateBuilder::ObjectTemplateBuilder(v8::Isolate* isolate,
|
||||
template_->SetInternalFieldCount(kNumberOfInternalFields);
|
||||
}
|
||||
|
||||
+ObjectTemplateBuilder::ObjectTemplateBuilder(v8::Isolate* isolate,
|
||||
@@ -28,10 +28,10 @@ index 9f9ae85ad432ce71f308d6c56265a96985f42766..5a31687bbd0fca61db3a7c41ed73d938
|
||||
const ObjectTemplateBuilder& other) = default;
|
||||
|
||||
diff --git a/gin/object_template_builder.h b/gin/object_template_builder.h
|
||||
index cf4f1ae6598fdede655d33baccda254965566ea5..a4c16dc0ec3ff16413fc2a04225a2401989a084b 100644
|
||||
index 9d8f6e5de793ea419875d99a0b46898f2e40ead5..c803363b8050f4084c9250fce9b5b8b171082703 100644
|
||||
--- a/gin/object_template_builder.h
|
||||
+++ b/gin/object_template_builder.h
|
||||
@@ -48,6 +48,9 @@ class GIN_EXPORT ObjectTemplateBuilder {
|
||||
@@ -46,6 +46,9 @@ class GIN_EXPORT ObjectTemplateBuilder {
|
||||
public:
|
||||
explicit ObjectTemplateBuilder(v8::Isolate* isolate);
|
||||
ObjectTemplateBuilder(v8::Isolate* isolate, const char* type_name);
|
||||
|
||||
@@ -317,10 +317,10 @@ index 7e17594c30ac3cf8cb484b53563b03fc75bd2e0b..0e4a68f2fd8179640f877cb258b40496
|
||||
|
||||
// Although ScreenCaptureKit is available in 12.3 there were some bugs that
|
||||
diff --git a/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc b/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc
|
||||
index a5bc6f63c771fdf68ed9251285eac9d2c91acdc0..f719ff68e18093791bf13e434f40a3d1a9626dca 100644
|
||||
index cedd951a80e055a6af8aa17460d77e1b3e76fff3..997c239f337f5c049a75518809a56480a5abf9f3 100644
|
||||
--- a/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc
|
||||
+++ b/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc
|
||||
@@ -321,8 +321,16 @@ void InProcessVideoCaptureDeviceLauncher::LaunchDeviceAsync(
|
||||
@@ -323,8 +323,16 @@ void InProcessVideoCaptureDeviceLauncher::LaunchDeviceAsync(
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -338,7 +338,7 @@ index a5bc6f63c771fdf68ed9251285eac9d2c91acdc0..f719ff68e18093791bf13e434f40a3d1
|
||||
// For the other capturers, when a bug reports the type of capture it's
|
||||
// easy enough to determine which capturer was used, but it's a little
|
||||
// fuzzier with window capture.
|
||||
@@ -338,13 +346,15 @@ void InProcessVideoCaptureDeviceLauncher::LaunchDeviceAsync(
|
||||
@@ -340,13 +348,15 @@ void InProcessVideoCaptureDeviceLauncher::LaunchDeviceAsync(
|
||||
}
|
||||
#endif // defined(USE_AURA) || BUILDFLAG(IS_MAC)
|
||||
|
||||
|
||||
@@ -312,7 +312,7 @@ index 7e3d46902fbf736b4240eb3fcb89975a7b222197..57fdc89fc265ad70cb0bff8443cc1026
|
||||
|
||||
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 5b4a8a932a360b0fb3c9a488c8d97c44b4c77ed6..ab8677509fe77f16c0bc67333fa9967fb8ef4564 100644
|
||||
index 485025e439a90fef0c333c75477011670f4cd6ae..db4ff90eaae7ac0e22d56536fb45f18aca98e7cf 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 @@
|
||||
|
||||
@@ -11,10 +11,10 @@ enlarge window above dimensions set during creation of the
|
||||
BrowserWindow.
|
||||
|
||||
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
|
||||
index 16efdf8effa060e489ba02f0cc086bfb0246cc26..eb1bc6840fcf026ed2ab902bae534607af84abee 100644
|
||||
index f404c718e0242ec9269e7d14eb236aa928fb5d58..3637176c05a7074cb9042b74f7c9ea2e29af5ee5 100644
|
||||
--- a/ui/views/win/hwnd_message_handler.cc
|
||||
+++ b/ui/views/win/hwnd_message_handler.cc
|
||||
@@ -3824,15 +3824,30 @@ void HWNDMessageHandler::SizeWindowToAspectRatio(UINT param,
|
||||
@@ -3843,15 +3843,30 @@ void HWNDMessageHandler::SizeWindowToAspectRatio(UINT param,
|
||||
delegate_->GetMinMaxSize(&min_window_size, &max_window_size);
|
||||
min_window_size = delegate_->DIPToScreenSize(min_window_size);
|
||||
max_window_size = delegate_->DIPToScreenSize(max_window_size);
|
||||
|
||||
@@ -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 24d2fc92266d1d398ee43e08a56cc05d9ff6eca3..748d041e518350f49c6aef88275893c19616d014 100644
|
||||
index 4288bf261741e4260b7a3117618fa19d39b20d2c..981aaaf9510d4354e02381266cf629a98c4d6ef6 100644
|
||||
--- a/content/browser/renderer_host/navigation_request.cc
|
||||
+++ b/content/browser/renderer_host/navigation_request.cc
|
||||
@@ -11374,6 +11374,11 @@ url::Origin NavigationRequest::GetOriginForURLLoaderFactoryUnchecked() {
|
||||
@@ -11376,6 +11376,11 @@ url::Origin NavigationRequest::GetOriginForURLLoaderFactoryUnchecked() {
|
||||
target_rph_id);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,10 +10,10 @@ This patch should be backported to e29, upstreamed to Chromium, and then
|
||||
removed if it lands upstream.
|
||||
|
||||
diff --git a/ui/events/x/events_x_utils.cc b/ui/events/x/events_x_utils.cc
|
||||
index f7b051baad322919837bcd3c2516d1d838f8b2f8..303f5512cfff9e04dfd83dd25f2331d9ca0b5ace 100644
|
||||
index c9cce0092930e54ec8b3c10e417e6a568db45bba..0b383018c24c242d47d4e9b239ca249d30ea59f5 100644
|
||||
--- a/ui/events/x/events_x_utils.cc
|
||||
+++ b/ui/events/x/events_x_utils.cc
|
||||
@@ -596,6 +596,9 @@ gfx::Point EventLocationFromXEvent(const x11::Event& xev) {
|
||||
@@ -598,6 +598,9 @@ gfx::Point EventLocationFromXEvent(const x11::Event& xev) {
|
||||
gfx::Point EventSystemLocationFromXEvent(const x11::Event& xev) {
|
||||
if (auto* crossing = xev.As<x11::CrossingEvent>())
|
||||
return gfx::Point(crossing->root_x, crossing->root_y);
|
||||
|
||||
@@ -13,10 +13,10 @@ messages in the legacy window handle layer.
|
||||
These conditions are regularly hit with WCO-enabled windows on Windows.
|
||||
|
||||
diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.cc b/content/browser/renderer_host/legacy_render_widget_host_win.cc
|
||||
index 156fa90eada19fab3a1688302bbf3687cab6ab32..b13d4fcea374eff4309b4fbe84d53dd00c817e37 100644
|
||||
index 475629d48e8807547e0c79f6fa00d458bac3416c..97f4520fbf7797b19747b5101097d93cf475fb5c 100644
|
||||
--- a/content/browser/renderer_host/legacy_render_widget_host_win.cc
|
||||
+++ b/content/browser/renderer_host/legacy_render_widget_host_win.cc
|
||||
@@ -366,12 +366,12 @@ LRESULT LegacyRenderWidgetHostHWND::OnMouseRange(UINT message,
|
||||
@@ -375,12 +375,12 @@ LRESULT LegacyRenderWidgetHostHWND::OnMouseRange(UINT message,
|
||||
WPARAM w_param,
|
||||
LPARAM l_param,
|
||||
BOOL& handled) {
|
||||
@@ -31,7 +31,7 @@ index 156fa90eada19fab3a1688302bbf3687cab6ab32..b13d4fcea374eff4309b4fbe84d53dd0
|
||||
tme.hwndTrack = hwnd();
|
||||
tme.dwHoverTime = 0;
|
||||
TrackMouseEvent(&tme);
|
||||
@@ -404,7 +404,10 @@ LRESULT LegacyRenderWidgetHostHWND::OnMouseRange(UINT message,
|
||||
@@ -413,7 +413,10 @@ LRESULT LegacyRenderWidgetHostHWND::OnMouseRange(UINT message,
|
||||
// the picture.
|
||||
if (!handled &&
|
||||
(message >= WM_NCMOUSEMOVE && message <= WM_NCXBUTTONDBLCLK)) {
|
||||
@@ -44,7 +44,7 @@ index 156fa90eada19fab3a1688302bbf3687cab6ab32..b13d4fcea374eff4309b4fbe84d53dd0
|
||||
}
|
||||
return ret;
|
||||
diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.h b/content/browser/renderer_host/legacy_render_widget_host_win.h
|
||||
index 17952b4b6ab559ba1c9076b100b060a7011edeec..1eda20e67d3b3184bec154f24c4259bb4a49b099 100644
|
||||
index f9699ff0abf9036e9e1cabf626aa6395584cf896..94a8a50cb630182103c4256352d7a8a2acc8c76a 100644
|
||||
--- a/content/browser/renderer_host/legacy_render_widget_host_win.h
|
||||
+++ b/content/browser/renderer_host/legacy_render_widget_host_win.h
|
||||
@@ -105,6 +105,7 @@ class CONTENT_EXPORT LegacyRenderWidgetHostHWND
|
||||
|
||||
@@ -18,10 +18,10 @@ or resizing, but Electron does not seem to run into that issue
|
||||
for opaque frameless windows even with that block commented out.
|
||||
|
||||
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
|
||||
index 88a4eeea8ff5226600c804c6df5832f93585b327..45b9be8cef981c570f7975f4bbd1d6d2fcc39afb 100644
|
||||
index 3ed583cf09dec0ae83c3c9449e6ef7e1fa92aa8d..1287e9eda295061a7ee9b758b3c0618933896d82 100644
|
||||
--- a/ui/views/win/hwnd_message_handler.cc
|
||||
+++ b/ui/views/win/hwnd_message_handler.cc
|
||||
@@ -1856,7 +1856,23 @@ LRESULT HWNDMessageHandler::OnCreate(CREATESTRUCT* create_struct) {
|
||||
@@ -1857,7 +1857,23 @@ LRESULT HWNDMessageHandler::OnCreate(CREATESTRUCT* create_struct) {
|
||||
SendMessage(hwnd(), WM_CHANGEUISTATE, MAKELPARAM(UIS_CLEAR, UISF_HIDEFOCUS),
|
||||
0);
|
||||
|
||||
|
||||
@@ -8,10 +8,10 @@ such as the background turning black when maximizing the window and
|
||||
dynamic background material settings not taking effect.
|
||||
|
||||
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
|
||||
index b5535be3425305a5f1eb4cd3d41e4a775175c8e6..97a01f8a718f47dcee3b08cd76b22c8445400af5 100644
|
||||
index ed4d2c4d849085c0e7830c5d52d47daf2700ce34..31ee28c3f8d04a4a9239a781ef9f79da8ee699b9 100644
|
||||
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
|
||||
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
|
||||
@@ -182,6 +182,10 @@ void DesktopWindowTreeHostWin::FinishTouchDrag(gfx::Point screen_point) {
|
||||
@@ -183,6 +183,10 @@ void DesktopWindowTreeHostWin::FinishTouchDrag(gfx::Point screen_point) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,10 +36,10 @@ index d8be4dffee3947e7ac6dc09cb8e1f2a6a834789b..8eb539af74c1934a55f9b14ad97dd93b
|
||||
// Overridden from DesktopWindowTreeHost:
|
||||
void Init(const Widget::InitParams& params) override;
|
||||
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
|
||||
index 45b9be8cef981c570f7975f4bbd1d6d2fcc39afb..d73e822bfe9a86869cf5b8d1f63d6010b9ca95df 100644
|
||||
index 1287e9eda295061a7ee9b758b3c0618933896d82..e2b899dd25c12448068c99f1344cba4fea26e2c6 100644
|
||||
--- a/ui/views/win/hwnd_message_handler.cc
|
||||
+++ b/ui/views/win/hwnd_message_handler.cc
|
||||
@@ -993,13 +993,13 @@ void HWNDMessageHandler::FrameTypeChanged() {
|
||||
@@ -994,13 +994,13 @@ void HWNDMessageHandler::FrameTypeChanged() {
|
||||
|
||||
void HWNDMessageHandler::PaintAsActiveChanged() {
|
||||
if (!delegate_->HasNonClientView() || !delegate_->CanActivate() ||
|
||||
@@ -55,7 +55,7 @@ index 45b9be8cef981c570f7975f4bbd1d6d2fcc39afb..d73e822bfe9a86869cf5b8d1f63d6010
|
||||
}
|
||||
|
||||
void HWNDMessageHandler::SetWindowIcons(const gfx::ImageSkia& window_icon,
|
||||
@@ -1083,7 +1083,14 @@ void HWNDMessageHandler::SizeConstraintsChanged() {
|
||||
@@ -1084,7 +1084,14 @@ void HWNDMessageHandler::SizeConstraintsChanged() {
|
||||
// allowing ui::GetResizableFrameThickness() to be used consistently when
|
||||
// removing the visible system frame.
|
||||
const bool had_caption_on_init = window_style() & WS_CAPTION;
|
||||
@@ -71,7 +71,7 @@ index 45b9be8cef981c570f7975f4bbd1d6d2fcc39afb..d73e822bfe9a86869cf5b8d1f63d6010
|
||||
const bool can_maximize = can_resize && delegate_->CanMaximize();
|
||||
|
||||
auto set_style_func = [&style](LONG bit, bool should_set) {
|
||||
@@ -1678,11 +1685,16 @@ void HWNDMessageHandler::ResetWindowRegion(bool force, bool redraw) {
|
||||
@@ -1679,11 +1686,16 @@ void HWNDMessageHandler::ResetWindowRegion(bool force, bool redraw) {
|
||||
// through, but that isn't the case when using Direct3D to draw transparent
|
||||
// windows. So we route translucent windows throught to the delegate to
|
||||
// allow for a custom hit mask.
|
||||
@@ -89,7 +89,7 @@ index 45b9be8cef981c570f7975f4bbd1d6d2fcc39afb..d73e822bfe9a86869cf5b8d1f63d6010
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2396,17 +2408,18 @@ LRESULT HWNDMessageHandler::OnNCActivate(UINT message,
|
||||
@@ -2415,17 +2427,18 @@ LRESULT HWNDMessageHandler::OnNCActivate(UINT message,
|
||||
delegate_->SchedulePaint();
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ index 651cb633d791d769ae2758930e7fb6310aa3637b..5f2da839ab5ddd05d1242d07a2b24c26
|
||||
}
|
||||
|
||||
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
|
||||
index 84b2ec91bc0ec42f74e91c4d4a9d71b0ffc0bcd8..ea191e8305b3945a4ca3cd555d9649b905d12e19 100644
|
||||
index f9372f547ef0d5914ba53b75aba44580a573fba0..3d7b749b90d3aa59c17f4d3220805dda263b7037 100644
|
||||
--- a/content/public/browser/content_browser_client.h
|
||||
+++ b/content/public/browser/content_browser_client.h
|
||||
@@ -337,6 +337,11 @@ class CONTENT_EXPORT ContentBrowserClient {
|
||||
|
||||
@@ -582,7 +582,7 @@ index 2d5cad5d7a4ab9292a5f966123687dee06f4512b..ae798fc8f923a9b590c0d9ed703946a2
|
||||
return kAttributes;
|
||||
}
|
||||
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
|
||||
index adce27e6feaed7172cac9bdcd1b2e83930eb0a77..d912bdedc246503bb4114393baee14fc95c54eb9 100644
|
||||
index dfc54c87eabbb33277ed145e78f8eef592da9ea2..5024ea32655edd62c02565a5e9e1d802c348c663 100644
|
||||
--- a/content/browser/BUILD.gn
|
||||
+++ b/content/browser/BUILD.gn
|
||||
@@ -345,6 +345,7 @@ source_set("browser") {
|
||||
@@ -797,7 +797,7 @@ index a1068589ad844518038ee7bc15a3de9bc5cba525..1ff781c49f086ec8015c7d3c44567dbe
|
||||
|
||||
} // namespace content
|
||||
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
|
||||
index 28887735ea8e1f03c2bdbfb845c39d63b2fd4680..1040f87089ca52f9e85467eb0172d778a8c05c24 100644
|
||||
index e2c651b8667cdc02c4df34b2355995519ccccc65..eb3b7c788e76951a8528db9cb6a925e0fb673cde 100644
|
||||
--- a/content/test/BUILD.gn
|
||||
+++ b/content/test/BUILD.gn
|
||||
@@ -669,6 +669,7 @@ static_library("test_support") {
|
||||
@@ -817,7 +817,7 @@ index 28887735ea8e1f03c2bdbfb845c39d63b2fd4680..1040f87089ca52f9e85467eb0172d778
|
||||
}
|
||||
|
||||
mojom("content_test_mojo_bindings") {
|
||||
@@ -2001,6 +2004,7 @@ test("content_browsertests") {
|
||||
@@ -2002,6 +2005,7 @@ test("content_browsertests") {
|
||||
"//ui/shell_dialogs",
|
||||
"//ui/snapshot",
|
||||
"//ui/webui:test_support",
|
||||
@@ -825,7 +825,7 @@ index 28887735ea8e1f03c2bdbfb845c39d63b2fd4680..1040f87089ca52f9e85467eb0172d778
|
||||
]
|
||||
|
||||
if (!(is_chromeos && target_cpu == "arm64" && current_cpu == "arm")) {
|
||||
@@ -3317,6 +3321,7 @@ test("content_unittests") {
|
||||
@@ -3318,6 +3322,7 @@ test("content_unittests") {
|
||||
"//ui/shell_dialogs",
|
||||
"//ui/webui:test_support",
|
||||
"//url",
|
||||
|
||||
@@ -7,10 +7,10 @@ Subject: refactor: expose HostImportModuleDynamically and
|
||||
This is so that Electron can blend Blink's and Node's implementations of these isolate handlers.
|
||||
|
||||
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
|
||||
index 9eb29fcae74cc7618f1d44fd64d63d7940f61260..e8828606e98a61a5d99c9c638e67eda887446f49 100644
|
||||
index 49ed3415ef4bbcdd71b12acbb6b149acd12eed84..91ded2f767b461d9d0152791fb02e31667186654 100644
|
||||
--- a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
|
||||
+++ b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
|
||||
@@ -628,8 +628,9 @@ bool WasmJSPromiseIntegrationEnabledCallback(v8::Local<v8::Context> context) {
|
||||
@@ -637,8 +637,9 @@ bool WasmJSPromiseIntegrationEnabledCallback(v8::Local<v8::Context> context) {
|
||||
return RuntimeEnabledFeatures::WebAssemblyJSPromiseIntegrationEnabled(
|
||||
execution_context);
|
||||
}
|
||||
@@ -21,7 +21,7 @@ index 9eb29fcae74cc7618f1d44fd64d63d7940f61260..e8828606e98a61a5d99c9c638e67eda8
|
||||
v8::Local<v8::Context> context,
|
||||
v8::Local<v8::Data> v8_host_defined_options,
|
||||
v8::Local<v8::Value> v8_referrer_resource_url,
|
||||
@@ -707,20 +708,23 @@ v8::MaybeLocal<v8::Promise> HostImportModuleWithPhaseDynamically(
|
||||
@@ -716,20 +717,23 @@ v8::MaybeLocal<v8::Promise> HostImportModuleWithPhaseDynamically(
|
||||
|
||||
return resolver->Promise().V8Promise();
|
||||
}
|
||||
@@ -47,7 +47,7 @@ index 9eb29fcae74cc7618f1d44fd64d63d7940f61260..e8828606e98a61a5d99c9c638e67eda8
|
||||
v8::Local<v8::Module> module,
|
||||
v8::Local<v8::Object> meta) {
|
||||
v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
||||
@@ -747,6 +751,7 @@ void HostGetImportMetaProperties(v8::Local<v8::Context> context,
|
||||
@@ -756,6 +760,7 @@ void HostGetImportMetaProperties(v8::Local<v8::Context> context,
|
||||
meta->CreateDataProperty(context, resolve_key, resolve_value).ToChecked();
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ index 9eb29fcae74cc7618f1d44fd64d63d7940f61260..e8828606e98a61a5d99c9c638e67eda8
|
||||
bool IsDOMExceptionWrapper(v8::Isolate* isolate, v8::Local<v8::Object> object) {
|
||||
return V8DOMException::HasInstance(isolate, object);
|
||||
}
|
||||
@@ -777,7 +782,6 @@ void EmitDevToolsEvent(v8::Isolate* isolate) {
|
||||
@@ -786,7 +791,6 @@ void EmitDevToolsEvent(v8::Isolate* isolate) {
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -63,7 +63,7 @@ index 9eb29fcae74cc7618f1d44fd64d63d7940f61260..e8828606e98a61a5d99c9c638e67eda8
|
||||
void V8Initializer::InitializeV8Common(v8::Isolate* isolate) {
|
||||
// Set up garbage collection before setting up anything else as V8 may trigger
|
||||
// GCs during Blink setup.
|
||||
@@ -794,9 +798,9 @@ void V8Initializer::InitializeV8Common(v8::Isolate* isolate) {
|
||||
@@ -803,9 +807,9 @@ void V8Initializer::InitializeV8Common(v8::Isolate* isolate) {
|
||||
SharedArrayBufferConstructorEnabledCallback);
|
||||
isolate->SetHostImportModuleDynamicallyCallback(HostImportModuleDynamically);
|
||||
isolate->SetHostImportModuleWithPhaseDynamicallyCallback(
|
||||
|
||||
@@ -1,103 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: deepak1556 <hop2deep@gmail.com>
|
||||
Date: Fri, 27 Jun 2025 02:34:16 +0900
|
||||
Subject: Revert "update siso-chromium image"
|
||||
|
||||
This reverts commit b36ef7a445fca58be9a2ebead68bfbda251667ff.
|
||||
|
||||
Reason for revert:
|
||||
* Requires deployment of new container on our rbe cluster which cannot
|
||||
happen immediately due to siso transition.
|
||||
* Helps unblock the roller PRs.
|
||||
* Image bump was to remove i686 support which doesn't affect us
|
||||
https://chromium-review.googlesource.com/c/infra/infra/+/6664079
|
||||
|
||||
diff --git a/build/config/siso/backend_config/google.star b/build/config/siso/backend_config/google.star
|
||||
index 31b3687d2925325259f33b07754680ba350e3059..348317edc26774168732aacb0fed110c4bbec552 100644
|
||||
--- a/build/config/siso/backend_config/google.star
|
||||
+++ b/build/config/siso/backend_config/google.star
|
||||
@@ -7,7 +7,7 @@
|
||||
load("@builtin//struct.star", "module")
|
||||
|
||||
def __platform_properties(ctx):
|
||||
- container_image = "docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:d7cb1ab14a0f20aa669c23f22c15a9dead761dcac19f43985bf9dd5f41fbef3a"
|
||||
+ container_image = "docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:ef35d347f4a4a2d32b76fd908e66e96f59bf8ba7379fd5626548244c45343b2b"
|
||||
return {
|
||||
"default": {
|
||||
"OSFamily": "Linux",
|
||||
diff --git a/build/config/siso/backend_config/google_cros_chroot.star b/build/config/siso/backend_config/google_cros_chroot.star
|
||||
index 2763740c7a6b80cc689e745f9af1d7c7ed664d7d..ea1855d8823e4aa31acc920d295d56939efe624d 100644
|
||||
--- a/build/config/siso/backend_config/google_cros_chroot.star
|
||||
+++ b/build/config/siso/backend_config/google_cros_chroot.star
|
||||
@@ -8,7 +8,7 @@ load("@builtin//struct.star", "module")
|
||||
|
||||
def __platform_properties(ctx):
|
||||
# LINT.IfChange
|
||||
- container_image = "docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:d7cb1ab14a0f20aa669c23f22c15a9dead761dcac19f43985bf9dd5f41fbef3a"
|
||||
+ container_image = "docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:ef35d347f4a4a2d32b76fd908e66e96f59bf8ba7379fd5626548244c45343b2b"
|
||||
|
||||
return {
|
||||
"default": {
|
||||
diff --git a/buildtools/reclient_cfgs/linux/chromium-browser-clang/rewrapper_linux.cfg b/buildtools/reclient_cfgs/linux/chromium-browser-clang/rewrapper_linux.cfg
|
||||
index ca8e84948679c7892534fbf793afcec887009c30..6f6e1ca9a0c1385b94aa3b46be5a0a143fc57835 100644
|
||||
--- a/buildtools/reclient_cfgs/linux/chromium-browser-clang/rewrapper_linux.cfg
|
||||
+++ b/buildtools/reclient_cfgs/linux/chromium-browser-clang/rewrapper_linux.cfg
|
||||
@@ -1,4 +1,4 @@
|
||||
-platform=container-image=docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:d7cb1ab14a0f20aa669c23f22c15a9dead761dcac19f43985bf9dd5f41fbef3a,label:action_default=1
|
||||
+platform=container-image=docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:26de99218a1a8b527d4840490bcbf1690ee0b55c84316300b60776e6b3a03fe1,label:action_default=1
|
||||
server_address=unix:///tmp/reproxy.sock
|
||||
labels=type=compile,compiler=clang,lang=cpp
|
||||
exec_strategy=racing
|
||||
diff --git a/buildtools/reclient_cfgs/linux/python/rewrapper_linux.cfg b/buildtools/reclient_cfgs/linux/python/rewrapper_linux.cfg
|
||||
index d1ed4fe108a4b954e0f933d12e5308170f357548..12ae5379c2fe6ff2ae9473703730d87fdcc52b3f 100644
|
||||
--- a/buildtools/reclient_cfgs/linux/python/rewrapper_linux.cfg
|
||||
+++ b/buildtools/reclient_cfgs/linux/python/rewrapper_linux.cfg
|
||||
@@ -1,4 +1,4 @@
|
||||
-platform=container-image=docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:d7cb1ab14a0f20aa669c23f22c15a9dead761dcac19f43985bf9dd5f41fbef3a,label:action_default=1
|
||||
+platform=container-image=docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:26de99218a1a8b527d4840490bcbf1690ee0b55c84316300b60776e6b3a03fe1,label:action_default=1
|
||||
server_address=unix:///tmp/reproxy.sock
|
||||
labels=type=tool
|
||||
exec_strategy=remote_local_fallback
|
||||
diff --git a/buildtools/reclient_cfgs/linux_chroot/chromium-browser-clang/rewrapper_linux.cfg b/buildtools/reclient_cfgs/linux_chroot/chromium-browser-clang/rewrapper_linux.cfg
|
||||
index c6c29e29031f38ef172468ade17fde29d648d85d..e73e2e6c7a1876678c547f0f686f817ef03bfd65 100644
|
||||
--- a/buildtools/reclient_cfgs/linux_chroot/chromium-browser-clang/rewrapper_linux.cfg
|
||||
+++ b/buildtools/reclient_cfgs/linux_chroot/chromium-browser-clang/rewrapper_linux.cfg
|
||||
@@ -1,5 +1,5 @@
|
||||
# LINT.IfChange
|
||||
-platform=container-image=docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:d7cb1ab14a0f20aa669c23f22c15a9dead761dcac19f43985bf9dd5f41fbef3a,dockerChrootPath=.,dockerRuntime=runsc,label:orchestrator=portage,label:package_accelerator=reclient,label:core_count=2
|
||||
+platform=container-image=docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:26de99218a1a8b527d4840490bcbf1690ee0b55c84316300b60776e6b3a03fe1,dockerChrootPath=.,dockerRuntime=runsc,label:orchestrator=portage,label:package_accelerator=reclient,label:core_count=2
|
||||
# LINT.ThenChange(/build/config/siso/backend_config/google_cros_chroot.star)
|
||||
server_address=unix:///tmp/reproxy.sock
|
||||
labels=type=compile,compiler=clang,lang=cpp
|
||||
diff --git a/buildtools/reclient_cfgs/linux_chroot/python/rewrapper_linux.cfg b/buildtools/reclient_cfgs/linux_chroot/python/rewrapper_linux.cfg
|
||||
index 41279923537cc42505e9e47301afe0dec7095c05..918fc9cb47afc8ec8f6b7e060504da7108aa0f91 100644
|
||||
--- a/buildtools/reclient_cfgs/linux_chroot/python/rewrapper_linux.cfg
|
||||
+++ b/buildtools/reclient_cfgs/linux_chroot/python/rewrapper_linux.cfg
|
||||
@@ -1,4 +1,4 @@
|
||||
-platform=container-image=docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:d7cb1ab14a0f20aa669c23f22c15a9dead761dcac19f43985bf9dd5f41fbef3a,dockerRuntime=runsc,label:orchestrator=portage,label:package_accelerator=reclient,label:core_count=2
|
||||
+platform=container-image=docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:26de99218a1a8b527d4840490bcbf1690ee0b55c84316300b60776e6b3a03fe1,dockerRuntime=runsc,label:orchestrator=portage,label:package_accelerator=reclient,label:core_count=2
|
||||
server_address=unix:///tmp/reproxy.sock
|
||||
labels=type=tool
|
||||
exec_strategy=remote_local_fallback
|
||||
diff --git a/buildtools/reclient_cfgs/linux_cros/chromium-browser-clang/rewrapper_linux.cfg b/buildtools/reclient_cfgs/linux_cros/chromium-browser-clang/rewrapper_linux.cfg
|
||||
index 237af4b723b7b269a97cdf57ecdf4a1cfcd0d76a..6eb61b9ac0d03a0983964d1334389e09d091f4d5 100644
|
||||
--- a/buildtools/reclient_cfgs/linux_cros/chromium-browser-clang/rewrapper_linux.cfg
|
||||
+++ b/buildtools/reclient_cfgs/linux_cros/chromium-browser-clang/rewrapper_linux.cfg
|
||||
@@ -1,5 +1,5 @@
|
||||
# Configuration for the ChromeOS build using Chrome's bundled toolchain.
|
||||
-platform=container-image=docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:d7cb1ab14a0f20aa669c23f22c15a9dead761dcac19f43985bf9dd5f41fbef3a,dockerRuntime=runsc,label:orchestrator=portage,label:package_accelerator=reclient,label:core_count=2
|
||||
+platform=container-image=docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:26de99218a1a8b527d4840490bcbf1690ee0b55c84316300b60776e6b3a03fe1,dockerRuntime=runsc,label:orchestrator=portage,label:package_accelerator=reclient,label:core_count=2
|
||||
server_address=unix:///tmp/reproxy.sock
|
||||
labels=type=compile,compiler=clang,lang=cpp
|
||||
exec_strategy=remote_local_fallback
|
||||
diff --git a/buildtools/reclient_cfgs/linux_cros/python/rewrapper_linux.cfg b/buildtools/reclient_cfgs/linux_cros/python/rewrapper_linux.cfg
|
||||
index b2579800ff1ae44737c1aa8034923e060999c944..f8332cd84bbc495e161193cd242302c659748596 100644
|
||||
--- a/buildtools/reclient_cfgs/linux_cros/python/rewrapper_linux.cfg
|
||||
+++ b/buildtools/reclient_cfgs/linux_cros/python/rewrapper_linux.cfg
|
||||
@@ -1,5 +1,5 @@
|
||||
# Configuration file for Python actions in the ChromeOS build.
|
||||
-platform=container-image=docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:d7cb1ab14a0f20aa669c23f22c15a9dead761dcac19f43985bf9dd5f41fbef3a,dockerRuntime=runsc,label:orchestrator=portage,label:package_accelerator=reclient,label:core_count=2
|
||||
+platform=container-image=docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:26de99218a1a8b527d4840490bcbf1690ee0b55c84316300b60776e6b3a03fe1,dockerRuntime=runsc,label:orchestrator=portage,label:package_accelerator=reclient,label:core_count=2
|
||||
server_address=unix:///tmp/reproxy.sock
|
||||
labels=type=tool
|
||||
exec_strategy=remote_local_fallback
|
||||
@@ -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 d01dd0a53bb41f0c66676ca313453d43a2aab80a..620017bbe06e504a65bcb3a778be6f440a4d8bce 100644
|
||||
index e887bbb4792382d4aa2ceaed018c492e258d00fe..98f1270a3f74f9a1ce641f629e5ae6100fefec13 100644
|
||||
--- a/testing/variations/fieldtrial_testing_config.json
|
||||
+++ b/testing/variations/fieldtrial_testing_config.json
|
||||
@@ -24851,6 +24851,21 @@
|
||||
@@ -24897,6 +24897,21 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -67,10 +67,10 @@ index 58063f2452dc484a97c79b382067d9b34875e344..d586436498263c595a17454f54644d2d
|
||||
|
||||
} // namespace views::features
|
||||
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
|
||||
index f84b915edfd76df977aaa4fc7f0c1ae694726784..b5535be3425305a5f1eb4cd3d41e4a775175c8e6 100644
|
||||
index 54a94e1348fa196eaee8314076c47286c9ab0bcc..ed4d2c4d849085c0e7830c5d52d47daf2700ce34 100644
|
||||
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
|
||||
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
|
||||
@@ -83,6 +83,23 @@ namespace {
|
||||
@@ -84,6 +84,23 @@ namespace {
|
||||
// This constant controls how many pixels wide that border is.
|
||||
const int kMouseCaptureRegionBorder = 5;
|
||||
|
||||
@@ -94,7 +94,7 @@ index f84b915edfd76df977aaa4fc7f0c1ae694726784..b5535be3425305a5f1eb4cd3d41e4a77
|
||||
// Updates the cursor clip region. Used for mouse locking.
|
||||
void UpdateMouseLockRegion(aura::Window* window, bool locked) {
|
||||
if (!locked) {
|
||||
@@ -324,9 +341,14 @@ bool DesktopWindowTreeHostWin::IsVisible() const {
|
||||
@@ -333,9 +350,14 @@ bool DesktopWindowTreeHostWin::IsVisible() const {
|
||||
}
|
||||
|
||||
void DesktopWindowTreeHostWin::SetSize(const gfx::Size& size) {
|
||||
@@ -111,7 +111,7 @@ index f84b915edfd76df977aaa4fc7f0c1ae694726784..b5535be3425305a5f1eb4cd3d41e4a77
|
||||
}
|
||||
|
||||
void DesktopWindowTreeHostWin::StackAbove(aura::Window* window) {
|
||||
@@ -341,30 +363,40 @@ void DesktopWindowTreeHostWin::StackAtTop() {
|
||||
@@ -350,30 +372,40 @@ void DesktopWindowTreeHostWin::StackAtTop() {
|
||||
}
|
||||
|
||||
void DesktopWindowTreeHostWin::CenterWindow(const gfx::Size& size) {
|
||||
@@ -154,7 +154,7 @@ index f84b915edfd76df977aaa4fc7f0c1ae694726784..b5535be3425305a5f1eb4cd3d41e4a77
|
||||
return display::win::GetScreenWin()->ScreenToDIPRect(GetHWND(), pixel_bounds);
|
||||
}
|
||||
|
||||
@@ -673,37 +705,44 @@ void DesktopWindowTreeHostWin::HideImpl() {
|
||||
@@ -682,37 +714,44 @@ void DesktopWindowTreeHostWin::HideImpl() {
|
||||
// other get/set methods work in DIP.
|
||||
|
||||
gfx::Rect DesktopWindowTreeHostWin::GetBoundsInPixels() const {
|
||||
@@ -219,7 +219,7 @@ index f84b915edfd76df977aaa4fc7f0c1ae694726784..b5535be3425305a5f1eb4cd3d41e4a77
|
||||
}
|
||||
|
||||
gfx::Rect
|
||||
@@ -913,21 +952,29 @@ int DesktopWindowTreeHostWin::GetNonClientComponent(
|
||||
@@ -922,21 +961,29 @@ int DesktopWindowTreeHostWin::GetNonClientComponent(
|
||||
|
||||
void DesktopWindowTreeHostWin::GetWindowMask(const gfx::Size& size_px,
|
||||
SkPath* path) {
|
||||
|
||||
@@ -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 2a7958de7e70e60de88d67be33d07194911f4110..d1bac244fd4321a87b8e796c27a063fe0e9278d6 100644
|
||||
index 250acc1ce30e1d942bea7869c6425f5968ddca76..14a2802383a6edeec32bbb736f8299be36415d32 100644
|
||||
--- a/content/renderer/render_thread_impl.cc
|
||||
+++ b/content/renderer/render_thread_impl.cc
|
||||
@@ -1269,7 +1269,7 @@ bool RenderThreadImpl::IsLcdTextEnabled() {
|
||||
|
||||
@@ -15,7 +15,7 @@ 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 861468d545856eb894b3eaae943028b954c83b82..3d6489a4abcdf7f6c26507583df446c4b293cd13 100644
|
||||
index 63d85f0d13672f5007553e5b116211ea33004b57..cee19f29d6bd20f311bfcd9f1fc0fabb8ef9cb74 100644
|
||||
--- a/content/browser/renderer_host/render_frame_host_impl.cc
|
||||
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
|
||||
@@ -8922,6 +8922,17 @@ void RenderFrameHostImpl::EnterFullscreen(
|
||||
|
||||
@@ -30,7 +30,7 @@ build_compile_with_c_20_support.patch
|
||||
add_v8_taskpirority_to_foreground_task_runner_signature.patch
|
||||
cli_remove_deprecated_v8_flag.patch
|
||||
build_restore_clang_as_default_compiler_on_macos.patch
|
||||
fix_remove_harmony-import-assertions_from_node_cc.patch
|
||||
fix_remove_outdated_v8_flags_from_node_cc.patch
|
||||
chore_disable_deprecation_ftbfs_in_simdjson_header.patch
|
||||
build_allow_unbundling_of_node_js_dependencies.patch
|
||||
test_use_static_method_names_in_call_stacks.patch
|
||||
|
||||
@@ -24,7 +24,7 @@ index 2415940835036226799a7ea14c6687cc0d56c523..0feb07afbccad97a92cee00954443407
|
||||
o['variables']['v8_enable_external_code_space'] = 1 if options.enable_pointer_compression else 0
|
||||
o['variables']['v8_enable_31bit_smis_on_64bit_arch'] = 1 if options.enable_pointer_compression else 0
|
||||
diff --git a/node.gni b/node.gni
|
||||
index b049f0692980c3e26771c3209c3bdd2e9a4d637b..e2407027ab05e59b2f0f1c213b98ea469db7a91b 100644
|
||||
index d4438f7fd61598afac2c1e3184721a759d22b10c..e2407027ab05e59b2f0f1c213b98ea469db7a91b 100644
|
||||
--- a/node.gni
|
||||
+++ b/node.gni
|
||||
@@ -5,10 +5,10 @@
|
||||
@@ -40,15 +40,7 @@ index b049f0692980c3e26771c3209c3bdd2e9a4d637b..e2407027ab05e59b2f0f1c213b98ea46
|
||||
|
||||
# The location of OpenSSL - use the one from node's deps by default.
|
||||
node_openssl_path = "$node_path/deps/openssl"
|
||||
@@ -42,12 +42,15 @@ declare_args() {
|
||||
# The variable is called "openssl" for parity with node's GYP build.
|
||||
node_use_openssl = true
|
||||
|
||||
+ # Build node with SQLite support.
|
||||
+ node_use_sqlite = true
|
||||
+
|
||||
# Use the specified path to system CA (PEM format) in addition to
|
||||
# the BoringSSL supplied CA store or compiled-in Mozilla CA copy.
|
||||
@@ -50,7 +50,7 @@ declare_args() {
|
||||
node_openssl_system_ca_path = ""
|
||||
|
||||
# Initialize v8 platform during node.js startup.
|
||||
@@ -57,7 +49,7 @@ index b049f0692980c3e26771c3209c3bdd2e9a4d637b..e2407027ab05e59b2f0f1c213b98ea46
|
||||
|
||||
# Custom build tag.
|
||||
node_tag = ""
|
||||
@@ -67,10 +70,16 @@ declare_args() {
|
||||
@@ -70,10 +70,16 @@ declare_args() {
|
||||
# TODO(zcbenz): There are few broken things for now:
|
||||
# 1. cross-os compilation is not supported.
|
||||
# 2. node_mksnapshot crashes when cross-compiling for x64 from arm64.
|
||||
@@ -76,7 +68,7 @@ index b049f0692980c3e26771c3209c3bdd2e9a4d637b..e2407027ab05e59b2f0f1c213b98ea46
|
||||
|
||||
assert(!node_enable_inspector || node_use_openssl,
|
||||
diff --git a/src/node_builtins.cc b/src/node_builtins.cc
|
||||
index abf1583cdac9f139056cf4809f14e28e62f6d24c..8b104e175ccf8de90c138337f83f8f6ce1348ac7 100644
|
||||
index b4acc40618e372b09d0cb5e3755034f08711a282..efeaaef7e4dc64a0adb5e6bdbbe18945890de62c 100644
|
||||
--- a/src/node_builtins.cc
|
||||
+++ b/src/node_builtins.cc
|
||||
@@ -789,6 +789,7 @@ void BuiltinLoader::RegisterExternalReferences(
|
||||
@@ -279,22 +271,10 @@ index 856878c33681a73d41016729dabe48b0a6a80589..91a11852d206b65485fe90fd037a0bd1
|
||||
if sys.platform == 'win32':
|
||||
files = [ x.replace('\\', '/') for x in files ]
|
||||
diff --git a/unofficial.gni b/unofficial.gni
|
||||
index da565473f1ae96b4d009935f7733e6ab15ea9de2..26ebc811272ef2990f8d090c54e7f5294aab9d37 100644
|
||||
index 865a0d5ce9c6792e57f4216bcaa594ca6fc7b1c8..26ebc811272ef2990f8d090c54e7f5294aab9d37 100644
|
||||
--- a/unofficial.gni
|
||||
+++ b/unofficial.gni
|
||||
@@ -22,6 +22,11 @@ template("node_gn_build") {
|
||||
} else {
|
||||
defines += [ "HAVE_OPENSSL=0" ]
|
||||
}
|
||||
+ if (node_use_sqlite) {
|
||||
+ defines += [ "HAVE_SQLITE=1" ]
|
||||
+ } else {
|
||||
+ defines += [ "HAVE_SQLITE=0" ]
|
||||
+ }
|
||||
if (node_use_amaro) {
|
||||
defines += [ "HAVE_AMARO=1" ]
|
||||
} else {
|
||||
@@ -142,32 +147,41 @@ template("node_gn_build") {
|
||||
@@ -147,31 +147,41 @@ template("node_gn_build") {
|
||||
public_configs = [
|
||||
":node_external_config",
|
||||
"deps/googletest:googletest_config",
|
||||
@@ -317,7 +297,6 @@ index da565473f1ae96b4d009935f7733e6ab15ea9de2..26ebc811272ef2990f8d090c54e7f529
|
||||
"deps/nghttp2",
|
||||
- "deps/ngtcp2",
|
||||
"deps/postject",
|
||||
- "deps/sqlite",
|
||||
"deps/uvwasi",
|
||||
- "deps/zstd",
|
||||
"//third_party/zlib",
|
||||
@@ -340,7 +319,7 @@ index da565473f1ae96b4d009935f7733e6ab15ea9de2..26ebc811272ef2990f8d090c54e7f529
|
||||
"$target_gen_dir/node_javascript.cc",
|
||||
] + gypi_values.node_sources
|
||||
|
||||
@@ -190,9 +204,13 @@ template("node_gn_build") {
|
||||
@@ -194,7 +204,7 @@ template("node_gn_build") {
|
||||
}
|
||||
if (node_use_openssl) {
|
||||
deps += [ "deps/ncrypto" ]
|
||||
@@ -348,14 +327,8 @@ index da565473f1ae96b4d009935f7733e6ab15ea9de2..26ebc811272ef2990f8d090c54e7f529
|
||||
+ public_deps += [ "//third_party/boringssl" ]
|
||||
sources += gypi_values.node_crypto_sources
|
||||
}
|
||||
+ if (node_use_sqlite) {
|
||||
+ deps += [ "deps/sqlite" ]
|
||||
+ sources += gypi_values.node_sqlite_sources
|
||||
+ }
|
||||
if (node_enable_inspector) {
|
||||
deps += [
|
||||
"$node_inspector_protocol_path:crdtp",
|
||||
@@ -215,6 +233,10 @@ template("node_gn_build") {
|
||||
if (node_use_sqlite) {
|
||||
@@ -223,6 +233,10 @@ template("node_gn_build") {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -366,7 +339,7 @@ index da565473f1ae96b4d009935f7733e6ab15ea9de2..26ebc811272ef2990f8d090c54e7f529
|
||||
executable(target_name) {
|
||||
forward_variables_from(invoker, "*")
|
||||
|
||||
@@ -289,6 +311,7 @@ template("node_gn_build") {
|
||||
@@ -297,6 +311,7 @@ template("node_gn_build") {
|
||||
}
|
||||
|
||||
executable("node_js2c") {
|
||||
@@ -374,7 +347,7 @@ index da565473f1ae96b4d009935f7733e6ab15ea9de2..26ebc811272ef2990f8d090c54e7f529
|
||||
deps = [
|
||||
"deps/uv",
|
||||
"$node_simdutf_path",
|
||||
@@ -299,26 +322,75 @@ template("node_gn_build") {
|
||||
@@ -307,26 +322,75 @@ template("node_gn_build") {
|
||||
"src/embedded_data.cc",
|
||||
"src/embedded_data.h",
|
||||
]
|
||||
@@ -460,7 +433,7 @@ index da565473f1ae96b4d009935f7733e6ab15ea9de2..26ebc811272ef2990f8d090c54e7f529
|
||||
outputs = [ "$target_gen_dir/node_javascript.cc" ]
|
||||
|
||||
# Get the path to node_js2c executable of the host toolchain.
|
||||
@@ -332,11 +404,11 @@ template("node_gn_build") {
|
||||
@@ -340,11 +404,11 @@ template("node_gn_build") {
|
||||
get_label_info(":node_js2c($host_toolchain)", "name") +
|
||||
host_executable_suffix
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ V8 requires C++20 support as of https://chromium-review.googlesource.com/c/v8/v8
|
||||
This can be removed when Electron upgrades to a version of Node.js containing the required V8 version.
|
||||
|
||||
diff --git a/common.gypi b/common.gypi
|
||||
index 679633dc6b4ce2a1f5f88e93d1a1c1feb4bbadb4..2caa183213d5632be81b763e894e37c09384391f 100644
|
||||
index 3a1d2fc9d147a8c89f7b5231d63d37f29979965d..6425ee9e8dba993f3e899362ce9bd7b097f08883 100644
|
||||
--- a/common.gypi
|
||||
+++ b/common.gypi
|
||||
@@ -539,7 +539,7 @@
|
||||
|
||||
@@ -64,7 +64,7 @@ index 251f51ec454f9cba4023b8b6729241ee753aac13..1de8cac6e3953ce9cab9db03530da327
|
||||
|
||||
module.exports = {
|
||||
diff --git a/node.gyp b/node.gyp
|
||||
index 442c1e7a6ddafbb7a7ec7a42a97ec04b28ea4d93..3a66c11d39dd2fd129c8f54098a9607e080ecca0 100644
|
||||
index d604e0ddd973174aa7be6f2d250af7b9c2b0fcfd..8e97aa3f44087213425927113fe72bca9ddef45b 100644
|
||||
--- a/node.gyp
|
||||
+++ b/node.gyp
|
||||
@@ -176,7 +176,6 @@
|
||||
|
||||
@@ -7,7 +7,7 @@ Subject: build: ensure native module compilation fails if not using a new
|
||||
This should not be upstreamed, it is a quality-of-life patch for downstream module builders.
|
||||
|
||||
diff --git a/common.gypi b/common.gypi
|
||||
index 33af43cd768c24b26d523f3db66eb8b9eb26859a..679633dc6b4ce2a1f5f88e93d1a1c1feb4bbadb4 100644
|
||||
index e56ba31ed068b81f5c6fbd432cd82bb6916e9a85..3a1d2fc9d147a8c89f7b5231d63d37f29979965d 100644
|
||||
--- a/common.gypi
|
||||
+++ b/common.gypi
|
||||
@@ -89,6 +89,8 @@
|
||||
|
||||
@@ -34,7 +34,7 @@ index 0244a214b187e67e0cb89f26cd019855963ec93a..b65a3be6bcb0e28f7f43367d0fa9da53
|
||||
let kResistStopPropagation;
|
||||
|
||||
diff --git a/src/node_builtins.cc b/src/node_builtins.cc
|
||||
index 8b104e175ccf8de90c138337f83f8f6ce1348ac7..35cf42a5e533cb799bf129df0c8370bfe8310233 100644
|
||||
index efeaaef7e4dc64a0adb5e6bdbbe18945890de62c..557972987abeaa56918362638a17a9b6e0763238 100644
|
||||
--- a/src/node_builtins.cc
|
||||
+++ b/src/node_builtins.cc
|
||||
@@ -35,6 +35,7 @@ using v8::Value;
|
||||
|
||||
@@ -11,7 +11,7 @@ node-gyp will use the result of `process.config` that reflects the environment
|
||||
in which the binary got built.
|
||||
|
||||
diff --git a/common.gypi b/common.gypi
|
||||
index 2caa183213d5632be81b763e894e37c09384391f..2cce436c4a9e3d942f957f6c94a4ef9e3db391ce 100644
|
||||
index 6425ee9e8dba993f3e899362ce9bd7b097f08883..95d66f75b582b3fd3b833109dfe110ae5b196f83 100644
|
||||
--- a/common.gypi
|
||||
+++ b/common.gypi
|
||||
@@ -128,6 +128,7 @@
|
||||
|
||||
@@ -8,7 +8,7 @@ they use themselves as the entry point. We should try to upstream some form
|
||||
of this.
|
||||
|
||||
diff --git a/lib/internal/process/pre_execution.js b/lib/internal/process/pre_execution.js
|
||||
index 0cda54fd85e1e0bff13d4718a269eb3e7c60312a..6b165062a5eaa40f6e5614bca50bc33ccbdb85cc 100644
|
||||
index 98ed40e3076f6628b1771dade63ac51600e8e447..1eba13caf1e00a8b41b2cf8afc4168c8f98be69f 100644
|
||||
--- a/lib/internal/process/pre_execution.js
|
||||
+++ b/lib/internal/process/pre_execution.js
|
||||
@@ -245,12 +245,14 @@ function patchProcessObject(expandArgv1) {
|
||||
|
||||
@@ -15,10 +15,10 @@ Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
|
||||
Reviewed-By: Yagiz Nizipli <yagiz.nizipli@sentry.io>
|
||||
|
||||
diff --git a/doc/api/cli.md b/doc/api/cli.md
|
||||
index 404e87e6d1237b5ee79cafd8a959c1b6d9d23fe5..7deda572c940f7b2e8c6813f1826796a13e4db38 100644
|
||||
index 8cabb58e621a9951acd5551afb85c192f2b1c690..b69bacebef3e5e5e5b191c61aa5fe0f71c1edfb3 100644
|
||||
--- a/doc/api/cli.md
|
||||
+++ b/doc/api/cli.md
|
||||
@@ -2709,39 +2709,6 @@ added: v12.0.0
|
||||
@@ -2712,39 +2712,6 @@ added: v12.0.0
|
||||
Set default [`tls.DEFAULT_MIN_VERSION`][] to 'TLSv1.3'. Use to disable support
|
||||
for TLSv1.2, which is not as secure as TLSv1.3.
|
||||
|
||||
@@ -58,7 +58,7 @@ index 404e87e6d1237b5ee79cafd8a959c1b6d9d23fe5..7deda572c940f7b2e8c6813f1826796a
|
||||
### `--trace-deprecation`
|
||||
|
||||
<!-- YAML
|
||||
@@ -3423,7 +3390,6 @@ one is included in the list below.
|
||||
@@ -3429,7 +3396,6 @@ one is included in the list below.
|
||||
* `--tls-min-v1.1`
|
||||
* `--tls-min-v1.2`
|
||||
* `--tls-min-v1.3`
|
||||
@@ -67,7 +67,7 @@ index 404e87e6d1237b5ee79cafd8a959c1b6d9d23fe5..7deda572c940f7b2e8c6813f1826796a
|
||||
* `--trace-env-js-stack`
|
||||
* `--trace-env-native-stack`
|
||||
diff --git a/doc/node.1 b/doc/node.1
|
||||
index f41323c799ad34c8e17a36d81e4cc2b16e50e9ee..a9ff54edfad1d053ec1ac544f28e14a1898ac177 100644
|
||||
index 6913992a5476d2317a34fb69d3c6af63b686f9a6..1faef5ba1d4206a5cc4c71cb71f7a08f613fbf17 100644
|
||||
--- a/doc/node.1
|
||||
+++ b/doc/node.1
|
||||
@@ -539,11 +539,6 @@ but the option is supported for compatibility with older Node.js versions.
|
||||
@@ -83,7 +83,7 @@ index f41323c799ad34c8e17a36d81e4cc2b16e50e9ee..a9ff54edfad1d053ec1ac544f28e14a1
|
||||
Print stack traces for deprecations.
|
||||
.
|
||||
diff --git a/src/node.cc b/src/node.cc
|
||||
index 0c2a4d344c991c2ca0d9d90934cf7921abf2a629..19d9fb77f1aaf003e43b7d7016f45e6c35df06b3 100644
|
||||
index 0d383dcdb80fe30e3c2d6880b44f626f065bb1f3..9d9992dacbc595c987827f55eb12ea8af0480df6 100644
|
||||
--- a/src/node.cc
|
||||
+++ b/src/node.cc
|
||||
@@ -232,44 +232,6 @@ void Environment::WaitForInspectorFrontendByOptions() {
|
||||
@@ -150,7 +150,7 @@ index 0c2a4d344c991c2ca0d9d90934cf7921abf2a629..19d9fb77f1aaf003e43b7d7016f45e6c
|
||||
isolate_->SetPromiseHook(TracePromises);
|
||||
}
|
||||
diff --git a/src/node_options.cc b/src/node_options.cc
|
||||
index d6988a5a8c068022d10607c32e57ac667f821337..4deaa52a8a4688bca32d41b74124604b6e33c80b 100644
|
||||
index cfb95f65ccb0c6d150be8a4039caf26faf7cd06d..cb0ecd81b33abd7743e66e225a6cb96b4094f935 100644
|
||||
--- a/src/node_options.cc
|
||||
+++ b/src/node_options.cc
|
||||
@@ -773,10 +773,6 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() {
|
||||
@@ -165,7 +165,7 @@ index d6988a5a8c068022d10607c32e57ac667f821337..4deaa52a8a4688bca32d41b74124604b
|
||||
"show stack traces on deprecations",
|
||||
&EnvironmentOptions::trace_deprecation,
|
||||
diff --git a/src/node_options.h b/src/node_options.h
|
||||
index 2b7df46312b8be58d6062b6a2f6084247e075c37..2d52cde518926577834f77424fa5b2231ca3374e 100644
|
||||
index 3ff1f4b4baa64b8ee2a4587e150ea14cb2fdfdf4..26ac54c4b18dd00b2c1f915dc1ba0e90ca70b48f 100644
|
||||
--- a/src/node_options.h
|
||||
+++ b/src/node_options.h
|
||||
@@ -204,7 +204,6 @@ class EnvironmentOptions : public Options {
|
||||
|
||||
@@ -18,10 +18,10 @@ Reviewed-By: Michaël Zasso <targos@protonmail.com>
|
||||
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
|
||||
|
||||
diff --git a/doc/api/cli.md b/doc/api/cli.md
|
||||
index 78c0794a57fd4fdcdd8a64fe98a6b13f9ef3f23a..404e87e6d1237b5ee79cafd8a959c1b6d9d23fe5 100644
|
||||
index 1a1e0ec1d89a4d0ecf1c9ae37c23b8f660c051d6..8cabb58e621a9951acd5551afb85c192f2b1c690 100644
|
||||
--- a/doc/api/cli.md
|
||||
+++ b/doc/api/cli.md
|
||||
@@ -3461,7 +3461,6 @@ V8 options that are allowed are:
|
||||
@@ -3467,7 +3467,6 @@ V8 options that are allowed are:
|
||||
* `--disallow-code-generation-from-strings`
|
||||
* `--enable-etw-stack-walking`
|
||||
* `--expose-gc`
|
||||
@@ -30,7 +30,7 @@ index 78c0794a57fd4fdcdd8a64fe98a6b13f9ef3f23a..404e87e6d1237b5ee79cafd8a959c1b6
|
||||
* `--jitless`
|
||||
* `--max-old-space-size`
|
||||
diff --git a/src/node_options.cc b/src/node_options.cc
|
||||
index 367f7d9b1450e4d9e6d8fef36a2234e7d1344804..d6988a5a8c068022d10607c32e57ac667f821337 100644
|
||||
index 415d4e34f29bc303674dccbfdc231b251401961b..cfb95f65ccb0c6d150be8a4039caf26faf7cd06d 100644
|
||||
--- a/src/node_options.cc
|
||||
+++ b/src/node_options.cc
|
||||
@@ -1001,11 +1001,6 @@ PerIsolateOptionsParser::PerIsolateOptionsParser(
|
||||
|
||||
@@ -7,7 +7,7 @@ common.gypi is a file that's included in the node header bundle, despite
|
||||
the fact that we do not build node with gyp.
|
||||
|
||||
diff --git a/common.gypi b/common.gypi
|
||||
index 20135003dd040ebfb3661c81c89fde93ce00fbfb..33af43cd768c24b26d523f3db66eb8b9eb26859a 100644
|
||||
index 7780ae106b479ca620a4065f08d6e4acc200628c..e56ba31ed068b81f5c6fbd432cd82bb6916e9a85 100644
|
||||
--- a/common.gypi
|
||||
+++ b/common.gypi
|
||||
@@ -91,6 +91,23 @@
|
||||
|
||||
@@ -53,10 +53,10 @@ index e3afd30ba1f591d0298793bc42fd7166a4219bce..408dc96307d7f52f92db41004b358051
|
||||
const maybeMain = resolvedOption <= legacyMainResolveExtensionsIndexes.kResolvedByMainIndexNode ?
|
||||
packageConfig.main || './' : '';
|
||||
diff --git a/src/node_file.cc b/src/node_file.cc
|
||||
index 7d174113a22cb26e767f8756ce0f0cdedd68d7d7..f3142dab526064114771af154c3389961771b5dc 100644
|
||||
index c8e7e341b1d9f5a1142afdc265704455c252a0c3..7221708a2296ff44c19ed01dc52d78653ecc4e58 100644
|
||||
--- a/src/node_file.cc
|
||||
+++ b/src/node_file.cc
|
||||
@@ -3482,13 +3482,25 @@ static void CpSyncCopyDir(const FunctionCallbackInfo<Value>& args) {
|
||||
@@ -3504,13 +3504,25 @@ static void CpSyncCopyDir(const FunctionCallbackInfo<Value>& args) {
|
||||
}
|
||||
|
||||
BindingData::FilePathIsFileReturnType BindingData::FilePathIsFile(
|
||||
@@ -83,7 +83,7 @@ index 7d174113a22cb26e767f8756ce0f0cdedd68d7d7..f3142dab526064114771af154c338996
|
||||
uv_fs_t req;
|
||||
|
||||
int rc = uv_fs_stat(env->event_loop(), &req, file_path.c_str(), nullptr);
|
||||
@@ -3546,6 +3558,11 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) {
|
||||
@@ -3568,6 +3580,11 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) {
|
||||
std::optional<std::string> initial_file_path;
|
||||
std::string file_path;
|
||||
|
||||
@@ -95,7 +95,7 @@ index 7d174113a22cb26e767f8756ce0f0cdedd68d7d7..f3142dab526064114771af154c338996
|
||||
if (args.Length() >= 2 && args[1]->IsString()) {
|
||||
auto package_config_main = Utf8Value(isolate, args[1]).ToString();
|
||||
|
||||
@@ -3566,7 +3583,7 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) {
|
||||
@@ -3588,7 +3605,7 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) {
|
||||
BufferValue buff_file_path(isolate, local_file_path);
|
||||
ToNamespacedPath(env, &buff_file_path);
|
||||
|
||||
@@ -104,7 +104,7 @@ index 7d174113a22cb26e767f8756ce0f0cdedd68d7d7..f3142dab526064114771af154c338996
|
||||
case BindingData::FilePathIsFileReturnType::kIsFile:
|
||||
return args.GetReturnValue().Set(i);
|
||||
case BindingData::FilePathIsFileReturnType::kIsNotFile:
|
||||
@@ -3603,7 +3620,7 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) {
|
||||
@@ -3625,7 +3642,7 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) {
|
||||
BufferValue buff_file_path(isolate, local_file_path);
|
||||
ToNamespacedPath(env, &buff_file_path);
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ if the override has been disabled.
|
||||
This will be upstreamed.
|
||||
|
||||
diff --git a/lib/internal/assert/utils.js b/lib/internal/assert/utils.js
|
||||
index d059fa89baf7d4f7d921d00871a97494be4a166a..a0f7fd2e4512e9b4196bbf5fe4390b00e5e2d9a8 100644
|
||||
index 13e41d67c635c27bd5e69eb4960eace34beaef0d..9a99c9ca93907630f9f3ba7ba24577a11465661c 100644
|
||||
--- a/lib/internal/assert/utils.js
|
||||
+++ b/lib/internal/assert/utils.js
|
||||
@@ -24,6 +24,7 @@ const AssertionError = require('internal/assert/assertion_error');
|
||||
@@ -44,7 +44,7 @@ index d059fa89baf7d4f7d921d00871a97494be4a166a..a0f7fd2e4512e9b4196bbf5fe4390b00
|
||||
let filename = call.getFileName();
|
||||
const line = call.getLineNumber() - 1;
|
||||
diff --git a/src/node_options.cc b/src/node_options.cc
|
||||
index 9cf107b1048208ffcb69ff91e0d36ffacc741805..367f7d9b1450e4d9e6d8fef36a2234e7d1344804 100644
|
||||
index 653112fbaea59fe8b446236085dcae8be671c6e5..415d4e34f29bc303674dccbfdc231b251401961b 100644
|
||||
--- a/src/node_options.cc
|
||||
+++ b/src/node_options.cc
|
||||
@@ -1566,14 +1566,16 @@ void GetEmbedderOptions(const FunctionCallbackInfo<Value>& args) {
|
||||
|
||||
@@ -12,10 +12,10 @@ This can be removed/refactored once Node.js upgrades to a version of V8
|
||||
containing the above CL.
|
||||
|
||||
diff --git a/src/node.cc b/src/node.cc
|
||||
index 19d9fb77f1aaf003e43b7d7016f45e6c35df06b3..9fad3198757ce639eb491eb628c6264a17002bf2 100644
|
||||
index 9d9992dacbc595c987827f55eb12ea8af0480df6..d43a88b8780f04d186485a2dc58ad07083e699ac 100644
|
||||
--- a/src/node.cc
|
||||
+++ b/src/node.cc
|
||||
@@ -1208,7 +1208,7 @@ InitializeOncePerProcessInternal(const std::vector<std::string>& args,
|
||||
@@ -1222,7 +1222,7 @@ InitializeOncePerProcessInternal(const std::vector<std::string>& args,
|
||||
result->platform_ = per_process::v8_platform.Platform();
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ before it's acceptable to upstream, as this patch comments out a couple
|
||||
of tests that upstream probably cares about.
|
||||
|
||||
diff --git a/test/parallel/test-crypto-async-sign-verify.js b/test/parallel/test-crypto-async-sign-verify.js
|
||||
index b35dd08e6c49796418cd9d10eb5cc9d02b39961e..97bcd79b331db140d157e6b1faf92625597edc98 100644
|
||||
index 7a5e72b1e8e498fdfa8de12aa9b9672dc047248c..f326c52894f86ef9c82c685a8685245138f01ed5 100644
|
||||
--- a/test/parallel/test-crypto-async-sign-verify.js
|
||||
+++ b/test/parallel/test-crypto-async-sign-verify.js
|
||||
@@ -89,6 +89,7 @@ test('rsa_public.pem', 'rsa_private.pem', 'sha256', false,
|
||||
@@ -268,7 +268,7 @@ index 48cd1ed4df61aaddeee8785cb90f83bdd9628187..d09e01712c617597833bb1320a32a967
|
||||
|
||||
// No-pad encrypted string should return the same:
|
||||
diff --git a/test/parallel/test-crypto-rsa-dsa.js b/test/parallel/test-crypto-rsa-dsa.js
|
||||
index dcd5045daaf58c60e27c1e2f7941033302241339..b52ec0e2cd5d6b1c9a0fee3064f2f8ff3b6e4308 100644
|
||||
index 119bc3c2d20ea7d681f0b579f9d91ad46cdc3634..8d13b105fa426015a873c411ad1d7f64b3d9580e 100644
|
||||
--- a/test/parallel/test-crypto-rsa-dsa.js
|
||||
+++ b/test/parallel/test-crypto-rsa-dsa.js
|
||||
@@ -29,12 +29,11 @@ const dsaPkcs8KeyPem = fixtures.readKey('dsa_private_pkcs8.pem');
|
||||
@@ -296,9 +296,9 @@ index dcd5045daaf58c60e27c1e2f7941033302241339..b52ec0e2cd5d6b1c9a0fee3064f2f8ff
|
||||
- if (padding === constants.RSA_PKCS1_PADDING) {
|
||||
+ if (!process.features.openssl_is_boringssl) {
|
||||
if (!process.config.variables.node_shared_openssl) {
|
||||
assert.throws(() => {
|
||||
crypto.privateDecrypt({
|
||||
@@ -471,7 +470,7 @@ assert.throws(() => {
|
||||
// TODO(richardlau) remove check and else branch after deps/openssl
|
||||
// is upgraded.
|
||||
@@ -489,7 +488,7 @@ assert.throws(() => {
|
||||
//
|
||||
// Test DSA signing and verification
|
||||
//
|
||||
|
||||
@@ -6,7 +6,7 @@ Subject: fix: do not resolve electron entrypoints
|
||||
This wastes fs cycles and can result in strange behavior if this path actually exists on disk
|
||||
|
||||
diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js
|
||||
index 8b55082d2bb0ce743b190a601aff0651095049cd..eb71a78c91b277157980aa1359578390c9fd1ae3 100644
|
||||
index 8e099e0961b624c6143f5a60f050855b3366f177..dfed827fd3fc794f52bad39ccf7b5c14b1caebc3 100644
|
||||
--- a/lib/internal/modules/esm/translators.js
|
||||
+++ b/lib/internal/modules/esm/translators.js
|
||||
@@ -293,6 +293,9 @@ function cjsPreparseModuleExports(filename, source, isMain, format) {
|
||||
|
||||
@@ -8,10 +8,10 @@ an API override to replace the native `ReadFileSync` in the `modules`
|
||||
binding.
|
||||
|
||||
diff --git a/src/env_properties.h b/src/env_properties.h
|
||||
index d4961ac90fbc7fffe44f7d494bfae37ba0fa07e0..7b414e6733adff5740bd8e661846824962048c3e 100644
|
||||
index 5cb8dd86fe712755fe09556d227702aec905fbc9..f1768da6ef82fa85700fecbdf9321653345e92c5 100644
|
||||
--- a/src/env_properties.h
|
||||
+++ b/src/env_properties.h
|
||||
@@ -505,6 +505,7 @@
|
||||
@@ -506,6 +506,7 @@
|
||||
V(maybe_cache_generated_source_map, v8::Function) \
|
||||
V(messaging_deserialize_create_object, v8::Function) \
|
||||
V(message_port, v8::Object) \
|
||||
|
||||
@@ -64,10 +64,10 @@ index e718d7b3e7c11addc78cf7af33c93f63a9cb247b..3334818153068468967baa5adc1ed238
|
||||
}
|
||||
}
|
||||
diff --git a/lib/internal/modules/esm/loader.js b/lib/internal/modules/esm/loader.js
|
||||
index 8d98d50395cf7fbbaf9ae30387727bff5c6cd550..ed3b3c02bbdac78c163d589557651618814685a5 100644
|
||||
index 87c14d1f84def72c1326e09154b38c417840634e..4491499e6da1724a7fd66b028a78ba145d6114aa 100644
|
||||
--- a/lib/internal/modules/esm/loader.js
|
||||
+++ b/lib/internal/modules/esm/loader.js
|
||||
@@ -494,7 +494,7 @@ class ModuleLoader {
|
||||
@@ -498,7 +498,7 @@ class ModuleLoader {
|
||||
}
|
||||
|
||||
const cjsModule = wrap[imported_cjs_symbol];
|
||||
@@ -103,7 +103,7 @@ index 859b6bfedac4bbee2df054f9ebca7cbaaed45f18..5aa946f66c71beff0b7a43c30638ab28
|
||||
|
||||
const packageConfig = packageJsonReader.read(packageJSONPath, { __proto__: null, specifier, base, isESM: true });
|
||||
diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js
|
||||
index 3a69558d7a3dba5bfcb7d3c13299f698fe6c18a1..de1539cebeb1874cbafbe76a4f03217693db2aa1 100644
|
||||
index d595ccbab8ce3042e83054e875eef612914115d8..7ea645b92a015b04cc121ff62aa1fc64b2961241 100644
|
||||
--- a/lib/internal/modules/esm/translators.js
|
||||
+++ b/lib/internal/modules/esm/translators.js
|
||||
@@ -188,7 +188,7 @@ function createCJSModuleWrap(url, source, isMain, format, loadCJS = loadCJSModul
|
||||
|
||||
@@ -228,10 +228,10 @@ index d94f6e1c82c4a62547b3b395f375c86ce4deb5de..b81b9005365272217c77e2b9289bd9f8
|
||||
X509View ca(sk_X509_value(peer_certs.get(), i));
|
||||
if (!cert->view().isIssuedBy(ca)) continue;
|
||||
diff --git a/src/crypto/crypto_context.cc b/src/crypto/crypto_context.cc
|
||||
index 64b850089ec837915910a243b1d5e4ed68655f63..508f7c1a49a0812583363c9e35244c3f5fbf5f89 100644
|
||||
index 5e368e3fd93b560c629aef720acd576f118cb1d6..ea5179ad5155cb599891d7421cd61df719ac4cae 100644
|
||||
--- a/src/crypto/crypto_context.cc
|
||||
+++ b/src/crypto/crypto_context.cc
|
||||
@@ -121,7 +121,7 @@ int SSL_CTX_use_certificate_chain(SSL_CTX* ctx,
|
||||
@@ -141,7 +141,7 @@ int SSL_CTX_use_certificate_chain(SSL_CTX* ctx,
|
||||
// the CA certificates.
|
||||
SSL_CTX_clear_extra_chain_certs(ctx);
|
||||
|
||||
@@ -240,7 +240,7 @@ index 64b850089ec837915910a243b1d5e4ed68655f63..508f7c1a49a0812583363c9e35244c3f
|
||||
X509* ca = sk_X509_value(extra_certs, i);
|
||||
|
||||
// NOTE: Increments reference count on `ca`
|
||||
@@ -1584,11 +1584,12 @@ void SecureContext::SetDHParam(const FunctionCallbackInfo<Value>& args) {
|
||||
@@ -1752,11 +1752,12 @@ void SecureContext::SetDHParam(const FunctionCallbackInfo<Value>& args) {
|
||||
// If the user specified "auto" for dhparams, the JavaScript layer will pass
|
||||
// true to this function instead of the original string. Any other string
|
||||
// value will be interpreted as custom DH parameters below.
|
||||
@@ -254,7 +254,7 @@ index 64b850089ec837915910a243b1d5e4ed68655f63..508f7c1a49a0812583363c9e35244c3f
|
||||
DHPointer dh;
|
||||
{
|
||||
BIOPointer bio(LoadBIO(env, args[0]));
|
||||
@@ -1814,7 +1815,7 @@ void SecureContext::LoadPKCS12(const FunctionCallbackInfo<Value>& args) {
|
||||
@@ -1982,7 +1983,7 @@ void SecureContext::LoadPKCS12(const FunctionCallbackInfo<Value>& args) {
|
||||
}
|
||||
|
||||
// Add CA certs too
|
||||
@@ -555,7 +555,7 @@ index 7b2072ad39c3f1a7c73101b25b69beb781141e26..d23536d88d21255d348175425a59e242
|
||||
#if NODE_OPENSSL_HAS_QUIC
|
||||
#include <openssl/quic.h>
|
||||
diff --git a/src/node_options.cc b/src/node_options.cc
|
||||
index 228fbe645587ab2d36574b46f1a4f6668bd56177..9cf107b1048208ffcb69ff91e0d36ffacc741805 100644
|
||||
index 249361e351946c16452124029c60fca52782adf9..653112fbaea59fe8b446236085dcae8be671c6e5 100644
|
||||
--- a/src/node_options.cc
|
||||
+++ b/src/node_options.cc
|
||||
@@ -7,7 +7,7 @@
|
||||
@@ -568,7 +568,7 @@ index 228fbe645587ab2d36574b46f1a4f6668bd56177..9cf107b1048208ffcb69ff91e0d36ffa
|
||||
#endif
|
||||
|
||||
diff --git a/src/node_options.h b/src/node_options.h
|
||||
index 0b75516eb426929dc95b7531a00bdb01d1c39185..2b7df46312b8be58d6062b6a2f6084247e075c37 100644
|
||||
index 2a1a6aaf9f2d358ffffb0a8171df470686b9450e..3ff1f4b4baa64b8ee2a4587e150ea14cb2fdfdf4 100644
|
||||
--- a/src/node_options.h
|
||||
+++ b/src/node_options.h
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
@@ -50,7 +50,7 @@ index 5aa946f66c71beff0b7a43c30638ab28a1a5dfc0..e3afd30ba1f591d0298793bc42fd7166
|
||||
});
|
||||
const { search, hash } = resolved;
|
||||
diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js
|
||||
index de1539cebeb1874cbafbe76a4f03217693db2aa1..8b55082d2bb0ce743b190a601aff0651095049cd 100644
|
||||
index 7ea645b92a015b04cc121ff62aa1fc64b2961241..8e099e0961b624c6143f5a60f050855b3366f177 100644
|
||||
--- a/lib/internal/modules/esm/translators.js
|
||||
+++ b/lib/internal/modules/esm/translators.js
|
||||
@@ -25,7 +25,7 @@ const {
|
||||
|
||||
@@ -48,7 +48,7 @@ index fe669d40c31a29334b047b9cfee3067f64ef0a7b..9e5de7bbe574add017cd12ee091304d0
|
||||
|
||||
static CFunction fast_timing_safe_equal(CFunction::Make(FastTimingSafeEqual));
|
||||
diff --git a/src/node_buffer.cc b/src/node_buffer.cc
|
||||
index d0338b8a2d9cd3fd9f6db1f0f16f83b198ce0e7e..c4a87539dab49ff40e0951616777b132d4059e01 100644
|
||||
index e39852c8e0392e0a9ae5d4ea58be115416e19233..c94b14741c827a81d69a6f036426a344e563ad72 100644
|
||||
--- a/src/node_buffer.cc
|
||||
+++ b/src/node_buffer.cc
|
||||
@@ -44,6 +44,14 @@
|
||||
@@ -135,7 +135,7 @@ index d0338b8a2d9cd3fd9f6db1f0f16f83b198ce0e7e..c4a87539dab49ff40e0951616777b132
|
||||
}
|
||||
|
||||
static v8::CFunction fast_compare(v8::CFunction::Make(FastCompare));
|
||||
@@ -1148,14 +1158,13 @@ void SlowIndexOfNumber(const FunctionCallbackInfo<Value>& args) {
|
||||
@@ -1149,14 +1159,13 @@ void SlowIndexOfNumber(const FunctionCallbackInfo<Value>& args) {
|
||||
}
|
||||
|
||||
int32_t FastIndexOfNumber(v8::Local<v8::Value>,
|
||||
@@ -153,7 +153,7 @@ index d0338b8a2d9cd3fd9f6db1f0f16f83b198ce0e7e..c4a87539dab49ff40e0951616777b132
|
||||
}
|
||||
|
||||
static v8::CFunction fast_index_of_number(
|
||||
@@ -1495,21 +1504,31 @@ void SlowWriteString(const FunctionCallbackInfo<Value>& args) {
|
||||
@@ -1496,21 +1505,31 @@ void SlowWriteString(const FunctionCallbackInfo<Value>& args) {
|
||||
|
||||
template <encoding encoding>
|
||||
uint32_t FastWriteString(Local<Value> receiver,
|
||||
@@ -194,7 +194,7 @@ index d0338b8a2d9cd3fd9f6db1f0f16f83b198ce0e7e..c4a87539dab49ff40e0951616777b132
|
||||
|
||||
static const v8::CFunction fast_write_string_ascii(
|
||||
diff --git a/src/util.h b/src/util.h
|
||||
index 6376cf4f81113cdb2e3c179b800f1c79b51ab762..cc7ad99f981f564fba0395159d9d8b39901050ff 100644
|
||||
index dbec66247852df91c57c2a4e9664d2fea7d3dcef..efeb12d837db7b88093e4a6a2e20df562180ca1e 100644
|
||||
--- a/src/util.h
|
||||
+++ b/src/util.h
|
||||
@@ -60,6 +60,7 @@
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Shelley Vohr <shelley.vohr@gmail.com>
|
||||
Date: Fri, 18 Oct 2024 17:01:06 +0200
|
||||
Subject: fix: remove harmony-import-assertions from node.cc
|
||||
|
||||
harmony-import-assertions has been removed from V8 as of
|
||||
https://chromium-review.googlesource.com/c/v8/v8/+/5507047,
|
||||
so we should remove it from node.cc as well.
|
||||
|
||||
This patch can be removed when we upgrade to a V8 version that
|
||||
contains the above CL.
|
||||
|
||||
diff --git a/src/node.cc b/src/node.cc
|
||||
index c0d0b734edfa729c91a8112189c480e3f2382988..a43d36c731693b9d2ed1ba13f6b4bb33bf6c4ca4 100644
|
||||
--- a/src/node.cc
|
||||
+++ b/src/node.cc
|
||||
@@ -816,7 +816,7 @@ static ExitCode ProcessGlobalArgsInternal(std::vector<std::string>* args,
|
||||
}
|
||||
// TODO(nicolo-ribaudo): remove this once V8 doesn't enable it by default
|
||||
// anymore.
|
||||
- v8_args.emplace_back("--no-harmony-import-assertions");
|
||||
+ // v8_args.emplace_back("--no-harmony-import-assertions");
|
||||
|
||||
auto env_opts = per_process::cli_options->per_isolate->per_env;
|
||||
if (std::find(v8_args.begin(), v8_args.end(),
|
||||
36
patches/node/fix_remove_outdated_v8_flags_from_node_cc.patch
Normal file
36
patches/node/fix_remove_outdated_v8_flags_from_node_cc.patch
Normal file
@@ -0,0 +1,36 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Shelley Vohr <shelley.vohr@gmail.com>
|
||||
Date: Fri, 18 Oct 2024 17:01:06 +0200
|
||||
Subject: fix: remove outdated V8 flags from node.cc
|
||||
|
||||
Refs https://chromium-review.googlesource.com/c/v8/v8/+/5507047
|
||||
Refs https://chromium-review.googlesource.com/c/v8/v8/+/6249026
|
||||
|
||||
The above CL removes the `--harmony-import-assertions` and
|
||||
--experimental-wasm-memory64 flags from V8.
|
||||
|
||||
This patch can be removed when we upgrade to a V8 version that
|
||||
contains the above CLs.
|
||||
|
||||
diff --git a/src/node.cc b/src/node.cc
|
||||
index 1b5e989e5456a9bf77475e06250702029568c08d..61d65094aebd7f3016d51a8e7c9c761fc69cecba 100644
|
||||
--- a/src/node.cc
|
||||
+++ b/src/node.cc
|
||||
@@ -816,7 +816,7 @@ static ExitCode ProcessGlobalArgsInternal(std::vector<std::string>* args,
|
||||
}
|
||||
// TODO(nicolo-ribaudo): remove this once V8 doesn't enable it by default
|
||||
// anymore.
|
||||
- v8_args.emplace_back("--no-harmony-import-assertions");
|
||||
+ // v8_args.emplace_back("--no-harmony-import-assertions");
|
||||
|
||||
auto env_opts = per_process::cli_options->per_isolate->per_env;
|
||||
if (std::find(v8_args.begin(), v8_args.end(),
|
||||
@@ -828,7 +828,7 @@ static ExitCode ProcessGlobalArgsInternal(std::vector<std::string>* args,
|
||||
|
||||
// Support stable Phase 5 WebAssembly proposals
|
||||
v8_args.emplace_back("--experimental-wasm-imported-strings");
|
||||
- v8_args.emplace_back("--experimental-wasm-memory64");
|
||||
+ // v8_args.emplace_back("--experimental-wasm-memory64");
|
||||
v8_args.emplace_back("--experimental-wasm-exnref");
|
||||
|
||||
#ifdef __POSIX__
|
||||
@@ -6,10 +6,10 @@ Subject: Pass all globals through "require"
|
||||
(cherry picked from commit 7d015419cb7a0ecfe6728431a4ed2056cd411d62)
|
||||
|
||||
diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js
|
||||
index 9b51e5bf4cdfbc8127efc7d5882581daa1cbd81f..aca7c36e9b566847228bd4f13f2c8237509207db 100644
|
||||
index a7d8fa1139c82054ac37a4e11cfb68605dc21f31..589c239aa544e118b7d9b7fff86d7deefe903896 100644
|
||||
--- a/lib/internal/modules/cjs/loader.js
|
||||
+++ b/lib/internal/modules/cjs/loader.js
|
||||
@@ -200,6 +200,13 @@ const {
|
||||
@@ -202,6 +202,13 @@ const {
|
||||
CHAR_FORWARD_SLASH,
|
||||
} = require('internal/constants');
|
||||
|
||||
@@ -23,7 +23,7 @@ index 9b51e5bf4cdfbc8127efc7d5882581daa1cbd81f..aca7c36e9b566847228bd4f13f2c8237
|
||||
const {
|
||||
isProxy,
|
||||
} = require('internal/util/types');
|
||||
@@ -1683,10 +1690,12 @@ Module.prototype._compile = function(content, filename, format) {
|
||||
@@ -1701,10 +1708,12 @@ Module.prototype._compile = function(content, filename, format) {
|
||||
if (this[kIsMainSymbol] && getOptionValue('--inspect-brk')) {
|
||||
const { callAndPauseOnStart } = internalBinding('inspector');
|
||||
result = callAndPauseOnStart(compiledWrapper, thisValue, exports,
|
||||
|
||||
@@ -7,7 +7,7 @@ We use this to allow node's 'fs' module to read from ASAR files as if they were
|
||||
a real filesystem.
|
||||
|
||||
diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js
|
||||
index dd9e3e58d72fb9ada1528212f80e0e911292a266..5758c74f6139dbe4fbeeae9d1e9b078688261257 100644
|
||||
index 1a39b9f15e689e5c7ca1e3001b2ef6d854f8cc1e..9035311718c0a68e903e0ce748480bc78112c6ff 100644
|
||||
--- a/lib/internal/bootstrap/node.js
|
||||
+++ b/lib/internal/bootstrap/node.js
|
||||
@@ -132,6 +132,10 @@ process.domain = null;
|
||||
|
||||
@@ -102,10 +102,10 @@ index 1079e3beb02e5f5d71a15fd2db65cb93ebd175d6..a7be609c3ab9093cec5145367b95ae68
|
||||
worker::Worker* worker_context_ = nullptr;
|
||||
PerIsolateWrapperData* wrapper_data_;
|
||||
diff --git a/src/node.cc b/src/node.cc
|
||||
index a43d36c731693b9d2ed1ba13f6b4bb33bf6c4ca4..0c2a4d344c991c2ca0d9d90934cf7921abf2a629 100644
|
||||
index 61d65094aebd7f3016d51a8e7c9c761fc69cecba..0d383dcdb80fe30e3c2d6880b44f626f065bb1f3 100644
|
||||
--- a/src/node.cc
|
||||
+++ b/src/node.cc
|
||||
@@ -1257,6 +1257,14 @@ InitializeOncePerProcessInternal(const std::vector<std::string>& args,
|
||||
@@ -1271,6 +1271,14 @@ InitializeOncePerProcessInternal(const std::vector<std::string>& args,
|
||||
result->platform_ = per_process::v8_platform.Platform();
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ index a43d36c731693b9d2ed1ba13f6b4bb33bf6c4ca4..0c2a4d344c991c2ca0d9d90934cf7921
|
||||
if (!(flags & ProcessInitializationFlags::kNoInitializeV8)) {
|
||||
V8::Initialize();
|
||||
|
||||
@@ -1266,14 +1274,6 @@ InitializeOncePerProcessInternal(const std::vector<std::string>& args,
|
||||
@@ -1280,14 +1288,6 @@ InitializeOncePerProcessInternal(const std::vector<std::string>& args,
|
||||
absl::SetMutexDeadlockDetectionMode(absl::OnDeadlockCycle::kIgnore);
|
||||
}
|
||||
|
||||
@@ -174,10 +174,10 @@ index 4119ac1b002681d39711eac810ca2fcc2702ffc7..790347056cde949ffe6cf8498a7eca0c
|
||||
|
||||
ExitCode NodeMainInstance::Run() {
|
||||
diff --git a/src/node_worker.cc b/src/node_worker.cc
|
||||
index 9d56d8f793ef48a79867f465530554ae0226f2cd..842eb999c6ef0cb877cc2ee4acf75bb597a117da 100644
|
||||
index e2dbdd39b06c4f2f85eba46cbf1383af144456c6..6c43928ba5a9752c78544d1c77198278eb11ccd7 100644
|
||||
--- a/src/node_worker.cc
|
||||
+++ b/src/node_worker.cc
|
||||
@@ -162,6 +162,9 @@ class WorkerThreadData {
|
||||
@@ -163,6 +163,9 @@ class WorkerThreadData {
|
||||
SetIsolateCreateParamsForNode(¶ms);
|
||||
w->UpdateResourceConstraints(¶ms.constraints);
|
||||
params.array_buffer_allocator_shared = allocator;
|
||||
@@ -187,7 +187,7 @@ index 9d56d8f793ef48a79867f465530554ae0226f2cd..842eb999c6ef0cb877cc2ee4acf75bb5
|
||||
Isolate* isolate =
|
||||
NewIsolate(¶ms, &loop_, w->platform_, w->snapshot_data());
|
||||
if (isolate == nullptr) {
|
||||
@@ -230,13 +233,8 @@ class WorkerThreadData {
|
||||
@@ -231,13 +234,8 @@ class WorkerThreadData {
|
||||
*static_cast<bool*>(data) = true;
|
||||
}, &platform_finished);
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ Instead of disabling the tests, flag them as flaky so they still run
|
||||
but don't cause CI failures on flakes.
|
||||
|
||||
diff --git a/test/parallel/parallel.status b/test/parallel/parallel.status
|
||||
index 6303908ce180db4d409707ae1f049319358642fb..d487497417e20c778dde57197dc18373799df36a 100644
|
||||
index 0546a81ef11ec7ac8d6e214e4090b0e7b94bf70f..25b08be32c7a0aa501b64102f10c9bffc8c57970 100644
|
||||
--- a/test/parallel/parallel.status
|
||||
+++ b/test/parallel/parallel.status
|
||||
@@ -5,6 +5,16 @@ prefix parallel
|
||||
|
||||
@@ -6,10 +6,10 @@ Subject: test: use static method names in call stacks
|
||||
Refs: https://chromium-review.googlesource.com/c/v8/v8/+/5907815
|
||||
|
||||
diff --git a/test/message/assert_throws_stack.out b/test/message/assert_throws_stack.out
|
||||
index b1f3ea2108ba9c1a4f98928062b44b927eea31f2..897ddf36a04eb03edd01dd6b9a6fb4394cbdf114 100644
|
||||
index 1ecda64889e07fe64d03404d478311f9f8267a4e..2b5587292a2c7a8797589804f14bfd0c3e9725f8 100644
|
||||
--- a/test/message/assert_throws_stack.out
|
||||
+++ b/test/message/assert_throws_stack.out
|
||||
@@ -23,7 +23,7 @@ AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
@@ -24,7 +24,7 @@ AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
actual: Error: foo
|
||||
at assert.throws.bar (*assert_throws_stack.js:*)
|
||||
at getActual (node:assert:*)
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
chore_allow_customizing_microtask_policy_per_context.patch
|
||||
cherry-pick-ec6c18478382.patch
|
||||
|
||||
45
patches/v8/cherry-pick-ec6c18478382.patch
Normal file
45
patches/v8/cherry-pick-ec6c18478382.patch
Normal file
@@ -0,0 +1,45 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Darius Mercadier <dmercadier@chromium.org>
|
||||
Date: Tue, 16 Sep 2025 16:40:24 +0200
|
||||
Subject: Don't assume that upper 32-bit of Int32MulOvfCheck are 0
|
||||
|
||||
Because Arm64 doesn't have a flag-setting 32-bit multiplication,
|
||||
which means that instead with use a 64-bit multiplication, and compare
|
||||
result.X() and result.W() to check if an overflow happened. But this
|
||||
leads to the upper 32-bit not being zeroed.
|
||||
|
||||
Fixed: 445380761
|
||||
Change-Id: I31287faf37dc615695047021324e9d1d802cbec2
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6954290
|
||||
Auto-Submit: Darius Mercadier <dmercadier@chromium.org>
|
||||
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
|
||||
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
|
||||
Cr-Commit-Position: refs/heads/main@{#102530}
|
||||
|
||||
diff --git a/src/compiler/backend/arm64/instruction-selector-arm64.cc b/src/compiler/backend/arm64/instruction-selector-arm64.cc
|
||||
index 60ff1ee97931edfcca28b6f5f7c4918d015af974..0212f4570750599bc266a1cd8c9efa19ea26e85c 100644
|
||||
--- a/src/compiler/backend/arm64/instruction-selector-arm64.cc
|
||||
+++ b/src/compiler/backend/arm64/instruction-selector-arm64.cc
|
||||
@@ -2958,9 +2958,19 @@ bool InstructionSelector::ZeroExtendsWord32ToWord64NoPhis(OpIndex node) {
|
||||
return op.Cast<ShiftOp>().rep == WordRepresentation::Word32();
|
||||
case Opcode::kComparison:
|
||||
return op.Cast<ComparisonOp>().rep == RegisterRepresentation::Word32();
|
||||
- case Opcode::kOverflowCheckedBinop:
|
||||
- return op.Cast<OverflowCheckedBinopOp>().rep ==
|
||||
- WordRepresentation::Word32();
|
||||
+ case Opcode::kOverflowCheckedBinop: {
|
||||
+ const OverflowCheckedBinopOp& binop = op.Cast<OverflowCheckedBinopOp>();
|
||||
+ if (binop.rep != WordRepresentation::Word32()) return false;
|
||||
+ switch (binop.kind) {
|
||||
+ case OverflowCheckedBinopOp::Kind::kSignedAdd:
|
||||
+ case OverflowCheckedBinopOp::Kind::kSignedSub:
|
||||
+ return true;
|
||||
+ case OverflowCheckedBinopOp::Kind::kSignedMul:
|
||||
+ // EmitInt32MulWithOverflow doesn't zero-extend because Arm64 doesn't
|
||||
+ // have a flag-setting int32 multiplication.
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
case Opcode::kProjection:
|
||||
return ZeroExtendsWord32ToWord64NoPhis(op.Cast<ProjectionOp>().input());
|
||||
case Opcode::kLoad: {
|
||||
@@ -113,5 +113,8 @@ mv_if_exist src/out/Default/hunspell_dictionaries.zip
|
||||
mv_if_exist src/cross-arch-snapshots
|
||||
cp_if_exist src/out/electron_ninja_log
|
||||
cp_if_exist src/out/Default/.ninja_log
|
||||
if [ -n "$SISO_REPORT_PATH" ]; then
|
||||
cp_if_exist "$SISO_REPORT_PATH"
|
||||
fi
|
||||
|
||||
move_src_dirs_if_exist
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
|
||||
from lib.config import PLATFORM
|
||||
from lib.util import execute, get_linux_binaries, get_out_dir
|
||||
|
||||
def add_debug_link_into_binaries(directory, target_cpu, debug_dir):
|
||||
for binary in get_linux_binaries():
|
||||
binary_path = os.path.join(directory, binary)
|
||||
if os.path.isfile(binary_path):
|
||||
add_debug_link_into_binary(binary_path, target_cpu, debug_dir)
|
||||
|
||||
def add_debug_link_into_binary(binary_path, target_cpu, debug_dir):
|
||||
if PLATFORM == 'linux' and target_cpu in ('x86', 'arm', 'arm64'):
|
||||
# Skip because no objcopy binary on the given target.
|
||||
return
|
||||
|
||||
debug_name = get_debug_name(binary_path)
|
||||
# Make sure the path to the binary is not relative because of cwd param.
|
||||
real_binary_path = os.path.realpath(binary_path)
|
||||
cmd = ['objcopy', '--add-gnu-debuglink=' + debug_name, real_binary_path]
|
||||
execute(cmd, cwd=debug_dir)
|
||||
|
||||
def get_debug_name(binary_path):
|
||||
return os.path.basename(binary_path) + '.debug'
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
if args.file:
|
||||
add_debug_link_into_binary(args.file, args.target_cpu, args.debug_dir)
|
||||
else:
|
||||
add_debug_link_into_binaries(args.directory, args.target_cpu,
|
||||
args.debug_dir)
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser(description='Add debug link to binaries')
|
||||
parser.add_argument('-d', '--directory',
|
||||
help='Path to the dir that contains files to add links',
|
||||
default=get_out_dir(),
|
||||
required=False)
|
||||
parser.add_argument('-f', '--file',
|
||||
help='Path to a specific file to add debug link',
|
||||
required=False)
|
||||
parser.add_argument('-s', '--debug-dir',
|
||||
help='Path to the dir that contain the debugs',
|
||||
default=None,
|
||||
required=True)
|
||||
parser.add_argument('-v', '--verbose',
|
||||
action='store_true',
|
||||
help='Prints the output of the subprocesses')
|
||||
parser.add_argument('--target-cpu',
|
||||
default='',
|
||||
required=False,
|
||||
help='Target cpu of binaries to add debug link')
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
@@ -1,69 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
|
||||
from lib.config import PLATFORM
|
||||
from lib.util import execute, get_linux_binaries, get_out_dir, safe_mkdir
|
||||
|
||||
# It has to be done before stripping the binaries.
|
||||
def copy_debug_from_binaries(directory, out_dir, target_cpu, compress):
|
||||
for binary in get_linux_binaries():
|
||||
binary_path = os.path.join(directory, binary)
|
||||
if os.path.isfile(binary_path):
|
||||
copy_debug_from_binary(binary_path, out_dir, target_cpu, compress)
|
||||
|
||||
def copy_debug_from_binary(binary_path, out_dir, target_cpu, compress):
|
||||
if PLATFORM == 'linux' and target_cpu in ('x86', 'arm', 'arm64'):
|
||||
# Skip because no objcopy binary on the given target.
|
||||
return
|
||||
debug_name = get_debug_name(binary_path)
|
||||
cmd = ['objcopy', '--only-keep-debug']
|
||||
if compress:
|
||||
cmd.extend(['--compress-debug-sections'])
|
||||
cmd.extend([binary_path, os.path.join(out_dir, debug_name)])
|
||||
execute(cmd)
|
||||
|
||||
def get_debug_name(binary_path):
|
||||
return os.path.basename(binary_path) + '.debug'
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
safe_mkdir(args.out_dir)
|
||||
if args.file:
|
||||
copy_debug_from_binary(args.file, args.out_dir, args.target_cpu,
|
||||
args.compress)
|
||||
else:
|
||||
copy_debug_from_binaries(args.directory, args.out_dir, args.target_cpu,
|
||||
args.compress)
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser(description='Copy debug from binaries')
|
||||
parser.add_argument('-d', '--directory',
|
||||
help='Path to the dir that contains files to copy',
|
||||
default=get_out_dir(),
|
||||
required=False)
|
||||
parser.add_argument('-f', '--file',
|
||||
help='Path to a specific file to copy debug symbols',
|
||||
required=False)
|
||||
parser.add_argument('-o', '--out-dir',
|
||||
help='Path to the dir that will contain the debugs',
|
||||
default=None,
|
||||
required=True)
|
||||
parser.add_argument('-v', '--verbose',
|
||||
action='store_true',
|
||||
help='Prints the output of the subprocesses')
|
||||
parser.add_argument('--target-cpu',
|
||||
default='',
|
||||
required=False,
|
||||
help='Target cpu of binaries to copy debug symbols')
|
||||
parser.add_argument('--compress',
|
||||
action='store_true',
|
||||
required=False,
|
||||
help='Compress the debug symbols')
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
@@ -207,14 +207,3 @@ def get_depot_tools_executable(name):
|
||||
if sys.platform == 'win32':
|
||||
path += '.bat'
|
||||
return path
|
||||
|
||||
def get_linux_binaries():
|
||||
return [
|
||||
'chrome-sandbox',
|
||||
'chrome_crashpad_handler',
|
||||
get_electron_branding()['project_name'],
|
||||
'libEGL.so',
|
||||
'libGLESv2.so',
|
||||
'libffmpeg.so',
|
||||
'libvk_swiftshader.so',
|
||||
]
|
||||
|
||||
@@ -118,6 +118,7 @@
|
||||
"parallel/test-tls-server-failed-handshake-emits-clienterror",
|
||||
"parallel/test-tls-set-ciphers",
|
||||
"parallel/test-tls-set-ciphers-error",
|
||||
"parallel/test-tls-set-default-ca-certificates-recovery",
|
||||
"parallel/test-tls-set-sigalgs",
|
||||
"parallel/test-tls-socket-allow-half-open-option",
|
||||
"parallel/test-tls-socket-failed-handshake-emits-error",
|
||||
|
||||
@@ -16,10 +16,6 @@ for fs_file in fs_files:
|
||||
'lib/original-fs.js').replace('lib/fs/',
|
||||
'lib/original-fs/')
|
||||
|
||||
with open(os.path.join(out_dir, fs_file), 'w', encoding='utf-8'
|
||||
) as original_f:
|
||||
original_f.write(contents)
|
||||
|
||||
with open(os.path.join(out_dir, original_fs_file), 'w',
|
||||
encoding='utf-8') as transformed_f:
|
||||
transformed_contents = contents.replace('internal/fs/',
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
|
||||
from lib.config import set_verbose_mode, is_verbose_mode, verbose_mode_print
|
||||
from lib.util import execute, get_linux_binaries, get_out_dir
|
||||
|
||||
def get_size(path):
|
||||
size = os.path.getsize(path)
|
||||
units = ["bytes", "KB", "MB", "GB"]
|
||||
for unit in units:
|
||||
if size < 1024:
|
||||
return f"{size:.2f} {unit}"
|
||||
size /= 1024
|
||||
raise ValueError("File size is too large to be processed")
|
||||
|
||||
def strip_binaries(directory, target_cpu):
|
||||
if not os.path.isdir(directory):
|
||||
verbose_mode_print('Directory ' + directory + ' does not exist.')
|
||||
return
|
||||
|
||||
verbose_mode_print('Stripping binaries in ' + directory)
|
||||
for binary in get_linux_binaries():
|
||||
verbose_mode_print('\nStripping ' + binary)
|
||||
binary_path = os.path.join(directory, binary)
|
||||
if os.path.isfile(binary_path):
|
||||
strip_binary(binary_path, target_cpu)
|
||||
|
||||
def strip_binary(binary_path, target_cpu):
|
||||
if target_cpu == 'arm':
|
||||
strip = 'arm-linux-gnueabihf-strip'
|
||||
elif target_cpu == 'arm64':
|
||||
strip = 'aarch64-linux-gnu-strip'
|
||||
else:
|
||||
strip = 'strip'
|
||||
|
||||
strip_args = [strip,
|
||||
'--discard-all',
|
||||
'--strip-debug',
|
||||
'--preserve-dates',
|
||||
binary_path]
|
||||
if (is_verbose_mode()):
|
||||
strip_args.insert(1, '--verbose')
|
||||
verbose_mode_print('Binary size before stripping: ' +
|
||||
str(get_size(binary_path)))
|
||||
execute(strip_args)
|
||||
verbose_mode_print('Binary size after stripping: ' +
|
||||
str(get_size(binary_path)))
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
set_verbose_mode(args.verbose)
|
||||
if args.file:
|
||||
strip_binary(args.file, args.target_cpu)
|
||||
else:
|
||||
strip_binaries(args.directory, args.target_cpu)
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser(description='Strip linux binaries')
|
||||
parser.add_argument('-d', '--directory',
|
||||
help='Path to the dir that contains files to strip.',
|
||||
default=get_out_dir(),
|
||||
required=False)
|
||||
parser.add_argument('-f', '--file',
|
||||
help='Path to a specific file to strip.',
|
||||
required=False)
|
||||
parser.add_argument('-v', '--verbose',
|
||||
default=False,
|
||||
action='store_true',
|
||||
help='Prints the output of the subprocesses')
|
||||
parser.add_argument('--target-cpu',
|
||||
default='',
|
||||
required=False,
|
||||
help='Target cpu of binaries to strip')
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
@@ -52,10 +52,12 @@ gin::DeprecatedWrapperInfo Tray::kWrapperInfo = {gin::kEmbedderNativeGin};
|
||||
|
||||
Tray::Tray(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> image,
|
||||
std::optional<UUID> guid)
|
||||
: tray_icon_(TrayIcon::Create(guid)) {
|
||||
std::optional<base::Uuid> guid)
|
||||
: guid_(guid), tray_icon_(TrayIcon::Create(guid)) {
|
||||
SetImage(isolate, image);
|
||||
tray_icon_->AddObserver(this);
|
||||
if (guid.has_value())
|
||||
tray_icon_->SetAutoSaveName(guid.value().AsLowercaseString());
|
||||
}
|
||||
|
||||
Tray::~Tray() = default;
|
||||
@@ -63,19 +65,17 @@ Tray::~Tray() = default;
|
||||
// static
|
||||
gin_helper::Handle<Tray> Tray::New(gin_helper::ErrorThrower thrower,
|
||||
v8::Local<v8::Value> image,
|
||||
std::optional<UUID> guid,
|
||||
std::optional<base::Uuid> guid,
|
||||
gin::Arguments* args) {
|
||||
if (!Browser::Get()->is_ready()) {
|
||||
thrower.ThrowError("Cannot create Tray before app is ready");
|
||||
return {};
|
||||
}
|
||||
|
||||
#if BUILDFLAG(IS_WIN)
|
||||
if (!guid.has_value() && args->Length() > 1) {
|
||||
thrower.ThrowError("Invalid GUID format");
|
||||
thrower.ThrowError("Invalid GUID format - GUID must be a string");
|
||||
return {};
|
||||
}
|
||||
#endif
|
||||
|
||||
// Error thrown by us will be dropped when entering V8.
|
||||
// Make sure to abort early and propagate the error to JS.
|
||||
@@ -392,6 +392,15 @@ gfx::Rect Tray::GetBounds() {
|
||||
return tray_icon_->GetBounds();
|
||||
}
|
||||
|
||||
v8::Local<v8::Value> Tray::GetGUID() {
|
||||
if (!CheckAlive())
|
||||
return {};
|
||||
auto* isolate = JavascriptEnvironment::GetIsolate();
|
||||
if (!guid_)
|
||||
return v8::Null(isolate);
|
||||
return gin::ConvertToV8(isolate, guid_.value());
|
||||
}
|
||||
|
||||
bool Tray::CheckAlive() {
|
||||
if (!tray_icon_) {
|
||||
v8::Isolate* isolate = JavascriptEnvironment::GetIsolate();
|
||||
@@ -424,6 +433,7 @@ void Tray::FillObjectTemplate(v8::Isolate* isolate,
|
||||
.SetMethod("closeContextMenu", &Tray::CloseContextMenu)
|
||||
.SetMethod("setContextMenu", &Tray::SetContextMenu)
|
||||
.SetMethod("getBounds", &Tray::GetBounds)
|
||||
.SetMethod("getGUID", &Tray::GetGUID)
|
||||
.Build();
|
||||
}
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ class Tray final : public gin_helper::DeprecatedWrappable<Tray>,
|
||||
// gin_helper::Constructible
|
||||
static gin_helper::Handle<Tray> New(gin_helper::ErrorThrower thrower,
|
||||
v8::Local<v8::Value> image,
|
||||
std::optional<UUID> guid,
|
||||
std::optional<base::Uuid> guid,
|
||||
gin::Arguments* args);
|
||||
|
||||
static void FillObjectTemplate(v8::Isolate*, v8::Local<v8::ObjectTemplate>);
|
||||
@@ -65,7 +65,7 @@ class Tray final : public gin_helper::DeprecatedWrappable<Tray>,
|
||||
private:
|
||||
Tray(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> image,
|
||||
std::optional<UUID> guid);
|
||||
std::optional<base::Uuid> guid);
|
||||
~Tray() override;
|
||||
|
||||
// TrayIconObserver:
|
||||
@@ -111,10 +111,12 @@ class Tray final : public gin_helper::DeprecatedWrappable<Tray>,
|
||||
void SetContextMenu(gin_helper::ErrorThrower thrower,
|
||||
v8::Local<v8::Value> arg);
|
||||
gfx::Rect GetBounds();
|
||||
v8::Local<v8::Value> GetGUID();
|
||||
|
||||
bool CheckAlive();
|
||||
|
||||
v8::Global<v8::Value> menu_;
|
||||
std::optional<base::Uuid> guid_;
|
||||
std::unique_ptr<TrayIcon> tray_icon_;
|
||||
};
|
||||
|
||||
|
||||
@@ -411,19 +411,18 @@ v8::Local<v8::Value> Browser::GetLoginItemSettings(
|
||||
#else
|
||||
// If the app was previously set as a LoginItem with the deprecated API,
|
||||
// we should report its LoginItemSettings via the old API.
|
||||
LoginItemSettings settings_deprecated = GetLoginItemSettingsDeprecated();
|
||||
if (@available(macOS 13, *)) {
|
||||
const std::string status =
|
||||
platform_util::GetLoginItemEnabled(options.type, options.service_name);
|
||||
if (status == "enabled-deprecated") {
|
||||
settings = settings_deprecated;
|
||||
settings = GetLoginItemSettingsDeprecated();
|
||||
} else {
|
||||
settings.open_at_login = status == "enabled";
|
||||
settings.opened_at_login = was_launched_at_login_;
|
||||
settings.status = status;
|
||||
}
|
||||
} else {
|
||||
settings = settings_deprecated;
|
||||
settings = GetLoginItemSettingsDeprecated();
|
||||
}
|
||||
#endif
|
||||
return gin::ConvertToV8(isolate, settings);
|
||||
|
||||
@@ -210,7 +210,6 @@ int ElectronBrowserMainParts::PreEarlyInitialization() {
|
||||
HandleSIGCHLD();
|
||||
#endif
|
||||
#if BUILDFLAG(IS_LINUX)
|
||||
DetectOzonePlatform();
|
||||
ui::OzonePlatform::PreEarlyInitialization();
|
||||
#endif
|
||||
#if BUILDFLAG(IS_MAC)
|
||||
|
||||
@@ -124,10 +124,6 @@ class ElectronBrowserMainParts : public content::BrowserMainParts {
|
||||
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
|
||||
#endif
|
||||
|
||||
#if BUILDFLAG(IS_LINUX)
|
||||
void DetectOzonePlatform();
|
||||
#endif
|
||||
|
||||
#if BUILDFLAG(IS_MAC)
|
||||
void FreeAppDelegate();
|
||||
void RegisterURLHandler();
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
// Copyright (c) 2022 GitHub, Inc.
|
||||
// Use of this source code is governed by the MIT license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "shell/browser/electron_browser_main_parts.h"
|
||||
|
||||
#include "base/command_line.h"
|
||||
#include "base/environment.h"
|
||||
#include "base/strings/cstring_view.h"
|
||||
#include "ui/base/ozone_buildflags.h"
|
||||
#include "ui/ozone/public/ozone_switches.h"
|
||||
|
||||
#if BUILDFLAG(IS_OZONE_WAYLAND)
|
||||
#include "base/files/file_path.h"
|
||||
#include "base/files/file_util.h"
|
||||
#include "base/nix/xdg_util.h"
|
||||
#include "shell/common/thread_restrictions.h"
|
||||
#endif
|
||||
|
||||
namespace electron {
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr base::cstring_view kElectronOzonePlatformHint{
|
||||
"ELECTRON_OZONE_PLATFORM_HINT"};
|
||||
|
||||
#if BUILDFLAG(IS_OZONE_WAYLAND)
|
||||
|
||||
constexpr char kPlatformWayland[] = "wayland";
|
||||
|
||||
bool HasWaylandDisplay(base::Environment* env) {
|
||||
if (std::optional<std::string> wayland_display =
|
||||
env->GetVar("WAYLAND_DISPLAY")) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (std::optional<std::string> xdg_runtime_dir =
|
||||
env->GetVar("XDG_RUNTIME_DIR")) {
|
||||
auto wayland_server_pipe =
|
||||
base::FilePath(*xdg_runtime_dir).Append("wayland-0");
|
||||
// Normally, this should happen exactly once, at the startup of the main
|
||||
// process.
|
||||
electron::ScopedAllowBlockingForElectron allow_blocking;
|
||||
return base::PathExists(wayland_server_pipe);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif // BUILDFLAG(IS_OZONE_WAYLAND)
|
||||
|
||||
#if BUILDFLAG(IS_OZONE_X11)
|
||||
constexpr char kPlatformX11[] = "x11";
|
||||
#endif
|
||||
|
||||
// Evaluates the environment and returns the effective platform name for the
|
||||
// given |ozone_platform_hint|.
|
||||
// For the "auto" value, returns "wayland" if the XDG session type is "wayland",
|
||||
// "x11" otherwise.
|
||||
// For the "wayland" value, checks if the Wayland server is available, and
|
||||
// returns "x11" if it is not.
|
||||
// See https://crbug.com/1246928.
|
||||
std::string MaybeFixPlatformName(const std::string& ozone_platform_hint) {
|
||||
#if BUILDFLAG(IS_OZONE_WAYLAND)
|
||||
// Wayland is selected if both conditions below are true:
|
||||
// 1. The user selected either 'wayland' or 'auto'.
|
||||
// 2. The XDG session type is 'wayland', OR the user has selected 'wayland'
|
||||
// explicitly and a Wayland server is running.
|
||||
// Otherwise, fall back to X11.
|
||||
if (ozone_platform_hint == kPlatformWayland ||
|
||||
ozone_platform_hint == "auto") {
|
||||
auto env(base::Environment::Create());
|
||||
|
||||
std::optional<std::string> xdg_session_type =
|
||||
env->GetVar(base::nix::kXdgSessionTypeEnvVar);
|
||||
if ((xdg_session_type.has_value() && *xdg_session_type == "wayland") ||
|
||||
(ozone_platform_hint == kPlatformWayland &&
|
||||
HasWaylandDisplay(env.get()))) {
|
||||
return kPlatformWayland;
|
||||
}
|
||||
}
|
||||
#endif // BUILDFLAG(IS_OZONE_WAYLAND)
|
||||
|
||||
#if BUILDFLAG(IS_OZONE_X11)
|
||||
if (ozone_platform_hint == kPlatformX11) {
|
||||
return kPlatformX11;
|
||||
}
|
||||
#if BUILDFLAG(IS_OZONE_WAYLAND)
|
||||
if (ozone_platform_hint == kPlatformWayland ||
|
||||
ozone_platform_hint == "auto") {
|
||||
// We are here if:
|
||||
// - The binary has both X11 and Wayland backends.
|
||||
// - The user wanted Wayland but that did not work, otherwise it would have
|
||||
// been returned above.
|
||||
if (ozone_platform_hint == kPlatformWayland) {
|
||||
LOG(WARNING) << "No Wayland server is available. Falling back to X11.";
|
||||
} else {
|
||||
LOG(WARNING) << "This is not a Wayland session. Falling back to X11. "
|
||||
"If you need to run Chrome on Wayland using some "
|
||||
"embedded compositor, e. g., Weston, please specify "
|
||||
"Wayland as your preferred Ozone platform, or use "
|
||||
"--ozone-platform=wayland.";
|
||||
}
|
||||
return kPlatformX11;
|
||||
}
|
||||
#endif // BUILDFLAG(IS_OZONE_WAYLAND)
|
||||
#endif // BUILDFLAG(OZONE_PLATFORM_X11)
|
||||
|
||||
return ozone_platform_hint;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void ElectronBrowserMainParts::DetectOzonePlatform() {
|
||||
auto const env = base::Environment::Create();
|
||||
auto* const command_line = base::CommandLine::ForCurrentProcess();
|
||||
if (!command_line->HasSwitch(switches::kOzonePlatform)) {
|
||||
auto ozone_platform_hint =
|
||||
command_line->GetSwitchValueASCII(switches::kOzonePlatformHint);
|
||||
if (ozone_platform_hint.empty()) {
|
||||
ozone_platform_hint =
|
||||
env->GetVar(kElectronOzonePlatformHint).value_or("");
|
||||
}
|
||||
if (!ozone_platform_hint.empty()) {
|
||||
command_line->AppendSwitchASCII(
|
||||
switches::kOzonePlatform, MaybeFixPlatformName(ozone_platform_hint));
|
||||
}
|
||||
}
|
||||
|
||||
if (std::optional<std::string> desktop_startup_id =
|
||||
env->GetVar("DESKTOP_STARTUP_ID"))
|
||||
command_line->AppendSwitchASCII("desktop-startup-id", *desktop_startup_id);
|
||||
}
|
||||
|
||||
} // namespace electron
|
||||
@@ -323,6 +323,9 @@ class NativeWindowViews : public NativeWindow,
|
||||
// Whether the window is currently being moved.
|
||||
bool is_moving_ = false;
|
||||
|
||||
// Whether or not the window was previously snapped e.g. before minimizing.
|
||||
bool was_snapped_ = false;
|
||||
|
||||
std::variant<std::monostate, bool, SkColor> accent_color_;
|
||||
|
||||
std::optional<gfx::Rect> pending_bounds_change_;
|
||||
|
||||
@@ -324,11 +324,6 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
|
||||
|
||||
return false;
|
||||
}
|
||||
case WM_RBUTTONUP: {
|
||||
if (!has_frame())
|
||||
electron::api::WebContents::SetDisableDraggableRegions(false);
|
||||
return false;
|
||||
}
|
||||
case WM_GETMINMAXINFO: {
|
||||
WINDOWPLACEMENT wp;
|
||||
wp.length = sizeof(WINDOWPLACEMENT);
|
||||
@@ -464,11 +459,12 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
|
||||
return false;
|
||||
}
|
||||
case WM_SYSCOMMAND: {
|
||||
// Mask is needed to account for double clicking title bar to maximize
|
||||
WPARAM max_mask = 0xFFF0;
|
||||
if (transparent() && ((w_param & max_mask) == SC_MAXIMIZE)) {
|
||||
WPARAM cmd = w_param & 0xFFF0;
|
||||
// Needed to account for double clicking title bar to maximize.
|
||||
if (transparent() && (cmd == SC_MAXIMIZE))
|
||||
return true;
|
||||
}
|
||||
if (cmd == SC_MINIMIZE)
|
||||
was_snapped_ = IsSnapped();
|
||||
return false;
|
||||
}
|
||||
case WM_INITMENU: {
|
||||
@@ -521,8 +517,13 @@ void NativeWindowViews::HandleSizeEvent(WPARAM w_param, LPARAM l_param) {
|
||||
// multiple times for one resize because of the SetWindowPlacement call.
|
||||
if (w_param == SIZE_MAXIMIZED &&
|
||||
last_window_state_ != ui::mojom::WindowShowState::kMaximized) {
|
||||
if (last_window_state_ == ui::mojom::WindowShowState::kMinimized)
|
||||
if (last_window_state_ == ui::mojom::WindowShowState::kMinimized) {
|
||||
if (was_snapped_) {
|
||||
SetRoundedCorners(false);
|
||||
was_snapped_ = false;
|
||||
}
|
||||
NotifyWindowRestore();
|
||||
}
|
||||
last_window_state_ = ui::mojom::WindowShowState::kMaximized;
|
||||
NotifyWindowMaximize();
|
||||
ResetWindowControls();
|
||||
@@ -544,6 +545,10 @@ void NativeWindowViews::HandleSizeEvent(WPARAM w_param, LPARAM l_param) {
|
||||
last_window_state_ = ui::mojom::WindowShowState::kFullscreen;
|
||||
NotifyWindowEnterFullScreen();
|
||||
} else {
|
||||
if (was_snapped_) {
|
||||
SetRoundedCorners(false);
|
||||
was_snapped_ = false;
|
||||
}
|
||||
last_window_state_ = ui::mojom::WindowShowState::kNormal;
|
||||
NotifyWindowRestore();
|
||||
}
|
||||
|
||||
@@ -17,24 +17,21 @@
|
||||
#include "base/logging.h"
|
||||
#include "base/strings/strcat.h"
|
||||
#include "base/strings/string_number_conversions.h"
|
||||
#include "base/strings/string_util.h"
|
||||
#include "base/strings/string_util_win.h"
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "content/public/browser/browser_task_traits.h"
|
||||
#include "content/public/browser/browser_thread.h"
|
||||
#include "shell/browser/notifications/notification_delegate.h"
|
||||
#include "shell/browser/notifications/win/notification_presenter_win.h"
|
||||
#include "shell/browser/win/scoped_hstring.h"
|
||||
#include "shell/common/application_info.h"
|
||||
#include "third_party/libxml/chromium/xml_writer.h"
|
||||
#include "ui/base/l10n/l10n_util_win.h"
|
||||
#include "ui/strings/grit/ui_strings.h"
|
||||
|
||||
using ABI::Windows::Data::Xml::Dom::IXmlAttribute;
|
||||
using ABI::Windows::Data::Xml::Dom::IXmlDocument;
|
||||
using ABI::Windows::Data::Xml::Dom::IXmlDocumentIO;
|
||||
using ABI::Windows::Data::Xml::Dom::IXmlElement;
|
||||
using ABI::Windows::Data::Xml::Dom::IXmlNamedNodeMap;
|
||||
using ABI::Windows::Data::Xml::Dom::IXmlNode;
|
||||
using ABI::Windows::Data::Xml::Dom::IXmlNodeList;
|
||||
using ABI::Windows::Data::Xml::Dom::IXmlText;
|
||||
using Microsoft::WRL::Wrappers::HStringReference;
|
||||
|
||||
namespace winui = ABI::Windows::UI;
|
||||
@@ -74,6 +71,43 @@ std::wstring GetTag(const std::string_view notification_id) {
|
||||
return base::NumberToWString(base::FastHash(notification_id));
|
||||
}
|
||||
|
||||
constexpr char kToast[] = "toast";
|
||||
constexpr char kVisual[] = "visual";
|
||||
constexpr char kBinding[] = "binding";
|
||||
constexpr char kTemplate[] = "template";
|
||||
constexpr char kToastText01[] = "ToastText01";
|
||||
constexpr char kToastText02[] = "ToastText02";
|
||||
constexpr char kToastImageAndText01[] = "ToastImageAndText01";
|
||||
constexpr char kToastImageAndText02[] = "ToastImageAndText02";
|
||||
constexpr char kText[] = "text";
|
||||
constexpr char kImage[] = "image";
|
||||
constexpr char kPlacement[] = "placement";
|
||||
constexpr char kAppLogoOverride[] = "appLogoOverride";
|
||||
constexpr char kHintCrop[] = "hint-crop";
|
||||
constexpr char kHintCropNone[] = "none";
|
||||
constexpr char kSrc[] = "src";
|
||||
constexpr char kAudio[] = "audio";
|
||||
constexpr char kSilent[] = "silent";
|
||||
constexpr char kTrue[] = "true";
|
||||
constexpr char kID[] = "id";
|
||||
constexpr char kScenario[] = "scenario";
|
||||
constexpr char kReminder[] = "reminder";
|
||||
constexpr char kActions[] = "actions";
|
||||
constexpr char kAction[] = "action";
|
||||
constexpr char kActivationType[] = "activationType";
|
||||
constexpr char kSystem[] = "system";
|
||||
constexpr char kArguments[] = "arguments";
|
||||
constexpr char kDismiss[] = "dismiss";
|
||||
// The XML version header that has to be stripped from the output.
|
||||
constexpr char kXmlVersionHeader[] = "<?xml version=\"1.0\"?>\n";
|
||||
|
||||
const char* GetTemplateType(bool two_lines, bool has_icon) {
|
||||
if (has_icon) {
|
||||
return two_lines ? kToastImageAndText02 : kToastImageAndText01;
|
||||
}
|
||||
return two_lines ? kToastText02 : kToastText01;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
// static
|
||||
@@ -171,10 +205,12 @@ HRESULT WindowsToastNotification::ShowInternal(
|
||||
auto* presenter_win = static_cast<NotificationPresenterWin*>(presenter());
|
||||
std::wstring icon_path =
|
||||
presenter_win->SaveIconToFilesystem(options.icon, options.icon_url);
|
||||
std::u16string toast_xml_str =
|
||||
GetToastXml(options.title, options.msg, icon_path, options.timeout_type,
|
||||
options.silent);
|
||||
REPORT_AND_RETURN_IF_FAILED(
|
||||
GetToastXml(toast_manager_.Get(), options.title, options.msg, icon_path,
|
||||
options.timeout_type, options.silent, &toast_xml),
|
||||
"XML: Failed to create XML document");
|
||||
XmlDocumentFromString(base::as_wcstr(toast_xml_str), &toast_xml),
|
||||
"XML: Invalid XML");
|
||||
}
|
||||
|
||||
ScopedHString toast_str(
|
||||
@@ -214,382 +250,95 @@ HRESULT WindowsToastNotification::ShowInternal(
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT WindowsToastNotification::GetToastXml(
|
||||
winui::Notifications::IToastNotificationManagerStatics* toastManager,
|
||||
std::u16string WindowsToastNotification::GetToastXml(
|
||||
const std::u16string& title,
|
||||
const std::u16string& msg,
|
||||
const std::wstring& icon_path,
|
||||
const std::u16string& timeout_type,
|
||||
bool silent,
|
||||
IXmlDocument** toast_xml) {
|
||||
winui::Notifications::ToastTemplateType template_type;
|
||||
bool silent) {
|
||||
XmlWriter xml_writer;
|
||||
xml_writer.StartWriting();
|
||||
|
||||
// <toast ...>
|
||||
xml_writer.StartElement(kToast);
|
||||
|
||||
const bool is_reminder = (timeout_type == u"never");
|
||||
if (is_reminder) {
|
||||
xml_writer.AddAttribute(kScenario, kReminder);
|
||||
}
|
||||
|
||||
// <visual>
|
||||
xml_writer.StartElement(kVisual);
|
||||
// <binding template="<template>">
|
||||
xml_writer.StartElement(kBinding);
|
||||
const bool two_lines = (!title.empty() && !msg.empty());
|
||||
xml_writer.AddAttribute(kTemplate,
|
||||
GetTemplateType(two_lines, !icon_path.empty()));
|
||||
|
||||
// Add text nodes.
|
||||
std::u16string line1;
|
||||
std::u16string line2;
|
||||
if (title.empty() || msg.empty()) {
|
||||
// Single line toast.
|
||||
template_type =
|
||||
icon_path.empty()
|
||||
? winui::Notifications::ToastTemplateType_ToastText01
|
||||
: winui::Notifications::ToastTemplateType_ToastImageAndText01;
|
||||
REPORT_AND_RETURN_IF_FAILED(
|
||||
toast_manager_->GetTemplateContent(template_type, toast_xml),
|
||||
"XML: Fetching XML ToastImageAndText01 template failed");
|
||||
std::u16string toastMsg = title.empty() ? msg : title;
|
||||
// we can't create an empty notification
|
||||
toastMsg = toastMsg.empty() ? u"[no message]" : toastMsg;
|
||||
REPORT_AND_RETURN_IF_FAILED(
|
||||
SetXmlText(*toast_xml, toastMsg),
|
||||
"XML: Filling XML ToastImageAndText01 template failed");
|
||||
line1 = title.empty() ? msg : title;
|
||||
if (line1.empty())
|
||||
line1 = u"[no message]";
|
||||
xml_writer.StartElement(kText);
|
||||
xml_writer.AddAttribute(kID, "1");
|
||||
xml_writer.AppendElementContent(base::UTF16ToUTF8(line1));
|
||||
xml_writer.EndElement(); // </text>
|
||||
} else {
|
||||
// Title and body toast.
|
||||
template_type =
|
||||
icon_path.empty()
|
||||
? winui::Notifications::ToastTemplateType_ToastText02
|
||||
: winui::Notifications::ToastTemplateType_ToastImageAndText02;
|
||||
REPORT_AND_RETURN_IF_FAILED(
|
||||
toastManager->GetTemplateContent(template_type, toast_xml),
|
||||
"XML: Fetching XML ToastImageAndText02 template failed");
|
||||
REPORT_AND_RETURN_IF_FAILED(
|
||||
SetXmlText(*toast_xml, title, msg),
|
||||
"XML: Filling XML ToastImageAndText02 template failed");
|
||||
line1 = title;
|
||||
line2 = msg;
|
||||
xml_writer.StartElement(kText);
|
||||
xml_writer.AddAttribute(kID, "1");
|
||||
xml_writer.AppendElementContent(base::UTF16ToUTF8(line1));
|
||||
xml_writer.EndElement();
|
||||
xml_writer.StartElement(kText);
|
||||
xml_writer.AddAttribute(kID, "2");
|
||||
xml_writer.AppendElementContent(base::UTF16ToUTF8(line2));
|
||||
xml_writer.EndElement();
|
||||
}
|
||||
|
||||
// Configure the toast's timeout settings
|
||||
if (timeout_type == u"never") {
|
||||
REPORT_AND_RETURN_IF_FAILED(
|
||||
(SetXmlScenarioReminder(*toast_xml)),
|
||||
"XML: Setting \"scenario\" option on notification failed");
|
||||
}
|
||||
|
||||
// Configure the toast's notification sound
|
||||
if (silent) {
|
||||
REPORT_AND_RETURN_IF_FAILED(
|
||||
SetXmlAudioSilent(*toast_xml),
|
||||
"XML: Setting \"silent\" option on notification failed");
|
||||
}
|
||||
|
||||
// Configure the toast's image
|
||||
// Optional icon as app logo override (small icon).
|
||||
if (!icon_path.empty()) {
|
||||
REPORT_AND_RETURN_IF_FAILED(
|
||||
SetXmlImage(*toast_xml, icon_path),
|
||||
"XML: Setting \"icon\" option on notification failed");
|
||||
xml_writer.StartElement(kImage);
|
||||
xml_writer.AddAttribute(kPlacement, kAppLogoOverride);
|
||||
xml_writer.AddAttribute(kHintCrop, kHintCropNone);
|
||||
xml_writer.AddAttribute(kSrc, base::WideToUTF8(icon_path));
|
||||
xml_writer.EndElement(); // </image>
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT WindowsToastNotification::SetXmlScenarioReminder(IXmlDocument* doc) {
|
||||
ScopedHString tag(L"toast");
|
||||
if (!tag.success())
|
||||
return false;
|
||||
|
||||
ComPtr<IXmlNodeList> node_list;
|
||||
RETURN_IF_FAILED(doc->GetElementsByTagName(tag, &node_list));
|
||||
|
||||
// Check that root "toast" node exists
|
||||
ComPtr<IXmlNode> root;
|
||||
RETURN_IF_FAILED(node_list->Item(0, &root));
|
||||
|
||||
// get attributes of root "toast" node
|
||||
ComPtr<IXmlNamedNodeMap> toast_attributes;
|
||||
RETURN_IF_FAILED(root->get_Attributes(&toast_attributes));
|
||||
|
||||
ComPtr<IXmlAttribute> scenario_attribute;
|
||||
ScopedHString scenario_str(L"scenario");
|
||||
RETURN_IF_FAILED(doc->CreateAttribute(scenario_str, &scenario_attribute));
|
||||
|
||||
ComPtr<IXmlNode> scenario_attribute_node;
|
||||
RETURN_IF_FAILED(scenario_attribute.As(&scenario_attribute_node));
|
||||
|
||||
ScopedHString scenario_value(L"reminder");
|
||||
if (!scenario_value.success())
|
||||
return E_FAIL;
|
||||
|
||||
ComPtr<IXmlText> scenario_text;
|
||||
RETURN_IF_FAILED(doc->CreateTextNode(scenario_value, &scenario_text));
|
||||
|
||||
ComPtr<IXmlNode> scenario_node;
|
||||
RETURN_IF_FAILED(scenario_text.As(&scenario_node));
|
||||
|
||||
ComPtr<IXmlNode> scenario_backup_node;
|
||||
RETURN_IF_FAILED(scenario_attribute_node->AppendChild(scenario_node.Get(),
|
||||
&scenario_backup_node));
|
||||
|
||||
ComPtr<IXmlNode> scenario_attribute_pnode;
|
||||
RETURN_IF_FAILED(toast_attributes.Get()->SetNamedItem(
|
||||
scenario_attribute_node.Get(), &scenario_attribute_pnode));
|
||||
|
||||
// Create "actions" wrapper
|
||||
ComPtr<IXmlElement> actions_wrapper_element;
|
||||
ScopedHString actions_wrapper_str(L"actions");
|
||||
RETURN_IF_FAILED(
|
||||
doc->CreateElement(actions_wrapper_str, &actions_wrapper_element));
|
||||
|
||||
ComPtr<IXmlNode> actions_wrapper_node_tmp;
|
||||
RETURN_IF_FAILED(actions_wrapper_element.As(&actions_wrapper_node_tmp));
|
||||
|
||||
// Append actions wrapper node to toast xml
|
||||
ComPtr<IXmlNode> actions_wrapper_node;
|
||||
RETURN_IF_FAILED(
|
||||
root->AppendChild(actions_wrapper_node_tmp.Get(), &actions_wrapper_node));
|
||||
|
||||
ComPtr<IXmlNamedNodeMap> attributes_actions_wrapper;
|
||||
RETURN_IF_FAILED(
|
||||
actions_wrapper_node->get_Attributes(&attributes_actions_wrapper));
|
||||
|
||||
// Add a "Dismiss" button
|
||||
// Create "action" tag
|
||||
ComPtr<IXmlElement> action_element;
|
||||
ScopedHString action_str(L"action");
|
||||
RETURN_IF_FAILED(doc->CreateElement(action_str, &action_element));
|
||||
|
||||
ComPtr<IXmlNode> action_node_tmp;
|
||||
RETURN_IF_FAILED(action_element.As(&action_node_tmp));
|
||||
|
||||
// Append action node to actions wrapper in toast xml
|
||||
ComPtr<IXmlNode> action_node;
|
||||
RETURN_IF_FAILED(
|
||||
actions_wrapper_node->AppendChild(action_node_tmp.Get(), &action_node));
|
||||
|
||||
// Setup attributes for action
|
||||
ComPtr<IXmlNamedNodeMap> action_attributes;
|
||||
RETURN_IF_FAILED(action_node->get_Attributes(&action_attributes));
|
||||
|
||||
// Create activationType attribute
|
||||
ComPtr<IXmlAttribute> activation_type_attribute;
|
||||
ScopedHString activation_type_str(L"activationType");
|
||||
RETURN_IF_FAILED(
|
||||
doc->CreateAttribute(activation_type_str, &activation_type_attribute));
|
||||
|
||||
ComPtr<IXmlNode> activation_type_attribute_node;
|
||||
RETURN_IF_FAILED(
|
||||
activation_type_attribute.As(&activation_type_attribute_node));
|
||||
|
||||
// Set activationType attribute to system
|
||||
ScopedHString activation_type_value(L"system");
|
||||
if (!activation_type_value.success())
|
||||
return E_FAIL;
|
||||
|
||||
ComPtr<IXmlText> activation_type_text;
|
||||
RETURN_IF_FAILED(
|
||||
doc->CreateTextNode(activation_type_value, &activation_type_text));
|
||||
|
||||
ComPtr<IXmlNode> activation_type_node;
|
||||
RETURN_IF_FAILED(activation_type_text.As(&activation_type_node));
|
||||
|
||||
ComPtr<IXmlNode> activation_type_backup_node;
|
||||
RETURN_IF_FAILED(activation_type_attribute_node->AppendChild(
|
||||
activation_type_node.Get(), &activation_type_backup_node));
|
||||
|
||||
// Add activation type to the action attributes
|
||||
ComPtr<IXmlNode> activation_type_attribute_pnode;
|
||||
RETURN_IF_FAILED(action_attributes.Get()->SetNamedItem(
|
||||
activation_type_attribute_node.Get(), &activation_type_attribute_pnode));
|
||||
|
||||
// Create arguments attribute
|
||||
ComPtr<IXmlAttribute> arguments_attribute;
|
||||
ScopedHString arguments_str(L"arguments");
|
||||
RETURN_IF_FAILED(doc->CreateAttribute(arguments_str, &arguments_attribute));
|
||||
|
||||
ComPtr<IXmlNode> arguments_attribute_node;
|
||||
RETURN_IF_FAILED(arguments_attribute.As(&arguments_attribute_node));
|
||||
|
||||
// Set arguments attribute to dismiss
|
||||
ScopedHString arguments_value(L"dismiss");
|
||||
if (!arguments_value.success())
|
||||
return E_FAIL;
|
||||
|
||||
ComPtr<IXmlText> arguments_text;
|
||||
RETURN_IF_FAILED(doc->CreateTextNode(arguments_value, &arguments_text));
|
||||
|
||||
ComPtr<IXmlNode> arguments_node;
|
||||
RETURN_IF_FAILED(arguments_text.As(&arguments_node));
|
||||
|
||||
ComPtr<IXmlNode> arguments_backup_node;
|
||||
RETURN_IF_FAILED(arguments_attribute_node->AppendChild(
|
||||
arguments_node.Get(), &arguments_backup_node));
|
||||
|
||||
// Add arguments to the action attributes
|
||||
ComPtr<IXmlNode> arguments_attribute_pnode;
|
||||
RETURN_IF_FAILED(action_attributes.Get()->SetNamedItem(
|
||||
arguments_attribute_node.Get(), &arguments_attribute_pnode));
|
||||
|
||||
// Create content attribute
|
||||
ComPtr<IXmlAttribute> content_attribute;
|
||||
ScopedHString content_str(L"content");
|
||||
RETURN_IF_FAILED(doc->CreateAttribute(content_str, &content_attribute));
|
||||
|
||||
ComPtr<IXmlNode> content_attribute_node;
|
||||
RETURN_IF_FAILED(content_attribute.As(&content_attribute_node));
|
||||
|
||||
// Set content attribute to Dismiss
|
||||
ScopedHString content_value(l10n_util::GetWideString(IDS_APP_CLOSE));
|
||||
if (!content_value.success())
|
||||
return E_FAIL;
|
||||
|
||||
ComPtr<IXmlText> content_text;
|
||||
RETURN_IF_FAILED(doc->CreateTextNode(content_value, &content_text));
|
||||
|
||||
ComPtr<IXmlNode> content_node;
|
||||
RETURN_IF_FAILED(content_text.As(&content_node));
|
||||
|
||||
ComPtr<IXmlNode> content_backup_node;
|
||||
RETURN_IF_FAILED(content_attribute_node->AppendChild(content_node.Get(),
|
||||
&content_backup_node));
|
||||
|
||||
// Add content to the action attributes
|
||||
ComPtr<IXmlNode> content_attribute_pnode;
|
||||
return action_attributes.Get()->SetNamedItem(content_attribute_node.Get(),
|
||||
&content_attribute_pnode);
|
||||
}
|
||||
|
||||
HRESULT WindowsToastNotification::SetXmlAudioSilent(IXmlDocument* doc) {
|
||||
ScopedHString tag(L"toast");
|
||||
if (!tag.success())
|
||||
return E_FAIL;
|
||||
|
||||
ComPtr<IXmlNodeList> node_list;
|
||||
RETURN_IF_FAILED(doc->GetElementsByTagName(tag, &node_list));
|
||||
|
||||
ComPtr<IXmlNode> root;
|
||||
RETURN_IF_FAILED(node_list->Item(0, &root));
|
||||
|
||||
ComPtr<IXmlElement> audio_element;
|
||||
ScopedHString audio_str(L"audio");
|
||||
RETURN_IF_FAILED(doc->CreateElement(audio_str, &audio_element));
|
||||
|
||||
ComPtr<IXmlNode> audio_node_tmp;
|
||||
RETURN_IF_FAILED(audio_element.As(&audio_node_tmp));
|
||||
|
||||
// Append audio node to toast xml
|
||||
ComPtr<IXmlNode> audio_node;
|
||||
RETURN_IF_FAILED(root->AppendChild(audio_node_tmp.Get(), &audio_node));
|
||||
|
||||
// Create silent attribute
|
||||
ComPtr<IXmlNamedNodeMap> attributes;
|
||||
RETURN_IF_FAILED(audio_node->get_Attributes(&attributes));
|
||||
|
||||
ComPtr<IXmlAttribute> silent_attribute;
|
||||
ScopedHString silent_str(L"silent");
|
||||
RETURN_IF_FAILED(doc->CreateAttribute(silent_str, &silent_attribute));
|
||||
|
||||
ComPtr<IXmlNode> silent_attribute_node;
|
||||
RETURN_IF_FAILED(silent_attribute.As(&silent_attribute_node));
|
||||
|
||||
// Set silent attribute to true
|
||||
ScopedHString silent_value(L"true");
|
||||
if (!silent_value.success())
|
||||
return E_FAIL;
|
||||
|
||||
ComPtr<IXmlText> silent_text;
|
||||
RETURN_IF_FAILED(doc->CreateTextNode(silent_value, &silent_text));
|
||||
|
||||
ComPtr<IXmlNode> silent_node;
|
||||
RETURN_IF_FAILED(silent_text.As(&silent_node));
|
||||
|
||||
ComPtr<IXmlNode> child_node;
|
||||
RETURN_IF_FAILED(
|
||||
silent_attribute_node->AppendChild(silent_node.Get(), &child_node));
|
||||
|
||||
ComPtr<IXmlNode> silent_attribute_pnode;
|
||||
return attributes.Get()->SetNamedItem(silent_attribute_node.Get(),
|
||||
&silent_attribute_pnode);
|
||||
}
|
||||
|
||||
HRESULT WindowsToastNotification::SetXmlText(IXmlDocument* doc,
|
||||
const std::u16string& text) {
|
||||
ScopedHString tag;
|
||||
ComPtr<IXmlNodeList> node_list;
|
||||
RETURN_IF_FAILED(GetTextNodeList(&tag, doc, &node_list, 1));
|
||||
|
||||
ComPtr<IXmlNode> node;
|
||||
RETURN_IF_FAILED(node_list->Item(0, &node));
|
||||
|
||||
return AppendTextToXml(doc, node.Get(), text);
|
||||
}
|
||||
|
||||
HRESULT WindowsToastNotification::SetXmlText(IXmlDocument* doc,
|
||||
const std::u16string& title,
|
||||
const std::u16string& body) {
|
||||
ScopedHString tag;
|
||||
ComPtr<IXmlNodeList> node_list;
|
||||
RETURN_IF_FAILED(GetTextNodeList(&tag, doc, &node_list, 2));
|
||||
|
||||
ComPtr<IXmlNode> node;
|
||||
RETURN_IF_FAILED(node_list->Item(0, &node));
|
||||
RETURN_IF_FAILED(AppendTextToXml(doc, node.Get(), title));
|
||||
RETURN_IF_FAILED(node_list->Item(1, &node));
|
||||
|
||||
return AppendTextToXml(doc, node.Get(), body);
|
||||
}
|
||||
|
||||
HRESULT WindowsToastNotification::SetXmlImage(IXmlDocument* doc,
|
||||
const std::wstring& icon_path) {
|
||||
ScopedHString tag(L"image");
|
||||
if (!tag.success())
|
||||
return E_FAIL;
|
||||
|
||||
ComPtr<IXmlNodeList> node_list;
|
||||
RETURN_IF_FAILED(doc->GetElementsByTagName(tag, &node_list));
|
||||
|
||||
ComPtr<IXmlNode> image_node;
|
||||
RETURN_IF_FAILED(node_list->Item(0, &image_node));
|
||||
|
||||
ComPtr<IXmlNamedNodeMap> attrs;
|
||||
RETURN_IF_FAILED(image_node->get_Attributes(&attrs));
|
||||
|
||||
ScopedHString src(L"src");
|
||||
if (!src.success())
|
||||
return E_FAIL;
|
||||
|
||||
ComPtr<IXmlNode> src_attr;
|
||||
RETURN_IF_FAILED(attrs->GetNamedItem(src, &src_attr));
|
||||
|
||||
const ScopedHString img_path{icon_path};
|
||||
if (!img_path.success())
|
||||
return E_FAIL;
|
||||
|
||||
ComPtr<IXmlText> src_text;
|
||||
RETURN_IF_FAILED(doc->CreateTextNode(img_path, &src_text));
|
||||
|
||||
ComPtr<IXmlNode> src_node;
|
||||
RETURN_IF_FAILED(src_text.As(&src_node));
|
||||
|
||||
ComPtr<IXmlNode> child_node;
|
||||
return src_attr->AppendChild(src_node.Get(), &child_node);
|
||||
}
|
||||
|
||||
HRESULT WindowsToastNotification::GetTextNodeList(ScopedHString* tag,
|
||||
IXmlDocument* doc,
|
||||
IXmlNodeList** node_list,
|
||||
uint32_t req_length) {
|
||||
tag->Reset(L"text");
|
||||
if (!tag->success())
|
||||
return E_FAIL;
|
||||
|
||||
RETURN_IF_FAILED(doc->GetElementsByTagName(*tag, node_list));
|
||||
|
||||
uint32_t node_length;
|
||||
RETURN_IF_FAILED((*node_list)->get_Length(&node_length));
|
||||
|
||||
return node_length >= req_length;
|
||||
}
|
||||
|
||||
HRESULT WindowsToastNotification::AppendTextToXml(IXmlDocument* doc,
|
||||
IXmlNode* node,
|
||||
const std::u16string& text) {
|
||||
ScopedHString str(base::as_wcstr(text));
|
||||
if (!str.success())
|
||||
return E_FAIL;
|
||||
|
||||
ComPtr<IXmlText> xml_text;
|
||||
RETURN_IF_FAILED(doc->CreateTextNode(str, &xml_text));
|
||||
|
||||
ComPtr<IXmlNode> text_node;
|
||||
RETURN_IF_FAILED(xml_text.As(&text_node));
|
||||
|
||||
ComPtr<IXmlNode> append_node;
|
||||
RETURN_IF_FAILED(node->AppendChild(text_node.Get(), &append_node));
|
||||
|
||||
return S_OK;
|
||||
xml_writer.EndElement(); // </binding>
|
||||
xml_writer.EndElement(); // </visual>
|
||||
|
||||
// <actions> (only to ensure reminder has a dismiss button).
|
||||
if (is_reminder) {
|
||||
xml_writer.StartElement(kActions);
|
||||
xml_writer.StartElement(kAction);
|
||||
xml_writer.AddAttribute(kActivationType, kSystem);
|
||||
xml_writer.AddAttribute(kArguments, kDismiss);
|
||||
xml_writer.AddAttribute(
|
||||
"content", base::WideToUTF8(l10n_util::GetWideString(IDS_APP_CLOSE)));
|
||||
xml_writer.EndElement(); // </action>
|
||||
xml_writer.EndElement(); // </actions>
|
||||
}
|
||||
|
||||
// Silent audio if requested.
|
||||
if (silent) {
|
||||
xml_writer.StartElement(kAudio);
|
||||
xml_writer.AddAttribute(kSilent, kTrue);
|
||||
xml_writer.EndElement(); // </audio>
|
||||
}
|
||||
|
||||
xml_writer.EndElement(); // </toast>
|
||||
|
||||
xml_writer.StopWriting();
|
||||
std::string xml = xml_writer.GetWrittenString();
|
||||
if (base::StartsWith(xml, kXmlVersionHeader, base::CompareCase::SENSITIVE)) {
|
||||
xml.erase(0, sizeof(kXmlVersionHeader) - 1);
|
||||
}
|
||||
|
||||
return base::UTF8ToUTF16(xml);
|
||||
}
|
||||
|
||||
HRESULT WindowsToastNotification::XmlDocumentFromString(
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user