Chromium Code Reviews| 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); |