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

Side by Side Diff: services/service_manager/service_manager.cc

Issue 2850743004: Replace ServiceInfo with BindSourceInfo. (Closed)
Patch Set: . Created 3 years, 7 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 "services/service_manager/service_manager.h" 5 #include "services/service_manager/service_manager.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 if (!AllowsInterface(params->source(), source_connection_spec, identity_, 211 if (!AllowsInterface(params->source(), source_connection_spec, identity_,
212 GetConnectionSpec(), params->interface_name())) { 212 GetConnectionSpec(), params->interface_name())) {
213 params->set_response_data(mojom::ConnectResult::ACCESS_DENIED, identity_); 213 params->set_response_data(mojom::ConnectResult::ACCESS_DENIED, identity_);
214 return false; 214 return false;
215 } 215 }
216 216
217 params->set_response_data(mojom::ConnectResult::SUCCEEDED, identity_); 217 params->set_response_data(mojom::ConnectResult::SUCCEEDED, identity_);
218 218
219 pending_service_connections_++; 219 pending_service_connections_++;
220 service_->OnBindInterface( 220 service_->OnBindInterface(
221 ServiceInfo(params->source(), source_specs), 221 BindSourceInfo(
222 params->interface_name(), 222 params->source(),
223 params->TakeInterfaceRequestPipe(), 223 GetRequestedCapabilities(source_connection_spec, identity_)),
224 params->interface_name(), params->TakeInterfaceRequestPipe(),
224 base::Bind(&Instance::OnConnectComplete, base::Unretained(this))); 225 base::Bind(&Instance::OnConnectComplete, base::Unretained(this)));
225 return true; 226 return true;
226 } 227 }
227 228
228 void OnConnectComplete() { 229 void OnConnectComplete() {
229 DCHECK_GT(pending_service_connections_, 0); 230 DCHECK_GT(pending_service_connections_, 0);
230 pending_service_connections_--; 231 pending_service_connections_--;
231 } 232 }
232 233
233 void StartWithService(mojom::ServicePtr service) { 234 void StartWithService(mojom::ServicePtr service) {
234 CHECK(!service_); 235 CHECK(!service_);
235 state_ = State::STARTING; 236 state_ = State::STARTING;
236 service_ = std::move(service); 237 service_ = std::move(service);
237 service_.set_connection_error_handler( 238 service_.set_connection_error_handler(
238 base::Bind(&Instance::OnServiceLost, base::Unretained(this), 239 base::Bind(&Instance::OnServiceLost, base::Unretained(this),
239 service_manager_->GetWeakPtr())); 240 service_manager_->GetWeakPtr()));
240 service_->OnStart(ServiceInfo(identity_, interface_provider_specs_), 241 service_->OnStart(identity_, base::Bind(&Instance::OnStartComplete,
241 base::Bind(&Instance::OnStartComplete, 242 base::Unretained(this)));
242 base::Unretained(this)));
243 } 243 }
244 244
245 bool StartWithFilePath(const base::FilePath& path) { 245 bool StartWithFilePath(const base::FilePath& path) {
246 DCHECK(!service_); 246 DCHECK(!service_);
247 DCHECK(!path.empty()); 247 DCHECK(!path.empty());
248 runner_ = service_manager_->service_process_launcher_factory_->Create(path); 248 runner_ = service_manager_->service_process_launcher_factory_->Create(path);
249 if (!runner_) 249 if (!runner_)
250 return false; 250 return false;
251 bool start_sandboxed = false; 251 bool start_sandboxed = false;
252 mojom::ServicePtr service = runner_->Start( 252 mojom::ServicePtr service = runner_->Start(
(...skipping 25 matching lines...) Expand all
278 const InterfaceProviderSpec& GetSpec(const std::string& spec) const { 278 const InterfaceProviderSpec& GetSpec(const std::string& spec) const {
279 auto it = interface_provider_specs_.find(spec); 279 auto it = interface_provider_specs_.find(spec);
280 return it != interface_provider_specs_.end() ? it->second : empty_spec_; 280 return it != interface_provider_specs_.end() ? it->second : empty_spec_;
281 } 281 }
282 282
283 const Identity& identity() const { return identity_; } 283 const Identity& identity() const { return identity_; }
284 void set_identity(const Identity& identity) { identity_ = identity; } 284 void set_identity(const Identity& identity) { identity_ = identity; }
285 uint32_t id() const { return id_; } 285 uint32_t id() const { return id_; }
286 286
287 // Service: 287 // Service:
288 void OnBindInterface(const ServiceInfo& source_info, 288 void OnBindInterface(const BindSourceInfo& source_info,
289 const std::string& interface_name, 289 const std::string& interface_name,
290 mojo::ScopedMessagePipeHandle interface_pipe) override { 290 mojo::ScopedMessagePipeHandle interface_pipe) override {
291 Instance* source = 291 Instance* source =
292 service_manager_->GetExistingInstance(source_info.identity); 292 service_manager_->GetExistingInstance(source_info.identity);
293 DCHECK(source); 293 DCHECK(source);
294 if (interface_name == mojom::ServiceManager::Name_ && 294 if (interface_name == mojom::ServiceManager::Name_ &&
295 HasCapability(source->GetConnectionSpec(), 295 HasCapability(source->GetConnectionSpec(),
296 kCapability_ServiceManager)) { 296 kCapability_ServiceManager)) {
297 mojom::ServiceManagerRequest request = 297 mojom::ServiceManagerRequest request =
298 mojo::MakeRequest<mojom::ServiceManager>(std::move(interface_pipe)); 298 mojo::MakeRequest<mojom::ServiceManager>(std::move(interface_pipe));
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 DISALLOW_COPY_AND_ASSIGN(Instance); 636 DISALLOW_COPY_AND_ASSIGN(Instance);
637 }; 637 };
638 638
639 class ServiceManager::ServiceImpl : public Service { 639 class ServiceManager::ServiceImpl : public Service {
640 public: 640 public:
641 explicit ServiceImpl(ServiceManager* service_manager) 641 explicit ServiceImpl(ServiceManager* service_manager)
642 : service_manager_(service_manager) {} 642 : service_manager_(service_manager) {}
643 ~ServiceImpl() override {} 643 ~ServiceImpl() override {}
644 644
645 // Service: 645 // Service:
646 void OnBindInterface(const ServiceInfo& source_info, 646 void OnBindInterface(const BindSourceInfo& source_info,
647 const std::string& interface_name, 647 const std::string& interface_name,
648 mojo::ScopedMessagePipeHandle interface_pipe) override { 648 mojo::ScopedMessagePipeHandle interface_pipe) override {
649 // The only interface ServiceManager exposes is mojom::ServiceManager, and 649 // The only interface ServiceManager exposes is mojom::ServiceManager, and
650 // access to this interface is brokered by a policy specific to each caller, 650 // access to this interface is brokered by a policy specific to each caller,
651 // managed by the caller's instance. Here we look to see who's calling, 651 // managed by the caller's instance. Here we look to see who's calling,
652 // and forward to the caller's instance to continue. 652 // and forward to the caller's instance to continue.
653 Instance* instance = nullptr; 653 Instance* instance = nullptr;
654 for (const auto& entry : service_manager_->identity_to_instance_) { 654 for (const auto& entry : service_manager_->identity_to_instance_) {
655 if (entry.first == source_info.identity) { 655 if (entry.first == source_info.identity) {
656 instance = entry.second; 656 instance = entry.second;
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
1140 instance->identity()); 1140 instance->identity());
1141 if (params->HasInterfaceRequestInfo()) 1141 if (params->HasInterfaceRequestInfo())
1142 instance->CallOnBindInterface(&params); 1142 instance->CallOnBindInterface(&params);
1143 } 1143 }
1144 1144
1145 base::WeakPtr<ServiceManager> ServiceManager::GetWeakPtr() { 1145 base::WeakPtr<ServiceManager> ServiceManager::GetWeakPtr() {
1146 return weak_ptr_factory_.GetWeakPtr(); 1146 return weak_ptr_factory_.GetWeakPtr();
1147 } 1147 }
1148 1148
1149 } // namespace service_manager 1149 } // namespace service_manager
OLDNEW
« no previous file with comments | « services/service_manager/public/interfaces/service.mojom ('k') | services/service_manager/tests/connect/connect_test_app.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698