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

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: Fixed New Window API test 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..7267212b79e275f32430d08b9e9aab659da22b05 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.attachWindowAndSetUpEvents(detail.windowId);
};
this.browserPluginNode.addEventListener('-internal-instanceid-allocated',
onInstanceIdAllocated);
@@ -801,7 +789,7 @@ WebViewInternal.prototype.handleNewWindowEvent =
var windowObj = {
attach: function(webview) {
validateCall();
- if (!webview)
+ if (!webview || !webview.tagName || webview.tagName != 'WEBVIEW')
throw new Error(ERROR_MSG_WEBVIEW_EXPECTED);
// Attach happens asynchronously to give the tagWatcher an opportunity
// to pick up the new webview before attach operates on it, if it hasn't
@@ -809,9 +797,10 @@ WebViewInternal.prototype.handleNewWindowEvent =
// Note: Any subsequent errors cannot be exceptions because they happen
// asynchronously.
setTimeout(function() {
+ var webViewInternal = privates(webview).internal;
var attached =
- browserPluginNode['-internal-attachWindowTo'](webview,
- event.windowId);
+ webViewInternal.attachWindowAndSetUpEvents(event.windowId);
+
if (!attached) {
window.console.error(ERROR_MSG_NEWWINDOW_UNABLE_TO_ATTACH);
}
@@ -1022,6 +1011,25 @@ WebViewInternal.prototype.setUserAgentOverride = function(userAgentOverride) {
WebView.overrideUserAgent(this.instanceId, userAgentOverride);
};
+/** @private */
+WebViewInternal.prototype.attachWindowAndSetUpEvents = function(instanceId) {
+ 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