Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1032)

Unified Diff: content/renderer/mojo/interface_provider_js_wrapper.cc

Issue 2755813002: Begin to wean child processes off reliance on a persistent service_manager::Connection to the brows… (Closed)
Patch Set: . Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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(
« no previous file with comments | « content/renderer/mojo/interface_provider_js_wrapper.h ('k') | content/renderer/push_messaging/push_messaging_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698