Index: content/renderer/mojo/interface_provider_js_wrapper.cc |
diff --git a/content/renderer/mojo/interface_provider_js_wrapper.cc b/content/renderer/mojo/interface_provider_js_wrapper.cc |
index 50d73d45de5773667d3850d0271252c682ad0979..a2df63de8929713064d54d4294dec941bef0cf83 100644 |
--- a/content/renderer/mojo/interface_provider_js_wrapper.cc |
+++ b/content/renderer/mojo/interface_provider_js_wrapper.cc |
@@ -7,7 +7,9 @@ |
#include <memory> |
#include <utility> |
+#include "content/public/common/service_names.mojom.h" |
#include "mojo/edk/js/handle.h" |
+#include "services/service_manager/public/cpp/connector.h" |
#include "services/service_manager/public/cpp/interface_provider.h" |
#include "third_party/WebKit/public/web/WebLocalFrame.h" |
@@ -27,6 +29,16 @@ InterfaceProviderJsWrapper::~InterfaceProviderJsWrapper() { |
gin::Handle<InterfaceProviderJsWrapper> InterfaceProviderJsWrapper::Create( |
v8::Isolate* isolate, |
v8::Handle<v8::Context> context, |
+ service_manager::Connector* connector) { |
+ return gin::CreateHandle( |
+ isolate, new InterfaceProviderJsWrapper(isolate, context, |
+ connector->GetWeakPtr())); |
+} |
+ |
+// static |
+gin::Handle<InterfaceProviderJsWrapper> InterfaceProviderJsWrapper::Create( |
+ v8::Isolate* isolate, |
+ v8::Handle<v8::Context> context, |
service_manager::InterfaceProvider* remote_interfaces) { |
return gin::CreateHandle( |
isolate, |
@@ -50,7 +62,12 @@ InterfaceProviderJsWrapper::GetObjectTemplateBuilder(v8::Isolate* isolate) { |
mojo::Handle InterfaceProviderJsWrapper::GetInterface( |
const std::string& interface_name) { |
mojo::MessagePipe pipe; |
- if (remote_interfaces_) { |
+ if (connector_) { |
+ connector_->BindInterface( |
+ service_manager::Identity(mojom::kBrowserServiceName, |
+ service_manager::mojom::kInheritUserID), |
+ interface_name, std::move(pipe.handle0)); |
+ } else if (remote_interfaces_) { |
remote_interfaces_->GetInterface( |
interface_name, std::move(pipe.handle0)); |
} |
@@ -61,18 +78,39 @@ void InterfaceProviderJsWrapper::AddOverrideForTesting( |
const std::string& interface_name, |
v8::Local<v8::Function> service_factory) { |
ScopedJsFactory factory(v8::Isolate::GetCurrent(), service_factory); |
- service_manager::InterfaceProvider::TestApi test_api( |
- remote_interfaces_.get()); |
- test_api.SetBinderForName( |
- interface_name, |
- base::Bind(&InterfaceProviderJsWrapper::CallJsFactory, |
- weak_factory_.GetWeakPtr(), factory)); |
+ BindCallback callback = base::Bind(&InterfaceProviderJsWrapper::CallJsFactory, |
+ weak_factory_.GetWeakPtr(), factory); |
+ if (remote_interfaces_) { |
+ service_manager::InterfaceProvider::TestApi test_api( |
+ remote_interfaces_.get()); |
+ test_api.SetBinderForName(interface_name, callback); |
+ } else if (connector_) { |
+ service_manager::Connector::TestApi test_api(connector_.get()); |
+ test_api.OverrideBinderForTesting(interface_name, callback); |
+ } |
} |
void InterfaceProviderJsWrapper::ClearOverridesForTesting() { |
- service_manager::InterfaceProvider::TestApi test_api( |
- remote_interfaces_.get()); |
- test_api.ClearBinders(); |
+ if (remote_interfaces_) { |
+ service_manager::InterfaceProvider::TestApi test_api( |
+ remote_interfaces_.get()); |
+ test_api.ClearBinders(); |
+ } else if (connector_) { |
+ service_manager::Connector::TestApi test_api(connector_.get()); |
+ test_api.ClearBinderOverrides(); |
+ } |
+} |
+ |
+InterfaceProviderJsWrapper::InterfaceProviderJsWrapper( |
+ v8::Isolate* isolate, |
+ v8::Handle<v8::Context> context, |
+ base::WeakPtr<service_manager::Connector> connector) |
+ : isolate_(isolate), |
+ context_(isolate, context), |
+ connector_(connector), |
+ weak_factory_(this) { |
+ context_.SetWeak(this, &InterfaceProviderJsWrapper::ClearContext, |
+ v8::WeakCallbackType::kParameter); |
} |
InterfaceProviderJsWrapper::InterfaceProviderJsWrapper( |