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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/mojo/interface_provider_js_wrapper.h" 5 #include "content/renderer/mojo/interface_provider_js_wrapper.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "content/public/common/service_names.mojom.h"
10 #include "mojo/edk/js/handle.h" 11 #include "mojo/edk/js/handle.h"
12 #include "services/service_manager/public/cpp/connector.h"
11 #include "services/service_manager/public/cpp/interface_provider.h" 13 #include "services/service_manager/public/cpp/interface_provider.h"
12 #include "third_party/WebKit/public/web/WebLocalFrame.h" 14 #include "third_party/WebKit/public/web/WebLocalFrame.h"
13 15
14 namespace content { 16 namespace content {
15 17
16 gin::WrapperInfo InterfaceProviderJsWrapper::kWrapperInfo = { 18 gin::WrapperInfo InterfaceProviderJsWrapper::kWrapperInfo = {
17 gin::kEmbedderNativeGin}; 19 gin::kEmbedderNativeGin};
18 const char InterfaceProviderJsWrapper::kPerFrameModuleName[] = 20 const char InterfaceProviderJsWrapper::kPerFrameModuleName[] =
19 "content/public/renderer/frame_interfaces"; 21 "content/public/renderer/frame_interfaces";
20 const char InterfaceProviderJsWrapper::kPerProcessModuleName[] = 22 const char InterfaceProviderJsWrapper::kPerProcessModuleName[] =
21 "content/public/renderer/interfaces"; 23 "content/public/renderer/interfaces";
22 24
23 InterfaceProviderJsWrapper::~InterfaceProviderJsWrapper() { 25 InterfaceProviderJsWrapper::~InterfaceProviderJsWrapper() {
24 } 26 }
25 27
26 // static 28 // static
27 gin::Handle<InterfaceProviderJsWrapper> InterfaceProviderJsWrapper::Create( 29 gin::Handle<InterfaceProviderJsWrapper> InterfaceProviderJsWrapper::Create(
28 v8::Isolate* isolate, 30 v8::Isolate* isolate,
29 v8::Handle<v8::Context> context, 31 v8::Handle<v8::Context> context,
32 service_manager::Connector* connector) {
33 return gin::CreateHandle(
34 isolate, new InterfaceProviderJsWrapper(isolate, context,
35 connector->GetWeakPtr()));
36 }
37
38 // static
39 gin::Handle<InterfaceProviderJsWrapper> InterfaceProviderJsWrapper::Create(
40 v8::Isolate* isolate,
41 v8::Handle<v8::Context> context,
30 service_manager::InterfaceProvider* remote_interfaces) { 42 service_manager::InterfaceProvider* remote_interfaces) {
31 return gin::CreateHandle( 43 return gin::CreateHandle(
32 isolate, 44 isolate,
33 new InterfaceProviderJsWrapper( 45 new InterfaceProviderJsWrapper(
34 isolate, context, 46 isolate, context,
35 remote_interfaces->GetWeakPtr())); 47 remote_interfaces->GetWeakPtr()));
36 } 48 }
37 49
38 gin::ObjectTemplateBuilder 50 gin::ObjectTemplateBuilder
39 InterfaceProviderJsWrapper::GetObjectTemplateBuilder(v8::Isolate* isolate) { 51 InterfaceProviderJsWrapper::GetObjectTemplateBuilder(v8::Isolate* isolate) {
40 return Wrappable<InterfaceProviderJsWrapper>::GetObjectTemplateBuilder( 52 return Wrappable<InterfaceProviderJsWrapper>::GetObjectTemplateBuilder(
41 isolate) 53 isolate)
42 .SetMethod("getInterface", 54 .SetMethod("getInterface",
43 &InterfaceProviderJsWrapper::GetInterface) 55 &InterfaceProviderJsWrapper::GetInterface)
44 .SetMethod("addInterfaceOverrideForTesting", 56 .SetMethod("addInterfaceOverrideForTesting",
45 &InterfaceProviderJsWrapper::AddOverrideForTesting) 57 &InterfaceProviderJsWrapper::AddOverrideForTesting)
46 .SetMethod("clearInterfaceOverridesForTesting", 58 .SetMethod("clearInterfaceOverridesForTesting",
47 &InterfaceProviderJsWrapper::ClearOverridesForTesting); 59 &InterfaceProviderJsWrapper::ClearOverridesForTesting);
48 } 60 }
49 61
50 mojo::Handle InterfaceProviderJsWrapper::GetInterface( 62 mojo::Handle InterfaceProviderJsWrapper::GetInterface(
51 const std::string& interface_name) { 63 const std::string& interface_name) {
52 mojo::MessagePipe pipe; 64 mojo::MessagePipe pipe;
53 if (remote_interfaces_) { 65 if (connector_) {
66 connector_->BindInterface(
67 service_manager::Identity(mojom::kBrowserServiceName,
68 service_manager::mojom::kInheritUserID),
69 interface_name, std::move(pipe.handle0));
70 } else if (remote_interfaces_) {
54 remote_interfaces_->GetInterface( 71 remote_interfaces_->GetInterface(
55 interface_name, std::move(pipe.handle0)); 72 interface_name, std::move(pipe.handle0));
56 } 73 }
57 return pipe.handle1.release(); 74 return pipe.handle1.release();
58 } 75 }
59 76
60 void InterfaceProviderJsWrapper::AddOverrideForTesting( 77 void InterfaceProviderJsWrapper::AddOverrideForTesting(
61 const std::string& interface_name, 78 const std::string& interface_name,
62 v8::Local<v8::Function> service_factory) { 79 v8::Local<v8::Function> service_factory) {
63 ScopedJsFactory factory(v8::Isolate::GetCurrent(), service_factory); 80 ScopedJsFactory factory(v8::Isolate::GetCurrent(), service_factory);
64 service_manager::InterfaceProvider::TestApi test_api( 81 BindCallback callback = base::Bind(&InterfaceProviderJsWrapper::CallJsFactory,
65 remote_interfaces_.get()); 82 weak_factory_.GetWeakPtr(), factory);
66 test_api.SetBinderForName( 83 if (remote_interfaces_) {
67 interface_name, 84 service_manager::InterfaceProvider::TestApi test_api(
68 base::Bind(&InterfaceProviderJsWrapper::CallJsFactory, 85 remote_interfaces_.get());
69 weak_factory_.GetWeakPtr(), factory)); 86 test_api.SetBinderForName(interface_name, callback);
87 } else if (connector_) {
88 service_manager::Connector::TestApi test_api(connector_.get());
89 test_api.OverrideBinderForTesting(interface_name, callback);
90 }
70 } 91 }
71 92
72 void InterfaceProviderJsWrapper::ClearOverridesForTesting() { 93 void InterfaceProviderJsWrapper::ClearOverridesForTesting() {
73 service_manager::InterfaceProvider::TestApi test_api( 94 if (remote_interfaces_) {
74 remote_interfaces_.get()); 95 service_manager::InterfaceProvider::TestApi test_api(
75 test_api.ClearBinders(); 96 remote_interfaces_.get());
97 test_api.ClearBinders();
98 } else if (connector_) {
99 service_manager::Connector::TestApi test_api(connector_.get());
100 test_api.ClearBinderOverrides();
101 }
76 } 102 }
77 103
78 InterfaceProviderJsWrapper::InterfaceProviderJsWrapper( 104 InterfaceProviderJsWrapper::InterfaceProviderJsWrapper(
105 v8::Isolate* isolate,
106 v8::Handle<v8::Context> context,
107 base::WeakPtr<service_manager::Connector> connector)
108 : isolate_(isolate),
109 context_(isolate, context),
110 connector_(connector),
111 weak_factory_(this) {
112 context_.SetWeak(this, &InterfaceProviderJsWrapper::ClearContext,
113 v8::WeakCallbackType::kParameter);
114 }
115
116 InterfaceProviderJsWrapper::InterfaceProviderJsWrapper(
79 v8::Isolate* isolate, 117 v8::Isolate* isolate,
80 v8::Handle<v8::Context> context, 118 v8::Handle<v8::Context> context,
81 base::WeakPtr<service_manager::InterfaceProvider> remote_interfaces) 119 base::WeakPtr<service_manager::InterfaceProvider> remote_interfaces)
82 : isolate_(isolate), 120 : isolate_(isolate),
83 context_(isolate, context), 121 context_(isolate, context),
84 remote_interfaces_(remote_interfaces), 122 remote_interfaces_(remote_interfaces),
85 weak_factory_(this) { 123 weak_factory_(this) {
86 context_.SetWeak(this, &InterfaceProviderJsWrapper::ClearContext, 124 context_.SetWeak(this, &InterfaceProviderJsWrapper::ClearContext,
87 v8::WeakCallbackType::kParameter); 125 v8::WeakCallbackType::kParameter);
88 } 126 }
(...skipping 15 matching lines...) Expand all
104 } 142 }
105 143
106 // static 144 // static
107 void InterfaceProviderJsWrapper::ClearContext( 145 void InterfaceProviderJsWrapper::ClearContext(
108 const v8::WeakCallbackInfo<InterfaceProviderJsWrapper>& data) { 146 const v8::WeakCallbackInfo<InterfaceProviderJsWrapper>& data) {
109 InterfaceProviderJsWrapper* registry = data.GetParameter(); 147 InterfaceProviderJsWrapper* registry = data.GetParameter();
110 registry->context_.Reset(); 148 registry->context_.Reset();
111 } 149 }
112 150
113 } // namespace content 151 } // namespace content
OLDNEW
« 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