| 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) {
|
|
|