Index: chrome/renderer/resources/extensions/chrome_web_view_experimental.js |
diff --git a/chrome/renderer/resources/extensions/chrome_web_view_experimental.js b/chrome/renderer/resources/extensions/chrome_web_view_experimental.js |
index f3db4bb6949b98550b80df981ce51c94acacbf7e..442f84b5922a850865180da408b1d60fcfd3de27 100644 |
--- a/chrome/renderer/resources/extensions/chrome_web_view_experimental.js |
+++ b/chrome/renderer/resources/extensions/chrome_web_view_experimental.js |
@@ -19,6 +19,23 @@ var idGeneratorNatives = requireNative('id_generator'); |
var MessagingNatives = requireNative('messaging_natives'); |
var utils = require('utils'); |
var WebViewImpl = require('webView').WebViewImpl; |
+var DeclarativeContentSchema = |
+ requireNative('schema_registry').GetSchema('declarativeContent'); |
+ |
+var DeclarativeContentEvent = function(opt_eventName, |
+ opt_argSchemas, |
+ opt_eventOptions, |
+ opt_webViewInstanceId) { |
+ EventBindings.Event.call(this, |
+ opt_eventName, |
+ opt_argSchemas, |
+ opt_eventOptions, |
+ opt_webViewInstanceId); |
+} |
+ |
+DeclarativeContentEvent.prototype = { |
+ __proto__: EventBindings.Event.prototype |
+}; |
function GetUniqueSubEventName(eventName) { |
return eventName + '/' + idGeneratorNatives.GetNextId(); |
@@ -175,3 +192,35 @@ WebViewImpl.prototype.setupExperimentalContextMenus = function() { |
enumerable: true |
}); |
}; |
+ |
+WebViewImpl.prototype.maybeSetupExperimentalChromeWebViewEvents = function( |
+ request) { |
+ var createDeclarativeContentEvent = function(declarativeContentEvent) { |
+ return function() { |
+ if (!this[declarativeContentEvent.name]) { |
+ this[declarativeContentEvent.name] = |
+ new DeclarativeContentEvent( |
+ 'webViewInternal.declarativeContent.' + |
+ declarativeContentEvent.name, |
+ declarativeContentEvent.parameters, |
+ declarativeContentEvent.options, |
+ this.viewInstanceId); |
+ } |
+ return this[declarativeContentEvent.name]; |
+ }.bind(this); |
+ }.bind(this); |
+ |
+ for (var i = 0; i < DeclarativeContentSchema.events.length; ++i) { |
+ var eventSchema = DeclarativeContentSchema.events[i]; |
+ var declarativeContentEvent = createDeclarativeContentEvent(eventSchema); |
+ Object.defineProperty( |
+ request, |
+ eventSchema.name, |
+ { |
+ get: declarativeContentEvent, |
+ enumerable: true |
+ } |
+ ); |
+ } |
+ return request; |
+}; |