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

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

Issue 17846010: <webview>: Move contentload event from content to chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@guestview_loadstop
Patch Set: Merge with ToT Created 7 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 0b2ad3784837bb62ff0e36f6212b8bcac0368306..3dd7b53817aa3ac8aa9477a70070bce6a68c3d5e 100644
--- a/chrome/renderer/resources/extensions/web_view.js
+++ b/chrome/renderer/resources/extensions/web_view.js
@@ -27,13 +27,10 @@ var WEB_VIEW_API_METHODS = [
var WEB_VIEW_EVENTS = {
'close': [],
'consolemessage': ['level', 'message', 'line', 'sourceId'],
- 'contentload' : [],
'exit' : ['processId', 'reason'],
'loadabort' : ['url', 'isTopLevel', 'reason'],
- 'loadcommit' : ['url', 'isTopLevel'],
'loadredirect' : ['oldUrl', 'newUrl', 'isTopLevel'],
'loadstart' : ['url', 'isTopLevel'],
- 'loadstop' : [],
'responsive' : ['processId'],
'sizechanged': ['oldHeight', 'oldWidth', 'newHeight', 'newWidth'],
'unresponsive' : ['processId']
@@ -44,9 +41,31 @@ var createEvent = function(name) {
return new eventBindings.Event(name, undefined, eventOpts);
};
+var contentLoadEvent = createEvent('webview.onContentLoad');
var loadCommitEvent = createEvent('webview.onLoadCommit');
var loadStopEvent = createEvent('webview.onLoadStop');
+var WEB_VIEW_EXT_EVENTS = {
+ 'contentload': {
+ evt: contentLoadEvent,
+ fields: []
+ },
+ 'loadcommit': {
+ customHandler: function(WebView, event) {
+ WebView.currentEntryIndex_ = event.currentEntryIndex;
+ WebView.entryCount_ = event.entryCount;
+ },
+ evt: loadCommitEvent,
+ fields: ['url', 'isTopLevel']
+ }
+ ,
+ 'loadstop': {
+ evt: loadStopEvent,
+ fields: []
+ }
+};
+
+
// The <webview> tags we wish to watch for (watchForTag) does not belong to the
// current scope's "document" reference. We need to wait until the document
// begins loading, since only then will the "document" reference
@@ -306,30 +325,13 @@ WebView.prototype.handleBrowserPluginAttributeMutation_ = function(mutation) {
WebView.prototype.setupWebviewNodeEvents_ = function() {
var self = this;
var webviewNode = this.webviewNode_;
- // TODO(fsamuel): Generalize this further as we add more events.
- var onAttached = function(e) {
+ this.browserPluginNode_.addEventListener('-internal-attached', function(e) {
var detail = e.detail ? JSON.parse(e.detail) : {};
- loadCommitEvent.addListener(function(event) {
- var webviewEvent = new Event('loadcommit', {bubbles: true});
- var attribs = WEB_VIEW_EVENTS['loadcommit'];
- $Array.forEach(attribs, function(attribName) {
- webviewEvent[attribName] = event[attribName];
- });
- self.currentEntryIndex_ = event.currentEntryIndex;
- self.entryCount_ = event.entryCount;
- webviewNode.dispatchEvent(webviewEvent);
- }, {instanceId: detail.windowId});
-
- loadStopEvent.addListener(function(event) {
- var webviewEvent = new Event('loadstop', {bubbles: true});
- var attribs = WEB_VIEW_EVENTS['loadstop'];
- $Array.forEach(attribs, function(attribName) {
- webviewEvent[attribName] = event[attribName];
- });
- webviewNode.dispatchEvent(webviewEvent);
- }, {instanceId: detail.windowId});
- };
- this.browserPluginNode_.addEventListener('-internal-attached', onAttached);
+ self.instanceId_ = detail.windowId;
+ for (var eventName in WEB_VIEW_EXT_EVENTS) {
+ self.setupExtEvent_(eventName, WEB_VIEW_EXT_EVENTS[eventName]);
+ }
+ });
for (var eventName in WEB_VIEW_EVENTS) {
this.setupEvent_(eventName, WEB_VIEW_EVENTS[eventName]);
@@ -341,11 +343,29 @@ WebView.prototype.setupWebviewNodeEvents_ = function() {
/**
* @private
*/
-WebView.prototype.setupEvent_ = function(eventname, attribs) {
+WebView.prototype.setupExtEvent_ = function(eventName, eventInfo) {
+ var self = this;
+ var webviewNode = this.webviewNode_;
+ eventInfo.evt.addListener(function(event) {
+ var webviewEvent = new Event(eventName, {bubbles: true});
+ $Array.forEach(eventInfo.fields, function(field) {
+ webviewEvent[field] = event[field];
+ });
+ if (eventInfo.customHandler) {
+ eventInfo.customHandler(self, event);
+ }
+ webviewNode.dispatchEvent(webviewEvent);
+ }, {instanceId: self.instanceId_});
+};
+
+/**
+ * @private
+ */
+WebView.prototype.setupEvent_ = function(eventName, attribs) {
var webviewNode = this.webviewNode_;
- var internalname = '-internal-' + eventname;
+ var internalname = '-internal-' + eventName;
this.browserPluginNode_.addEventListener(internalname, function(e) {
- var evt = new Event(eventname, { bubbles: true });
+ var evt = new Event(eventName, { bubbles: true });
var detail = e.detail ? JSON.parse(e.detail) : {};
$Array.forEach(attribs, function(attribName) {
evt[attribName] = detail[attribName];
« no previous file with comments | « chrome/browser/guestview/webview/webview_guest.cc ('k') | content/browser/browser_plugin/browser_plugin_guest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698