From 093f2dd4a669a2c5ac93ca198ca36a0959de3098 Mon Sep 17 00:00:00 2001 From: Milan Burda Date: Fri, 8 Nov 2019 21:46:35 +0100 Subject: [PATCH] chore: remove deprecated .getWebContents() (#20986) --- docs/api/app.md | 12 -------- docs/api/breaking-changes.md | 14 +++++++++ docs/api/command-line-switches.md | 1 - docs/api/web-contents.md | 26 +++++++--------- docs/api/webview-tag.md | 8 ----- docs/tutorial/security.md | 4 --- lib/browser/guest-view-manager.js | 5 ---- lib/browser/remote/server.ts | 18 ------------ lib/renderer/api/remote.js | 7 ----- lib/renderer/web-view/guest-view-internal.ts | 6 ---- lib/renderer/web-view/web-view-impl.ts | 25 ---------------- spec/ts-smoke/electron/renderer.ts | 1 - spec/webview-spec.js | 31 +------------------- typings/internal-electron.d.ts | 5 ---- 14 files changed, 26 insertions(+), 137 deletions(-) diff --git a/docs/api/app.md b/docs/api/app.md index d47928025f..db91b3e76a 100644 --- a/docs/api/app.md +++ b/docs/api/app.md @@ -485,18 +485,6 @@ Emitted when `remote.getCurrentWebContents()` is called in the renderer process Calling `event.preventDefault()` will prevent the object from being returned. Custom value can be returned by setting `event.returnValue`. -### Event: 'remote-get-guest-web-contents' - -Returns: - -* `event` Event -* `webContents` [WebContents](web-contents.md) -* `guestWebContents` [WebContents](web-contents.md) - -Emitted when `.getWebContents()` is called in the renderer process of `webContents`. -Calling `event.preventDefault()` will prevent the object from being returned. -Custom value can be returned by setting `event.returnValue`. - ## Methods The `app` object has the following methods: diff --git a/docs/api/breaking-changes.md b/docs/api/breaking-changes.md index 7b75f8ea67..f3603c34e7 100644 --- a/docs/api/breaking-changes.md +++ b/docs/api/breaking-changes.md @@ -6,6 +6,20 @@ Breaking changes will be documented here, and deprecation warnings added to JS c The `FIXME` string is used in code comments to denote things that should be fixed for future releases. See https://github.com/electron/electron/search?q=fixme +## Planned Breaking API Changes (9.0) + +### `.getWebContents()` + +This API, which was deprecated in Electron 8.0, is now removed. + +```js +// Removed in Electron 9.0 +webview.getWebContents() +// Replace with +const { remote } = require('electron') +remote.webContents.fromId(webview.getWebContentsId()) +``` + ## Planned Breaking API Changes (8.0) ### Values sent over IPC are now serialized with Structured Clone Algorithm diff --git a/docs/api/command-line-switches.md b/docs/api/command-line-switches.md index f7d527f98c..2a86961609 100644 --- a/docs/api/command-line-switches.md +++ b/docs/api/command-line-switches.md @@ -190,7 +190,6 @@ Enables caller stack logging for the following APIs (filtering events): - `remote.getBuiltin()` / `remote-get-global` - `remote.getCurrentWindow()` / `remote-get-current-window` - `remote.getCurrentWebContents()` / `remote-get-current-web-contents` -- `remote.getGuestWebContents()` / `remote-get-guest-web-contents` ## --no-sandbox diff --git a/docs/api/web-contents.md b/docs/api/web-contents.md index 69758f61d9..f519fc6f05 100644 --- a/docs/api/web-contents.md +++ b/docs/api/web-contents.md @@ -802,17 +802,6 @@ Emitted when `remote.getCurrentWebContents()` is called in the renderer process. Calling `event.preventDefault()` will prevent the object from being returned. Custom value can be returned by setting `event.returnValue`. -#### Event: 'remote-get-guest-web-contents' - -Returns: - -* `event` IpcMainEvent -* `guestWebContents` [WebContents](web-contents.md) - -Emitted when `.getWebContents()` is called in the renderer process. -Calling `event.preventDefault()` will prevent the object from being returned. -Custom value can be returned by setting `event.returnValue`. - ### Instance Methods #### `contents.loadURL(url[, options])` @@ -1391,13 +1380,20 @@ An example of showing devtools in a `` tag: - + diff --git a/docs/api/webview-tag.md b/docs/api/webview-tag.md index ee0366a093..cf896c6de7 100644 --- a/docs/api/webview-tag.md +++ b/docs/api/webview-tag.md @@ -648,14 +648,6 @@ Sets the maximum and minimum layout-based (i.e. non-visual) zoom level. Shows pop-up dictionary that searches the selected word on the page. -### `.getWebContents()` _Deprecated_ - -Returns [`WebContents`](web-contents.md) - The web contents associated with -this `webview`. - -It depends on the [`remote`](remote.md) module, -it is therefore not available when this module is disabled. - ### `.getWebContentsId()` Returns `Number` - The WebContents ID of this `webview`. diff --git a/docs/tutorial/security.md b/docs/tutorial/security.md index 299a1c3597..3049270f48 100644 --- a/docs/tutorial/security.md +++ b/docs/tutorial/security.md @@ -826,10 +826,6 @@ app.on('remote-get-current-window', (event, webContents) => { app.on('remote-get-current-web-contents', (event, webContents) => { event.preventDefault() }) - -app.on('remote-get-guest-web-contents', (event, webContents, guestWebContents) => { - event.preventDefault() -}) ``` ## 17) Use a current version of Electron diff --git a/lib/browser/guest-view-manager.js b/lib/browser/guest-view-manager.js index c331d7f8b0..f55f071ed4 100644 --- a/lib/browser/guest-view-manager.js +++ b/lib/browser/guest-view-manager.js @@ -347,10 +347,6 @@ handleMessage('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST', function (event, param return createGuest(event.sender, params) }) -handleMessageSync('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST', function (event, params) { - return createGuest(event.sender, params) -}) - handleMessage('ELECTRON_GUEST_VIEW_MANAGER_ATTACH_GUEST', function (event, embedderFrameId, elementInstanceId, guestInstanceId, params) { try { attachGuest(event, embedderFrameId, elementInstanceId, guestInstanceId, params) @@ -411,5 +407,4 @@ const getEmbedder = function (guestInstanceId) { if (guestInstance != null) return guestInstance.embedder } -exports.getGuestForWebContents = getGuestForWebContents exports.isWebViewTagEnabled = isWebViewTagEnabled diff --git a/lib/browser/remote/server.ts b/lib/browser/remote/server.ts index a622d23027..5e0b511f23 100644 --- a/lib/browser/remote/server.ts +++ b/lib/browser/remote/server.ts @@ -4,7 +4,6 @@ import * as electron from 'electron' import { EventEmitter } from 'events' import objectsRegistry from './objects-registry' import { ipcMainInternal } from '../ipc-main-internal' -import * as guestViewManager from '@electron/internal/browser/guest-view-manager' import { isPromise, isSerializableObject } from '@electron/internal/common/remote/type-utils' const v8Util = process.electronBinding('v8_util') @@ -543,23 +542,6 @@ handleRemoteCommand('ELECTRON_BROWSER_CONTEXT_RELEASE', (event, contextId) => { objectsRegistry.clear(event.sender, contextId) }) -handleRemoteCommand('ELECTRON_BROWSER_GUEST_WEB_CONTENTS', function (event, contextId, guestInstanceId, stack) { - logStack(event.sender, 'remote.getGuestWebContents()', stack) - const guest = guestViewManager.getGuestForWebContents(guestInstanceId, event.sender) - - const customEvent = emitCustomEvent(event.sender, 'remote-get-guest-web-contents', guest) - - if (customEvent.returnValue === undefined) { - if (customEvent.defaultPrevented) { - throw new Error(`Blocked remote.getGuestWebContents()`) - } else { - customEvent.returnValue = guest - } - } - - return valueToMeta(event.sender, contextId, customEvent.returnValue) -}) - module.exports = { isRemoteModuleEnabled } diff --git a/lib/renderer/api/remote.js b/lib/renderer/api/remote.js index fca80978f6..c337d90339 100644 --- a/lib/renderer/api/remote.js +++ b/lib/renderer/api/remote.js @@ -342,13 +342,6 @@ exports.createFunctionWithReturnValue = (returnValue) => { return func } -// Get the guest WebContents from guestInstanceId. -exports.getGuestWebContents = (guestInstanceId) => { - const command = 'ELECTRON_BROWSER_GUEST_WEB_CONTENTS' - const meta = ipcRendererInternal.sendSync(command, contextId, guestInstanceId, getCurrentStack()) - return metaToValue(meta) -} - const addBuiltinProperty = (name) => { Object.defineProperty(exports, name, { get: () => exports.getBuiltin(name) diff --git a/lib/renderer/web-view/guest-view-internal.ts b/lib/renderer/web-view/guest-view-internal.ts index 852826da15..28f95ece46 100644 --- a/lib/renderer/web-view/guest-view-internal.ts +++ b/lib/renderer/web-view/guest-view-internal.ts @@ -1,6 +1,5 @@ import { webFrame, IpcMessageEvent } from 'electron' import { ipcRendererInternal } from '@electron/internal/renderer/ipc-renderer-internal' -import * as ipcRendererUtils from '@electron/internal/renderer/ipc-renderer-internal-utils' import { WebViewImpl } from '@electron/internal/renderer/web-view/web-view-impl' @@ -96,10 +95,6 @@ export function createGuest (params: Record): Promise { return ipcRendererInternal.invoke('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST', params) } -export function createGuestSync (params: Record): number { - return ipcRendererUtils.invokeSync('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST', params) -} - export function attachGuest ( elementInstanceId: number, guestInstanceId: number, params: Record, contentWindow: Window ) { @@ -113,6 +108,5 @@ export function attachGuest ( export const guestViewInternalModule = { deregisterEvents, createGuest, - createGuestSync, attachGuest } diff --git a/lib/renderer/web-view/web-view-impl.ts b/lib/renderer/web-view/web-view-impl.ts index 3e8d171d70..5b25695e73 100644 --- a/lib/renderer/web-view/web-view-impl.ts +++ b/lib/renderer/web-view/web-view-impl.ts @@ -115,11 +115,6 @@ export class WebViewImpl { }) } - createGuestSync () { - this.beforeFirstNavigation = false - this.attachGuestInstance(guestViewInternal.createGuestSync(this.buildParams())) - } - dispatchEvent (webViewEvent: Electron.Event) { this.webviewNode.dispatchEvent(webViewEvent) } @@ -224,26 +219,6 @@ export const setupMethods = (WebViewElement: typeof ElectronInternal.WebViewElem return internal.guestInstanceId } - // WebContents associated with this webview. - WebViewElement.prototype.getWebContents = function () { - const remote = electron.remote as Electron.RemoteInternal - if (!remote) { - throw new Error('getGuestWebContents requires remote, which is not enabled') - } - const internal = v8Util.getHiddenValue(this, 'internal') - if (!internal.guestInstanceId) { - internal.createGuestSync() - } - - return remote.getGuestWebContents(internal.guestInstanceId!) - } - - WebViewElement.prototype.getWebContents = electron.deprecate.moveAPI( - WebViewElement.prototype.getWebContents, - 'webview.getWebContents()', - 'remote.webContents.fromId(webview.getWebContentsId())' - ) as any - // Focusing the webview should move page focus to the underlying iframe. WebViewElement.prototype.focus = function () { this.contentWindow.focus() diff --git a/spec/ts-smoke/electron/renderer.ts b/spec/ts-smoke/electron/renderer.ts index b8d68d2d51..7e6875185d 100644 --- a/spec/ts-smoke/electron/renderer.ts +++ b/spec/ts-smoke/electron/renderer.ts @@ -257,7 +257,6 @@ webview.capturePage().then(image => { console.log(image) }) { const opened: boolean = webview.isDevToolsOpened() const focused: boolean = webview.isDevToolsFocused() - const focused2: boolean = webview.getWebContents().isFocused() } // In guest page. diff --git a/spec/webview-spec.js b/spec/webview-spec.js index a041441731..add3e81e25 100644 --- a/spec/webview-spec.js +++ b/spec/webview-spec.js @@ -1018,36 +1018,7 @@ describe(' tag', function () { const src = 'about:blank' await loadWebView(webview, { src }) - expect(webview.getWebContentsId()).to.be.equal(webview.getWebContents().id) - }) - }) - - describe('.getWebContents', () => { - it('can return the webcontents associated', async () => { - const src = 'about:blank' - await loadWebView(webview, { src }) - - const webviewContents = webview.getWebContents() - expect(webviewContents).to.be.an('object') - expect(webviewContents.getURL()).to.equal(src) - }) - }) - - describe('.getWebContents filtering', () => { - it('can return custom value', async () => { - const src = 'about:blank' - await loadWebView(webview, { src }) - - ipcRenderer.send('handle-next-remote-get-guest-web-contents', 'Hello World!') - expect(webview.getWebContents()).to.be.equal('Hello World!') - }) - - it('throws when no returnValue set', async () => { - const src = 'about:blank' - await loadWebView(webview, { src }) - - ipcRenderer.send('handle-next-remote-get-guest-web-contents') - expect(() => webview.getWebContents()).to.throw('Blocked remote.getGuestWebContents()') + expect(webview.getWebContentsId()).to.be.a('number') }) }) diff --git a/typings/internal-electron.d.ts b/typings/internal-electron.d.ts index 1dfdcc34b4..7ee80c8ee2 100644 --- a/typings/internal-electron.d.ts +++ b/typings/internal-electron.d.ts @@ -67,10 +67,6 @@ declare namespace Electron { sendToAll(webContentsId: number, channel: string, ...args: any[]): void } - interface RemoteInternal extends Electron.Remote { - getGuestWebContents(guestInstanceId: number): Electron.WebContents; - } - interface WebContentsInternal extends Electron.WebContents { _sendInternal(channel: string, ...args: any[]): void; _sendInternalToAll(channel: string, ...args: any[]): void; @@ -165,7 +161,6 @@ declare namespace ElectronInternal { public disconnectedCallback(): void; // Created in web-view-impl - public getWebContents(): Electron.WebContents; public getWebContentsId(): number; } }