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

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

Issue 2912883004: [Extensions Bindings] Don't allow `event` module with native bindings (Closed)
Patch Set: jbroman's Created 3 years, 6 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 | extensions/renderer/api_binding.cc » ('j') | extensions/renderer/api_binding_js_util.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/resources/extensions/web_view/chrome_web_view.js
diff --git a/chrome/renderer/resources/extensions/web_view/chrome_web_view.js b/chrome/renderer/resources/extensions/web_view/chrome_web_view.js
index f025f3ebc00616ccd42763d12668a9753105848b..f340fd81882be4085a26703145e32219e0cb82fe 100644
--- a/chrome/renderer/resources/extensions/web_view/chrome_web_view.js
+++ b/chrome/renderer/resources/extensions/web_view/chrome_web_view.js
@@ -11,7 +11,6 @@ var ChromeWebView = getInternalApi ?
var ChromeWebViewSchema =
requireNative('schema_registry').GetSchema('chromeWebViewInternal');
var CreateEvent = require('guestViewEvents').CreateEvent;
-var EventBindings = require('event_bindings');
var GuestViewInternalNatives = requireNative('guest_view_internal');
var idGeneratorNatives = requireNative('id_generator');
var utils = require('utils');
@@ -30,75 +29,74 @@ var ContextMenusEvent = CreateEvent('chromeWebViewInternal.onClicked');
var ContextMenusHandlerEvent =
CreateEvent('chromeWebViewInternal.onContextMenuShow');
-// -----------------------------------------------------------------------------
-// ContextMenusOnClickedEvent object.
+var jsEvent;
+function createCustomEvent(name, schema, options, webviewId) {
+ if (bindingUtil)
+ return bindingUtil.createCustomEvent(name, undefined, false);
+ if (!jsEvent)
+ jsEvent = require('event_bindings').Event;
+ return new jsEvent(name, schema, options, webviewId);
+}
// This event is exposed as <webview>.contextMenus.onClicked.
-function ContextMenusOnClickedEvent(webViewInstanceId,
- opt_eventName,
- opt_argSchemas,
- opt_eventOptions) {
+function getContextMenusOnClickedEvent(webViewInstanceId,
lazyboy 2017/06/13 17:46:00 nit: s/get/create
Devlin 2017/06/13 22:30:53 Done.
+ opt_eventName,
+ opt_argSchemas,
+ opt_eventOptions) {
var subEventName = GetUniqueSubEventName(opt_eventName);
- $Function.call(EventBindings.Event,
- this,
- subEventName,
- opt_argSchemas,
- opt_eventOptions,
- webViewInstanceId);
+ var newEvent = createCustomEvent(subEventName, opt_argSchemas,
+ opt_eventOptions, webViewInstanceId);
var view = GuestViewInternalNatives.GetViewFromID(webViewInstanceId);
- if (!view) {
- return;
+ if (view) {
+ view.events.addScopedListener(
+ ContextMenusEvent,
+ $Function.bind(function() {
+ // Re-dispatch to subEvent's listeners.
+ $Function.apply(newEvent.dispatch, newEvent, $Array.slice(arguments));
+ }, newEvent),
+ {instanceId: webViewInstanceId});
}
- view.events.addScopedListener(ContextMenusEvent, $Function.bind(function() {
- // Re-dispatch to subEvent's listeners.
- $Function.apply(this.dispatch, this, $Array.slice(arguments));
- }, this), {instanceId: webViewInstanceId});
+ return newEvent;
}
-$Object.setPrototypeOf(ContextMenusOnClickedEvent.prototype,
- EventBindings.Event.prototype);
// This event is exposed as <webview>.contextMenus.onShow.
-function ContextMenusOnContextMenuEvent(webViewInstanceId,
- opt_eventName,
- opt_argSchemas,
- opt_eventOptions) {
+function getContextMenusOnContextMenuEvent(webViewInstanceId,
+ opt_eventName,
+ opt_argSchemas,
+ opt_eventOptions) {
var subEventName = GetUniqueSubEventName(opt_eventName);
- $Function.call(EventBindings.Event,
- this,
- subEventName,
- opt_argSchemas,
- opt_eventOptions,
- webViewInstanceId);
+ var newEvent = createCustomEvent(subEventName, opt_argSchemas,
+ opt_eventOptions, webViewInstanceId);
var view = GuestViewInternalNatives.GetViewFromID(webViewInstanceId);
- if (!view) {
- return;
+ if (view) {
+ view.events.addScopedListener(
+ ContextMenusHandlerEvent,
+ $Function.bind(function(e) {
+ var defaultPrevented = false;
+ var event = {
+ preventDefault: function() { defaultPrevented = true; }
+ };
+
+ // Re-dispatch to subEvent's listeners.
+ $Function.apply(newEvent.dispatch, newEvent, [event]);
+
+ if (!defaultPrevented) {
+ // TODO(lazyboy): Remove |items| parameter completely from
+ // ChromeWebView.showContextMenu as we don't do anything useful with
+ // it currently.
+ var items = [];
+ var guestInstanceId = GuestViewInternalNatives.
+ GetViewFromID(webViewInstanceId).guest.getId();
+ ChromeWebView.showContextMenu(guestInstanceId, e.requestId, items);
+ }
+ }, newEvent),
+ {instanceId: webViewInstanceId});
}
- view.events.addScopedListener(
- ContextMenusHandlerEvent, $Function.bind(function(e) {
- var defaultPrevented = false;
- var event = {
- 'preventDefault': function() { defaultPrevented = true; }
- };
-
- // Re-dispatch to subEvent's listeners.
- $Function.apply(this.dispatch, this, [event]);
-
- if (!defaultPrevented) {
- // TODO(lazyboy): Remove |items| parameter completely from
- // ChromeWebView.showContextMenu as we don't do anything useful with it
- // currently.
- var items = [];
- var guestInstanceId = GuestViewInternalNatives.
- GetViewFromID(webViewInstanceId).guest.getId();
- ChromeWebView.showContextMenu(guestInstanceId, e.requestId, items);
- }
- }, this), {instanceId: webViewInstanceId});
-}
-$Object.setPrototypeOf(ContextMenusOnContextMenuEvent.prototype,
- EventBindings.Event.prototype);
+ return newEvent;
+}
// -----------------------------------------------------------------------------
// WebViewContextMenusImpl object.
@@ -149,7 +147,7 @@ WebViewImpl.prototype.maybeSetupContextMenus = function() {
var eventSchema =
utils.lookup(ChromeWebViewSchema.events, 'name', 'onShow');
var eventOptions = {supportsListeners: true};
- this.contextMenusOnContextMenuEvent_ = new ContextMenusOnContextMenuEvent(
+ this.contextMenusOnContextMenuEvent_ = getContextMenusOnContextMenuEvent(
this.viewInstanceId, eventName, eventSchema, eventOptions);
}
@@ -169,7 +167,7 @@ WebViewImpl.prototype.maybeSetupContextMenus = function() {
var eventSchema =
utils.lookup(ChromeWebViewSchema.events, 'name', 'onClicked');
var eventOptions = {supportsListeners: true};
- var onClickedEvent = new ContextMenusOnClickedEvent(
+ var onClickedEvent = getContextMenusOnClickedEvent(
this.viewInstanceId, eventName, eventSchema, eventOptions);
this.contextMenusOnClickedEvent_ = onClickedEvent;
return onClickedEvent;
« no previous file with comments | « no previous file | extensions/renderer/api_binding.cc » ('j') | extensions/renderer/api_binding_js_util.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698