From acb2209668c490a5b88090c05958aeb8f793120a Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Wed, 29 Sep 2021 21:31:33 +0200 Subject: [PATCH] refactor: use native WeakRef instead of v8util.weaklyTrackValue() (#31164) (#31169) Co-authored-by: Milan Burda Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Milan Burda --- shell/common/api/electron_api_v8_util.cc | 26 ------------------------ spec-main/api-context-bridge-spec.ts | 12 +++++------ typings/internal-ambient.d.ts | 3 --- 3 files changed, 6 insertions(+), 35 deletions(-) diff --git a/shell/common/api/electron_api_v8_util.cc b/shell/common/api/electron_api_v8_util.cc index 1c69e8ac7af6d..81098c5ca4619 100644 --- a/shell/common/api/electron_api_v8_util.cc +++ b/shell/common/api/electron_api_v8_util.cc @@ -107,28 +107,6 @@ bool IsSameOrigin(const GURL& l, const GURL& r) { return url::Origin::Create(l).IsSameOriginWith(url::Origin::Create(r)); } -#if DCHECK_IS_ON() -std::vector> weakly_tracked_values; - -void WeaklyTrackValue(v8::Isolate* isolate, v8::Local value) { - v8::Global global_value(isolate, value); - global_value.SetWeak(); - weakly_tracked_values.push_back(std::move(global_value)); -} - -void ClearWeaklyTrackedValues() { - weakly_tracked_values.clear(); -} - -std::vector> GetWeaklyTrackedValues(v8::Isolate* isolate) { - std::vector> locals; - for (const auto& value : weakly_tracked_values) { - if (!value.IsEmpty()) - locals.push_back(value.Get(isolate)); - } - return locals; -} - // This causes a fatal error by creating a circular extension dependency. void TriggerFatalErrorForTesting(v8::Isolate* isolate) { static const char* aDeps[] = {"B"}; @@ -142,7 +120,6 @@ void TriggerFatalErrorForTesting(v8::Isolate* isolate) { void RunUntilIdle() { base::RunLoop().RunUntilIdle(); } -#endif void Initialize(v8::Local exports, v8::Local unused, @@ -159,9 +136,6 @@ void Initialize(v8::Local exports, dict.SetMethod("isSameOrigin", &IsSameOrigin); #if DCHECK_IS_ON() dict.SetMethod("triggerFatalErrorForTesting", &TriggerFatalErrorForTesting); - dict.SetMethod("getWeaklyTrackedValues", &GetWeaklyTrackedValues); - dict.SetMethod("clearWeaklyTrackedValues", &ClearWeaklyTrackedValues); - dict.SetMethod("weaklyTrackValue", &WeaklyTrackValue); dict.SetMethod("runUntilIdle", &RunUntilIdle); #endif } diff --git a/spec-main/api-context-bridge-spec.ts b/spec-main/api-context-bridge-spec.ts index 1cbb373dc7101..330077e1a19d0 100644 --- a/spec-main/api-context-bridge-spec.ts +++ b/spec-main/api-context-bridge-spec.ts @@ -576,11 +576,11 @@ describe('contextBridge', () => { if (!useSandbox) { it('should release the global hold on methods sent across contexts', async () => { await makeBindingWindow(() => { - require('electron').ipcRenderer.on('get-gc-info', (e: Electron.IpcRendererEvent) => e.sender.send('gc-info', { trackedValues: process._linkedBinding('electron_common_v8_util').getWeaklyTrackedValues().length })); - const { weaklyTrackValue } = process._linkedBinding('electron_common_v8_util'); + const trackedValues: WeakRef[] = []; + require('electron').ipcRenderer.on('get-gc-info', e => e.sender.send('gc-info', { trackedValues: trackedValues.filter(value => value.deref()).length })); contextBridge.exposeInMainWorld('example', { getFunction: () => () => 123, - track: weaklyTrackValue + track: (value: object) => { trackedValues.push(new WeakRef(value)); } }); }); await callWithBindings(async (root: any) => { @@ -604,11 +604,11 @@ describe('contextBridge', () => { if (useSandbox) { it('should not leak the global hold on methods sent across contexts when reloading a sandboxed renderer', async () => { await makeBindingWindow(() => { - require('electron').ipcRenderer.on('get-gc-info', e => e.sender.send('gc-info', { trackedValues: process._linkedBinding('electron_common_v8_util').getWeaklyTrackedValues().length })); - const { weaklyTrackValue } = process._linkedBinding('electron_common_v8_util'); + const trackedValues: WeakRef[] = []; + require('electron').ipcRenderer.on('get-gc-info', e => e.sender.send('gc-info', { trackedValues: trackedValues.filter(value => value.deref()).length })); contextBridge.exposeInMainWorld('example', { getFunction: () => () => 123, - track: weaklyTrackValue + track: (value: object) => { trackedValues.push(new WeakRef(value)); } }); require('electron').ipcRenderer.send('window-ready-for-tasking'); }); diff --git a/typings/internal-ambient.d.ts b/typings/internal-ambient.d.ts index 554a8d5abb755..ac61a4f2aa686 100644 --- a/typings/internal-ambient.d.ts +++ b/typings/internal-ambient.d.ts @@ -42,9 +42,6 @@ declare namespace NodeJS { setHiddenValue(obj: any, key: string, value: T): void; deleteHiddenValue(obj: any, key: string): void; requestGarbageCollectionForTesting(): void; - weaklyTrackValue(value: any): void; - clearWeaklyTrackedValues(): void; - getWeaklyTrackedValues(): any[]; addRemoteObjectRef(contextId: string, id: number): void; runUntilIdle(): void; isSameOrigin(a: string, b: string): boolean;