| 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] =
 | 
| 
 |