Chromium Code Reviews| 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); |
| + }); |
| +} |