Index: content/renderer/mojo/service_registry_js_wrapper.cc |
diff --git a/content/renderer/mojo/service_registry_js_wrapper.cc b/content/renderer/mojo/service_registry_js_wrapper.cc |
index b91a16225e1571f6352ff4a7469f6d984b868688..b23e084bb5030ecf1d7a480bfba28f7b241f9613 100644 |
--- a/content/renderer/mojo/service_registry_js_wrapper.cc |
+++ b/content/renderer/mojo/service_registry_js_wrapper.cc |
@@ -6,12 +6,27 @@ |
#include <utility> |
+#include "base/memory/scoped_ptr.h" |
#include "content/common/mojo/service_registry_impl.h" |
#include "content/public/common/service_registry.h" |
#include "third_party/mojo/src/mojo/edk/js/handle.h" |
+#include "v8/include/v8.h" |
namespace content { |
+namespace { |
+ |
+void CallJsFactory(scoped_ptr<v8::Persistent<v8::Function>> factory, |
+ mojo::ScopedMessagePipeHandle pipe) { |
+ v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
+ v8::Local<v8::Value> argv[] = { |
+ gin::ConvertToV8(isolate, mojo::Handle(pipe.release().value())) |
+ }; |
+ factory->Get(isolate)->Call(v8::Undefined(isolate), 1, argv); |
+} |
+ |
+} // namespace |
+ |
gin::WrapperInfo ServiceRegistryJsWrapper::kWrapperInfo = { |
gin::kEmbedderNativeGin}; |
const char ServiceRegistryJsWrapper::kModuleName[] = |
@@ -34,7 +49,9 @@ gin::ObjectTemplateBuilder ServiceRegistryJsWrapper::GetObjectTemplateBuilder( |
v8::Isolate* isolate) { |
return Wrappable<ServiceRegistryJsWrapper>::GetObjectTemplateBuilder(isolate). |
SetMethod("connectToService", |
- &ServiceRegistryJsWrapper::ConnectToService); |
+ &ServiceRegistryJsWrapper::ConnectToService). |
+ SetMethod("addServiceOverrideForTesting", |
+ &ServiceRegistryJsWrapper::AddServiceOverrideForTesting); |
} |
mojo::Handle ServiceRegistryJsWrapper::ConnectToService( |
@@ -46,6 +63,20 @@ mojo::Handle ServiceRegistryJsWrapper::ConnectToService( |
return pipe.handle1.release(); |
} |
+void ServiceRegistryJsWrapper::AddServiceOverrideForTesting( |
+ const std::string& service_name, |
+ v8::Local<v8::Function> service_factory) { |
+ ServiceRegistryImpl* registry = |
+ static_cast<ServiceRegistryImpl*>(service_registry_.get()); |
+ if (!registry) |
+ return; |
+ scoped_ptr<v8::Persistent<v8::Function>> factory( |
+ new v8::Persistent<v8::Function>(v8::Isolate::GetCurrent(), |
+ service_factory)); |
+ registry->AddServiceOverrideForTesting( |
+ service_name, base::Bind(&CallJsFactory, base::Passed(&factory))); |
+} |
+ |
ServiceRegistryJsWrapper::ServiceRegistryJsWrapper( |
base::WeakPtr<ServiceRegistry> service_registry) |
: service_registry_(service_registry) { |