diff options
author | mpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-08 20:16:39 +0000 |
---|---|---|
committer | mpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-08 20:16:39 +0000 |
commit | 1299ed837e4db59a8296a4033b541e1e7b286116 (patch) | |
tree | bffad9fb092f643036f854134a4ba930dc35a752 /chrome/renderer/extensions/bindings_utils.cc | |
parent | 3fa656cc226355392738ef8b3b146f30a700e507 (diff) | |
download | chromium_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.cc | 23 |
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); +} |