Index: chrome/renderer/extensions/module_system.cc |
diff --git a/chrome/renderer/extensions/module_system.cc b/chrome/renderer/extensions/module_system.cc |
index 6e4c5e36f6f33856ee93efa9a62069de1cd56d91..f87f48b7c6ffc70289759ed982ee848bb2187389 100644 |
--- a/chrome/renderer/extensions/module_system.cc |
+++ b/chrome/renderer/extensions/module_system.cc |
@@ -149,6 +149,33 @@ v8::Handle<v8::Value> ModuleSystem::RequireForJsInner( |
return handle_scope.Close(exports); |
} |
+void ModuleSystem::CallModuleMethod(const std::string& module_name, |
+ const std::string& method_name) { |
+ 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; |
+ 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; |
+ 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()); |
+ { |
+ WebKit::WebScopedMicrotaskSuppression suppression; |
+ v8::TryCatch try_catch; |
+ try_catch.SetCaptureMessage(true); |
+ func->Call(global, 0, NULL); |
+ if (try_catch.HasCaught()) |
+ DumpException(try_catch); |
+ } |
+} |
+ |
void ModuleSystem::RegisterNativeHandler(const std::string& name, |
scoped_ptr<NativeHandler> native_handler) { |
native_handler_map_[name] = |