Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: remove deprecated <webview>.getWebContents() #20986

Merged
merged 1 commit into from
Nov 8, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 0 additions & 12 deletions docs/api/app.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 `<webview>.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:
Expand Down
14 changes: 14 additions & 0 deletions docs/api/breaking-changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

### `<webview>.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
Expand Down
1 change: 0 additions & 1 deletion docs/api/command-line-switches.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
26 changes: 11 additions & 15 deletions docs/api/web-contents.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 `<webview>.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])`
Expand Down Expand Up @@ -1391,13 +1380,20 @@ An example of showing devtools in a `<webview>` tag:
</head>
<body>
<webview id="browser" src="https://github.com"></webview>
<webview id="devtools"></webview>
<webview id="devtools" src="about:blank"></webview>
<script>
const { webContents } = require('electron').remote
const emittedOnce = (element, eventName) => new Promise(resolve => {
element.addEventListener(eventName, event => resolve(event), { once: true })
})
const browserView = document.getElementById('browser')
const devtoolsView = document.getElementById('devtools')
browserView.addEventListener('dom-ready', () => {
const browser = browserView.getWebContents()
browser.setDevToolsWebContents(devtoolsView.getWebContents())
const browserReady = emittedOnce(browserView, 'dom-ready')
const devtoolsReady = emittedOnce(devtoolsView, 'dom-ready')
Promise.all([browserReady, devtoolsReady]).then(() => {
const browser = webContents.fromId(browserView.getWebContentsId())
const devtools = webContents.fromId(devtoolsView.getWebContentsId())
browser.setDevToolsWebContents(devtools)
browser.openDevTools()
})
</script>
Expand Down
8 changes: 0 additions & 8 deletions docs/api/webview-tag.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

### `<webview>.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.

### `<webview>.getWebContentsId()`

Returns `Number` - The WebContents ID of this `webview`.
Expand Down
4 changes: 0 additions & 4 deletions docs/tutorial/security.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 0 additions & 5 deletions lib/browser/guest-view-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -411,5 +407,4 @@ const getEmbedder = function (guestInstanceId) {
if (guestInstance != null) return guestInstance.embedder
}

exports.getGuestForWebContents = getGuestForWebContents
exports.isWebViewTagEnabled = isWebViewTagEnabled
18 changes: 0 additions & 18 deletions lib/browser/remote/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down Expand Up @@ -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
}
7 changes: 0 additions & 7 deletions lib/renderer/api/remote.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
6 changes: 0 additions & 6 deletions lib/renderer/web-view/guest-view-internal.ts
Original file line number Diff line number Diff line change
@@ -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'

Expand Down Expand Up @@ -96,10 +95,6 @@ export function createGuest (params: Record<string, any>): Promise<number> {
return ipcRendererInternal.invoke('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST', params)
}

export function createGuestSync (params: Record<string, any>): number {
return ipcRendererUtils.invokeSync('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST', params)
}

export function attachGuest (
elementInstanceId: number, guestInstanceId: number, params: Record<string, any>, contentWindow: Window
) {
Expand All @@ -113,6 +108,5 @@ export function attachGuest (
export const guestViewInternalModule = {
deregisterEvents,
createGuest,
createGuestSync,
attachGuest
}
25 changes: 0 additions & 25 deletions lib/renderer/web-view/web-view-impl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down Expand Up @@ -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<WebViewImpl>(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()
Expand Down
1 change: 0 additions & 1 deletion spec/ts-smoke/electron/renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
31 changes: 1 addition & 30 deletions spec/webview-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -1018,36 +1018,7 @@ describe('<webview> tag', function () {
const src = 'about:blank'
await loadWebView(webview, { src })

expect(webview.getWebContentsId()).to.be.equal(webview.getWebContents().id)
})
})

describe('<webview>.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('<webview>.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')
})
})

Expand Down
5 changes: 0 additions & 5 deletions typings/internal-electron.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -165,7 +161,6 @@ declare namespace ElectronInternal {
public disconnectedCallback(): void;

// Created in web-view-impl
public getWebContents(): Electron.WebContents;
public getWebContentsId(): number;
}
}
Expand Down