web_contents()->GetController().GoToOffset(offset);
}
+const std::string& WebContents::GetWebRTCIPHandlingPolicy() const {
+ return web_contents()->
+ GetMutableRendererPrefs()->webrtc_ip_handling_policy;
+}
+
+void WebContents::SetWebRTCIPHandlingPolicy(
+ const std::string webrtc_ip_handling_policy) {
+ if (GetWebRTCIPHandlingPolicy() == webrtc_ip_handling_policy)
+ return;
+ web_contents()->GetMutableRendererPrefs()->webrtc_ip_handling_policy =
+ webrtc_ip_handling_policy;
+
+ content::RenderViewHost* host = web_contents()->GetRenderViewHost();
+ if (host)
+ host->SyncRendererPrefs();
+}
+
bool WebContents::IsCrashed() const {
return web_contents()->IsCrashed();
}
.SetMethod("copyImageAt", &WebContents::CopyImageAt)
.SetMethod("capturePage", &WebContents::CapturePage)
.SetMethod("setEmbedder", &WebContents::SetEmbedder)
+ .SetMethod("setWebRTCIPHandlingPolicy",
+ &WebContents::SetWebRTCIPHandlingPolicy)
+ .SetMethod("getWebRTCIPHandlingPolicy",
+ &WebContents::GetWebRTCIPHandlingPolicy)
.SetProperty("id", &WebContents::ID)
.SetProperty("session", &WebContents::Session)
.SetProperty("hostWebContents", &WebContents::HostWebContents)
void GoBack();
void GoForward();
void GoToOffset(int offset);
+ const std::string& GetWebRTCIPHandlingPolicy() const;
+ void SetWebRTCIPHandlingPolicy(const std::string webrtc_ip_handling_policy);
bool IsCrashed() const;
void SetUserAgent(const std::string& user_agent, mate::Arguments* args);
std::string GetUserAgent();
If *offscreen rendering* is enabled invalidates the frame and generates a new
one through the `'paint'` event.
+#### `contents.getWebRTCIPHandlingPolicy()`
+
+* Returns `String` - Returns the WebRTC IP Handling Policy
+
+#### `contents.setWebRTCIPHandlingPolicy(policy)`
+
+* `policy` String - Specify the WebRTC IP Handling Policy
+ * `default` - Exposes user's public and local IPs. This is the default behavior if not specified.
+ * `default_public_interface_only` - Exposes user's public IP, but does not expose user's local IP.
+ * `default_public_and_private_interfaces` - Exposes user's public and local IPs.
+ * `disable_non_proxied_udp` - Does not expose public or local IPs.
+
+Setting the WebRTC IP handling policy allows you to control which IPs are exposed via WebRTC. See [BrowserLeaks](https://browserleaks.com/webrtc) for more details.
+
### Instance Properties
#### `contents.id`
})
```
+### `webrtcippolicy`
+
+```html
+<webview src="https://browserleaks.com/webrtc" webrtcippolicy="disable_non_proxied_udp"></webview>
+```
+This attribute allows you to set the WebRTC IP handling policy which controls what IPs are exposed via WebRTC. See [webContents](web-contents.md#contentssetwebrtciphandlingpolicypolicy) for available policies.
+
## Methods
The `webview` tag has the following methods:
* `userAgent` String (optional) - A user agent originating the request.
* `extraHeaders` String (optional) - Extra headers separated by "\n"
* `postData` ([UploadRawData](structures/upload-raw-data.md) | [UploadFile](structures/upload-file.md) | [UploadFileSystem](structures/upload-file-system.md) | [UploadBlob](structures/upload-blob.md))[] - (optional)
- * `baseURLForDataURL` String (optional) - Base url (with trailing path separator) for files to be loaded by the data url. This is needed only if the specified `url` is a data url and needs to load other files.
+ * `baseURLForDataURL` String (optional) - Base url (with trailing path separator) for files to be loaded by the data url. This is needed only if the specified `url` is a data url and needs to load other files.
Loads the `url` in the webview, the `url` must contain the protocol prefix,
e.g. the `http://` or `file://`.
height: params.maxheight
}
})
+ if (params.webrtcippolicy) {
+ guest.setWebRTCIPHandlingPolicy(params.webrtcippolicy)
+ }
if (params.src) {
const opts = {}
if (params.httpreferrer) {
}
}
+// Attribute specifies WebRTC IP handling policy for handling IP leaking.
+class WebRTCIPHandlingPolicyAttribute extends WebViewAttribute {
+ constructor (webViewImpl) {
+ super(webViewConstants.ATTRIBUTE_WEBRTCIPPOLICY, webViewImpl)
+ }
+}
+
// Attribute that specifies the web preferences to be enabled.
class WebPreferencesAttribute extends WebViewAttribute {
constructor (webViewImpl) {
this.attributes[webViewConstants.ATTRIBUTE_GUESTINSTANCE] = new GuestInstanceAttribute(this)
this.attributes[webViewConstants.ATTRIBUTE_DISABLEGUESTRESIZE] = new BooleanAttribute(webViewConstants.ATTRIBUTE_DISABLEGUESTRESIZE, this)
this.attributes[webViewConstants.ATTRIBUTE_WEBPREFERENCES] = new WebPreferencesAttribute(this)
+ this.attributes[webViewConstants.ATTRIBUTE_WEBRTCIPPOLICY] = new WebRTCIPHandlingPolicyAttribute(this)
const autosizeAttributes = [webViewConstants.ATTRIBUTE_MAXHEIGHT, webViewConstants.ATTRIBUTE_MAXWIDTH, webViewConstants.ATTRIBUTE_MINHEIGHT, webViewConstants.ATTRIBUTE_MINWIDTH]
autosizeAttributes.forEach((attribute) => {
ATTRIBUTE_GUESTINSTANCE: 'guestinstance',
ATTRIBUTE_DISABLEGUESTRESIZE: 'disableguestresize',
ATTRIBUTE_WEBPREFERENCES: 'webpreferences',
+ ATTRIBUTE_WEBRTCIPPOLICY: 'webrtcippolicy',
// Internal attribute.
ATTRIBUTE_INTERNALINSTANCEID: 'internalinstanceid',