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

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

Issue 307543005: Fix the Declarative WebRequest API for <webview> (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_webcontentsdelegate_impl_to_chrome
Patch Set: Addressed comments Created 6 years, 7 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
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 77bc1a433ce395b36a6da4cb29b393cdc6999db8..17c2aed9cdbeca8ed2ad52b445970eefd2af201b 100644
--- a/chrome/renderer/resources/extensions/web_view.js
+++ b/chrome/renderer/resources/extensions/web_view.js
@@ -981,6 +981,28 @@ WebViewInternal.prototype.handlePermissionEvent =
}
};
+var WebRequestMessageEvent = CreateEvent('webview.onMessage');
+
+function DeclarativeWebRequestEvent(opt_eventName,
+ opt_argSchemas,
+ opt_eventOptions,
+ opt_webViewInstanceId) {
+ var subEventName = opt_eventName + '/' + IdGenerator.GetNextId();
+ EventBindings.Event.call(this, subEventName, opt_argSchemas, opt_eventOptions,
+ opt_webViewInstanceId);
+
+ var self = this;
+ // TODO(lazyboy): When do we dispose this listener?
battre 2014/05/28 15:15:21 Isn't this taken care of by ExtensionWebRequestEve
Fady Samuel 2014/05/29 15:13:27 No. This is a very crude way to do cleanup. These
+ WebRequestMessageEvent.addListener(function() {
+ // Re-dispatch to subEvent's listeners.
+ $Function.apply(self.dispatch, self, $Array.slice(arguments));
+ }, {instanceId: opt_webViewInstanceId || 0});
battre 2014/05/28 15:15:21 I am lacking the details here, but do you allow on
Fady Samuel 2014/05/29 15:13:27 No. Hence the filter by instance ID. Each webview
+}
+
+DeclarativeWebRequestEvent.prototype = {
+ __proto__: EventBindings.Event.prototype
+};
+
/**
* @private
*/
@@ -1001,12 +1023,34 @@ WebViewInternal.prototype.setupWebRequestEvents = function() {
};
};
+ var createDeclarativeWebRequestEvent = function(webRequestEvent) {
+ return function() {
+ if (!self[webRequestEvent.name]) {
+ // The onMessage event gets a special event type.
battre 2014/05/28 15:15:21 Document why?
Fady Samuel 2014/05/29 15:13:27 Done.
+ var EventObj = webRequestEvent.name === 'onMessage' ?
battre 2014/05/28 15:15:21 EventClass?
Fady Samuel 2014/05/29 15:13:27 Done.
+ DeclarativeWebRequestEvent : EventBindings.Event;
+ self[webRequestEvent.name] =
+ new EventObj(
+ 'webview.' + webRequestEvent.name,
+ webRequestEvent.parameters,
+ webRequestEvent.options,
+ self.viewInstanceId);
+ }
+ return self[webRequestEvent.name];
+ };
+ };
+
for (var i = 0; i < DeclarativeWebRequestSchema.events.length; ++i) {
var eventSchema = DeclarativeWebRequestSchema.events[i];
- var webRequestEvent = createWebRequestEvent(eventSchema);
- this.maybeAttachWebRequestEventToObject(request,
- eventSchema.name,
- webRequestEvent);
+ var webRequestEvent = createDeclarativeWebRequestEvent(eventSchema);
+ Object.defineProperty(
+ request,
+ eventSchema.name,
+ {
+ get: webRequestEvent,
+ enumerable: true
+ }
+ );
}
// Populate the WebRequest events from the API definition.
@@ -1020,9 +1064,6 @@ WebViewInternal.prototype.setupWebRequestEvents = function() {
enumerable: true
}
);
- this.maybeAttachWebRequestEventToObject(this.webviewNode,
- WebRequestSchema.events[i].name,
- webRequestEvent);
}
Object.defineProperty(
this.webviewNode,
@@ -1221,12 +1262,6 @@ WebViewInternal.prototype.maybeGetExperimentalEvents = function() {};
* Implemented when the experimental API is available.
* @private
*/
-WebViewInternal.prototype.maybeAttachWebRequestEventToObject = function() {};
battre 2014/05/28 15:15:21 I have no idea about this code. It would be great
Fady Samuel 2014/05/29 15:13:27 Yes, will do.
-
-/**
- * Implemented when the experimental API is available.
- * @private
- */
WebViewInternal.prototype.maybeGetExperimentalPermissions = function() {
return [];
};

Powered by Google App Engine
This is Rietveld 408576698