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); |