Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8672)

Unified Diff: chrome/renderer/resources/extensions/web_view.js

Issue 250063002: Browser Plugin: Simplified guest attachment (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More cleanup Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/renderer/browser_plugin/browser_plugin.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/resources/extensions/web_view.js
diff --git a/chrome/renderer/resources/extensions/web_view.js b/chrome/renderer/resources/extensions/web_view.js
index ce75619c6b63abf57864381fd4774050d1137b22..6c8580b7062fb1260df6abaed45fd8cd08662f6d 100644
--- a/chrome/renderer/resources/extensions/web_view.js
+++ b/chrome/renderer/resources/extensions/web_view.js
@@ -165,6 +165,7 @@ WebViewInternal.maybeRegisterExperimentalAPIs = function(proto) {}
function WebViewInternal(webviewNode) {
privates(webviewNode).internal = this;
this.webviewNode = webviewNode;
+ this.attached = false;
this.browserPluginNode = this.createBrowserPluginNode();
var shadowRoot = this.webviewNode.createShadowRoot();
shadowRoot.appendChild(this.browserPluginNode);
@@ -569,20 +570,7 @@ WebViewInternal.prototype.setupWebviewNodeEvents = function() {
this.viewInstanceId = IdGenerator.GetNextId();
var onInstanceIdAllocated = function(e) {
var detail = e.detail ? JSON.parse(e.detail) : {};
- self.instanceId = detail.windowId;
- var params = {
- 'api': 'webview',
- 'instanceId': self.viewInstanceId
- };
- if (self.userAgentOverride) {
- params['userAgentOverride'] = self.userAgentOverride;
- }
- self.browserPluginNode['-internal-attach'](params);
-
- var events = self.getEvents();
- for (var eventName in events) {
- self.setupEvent(eventName, events[eventName]);
- }
+ self.attachWindow(detail.windowId);
lazyboy 2014/04/23 20:42:07 nit: probably self.attachWindowAndSetUpEvents() is
};
this.browserPluginNode.addEventListener('-internal-instanceid-allocated',
onInstanceIdAllocated);
@@ -809,9 +797,12 @@ WebViewInternal.prototype.handleNewWindowEvent =
// Note: Any subsequent errors cannot be exceptions because they happen
// asynchronously.
setTimeout(function() {
- var attached =
- browserPluginNode['-internal-attachWindowTo'](webview,
- event.windowId);
+ var attached = false;
+ var webViewInternal = privates(webview).internal;
+ if (webViewInternal instanceof WebViewInternal) {
+ attached = webViewInternal.attachWindow(event.windowId);
+ }
+
if (!attached) {
window.console.error(ERROR_MSG_NEWWINDOW_UNABLE_TO_ATTACH);
}
@@ -1022,6 +1013,29 @@ WebViewInternal.prototype.setUserAgentOverride = function(userAgentOverride) {
WebView.overrideUserAgent(this.instanceId, userAgentOverride);
};
+/** @private */
+WebViewInternal.prototype.attachWindow = function(instanceId) {
+ if (this.attached) {
+ return false;
+ }
+ this.attached = true;
+ this.instanceId = instanceId;
+ var params = {
+ 'api': 'webview',
+ 'instanceId': this.viewInstanceId
+ };
+ if (this.userAgentOverride) {
+ params['userAgentOverride'] = this.userAgentOverride;
+ }
+ this.browserPluginNode['-internal-attach'](this.instanceId, params);
+
+ var events = this.getEvents();
+ for (var eventName in events) {
+ this.setupEvent(eventName, events[eventName]);
+ }
+ return true;
+};
+
// Registers browser plugin <object> custom element.
function registerBrowserPluginElement() {
var proto = Object.create(HTMLObjectElement.prototype);
« no previous file with comments | « no previous file | content/renderer/browser_plugin/browser_plugin.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698