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 43c6dc4624b2a5acb8ddedc7a314296176eab96f..f51336d79f6d0164614ad0ed5fb174a04fcb95cc 100644 |
--- a/chrome/renderer/resources/extensions/web_view.js |
+++ b/chrome/renderer/resources/extensions/web_view.js |
@@ -126,6 +126,8 @@ function WebView(node) { |
enumerable: true |
}); |
+ this.setupExecuteScript_(); |
+ |
for (var eventName in WEB_VIEW_EVENTS) { |
this.setupEvent_(eventName, WEB_VIEW_EVENTS[eventName]); |
} |
@@ -171,6 +173,24 @@ WebView.prototype.handleObjectMutation_ = function(mutation) { |
} |
}; |
+WebView.prototype.setupExecuteScript_ = function() { |
+ var node = this.node_; |
+ var callbackMap = new Array(); |
+ var self = this; |
+ node['executeScript'] = function(injectDetails, resultCallback) { |
+ var result = self.objectNode_.executeScript(injectDetails); |
+ callbackMap[result] = resultCallback; |
+ }; |
+ this.objectNode_.addEventListener('-internal-scriptresponse', function(e) { |
+ var detail = JSON.parse(e.detail); |
+ if (callbackMap[detail.requestId]) { |
+ console.log(detail.result); |
+ callbackMap[detail.requestId].apply(self.node_, detail.result); |
+ delete callbackMap[detail.requestId]; |
+ } |
+ }); |
+}; |
+ |
/** |
* @private |
*/ |