| Index: chrome/renderer/extensions/module_system.cc
|
| diff --git a/chrome/renderer/extensions/module_system.cc b/chrome/renderer/extensions/module_system.cc
|
| index 69b2c78fddf1b215350b554030c2f7bd7149c871..aa33bbc1a6e30e11c9b44a42cdfe289c7dc1699b 100644
|
| --- a/chrome/renderer/extensions/module_system.cc
|
| +++ b/chrome/renderer/extensions/module_system.cc
|
| @@ -5,6 +5,7 @@
|
| #include "chrome/renderer/extensions/module_system.h"
|
|
|
| #include "base/bind.h"
|
| +#include "base/stl_util.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebScopedMicrotaskSuppression.h"
|
|
|
| namespace {
|
| @@ -159,29 +160,39 @@ v8::Handle<v8::Value> ModuleSystem::RequireForJsInner(
|
|
|
| void ModuleSystem::CallModuleMethod(const std::string& module_name,
|
| const std::string& method_name) {
|
| + std::vector<v8::Handle<v8::Value> > args;
|
| + CallModuleMethod(module_name, method_name, &args);
|
| +}
|
| +
|
| +v8::Local<v8::Value> ModuleSystem::CallModuleMethod(
|
| + const std::string& module_name,
|
| + const std::string& method_name,
|
| + std::vector<v8::Handle<v8::Value> >* args) {
|
| v8::HandleScope handle_scope;
|
| v8::Local<v8::Value> module =
|
| v8::Local<v8::Value>::New(
|
| RequireForJsInner(v8::String::New(module_name.c_str())));
|
| if (module.IsEmpty() || !module->IsObject())
|
| - return;
|
| + return v8::Local<v8::Value>();
|
| v8::Local<v8::Value> value =
|
| v8::Handle<v8::Object>::Cast(module)->Get(
|
| v8::String::New(method_name.c_str()));
|
| if (value.IsEmpty() || !value->IsFunction())
|
| - return;
|
| + return v8::Local<v8::Value>();
|
| v8::Handle<v8::Function> func =
|
| v8::Handle<v8::Function>::Cast(value);
|
| // TODO(jeremya/koz): refer to context_ here, not the current context.
|
| v8::Handle<v8::Object> global(v8::Context::GetCurrent()->Global());
|
| + v8::Local<v8::Value> result;
|
| {
|
| WebKit::WebScopedMicrotaskSuppression suppression;
|
| v8::TryCatch try_catch;
|
| try_catch.SetCaptureMessage(true);
|
| - func->Call(global, 0, NULL);
|
| + result = func->Call(global, args->size(), vector_as_array(args));
|
| if (try_catch.HasCaught())
|
| HandleException(try_catch);
|
| }
|
| + return handle_scope.Close(result);
|
| }
|
|
|
| void ModuleSystem::RegisterNativeHandler(const std::string& name,
|
|
|