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 2a299f7a1dc5ca55706b0f09f22daaf37c8034a8..5d14f046c31f615465cf7fe51705a42df3d08e10 100644 |
--- a/chrome/renderer/resources/extensions/web_view.js |
+++ b/chrome/renderer/resources/extensions/web_view.js |
@@ -14,18 +14,26 @@ var WEB_VIEW_READONLY_ATTRIBUTES = ['contentWindow']; |
// All exposed api methods for <webview>, these are forwarded to the browser |
// plugin. |
var WEB_VIEW_API_METHODS = [ |
- 'addEventListener', |
- 'back', |
- 'canGoBack', |
- 'canGoForward', |
- 'forward', |
- 'getProcessId', |
- 'go', |
- 'reload', |
- 'removeEventListener', |
- 'stop', |
- 'terminate' |
- ]; |
+ 'back', |
+ 'canGoBack', |
+ 'canGoForward', |
+ 'forward', |
+ 'getProcessId', |
+ 'go', |
+ 'reload', |
+ 'stop', |
+ 'terminate' |
+]; |
+ |
+var WEB_VIEW_EVENTS = { |
+ 'exit' : [ 'processId', 'reason' ], |
arv (Not doing code reviews)
2012/11/12 22:58:07
no ws after [ nor before ]
sadrul
2012/11/12 23:03:21
Done.
|
+ 'loadabort' : [ 'url', 'isTopLevel', 'reason' ], |
+ 'loadcommit' : [ 'url', 'isTopLevel' ], |
+ 'loadredirect' : [ 'oldurl', 'newurl', 'isTopLevel' ], |
+ 'loadstart' : [ 'url', 'isTopLevel' ], |
+ 'loadstop' : [], |
+ 'sizechanged': [ 'oldHeight', 'oldWidth', 'newHeight', 'newWidth' ], |
+}; |
window.addEventListener('DOMContentLoaded', function() { |
// Handle <webview> tags already in the document. |
@@ -111,6 +119,10 @@ function WebView(node) { |
enumerable: true |
}) |
}, this); |
+ |
+ for (eventname in WEB_VIEW_EVENTS) { |
arv (Not doing code reviews)
2012/11/12 22:58:07
eventName
arv (Not doing code reviews)
2012/11/12 22:58:07
missing var
You should really use strict mode for
sadrul
2012/11/12 23:03:21
Done.
sadrul
2012/11/12 23:03:21
Done.
|
+ this.setupEvent_(eventname, WEB_VIEW_EVENTS[eventname]); |
+ } |
}; |
/** |
@@ -138,3 +150,18 @@ WebView.prototype.copyAttribute_ = function(attributeName) { |
this.objectNode_.setAttribute( |
attributeName, this.node_.getAttribute(attributeName)); |
}; |
+ |
+/** |
+ * @private |
+ */ |
+WebView.prototype.setupEvent_ = function(eventname, attribs) { |
+ var node = this.node_; |
+ this.objectNode_.addEventListener('-internal-' + eventname, function(e) { |
+ var evt = new Event(eventname); |
+ var detail = e.detail ? JSON.parse(e.detail) : {}; |
+ attribs.forEach(function(attribname) { |
arv (Not doing code reviews)
2012/11/12 22:58:07
attribName
sadrul
2012/11/12 23:03:21
Done.
|
+ evt[attribname] = detail[attribname]; |
+ }); |
+ node.dispatchEvent(evt); |
+ }); |
+} |