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

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

Issue 333713005: Move event stuff of web_view.js to its own class/file. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments from fady Created 6 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
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 376f850b193512ad814acd34d6df4213a31d02c7..81b5d3fd4a2d13daf3d7a6c14f508b56c0a8e0be 100644
--- a/chrome/renderer/resources/extensions/web_view.js
+++ b/chrome/renderer/resources/extensions/web_view.js
@@ -7,17 +7,11 @@
// the shadow DOM of the Webview element.
var DocumentNatives = requireNative('document_natives');
-var EventBindings = require('event_bindings');
var GuestViewInternal =
require('binding').Binding.create('guestViewInternal').generate();
var IdGenerator = requireNative('id_generator');
-var MessagingNatives = requireNative('messaging_natives');
-var WebRequestEvent = require('webRequestInternal').WebRequestEvent;
-var WebRequestSchema =
- requireNative('schema_registry').GetSchema('webRequest');
-var DeclarativeWebRequestSchema =
- requireNative('schema_registry').GetSchema('declarativeWebRequest');
var WebView = require('webview').WebView;
+var WebViewEvents = require('webViewEvents').WebViewEvents;
var WEB_VIEW_ATTRIBUTE_MAXHEIGHT = 'maxheight';
var WEB_VIEW_ATTRIBUTE_MAXWIDTH = 'maxwidth';
@@ -42,15 +36,15 @@ var WEB_VIEW_ATTRIBUTES = [
/** @class representing state of storage partition. */
function Partition() {
this.validPartitionId = true;
- this.persist_storage_ = false;
- this.storage_partition_id = '';
+ this.persistStorage = false;
+ this.storagePartitionId = '';
};
Partition.prototype.toAttribute = function() {
if (!this.validPartitionId) {
return '';
}
- return (this.persist_storage_ ? 'persist:' : '') + this.storage_partition_id;
+ return (this.persistStorage ? 'persist:' : '') + this.storagePartitionId;
};
Partition.prototype.fromAttribute = function(value, hasNavigated) {
@@ -71,148 +65,15 @@ Partition.prototype.fromAttribute = function(value, hasNavigated) {
result.error = ERROR_MSG_INVALID_PARTITION_ATTRIBUTE;
return result;
}
- this.persist_storage_ = true;
+ this.persistStorage = true;
} else {
- this.persist_storage_ = false;
+ this.persistStorage = false;
}
- this.storage_partition_id = value;
+ this.storagePartitionId = value;
return result;
};
-var CreateEvent = function(name) {
- var eventOpts = {supportsListeners: true, supportsFilters: true};
- return new EventBindings.Event(name, undefined, eventOpts);
-};
-
-// WEB_VIEW_EVENTS is a map of stable <webview> DOM event names to their
-// associated extension event descriptor objects.
-// An event listener will be attached to the extension event |evt| specified in
-// the descriptor.
-// |fields| specifies the public-facing fields in the DOM event that are
-// accessible to <webview> developers.
-// |customHandler| allows a handler function to be called each time an extension
-// event is caught by its event listener. The DOM event should be dispatched
-// within this handler function. With no handler function, the DOM event
-// will be dispatched by default each time the extension event is caught.
-// |cancelable| (default: false) specifies whether the event's default
-// behavior can be canceled. If the default action associated with the event
-// is prevented, then its dispatch function will return false in its event
-// handler. The event must have a custom handler for this to be meaningful.
-
-var FrameNameChangedEvent = CreateEvent('webview.onFrameNameChanged');
-
-var WEB_VIEW_EVENTS = {
- 'close': {
- evt: CreateEvent('webview.onClose'),
- fields: []
- },
- 'consolemessage': {
- evt: CreateEvent('webview.onConsoleMessage'),
- fields: ['level', 'message', 'line', 'sourceId']
- },
- 'contentload': {
- evt: CreateEvent('webview.onContentLoad'),
- fields: []
- },
- 'contextmenu': {
- evt: CreateEvent('webview.contextmenu'),
- cancelable: true,
- customHandler: function(webViewInternal, event, webViewEvent) {
- webViewInternal.maybeHandleContextMenu(event, webViewEvent);
- },
- fields: ['items']
- },
- 'dialog': {
- cancelable: true,
- customHandler: function(webViewInternal, event, webViewEvent) {
- webViewInternal.handleDialogEvent(event, webViewEvent);
- },
- evt: CreateEvent('webview.onDialog'),
- fields: ['defaultPromptText', 'messageText', 'messageType', 'url']
- },
- 'exit': {
- evt: CreateEvent('webview.onExit'),
- fields: ['processId', 'reason']
- },
- 'loadabort': {
- cancelable: true,
- customHandler: function(webViewInternal, event, webViewEvent) {
- webViewInternal.handleLoadAbortEvent(event, webViewEvent);
- },
- evt: CreateEvent('webview.onLoadAbort'),
- fields: ['url', 'isTopLevel', 'reason']
- },
- 'loadcommit': {
- customHandler: function(webViewInternal, event, webViewEvent) {
- webViewInternal.handleLoadCommitEvent(event, webViewEvent);
- },
- evt: CreateEvent('webview.onLoadCommit'),
- fields: ['url', 'isTopLevel']
- },
- 'loadprogress': {
- evt: CreateEvent('webview.onLoadProgress'),
- fields: ['url', 'progress']
- },
- 'loadredirect': {
- evt: CreateEvent('webview.onLoadRedirect'),
- fields: ['isTopLevel', 'oldUrl', 'newUrl']
- },
- 'loadstart': {
- evt: CreateEvent('webview.onLoadStart'),
- fields: ['url', 'isTopLevel']
- },
- 'loadstop': {
- evt: CreateEvent('webview.onLoadStop'),
- fields: []
- },
- 'newwindow': {
- cancelable: true,
- customHandler: function(webViewInternal, event, webViewEvent) {
- webViewInternal.handleNewWindowEvent(event, webViewEvent);
- },
- evt: CreateEvent('webview.onNewWindow'),
- fields: [
- 'initialHeight',
- 'initialWidth',
- 'targetUrl',
- 'windowOpenDisposition',
- 'name'
- ]
- },
- 'permissionrequest': {
- cancelable: true,
- customHandler: function(webViewInternal, event, webViewEvent) {
- webViewInternal.handlePermissionEvent(event, webViewEvent);
- },
- evt: CreateEvent('webview.onPermissionRequest'),
- fields: [
- 'identifier',
- 'lastUnlockedBySelf',
- 'name',
- 'permission',
- 'requestMethod',
- 'url',
- 'userGesture'
- ]
- },
- 'responsive': {
- evt: CreateEvent('webview.onResponsive'),
- fields: ['processId']
- },
- 'sizechanged': {
- evt: CreateEvent('webview.onSizeChanged'),
- customHandler: function(webViewInternal, event, webViewEvent) {
- webViewInternal.handleSizeChangedEvent(event, webViewEvent);
- },
- fields: ['oldHeight', 'oldWidth', 'newHeight', 'newWidth']
- },
- 'unresponsive': {
- evt: CreateEvent('webview.onUnresponsive'),
- fields: ['processId']
- }
-};
-
// Implemented when the experimental API is available.
WebViewInternal.maybeRegisterExperimentalAPIs = function(proto) {}
@@ -227,6 +88,9 @@ function WebViewInternal(webviewNode) {
this.beforeFirstNavigation = true;
this.validPartitionId = true;
+ // on* Event handlers.
+ this.on = {};
+
this.browserPluginNode = this.createBrowserPluginNode();
var shadowRoot = this.webviewNode.createShadowRoot();
shadowRoot.appendChild(this.browserPluginNode);
@@ -240,7 +104,7 @@ function WebViewInternal(webviewNode) {
this.partition = new Partition();
this.parseAttributes();
- this.setupWebviewNodeEvents();
+ new WebViewEvents(this, this.viewInstanceId);
}
/**
@@ -271,8 +135,11 @@ WebViewInternal.prototype.createBrowserPluginNode = function() {
return browserPluginNode;
};
+WebViewInternal.prototype.getInstanceId = function() {
+ return this.instanceId;
+};
+
/**
- * @private
* Resets some state upon reattaching <webview> element to the DOM.
*/
WebViewInternal.prototype.resetUponReattachment = function() {
@@ -282,9 +149,18 @@ WebViewInternal.prototype.resetUponReattachment = function() {
this.partition.validPartitionId = true;
};
-/**
- * @private
- */
+// Sets <webview>.request property.
+WebViewInternal.prototype.setRequestPropertyOnWebViewNode = function(request) {
+ Object.defineProperty(
+ this.webviewNode,
+ 'request',
+ {
+ value: request,
+ enumerable: true
+ }
+ );
+};
+
WebViewInternal.prototype.setupFocusPropagation = function() {
if (!this.webviewNode.hasAttribute('tabIndex')) {
// <webview> needs a tabIndex in order to be focusable.
@@ -640,19 +516,7 @@ WebViewInternal.prototype.handleBrowserPluginAttributeMutation =
}
};
-/**
- * @private
- */
-WebViewInternal.prototype.getEvents = function() {
- var experimentalEvents = this.maybeGetExperimentalEvents();
- for (var eventName in experimentalEvents) {
- WEB_VIEW_EVENTS[eventName] = experimentalEvents[eventName];
- }
- return WEB_VIEW_EVENTS;
-};
-
-WebViewInternal.prototype.handleSizeChangedEvent =
- function(event, webViewEvent) {
+WebViewInternal.prototype.onSizeChanged = function(newWidth, newHeight) {
var node = this.webviewNode;
var width = node.offsetWidth;
@@ -697,14 +561,13 @@ WebViewInternal.prototype.handleSizeChangedEvent =
minHeight = maxHeight;
}
- if (webViewEvent.newWidth >= minWidth &&
- webViewEvent.newWidth <= maxWidth &&
- webViewEvent.newHeight >= minHeight &&
- webViewEvent.newHeight <= maxHeight) {
- node.style.width = webViewEvent.newWidth + 'px';
- node.style.height = webViewEvent.newHeight + 'px';
+ if (newWidth >= minWidth &&
+ newWidth <= maxWidth &&
+ newHeight >= minHeight &&
+ newHeight <= maxHeight) {
+ node.style.width = newWidth + 'px';
+ node.style.height = newHeight + 'px';
}
- node.dispatchEvent(webViewEvent);
};
WebViewInternal.prototype.hasNavigated = function() {
@@ -760,63 +623,22 @@ WebViewInternal.prototype.allocateInstanceId = function() {
});
};
-/**
- * @private
- */
-WebViewInternal.prototype.setupWebviewNodeEvents = function() {
- this.setupWebRequestEvents();
- this.setupExperimentalContextMenus_();
-
- this.on = {};
- var events = this.getEvents();
- for (var eventName in events) {
- this.setupEventProperty(eventName);
+WebViewInternal.prototype.onFrameNameChanged = function(name) {
+ this.name = name || '';
+ if (this.name === '') {
+ this.webviewNode.removeAttribute('name');
+ } else {
+ this.webviewNode.setAttribute('name', this.name);
}
};
-/**
- * @private
- */
-WebViewInternal.prototype.setupNameAttribute = function() {
- var self = this;
- FrameNameChangedEvent.addListener(function(event) {
- self.name = event.name || '';
- if (self.name === '') {
- self.webviewNode.removeAttribute('name');
- } else {
- self.webviewNode.setAttribute('name', self.name);
- }
- }, {instanceId: self.instanceId});
-};
-
-/**
- * @private
- */
-WebViewInternal.prototype.setupEvent = function(eventName, eventInfo) {
- var self = this;
- var webviewNode = this.webviewNode;
- eventInfo.evt.addListener(function(event) {
- var details = {bubbles:true};
- if (eventInfo.cancelable)
- details.cancelable = true;
- var webViewEvent = new Event(eventName, details);
- $Array.forEach(eventInfo.fields, function(field) {
- if (event[field] !== undefined) {
- webViewEvent[field] = event[field];
- }
- });
- if (eventInfo.customHandler) {
- eventInfo.customHandler(self, event, webViewEvent);
- return;
- }
- webviewNode.dispatchEvent(webViewEvent);
- }, {instanceId: self.instanceId});
+WebViewInternal.prototype.dispatchEvent = function(webViewEvent) {
+ return this.webviewNode.dispatchEvent(webViewEvent);
};
/**
* Adds an 'on<event>' property on the webview, which can be used to set/unset
* an event handler.
- * @private
*/
WebViewInternal.prototype.setupEventProperty = function(eventName) {
var propertyName = 'on' + eventName.toLowerCase();
@@ -837,415 +659,28 @@ WebViewInternal.prototype.setupEventProperty = function(eventName) {
});
};
-/**
- * @private
- */
-WebViewInternal.prototype.getPermissionTypes = function() {
- var permissions =
- ['media',
- 'geolocation',
- 'pointerLock',
- 'download',
- 'loadplugin',
- 'filesystem'];
- return permissions.concat(this.maybeGetExperimentalPermissions());
-};
-
-/**
- * @private
- */
-WebViewInternal.prototype.handleDialogEvent =
- function(event, webViewEvent) {
- var showWarningMessage = function(dialogType) {
- var VOWELS = ['a', 'e', 'i', 'o', 'u'];
- var WARNING_MSG_DIALOG_BLOCKED = '<webview>: %1 %2 dialog was blocked.';
- var article = (VOWELS.indexOf(dialogType.charAt(0)) >= 0) ? 'An' : 'A';
- var output = WARNING_MSG_DIALOG_BLOCKED.replace('%1', article);
- output = output.replace('%2', dialogType);
- window.console.warn(output);
- };
-
- var self = this;
- var webviewNode = this.webviewNode;
- var requestId = event.requestId;
- var actionTaken = false;
-
- var validateCall = function() {
- var ERROR_MSG_DIALOG_ACTION_ALREADY_TAKEN = '<webview>: ' +
- 'An action has already been taken for this "dialog" event.';
-
- if (actionTaken) {
- throw new Error(ERROR_MSG_DIALOG_ACTION_ALREADY_TAKEN);
- }
- actionTaken = true;
- };
-
- var dialog = {
- ok: function(user_input) {
- validateCall();
- user_input = user_input || '';
- WebView.setPermission(self.instanceId, requestId, 'allow', user_input);
- },
- cancel: function() {
- validateCall();
- WebView.setPermission(self.instanceId, requestId, 'deny');
- }
- };
- webViewEvent.dialog = dialog;
-
- var defaultPrevented = !webviewNode.dispatchEvent(webViewEvent);
- if (actionTaken) {
- return;
- }
-
- if (defaultPrevented) {
- // Tell the JavaScript garbage collector to track lifetime of |dialog| and
- // call back when the dialog object has been collected.
- MessagingNatives.BindToGC(dialog, function() {
- // Avoid showing a warning message if the decision has already been made.
- if (actionTaken) {
- return;
- }
- WebView.setPermission(
- self.instanceId, requestId, 'default', '', function(allowed) {
- if (allowed) {
- return;
- }
- showWarningMessage(event.messageType);
- });
- });
- } else {
- actionTaken = true;
- // The default action is equivalent to canceling the dialog.
- WebView.setPermission(
- self.instanceId, requestId, 'default', '', function(allowed) {
- if (allowed) {
- return;
- }
- showWarningMessage(event.messageType);
- });
- }
-};
-
-/**
- * @private
- */
-WebViewInternal.prototype.handleLoadAbortEvent =
- function(event, webViewEvent) {
- var showWarningMessage = function(reason) {
- var WARNING_MSG_LOAD_ABORTED = '<webview>: ' +
- 'The load has aborted with reason "%1".';
- window.console.warn(WARNING_MSG_LOAD_ABORTED.replace('%1', reason));
- };
- if (this.webviewNode.dispatchEvent(webViewEvent)) {
- showWarningMessage(event.reason);
- }
-};
-
-/**
- * @private
- */
-WebViewInternal.prototype.handleLoadCommitEvent =
- function(event, webViewEvent) {
- this.currentEntryIndex = event.currentEntryIndex;
- this.entryCount = event.entryCount;
- this.processId = event.processId;
+// Updates state upon loadcommit.
+WebViewInternal.prototype.onLoadCommit = function(
+ currentEntryIndex, entryCount, processId, url, isTopLevel) {
+ this.currentEntryIndex = currentEntryIndex;
+ this.entryCount = entryCount;
+ this.processId = processId;
var oldValue = this.webviewNode.getAttribute('src');
- var newValue = event.url;
- if (event.isTopLevel && (oldValue != newValue)) {
+ var newValue = url;
+ if (isTopLevel && (oldValue != newValue)) {
// Touching the src attribute triggers a navigation. To avoid
// triggering a page reload on every guest-initiated navigation,
// we use the flag ignoreNextSrcAttributeChange here.
this.ignoreNextSrcAttributeChange = true;
this.webviewNode.setAttribute('src', newValue);
}
- this.webviewNode.dispatchEvent(webViewEvent);
-}
-
-/**
- * @private
- */
-WebViewInternal.prototype.handleNewWindowEvent =
- function(event, webViewEvent) {
- var ERROR_MSG_NEWWINDOW_ACTION_ALREADY_TAKEN = '<webview>: ' +
- 'An action has already been taken for this "newwindow" event.';
-
- var ERROR_MSG_NEWWINDOW_UNABLE_TO_ATTACH = '<webview>: ' +
- 'Unable to attach the new window to the provided webview.';
-
- var ERROR_MSG_WEBVIEW_EXPECTED = '<webview> element expected.';
-
- var showWarningMessage = function() {
- var WARNING_MSG_NEWWINDOW_BLOCKED = '<webview>: A new window was blocked.';
- window.console.warn(WARNING_MSG_NEWWINDOW_BLOCKED);
- };
-
- var self = this;
- var webviewNode = this.webviewNode;
-
- var requestId = event.requestId;
- var actionTaken = false;
-
- var validateCall = function () {
- if (actionTaken) {
- throw new Error(ERROR_MSG_NEWWINDOW_ACTION_ALREADY_TAKEN);
- }
- actionTaken = true;
- };
-
- var windowObj = {
- attach: function(webview) {
- validateCall();
- 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
- // been attached to the DOM already.
- // Note: Any subsequent errors cannot be exceptions because they happen
- // asynchronously.
- setTimeout(function() {
- var webViewInternal = privates(webview).internal;
- if (event.storagePartitionId) {
- webViewInternal.webviewNode.setAttribute('partition',
- event.storagePartitionId);
- var partition = new Partition();
- partition.fromAttribute(event.storagePartitionId,
- webViewInternal.hasNavigated());
- webViewInternal.partition = partition;
- }
-
- var attached =
- webViewInternal.attachWindowAndSetUpEvents(
- event.windowId, undefined, event.storagePartitionId);
-
- if (!attached) {
- window.console.error(ERROR_MSG_NEWWINDOW_UNABLE_TO_ATTACH);
- }
- // If the object being passed into attach is not a valid <webview>
- // then we will fail and it will be treated as if the new window
- // was rejected. The permission API plumbing is used here to clean
- // up the state created for the new window if attaching fails.
- WebView.setPermission(
- self.instanceId, requestId, attached ? 'allow' : 'deny');
- }, 0);
- },
- discard: function() {
- validateCall();
- WebView.setPermission(self.instanceId, requestId, 'deny');
- }
- };
- webViewEvent.window = windowObj;
-
- var defaultPrevented = !webviewNode.dispatchEvent(webViewEvent);
- if (actionTaken) {
- return;
- }
-
- if (defaultPrevented) {
- // Make browser plugin track lifetime of |windowObj|.
- MessagingNatives.BindToGC(windowObj, function() {
- // Avoid showing a warning message if the decision has already been made.
- if (actionTaken) {
- return;
- }
- WebView.setPermission(
- self.instanceId, requestId, 'default', '', function(allowed) {
- if (allowed) {
- return;
- }
- showWarningMessage();
- });
- });
- } else {
- actionTaken = true;
- // The default action is to discard the window.
- WebView.setPermission(
- self.instanceId, requestId, 'default', '', function(allowed) {
- if (allowed) {
- return;
- }
- showWarningMessage();
- });
- }
};
-WebViewInternal.prototype.handlePermissionEvent =
- function(event, webViewEvent) {
- var ERROR_MSG_PERMISSION_ALREADY_DECIDED = '<webview>: ' +
- 'Permission has already been decided for this "permissionrequest" event.';
-
- var showWarningMessage = function(permission) {
- var WARNING_MSG_PERMISSION_DENIED = '<webview>: ' +
- 'The permission request for "%1" has been denied.';
- window.console.warn(
- WARNING_MSG_PERMISSION_DENIED.replace('%1', permission));
- };
-
- var requestId = event.requestId;
- var self = this;
-
- if (this.getPermissionTypes().indexOf(event.permission) < 0) {
- // The permission type is not allowed. Trigger the default response.
- WebView.setPermission(
- self.instanceId, requestId, 'default', '', function(allowed) {
- if (allowed) {
- return;
- }
- showWarningMessage(event.permission);
- });
- return;
- }
-
- var webviewNode = this.webviewNode;
- var decisionMade = false;
-
- var validateCall = function() {
- if (decisionMade) {
- throw new Error(ERROR_MSG_PERMISSION_ALREADY_DECIDED);
- }
- decisionMade = true;
- };
-
- // Construct the event.request object.
- var request = {
- allow: function() {
- validateCall();
- WebView.setPermission(self.instanceId, requestId, 'allow');
- },
- deny: function() {
- validateCall();
- WebView.setPermission(self.instanceId, requestId, 'deny');
- }
- };
- webViewEvent.request = request;
-
- var defaultPrevented = !webviewNode.dispatchEvent(webViewEvent);
- if (decisionMade) {
- return;
- }
-
- if (defaultPrevented) {
- // Make browser plugin track lifetime of |request|.
- MessagingNatives.BindToGC(request, function() {
- // Avoid showing a warning message if the decision has already been made.
- if (decisionMade) {
- return;
- }
- WebView.setPermission(
- self.instanceId, requestId, 'default', '', function(allowed) {
- if (allowed) {
- return;
- }
- showWarningMessage(event.permission);
- });
- });
- } else {
- decisionMade = true;
- WebView.setPermission(
- self.instanceId, requestId, 'default', '', function(allowed) {
- if (allowed) {
- return;
- }
- showWarningMessage(event.permission);
- });
- }
+WebViewInternal.prototype.onAttach = function(storagePartitionId) {
+ this.webviewNode.setAttribute('partition', storagePartitionId);
+ this.partition.fromAttribute(storagePartitionId, this.hasNavigated());
};
-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?
- WebRequestMessageEvent.addListener(function() {
- // Re-dispatch to subEvent's listeners.
- $Function.apply(self.dispatch, self, $Array.slice(arguments));
- }, {instanceId: opt_webViewInstanceId || 0});
-}
-
-DeclarativeWebRequestEvent.prototype = {
- __proto__: EventBindings.Event.prototype
-};
-
-/**
- * @private
- */
-WebViewInternal.prototype.setupWebRequestEvents = function() {
- var self = this;
- var request = {};
- var createWebRequestEvent = function(webRequestEvent) {
- return function() {
- if (!self[webRequestEvent.name]) {
- self[webRequestEvent.name] =
- new WebRequestEvent(
- 'webview.' + webRequestEvent.name,
- webRequestEvent.parameters,
- webRequestEvent.extraParameters, webRequestEvent.options,
- self.viewInstanceId);
- }
- return self[webRequestEvent.name];
- };
- };
-
- var createDeclarativeWebRequestEvent = function(webRequestEvent) {
- return function() {
- if (!self[webRequestEvent.name]) {
- // The onMessage event gets a special event type because we want
- // the listener to fire only for messages targeted for this particular
- // <webview>.
- var EventClass = webRequestEvent.name === 'onMessage' ?
- DeclarativeWebRequestEvent : EventBindings.Event;
- self[webRequestEvent.name] =
- new EventClass(
- '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 = createDeclarativeWebRequestEvent(eventSchema);
- Object.defineProperty(
- request,
- eventSchema.name,
- {
- get: webRequestEvent,
- enumerable: true
- }
- );
- }
-
- // Populate the WebRequest events from the API definition.
- for (var i = 0; i < WebRequestSchema.events.length; ++i) {
- var webRequestEvent = createWebRequestEvent(WebRequestSchema.events[i]);
- Object.defineProperty(
- request,
- WebRequestSchema.events[i].name,
- {
- get: webRequestEvent,
- enumerable: true
- }
- );
- }
- Object.defineProperty(
- this.webviewNode,
- 'request',
- {
- value: request,
- enumerable: true
- }
- );
-};
/** @private */
WebViewInternal.prototype.getUserAgent = function() {
@@ -1286,11 +721,6 @@ WebViewInternal.prototype.attachWindowAndSetUpEvents = function(
'storagePartitionId': storagePartitionId,
'userAgentOverride': this.userAgentOverride
};
- this.setupNameAttribute();
- var events = this.getEvents();
- for (var eventName in events) {
- this.setupEvent(eventName, events[eventName]);
- }
return this.browserPluginNode['-internal-attach'](this.instanceId, params);
};
@@ -1431,7 +861,6 @@ WebViewInternal.prototype.maybeGetExperimentalPermissions = function() {
* event.
* This will be overridden in web_view_experimental.js to implement contextmenu
* API.
- * @private
*/
WebViewInternal.prototype.maybeHandleContextMenu = function(e, webViewEvent) {
var requestId = e.requestId;
@@ -1445,8 +874,7 @@ WebViewInternal.prototype.maybeHandleContextMenu = function(e, webViewEvent) {
* Implemented when the experimental API is available.
* @private
*/
-WebViewInternal.prototype.setupExperimentalContextMenus_ = function() {};
+WebViewInternal.prototype.setupExperimentalContextMenus = function() {};
exports.WebView = WebView;
exports.WebViewInternal = WebViewInternal;
-exports.CreateEvent = CreateEvent;

Powered by Google App Engine
This is Rietveld 408576698