summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/extensions/bindings_utils.cc
diff options
context:
space:
mode:
authormpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-08 20:16:39 +0000
committermpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-08 20:16:39 +0000
commit1299ed837e4db59a8296a4033b541e1e7b286116 (patch)
treebffad9fb092f643036f854134a4ba930dc35a752 /chrome/renderer/extensions/bindings_utils.cc
parent3fa656cc226355392738ef8b3b146f30a700e507 (diff)
downloadchromium_src-1299ed837e4db59a8296a4033b541e1e7b286116.zip
chromium_src-1299ed837e4db59a8296a4033b541e1e7b286116.tar.gz
chromium_src-1299ed837e4db59a8296a4033b541e1e7b286116.tar.bz2
Change the extension callback system to work more like events, where we track
contexts rather than frames. Also change the way we call through to javascript, to avoid a v8::Compile. This is so we don't skew the histogram stats on our script cache. BUG=? TEST=none Review URL: http://codereview.chromium.org/118353 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17889 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/extensions/bindings_utils.cc')
-rw-r--r--chrome/renderer/extensions/bindings_utils.cc23
1 files changed, 23 insertions, 0 deletions
diff --git a/chrome/renderer/extensions/bindings_utils.cc b/chrome/renderer/extensions/bindings_utils.cc
index 097c8d0..81e2058 100644
--- a/chrome/renderer/extensions/bindings_utils.cc
+++ b/chrome/renderer/extensions/bindings_utils.cc
@@ -4,6 +4,7 @@
#include "chrome/renderer/extensions/bindings_utils.h"
+#include "base/string_util.h"
#include "chrome/renderer/render_view.h"
#include "webkit/glue/webframe.h"
@@ -21,3 +22,25 @@ RenderView* GetRenderViewForCurrentContext() {
DCHECK(renderview) << "Encountered a WebView without a WebViewDelegate";
return renderview;
}
+
+void CallFunctionInContext(v8::Handle<v8::Context> context,
+ const std::string& function_name, int argc,
+ v8::Handle<v8::Value>* argv) {
+ v8::Context::Scope context_scope(context);
+
+ // Look up the function name, which may be a sub-property like
+ // "chrome.handleResponse_" in the global variable.
+ v8::Local<v8::Value> value = context->Global();
+ std::vector<std::string> components;
+ SplitStringDontTrim(function_name, '.', &components);
+ for (size_t i = 0; i < components.size(); ++i) {
+ if (value->IsObject())
+ value = value->ToObject()->Get(v8::String::New(components[i].c_str()));
+ }
+ if (!value->IsFunction())
+ return;
+
+ v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value);
+ if (!function.IsEmpty())
+ function->Call(v8::Object::New(), argc, argv);
+}