| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/common/service_manager/service_manager_connection_impl.h" | 5 #include "content/common/service_manager/service_manager_connection_impl.h" |
| 6 | 6 |
| 7 #include <queue> | 7 #include <queue> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 | 32 |
| 33 ServiceManagerConnection::Factory* service_manager_connection_factory = nullptr; | 33 ServiceManagerConnection::Factory* service_manager_connection_factory = nullptr; |
| 34 | 34 |
| 35 } // namespace | 35 } // namespace |
| 36 | 36 |
| 37 // A ref-counted object which owns the IO thread state of a | 37 // A ref-counted object which owns the IO thread state of a |
| 38 // ServiceManagerConnectionImpl. This includes Service and ServiceFactory | 38 // ServiceManagerConnectionImpl. This includes Service and ServiceFactory |
| 39 // bindings. | 39 // bindings. |
| 40 class ServiceManagerConnectionImpl::IOThreadContext | 40 class ServiceManagerConnectionImpl::IOThreadContext |
| 41 : public base::RefCountedThreadSafe<IOThreadContext>, | 41 : public base::RefCountedThreadSafe<IOThreadContext>, |
| 42 public shell::Service, | 42 public service_manager::Service, |
| 43 public shell::InterfaceFactory<shell::mojom::ServiceFactory>, | 43 public service_manager::InterfaceFactory< |
| 44 public shell::mojom::ServiceFactory { | 44 service_manager::mojom::ServiceFactory>, |
| 45 public service_manager::mojom::ServiceFactory { |
| 45 public: | 46 public: |
| 46 using InitializeCallback = base::Callback<void(const shell::Identity&)>; | 47 using InitializeCallback = |
| 48 base::Callback<void(const service_manager::Identity&)>; |
| 47 using ServiceFactoryCallback = | 49 using ServiceFactoryCallback = |
| 48 base::Callback<void(shell::mojom::ServiceRequest, const std::string&)>; | 50 base::Callback<void(service_manager::mojom::ServiceRequest, |
| 51 const std::string&)>; |
| 49 | 52 |
| 50 IOThreadContext(shell::mojom::ServiceRequest service_request, | 53 IOThreadContext( |
| 51 scoped_refptr<base::SequencedTaskRunner> io_task_runner, | 54 service_manager::mojom::ServiceRequest service_request, |
| 52 std::unique_ptr<shell::Connector> io_thread_connector, | 55 scoped_refptr<base::SequencedTaskRunner> io_task_runner, |
| 53 shell::mojom::ConnectorRequest connector_request) | 56 std::unique_ptr<service_manager::Connector> io_thread_connector, |
| 57 service_manager::mojom::ConnectorRequest connector_request) |
| 54 : pending_service_request_(std::move(service_request)), | 58 : pending_service_request_(std::move(service_request)), |
| 55 io_task_runner_(io_task_runner), | 59 io_task_runner_(io_task_runner), |
| 56 io_thread_connector_(std::move(io_thread_connector)), | 60 io_thread_connector_(std::move(io_thread_connector)), |
| 57 pending_connector_request_(std::move(connector_request)), | 61 pending_connector_request_(std::move(connector_request)), |
| 58 weak_factory_(this) { | 62 weak_factory_(this) { |
| 59 // This will be reattached by any of the IO thread functions on first call. | 63 // This will be reattached by any of the IO thread functions on first call. |
| 60 io_thread_checker_.DetachFromThread(); | 64 io_thread_checker_.DetachFromThread(); |
| 61 } | 65 } |
| 62 | 66 |
| 63 // Safe to call from any thread. | 67 // Safe to call from any thread. |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 | 106 |
| 103 void RemoveConnectionFilter(int filter_id) { | 107 void RemoveConnectionFilter(int filter_id) { |
| 104 io_task_runner_->PostTask( | 108 io_task_runner_->PostTask( |
| 105 FROM_HERE, | 109 FROM_HERE, |
| 106 base::Bind(&IOThreadContext::RemoveConnectionFilterOnIOThread, this, | 110 base::Bind(&IOThreadContext::RemoveConnectionFilterOnIOThread, this, |
| 107 filter_id)); | 111 filter_id)); |
| 108 } | 112 } |
| 109 | 113 |
| 110 // Safe to call any time before Start() is called. | 114 // Safe to call any time before Start() is called. |
| 111 void SetDefaultBinderForBrowserConnection( | 115 void SetDefaultBinderForBrowserConnection( |
| 112 const shell::InterfaceRegistry::Binder& binder) { | 116 const service_manager::InterfaceRegistry::Binder& binder) { |
| 113 DCHECK(!started_); | 117 DCHECK(!started_); |
| 114 default_browser_binder_ = base::Bind( | 118 default_browser_binder_ = base::Bind( |
| 115 &IOThreadContext::CallBinderOnTaskRunner, | 119 &IOThreadContext::CallBinderOnTaskRunner, |
| 116 base::ThreadTaskRunnerHandle::Get(), binder); | 120 base::ThreadTaskRunnerHandle::Get(), binder); |
| 117 } | 121 } |
| 118 | 122 |
| 119 private: | 123 private: |
| 120 friend class base::RefCountedThreadSafe<IOThreadContext>; | 124 friend class base::RefCountedThreadSafe<IOThreadContext>; |
| 121 | 125 |
| 122 class MessageLoopObserver : public base::MessageLoop::DestructionObserver { | 126 class MessageLoopObserver : public base::MessageLoop::DestructionObserver { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 153 base::WeakPtr<IOThreadContext> context_; | 157 base::WeakPtr<IOThreadContext> context_; |
| 154 | 158 |
| 155 DISALLOW_COPY_AND_ASSIGN(MessageLoopObserver); | 159 DISALLOW_COPY_AND_ASSIGN(MessageLoopObserver); |
| 156 }; | 160 }; |
| 157 | 161 |
| 158 ~IOThreadContext() override {} | 162 ~IOThreadContext() override {} |
| 159 | 163 |
| 160 void StartOnIOThread() { | 164 void StartOnIOThread() { |
| 161 // Should bind |io_thread_checker_| to the context's thread. | 165 // Should bind |io_thread_checker_| to the context's thread. |
| 162 DCHECK(io_thread_checker_.CalledOnValidThread()); | 166 DCHECK(io_thread_checker_.CalledOnValidThread()); |
| 163 service_context_.reset(new shell::ServiceContext( | 167 service_context_.reset(new service_manager::ServiceContext( |
| 164 this, std::move(pending_service_request_), | 168 this, std::move(pending_service_request_), |
| 165 std::move(io_thread_connector_), | 169 std::move(io_thread_connector_), |
| 166 std::move(pending_connector_request_))); | 170 std::move(pending_connector_request_))); |
| 167 | 171 |
| 168 // MessageLoopObserver owns itself. | 172 // MessageLoopObserver owns itself. |
| 169 message_loop_observer_ = | 173 message_loop_observer_ = |
| 170 new MessageLoopObserver(weak_factory_.GetWeakPtr()); | 174 new MessageLoopObserver(weak_factory_.GetWeakPtr()); |
| 171 } | 175 } |
| 172 | 176 |
| 173 void ShutDownOnIOThread() { | 177 void ShutDownOnIOThread() { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 DCHECK(it != connection_filters_.end()); | 209 DCHECK(it != connection_filters_.end()); |
| 206 connection_filters_.erase(it); | 210 connection_filters_.erase(it); |
| 207 } | 211 } |
| 208 | 212 |
| 209 void OnBrowserConnectionLost() { | 213 void OnBrowserConnectionLost() { |
| 210 DCHECK(io_thread_checker_.CalledOnValidThread()); | 214 DCHECK(io_thread_checker_.CalledOnValidThread()); |
| 211 has_browser_connection_ = false; | 215 has_browser_connection_ = false; |
| 212 } | 216 } |
| 213 | 217 |
| 214 ///////////////////////////////////////////////////////////////////////////// | 218 ///////////////////////////////////////////////////////////////////////////// |
| 215 // shell::Service implementation | 219 // service_manager::Service implementation |
| 216 | 220 |
| 217 void OnStart(const shell::Identity& identity) override { | 221 void OnStart(const service_manager::Identity& identity) override { |
| 218 DCHECK(io_thread_checker_.CalledOnValidThread()); | 222 DCHECK(io_thread_checker_.CalledOnValidThread()); |
| 219 DCHECK(!initialize_handler_.is_null()); | 223 DCHECK(!initialize_handler_.is_null()); |
| 220 id_ = identity; | 224 id_ = identity; |
| 221 | 225 |
| 222 InitializeCallback handler = base::ResetAndReturn(&initialize_handler_); | 226 InitializeCallback handler = base::ResetAndReturn(&initialize_handler_); |
| 223 callback_task_runner_->PostTask(FROM_HERE, base::Bind(handler, identity)); | 227 callback_task_runner_->PostTask(FROM_HERE, base::Bind(handler, identity)); |
| 224 } | 228 } |
| 225 | 229 |
| 226 bool OnConnect(const shell::Identity& remote_identity, | 230 bool OnConnect(const service_manager::Identity& remote_identity, |
| 227 shell::InterfaceRegistry* registry) override { | 231 service_manager::InterfaceRegistry* registry) override { |
| 228 DCHECK(io_thread_checker_.CalledOnValidThread()); | 232 DCHECK(io_thread_checker_.CalledOnValidThread()); |
| 229 std::string remote_service = remote_identity.name(); | 233 std::string remote_service = remote_identity.name(); |
| 230 if (remote_service == "service:shell") { | 234 if (remote_service == "service:shell") { |
| 231 // Only expose the SCF interface to the shell. | 235 // Only expose the SCF interface to the shell. |
| 232 registry->AddInterface<shell::mojom::ServiceFactory>(this); | 236 registry->AddInterface<service_manager::mojom::ServiceFactory>(this); |
| 233 return true; | 237 return true; |
| 234 } | 238 } |
| 235 | 239 |
| 236 bool accept = false; | 240 bool accept = false; |
| 237 { | 241 { |
| 238 base::AutoLock lock(lock_); | 242 base::AutoLock lock(lock_); |
| 239 for (auto& entry : connection_filters_) { | 243 for (auto& entry : connection_filters_) { |
| 240 accept |= entry.second->OnConnect(remote_identity, registry, | 244 accept |= entry.second->OnConnect(remote_identity, registry, |
| 241 service_context_->connector()); | 245 service_context_->connector()); |
| 242 } | 246 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 255 return accept; | 259 return accept; |
| 256 } | 260 } |
| 257 | 261 |
| 258 bool OnStop() override { | 262 bool OnStop() override { |
| 259 ClearConnectionFiltersOnIOThread(); | 263 ClearConnectionFiltersOnIOThread(); |
| 260 callback_task_runner_->PostTask(FROM_HERE, stop_callback_); | 264 callback_task_runner_->PostTask(FROM_HERE, stop_callback_); |
| 261 return true; | 265 return true; |
| 262 } | 266 } |
| 263 | 267 |
| 264 ///////////////////////////////////////////////////////////////////////////// | 268 ///////////////////////////////////////////////////////////////////////////// |
| 265 // shell::InterfaceFactory<shell::mojom::ServiceFactory> implementation | 269 // service_manager::InterfaceFactory<service_manager::mojom::ServiceFactory> |
| 270 // implementation |
| 266 | 271 |
| 267 void Create(const shell::Identity& remote_identity, | 272 void Create(const service_manager::Identity& remote_identity, |
| 268 shell::mojom::ServiceFactoryRequest request) override { | 273 service_manager::mojom::ServiceFactoryRequest request) override { |
| 269 DCHECK(io_thread_checker_.CalledOnValidThread()); | 274 DCHECK(io_thread_checker_.CalledOnValidThread()); |
| 270 factory_bindings_.AddBinding(this, std::move(request)); | 275 factory_bindings_.AddBinding(this, std::move(request)); |
| 271 } | 276 } |
| 272 | 277 |
| 273 ///////////////////////////////////////////////////////////////////////////// | 278 ///////////////////////////////////////////////////////////////////////////// |
| 274 // shell::mojom::ServiceFactory implementation | 279 // service_manager::mojom::ServiceFactory implementation |
| 275 | 280 |
| 276 void CreateService(shell::mojom::ServiceRequest request, | 281 void CreateService(service_manager::mojom::ServiceRequest request, |
| 277 const std::string& name) override { | 282 const std::string& name) override { |
| 278 DCHECK(io_thread_checker_.CalledOnValidThread()); | 283 DCHECK(io_thread_checker_.CalledOnValidThread()); |
| 279 callback_task_runner_->PostTask( | 284 callback_task_runner_->PostTask( |
| 280 FROM_HERE, | 285 FROM_HERE, |
| 281 base::Bind(create_service_callback_, base::Passed(&request), name)); | 286 base::Bind(create_service_callback_, base::Passed(&request), name)); |
| 282 } | 287 } |
| 283 | 288 |
| 284 static void CallBinderOnTaskRunner( | 289 static void CallBinderOnTaskRunner( |
| 285 scoped_refptr<base::SequencedTaskRunner> task_runner, | 290 scoped_refptr<base::SequencedTaskRunner> task_runner, |
| 286 const shell::InterfaceRegistry::Binder& binder, | 291 const service_manager::InterfaceRegistry::Binder& binder, |
| 287 const std::string& interface_name, | 292 const std::string& interface_name, |
| 288 mojo::ScopedMessagePipeHandle request_handle) { | 293 mojo::ScopedMessagePipeHandle request_handle) { |
| 289 task_runner->PostTask(FROM_HERE, base::Bind(binder, interface_name, | 294 task_runner->PostTask(FROM_HERE, base::Bind(binder, interface_name, |
| 290 base::Passed(&request_handle))); | 295 base::Passed(&request_handle))); |
| 291 } | 296 } |
| 292 | 297 |
| 293 base::ThreadChecker io_thread_checker_; | 298 base::ThreadChecker io_thread_checker_; |
| 294 bool started_ = false; | 299 bool started_ = false; |
| 295 | 300 |
| 296 // Temporary state established on construction and consumed on the IO thread | 301 // Temporary state established on construction and consumed on the IO thread |
| 297 // once the connection is started. | 302 // once the connection is started. |
| 298 shell::mojom::ServiceRequest pending_service_request_; | 303 service_manager::mojom::ServiceRequest pending_service_request_; |
| 299 scoped_refptr<base::SequencedTaskRunner> io_task_runner_; | 304 scoped_refptr<base::SequencedTaskRunner> io_task_runner_; |
| 300 std::unique_ptr<shell::Connector> io_thread_connector_; | 305 std::unique_ptr<service_manager::Connector> io_thread_connector_; |
| 301 shell::mojom::ConnectorRequest pending_connector_request_; | 306 service_manager::mojom::ConnectorRequest pending_connector_request_; |
| 302 | 307 |
| 303 // TaskRunner on which to run our owner's callbacks, i.e. the ones passed to | 308 // TaskRunner on which to run our owner's callbacks, i.e. the ones passed to |
| 304 // Start(). | 309 // Start(). |
| 305 scoped_refptr<base::SequencedTaskRunner> callback_task_runner_; | 310 scoped_refptr<base::SequencedTaskRunner> callback_task_runner_; |
| 306 | 311 |
| 307 // Callback to run once Service::OnStart is invoked. | 312 // Callback to run once Service::OnStart is invoked. |
| 308 InitializeCallback initialize_handler_; | 313 InitializeCallback initialize_handler_; |
| 309 | 314 |
| 310 // Callback to run when a new Service request is received. | 315 // Callback to run when a new Service request is received. |
| 311 ServiceFactoryCallback create_service_callback_; | 316 ServiceFactoryCallback create_service_callback_; |
| 312 | 317 |
| 313 // Callback to run if the service is stopped by the service manager. | 318 // Callback to run if the service is stopped by the service manager. |
| 314 base::Closure stop_callback_; | 319 base::Closure stop_callback_; |
| 315 | 320 |
| 316 // Called once a connection has been received from the browser process & the | 321 // Called once a connection has been received from the browser process & the |
| 317 // default binder (below) has been set up. | 322 // default binder (below) has been set up. |
| 318 bool has_browser_connection_ = false; | 323 bool has_browser_connection_ = false; |
| 319 | 324 |
| 320 shell::Identity id_; | 325 service_manager::Identity id_; |
| 321 | 326 |
| 322 // Default binder callback used for the browser connection's | 327 // Default binder callback used for the browser connection's |
| 323 // InterfaceRegistry. | 328 // InterfaceRegistry. |
| 324 // | 329 // |
| 325 // TODO(rockot): Remove this once all interfaces exposed to the browser are | 330 // TODO(rockot): Remove this once all interfaces exposed to the browser are |
| 326 // exposed via a ConnectionFilter. | 331 // exposed via a ConnectionFilter. |
| 327 shell::InterfaceRegistry::Binder default_browser_binder_; | 332 service_manager::InterfaceRegistry::Binder default_browser_binder_; |
| 328 | 333 |
| 329 std::unique_ptr<shell::ServiceContext> service_context_; | 334 std::unique_ptr<service_manager::ServiceContext> service_context_; |
| 330 mojo::BindingSet<shell::mojom::ServiceFactory> factory_bindings_; | 335 mojo::BindingSet<service_manager::mojom::ServiceFactory> factory_bindings_; |
| 331 int next_filter_id_ = kInvalidConnectionFilterId; | 336 int next_filter_id_ = kInvalidConnectionFilterId; |
| 332 | 337 |
| 333 // Not owned. | 338 // Not owned. |
| 334 MessageLoopObserver* message_loop_observer_ = nullptr; | 339 MessageLoopObserver* message_loop_observer_ = nullptr; |
| 335 | 340 |
| 336 // Guards |connection_filters_|. | 341 // Guards |connection_filters_|. |
| 337 base::Lock lock_; | 342 base::Lock lock_; |
| 338 std::map<int, std::unique_ptr<ConnectionFilter>> connection_filters_; | 343 std::map<int, std::unique_ptr<ConnectionFilter>> connection_filters_; |
| 339 | 344 |
| 340 base::WeakPtrFactory<IOThreadContext> weak_factory_; | 345 base::WeakPtrFactory<IOThreadContext> weak_factory_; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 364 } | 369 } |
| 365 | 370 |
| 366 // static | 371 // static |
| 367 void ServiceManagerConnection::SetFactoryForTest(Factory* factory) { | 372 void ServiceManagerConnection::SetFactoryForTest(Factory* factory) { |
| 368 DCHECK(!g_connection_for_process.Get()); | 373 DCHECK(!g_connection_for_process.Get()); |
| 369 service_manager_connection_factory = factory; | 374 service_manager_connection_factory = factory; |
| 370 } | 375 } |
| 371 | 376 |
| 372 // static | 377 // static |
| 373 std::unique_ptr<ServiceManagerConnection> ServiceManagerConnection::Create( | 378 std::unique_ptr<ServiceManagerConnection> ServiceManagerConnection::Create( |
| 374 shell::mojom::ServiceRequest request, | 379 service_manager::mojom::ServiceRequest request, |
| 375 scoped_refptr<base::SequencedTaskRunner> io_task_runner) { | 380 scoped_refptr<base::SequencedTaskRunner> io_task_runner) { |
| 376 if (service_manager_connection_factory) | 381 if (service_manager_connection_factory) |
| 377 return service_manager_connection_factory->Run(); | 382 return service_manager_connection_factory->Run(); |
| 378 return base::MakeUnique<ServiceManagerConnectionImpl>( | 383 return base::MakeUnique<ServiceManagerConnectionImpl>( |
| 379 std::move(request), io_task_runner); | 384 std::move(request), io_task_runner); |
| 380 } | 385 } |
| 381 | 386 |
| 382 ServiceManagerConnection::~ServiceManagerConnection() {} | 387 ServiceManagerConnection::~ServiceManagerConnection() {} |
| 383 | 388 |
| 384 //////////////////////////////////////////////////////////////////////////////// | 389 //////////////////////////////////////////////////////////////////////////////// |
| 385 // ServiceManagerConnectionImpl, public: | 390 // ServiceManagerConnectionImpl, public: |
| 386 | 391 |
| 387 ServiceManagerConnectionImpl::ServiceManagerConnectionImpl( | 392 ServiceManagerConnectionImpl::ServiceManagerConnectionImpl( |
| 388 shell::mojom::ServiceRequest request, | 393 service_manager::mojom::ServiceRequest request, |
| 389 scoped_refptr<base::SequencedTaskRunner> io_task_runner) | 394 scoped_refptr<base::SequencedTaskRunner> io_task_runner) |
| 390 : weak_factory_(this) { | 395 : weak_factory_(this) { |
| 391 shell::mojom::ConnectorRequest connector_request; | 396 service_manager::mojom::ConnectorRequest connector_request; |
| 392 connector_ = shell::Connector::Create(&connector_request); | 397 connector_ = service_manager::Connector::Create(&connector_request); |
| 393 | 398 |
| 394 std::unique_ptr<shell::Connector> io_thread_connector = connector_->Clone(); | 399 std::unique_ptr<service_manager::Connector> io_thread_connector = |
| 400 connector_->Clone(); |
| 395 context_ = new IOThreadContext( | 401 context_ = new IOThreadContext( |
| 396 std::move(request), io_task_runner, std::move(io_thread_connector), | 402 std::move(request), io_task_runner, std::move(io_thread_connector), |
| 397 std::move(connector_request)); | 403 std::move(connector_request)); |
| 398 } | 404 } |
| 399 | 405 |
| 400 ServiceManagerConnectionImpl::~ServiceManagerConnectionImpl() { | 406 ServiceManagerConnectionImpl::~ServiceManagerConnectionImpl() { |
| 401 context_->ShutDown(); | 407 context_->ShutDown(); |
| 402 } | 408 } |
| 403 | 409 |
| 404 //////////////////////////////////////////////////////////////////////////////// | 410 //////////////////////////////////////////////////////////////////////////////// |
| 405 // ServiceManagerConnectionImpl, ServiceManagerConnection implementation: | 411 // ServiceManagerConnectionImpl, ServiceManagerConnection implementation: |
| 406 | 412 |
| 407 void ServiceManagerConnectionImpl::Start() { | 413 void ServiceManagerConnectionImpl::Start() { |
| 408 context_->Start( | 414 context_->Start( |
| 409 base::Bind(&ServiceManagerConnectionImpl::OnContextInitialized, | 415 base::Bind(&ServiceManagerConnectionImpl::OnContextInitialized, |
| 410 weak_factory_.GetWeakPtr()), | 416 weak_factory_.GetWeakPtr()), |
| 411 base::Bind(&ServiceManagerConnectionImpl::CreateService, | 417 base::Bind(&ServiceManagerConnectionImpl::CreateService, |
| 412 weak_factory_.GetWeakPtr()), | 418 weak_factory_.GetWeakPtr()), |
| 413 base::Bind(&ServiceManagerConnectionImpl::OnConnectionLost, | 419 base::Bind(&ServiceManagerConnectionImpl::OnConnectionLost, |
| 414 weak_factory_.GetWeakPtr())); | 420 weak_factory_.GetWeakPtr())); |
| 415 } | 421 } |
| 416 | 422 |
| 417 void ServiceManagerConnectionImpl::SetInitializeHandler( | 423 void ServiceManagerConnectionImpl::SetInitializeHandler( |
| 418 const base::Closure& handler) { | 424 const base::Closure& handler) { |
| 419 DCHECK(initialize_handler_.is_null()); | 425 DCHECK(initialize_handler_.is_null()); |
| 420 initialize_handler_ = handler; | 426 initialize_handler_ = handler; |
| 421 } | 427 } |
| 422 | 428 |
| 423 shell::Connector* ServiceManagerConnectionImpl::GetConnector() { | 429 service_manager::Connector* ServiceManagerConnectionImpl::GetConnector() { |
| 424 return connector_.get(); | 430 return connector_.get(); |
| 425 } | 431 } |
| 426 | 432 |
| 427 const shell::Identity& ServiceManagerConnectionImpl::GetIdentity() const { | 433 const service_manager::Identity& ServiceManagerConnectionImpl::GetIdentity() |
| 434 const { |
| 428 return identity_; | 435 return identity_; |
| 429 } | 436 } |
| 430 | 437 |
| 431 void ServiceManagerConnectionImpl::SetConnectionLostClosure( | 438 void ServiceManagerConnectionImpl::SetConnectionLostClosure( |
| 432 const base::Closure& closure) { | 439 const base::Closure& closure) { |
| 433 connection_lost_handler_ = closure; | 440 connection_lost_handler_ = closure; |
| 434 } | 441 } |
| 435 | 442 |
| 436 void ServiceManagerConnectionImpl::SetupInterfaceRequestProxies( | 443 void ServiceManagerConnectionImpl::SetupInterfaceRequestProxies( |
| 437 shell::InterfaceRegistry* registry, | 444 service_manager::InterfaceRegistry* registry, |
| 438 shell::InterfaceProvider* provider) { | 445 service_manager::InterfaceProvider* provider) { |
| 439 // It's safe to bind |registry| as a raw pointer because the caller must | 446 // It's safe to bind |registry| as a raw pointer because the caller must |
| 440 // guarantee that it outlives |this|, and |this| is bound as a weak ptr here. | 447 // guarantee that it outlives |this|, and |this| is bound as a weak ptr here. |
| 441 context_->SetDefaultBinderForBrowserConnection( | 448 context_->SetDefaultBinderForBrowserConnection( |
| 442 base::Bind(&ServiceManagerConnectionImpl::GetInterface, | 449 base::Bind(&ServiceManagerConnectionImpl::GetInterface, |
| 443 weak_factory_.GetWeakPtr(), registry)); | 450 weak_factory_.GetWeakPtr(), registry)); |
| 444 | 451 |
| 445 // TODO(beng): remove provider parameter. | 452 // TODO(beng): remove provider parameter. |
| 446 } | 453 } |
| 447 | 454 |
| 448 int ServiceManagerConnectionImpl::AddConnectionFilter( | 455 int ServiceManagerConnectionImpl::AddConnectionFilter( |
| (...skipping 18 matching lines...) Expand all Loading... |
| 467 } | 474 } |
| 468 | 475 |
| 469 void ServiceManagerConnectionImpl::AddServiceRequestHandler( | 476 void ServiceManagerConnectionImpl::AddServiceRequestHandler( |
| 470 const std::string& name, | 477 const std::string& name, |
| 471 const ServiceRequestHandler& handler) { | 478 const ServiceRequestHandler& handler) { |
| 472 auto result = request_handlers_.insert(std::make_pair(name, handler)); | 479 auto result = request_handlers_.insert(std::make_pair(name, handler)); |
| 473 DCHECK(result.second); | 480 DCHECK(result.second); |
| 474 } | 481 } |
| 475 | 482 |
| 476 void ServiceManagerConnectionImpl::CreateService( | 483 void ServiceManagerConnectionImpl::CreateService( |
| 477 shell::mojom::ServiceRequest request, | 484 service_manager::mojom::ServiceRequest request, |
| 478 const std::string& name) { | 485 const std::string& name) { |
| 479 auto it = request_handlers_.find(name); | 486 auto it = request_handlers_.find(name); |
| 480 if (it != request_handlers_.end()) | 487 if (it != request_handlers_.end()) |
| 481 it->second.Run(std::move(request)); | 488 it->second.Run(std::move(request)); |
| 482 } | 489 } |
| 483 | 490 |
| 484 void ServiceManagerConnectionImpl::OnContextInitialized( | 491 void ServiceManagerConnectionImpl::OnContextInitialized( |
| 485 const shell::Identity& identity) { | 492 const service_manager::Identity& identity) { |
| 486 identity_ = identity; | 493 identity_ = identity; |
| 487 if (!initialize_handler_.is_null()) | 494 if (!initialize_handler_.is_null()) |
| 488 base::ResetAndReturn(&initialize_handler_).Run(); | 495 base::ResetAndReturn(&initialize_handler_).Run(); |
| 489 } | 496 } |
| 490 | 497 |
| 491 void ServiceManagerConnectionImpl::OnConnectionLost() { | 498 void ServiceManagerConnectionImpl::OnConnectionLost() { |
| 492 if (!connection_lost_handler_.is_null()) | 499 if (!connection_lost_handler_.is_null()) |
| 493 connection_lost_handler_.Run(); | 500 connection_lost_handler_.Run(); |
| 494 } | 501 } |
| 495 | 502 |
| 496 void ServiceManagerConnectionImpl::GetInterface( | 503 void ServiceManagerConnectionImpl::GetInterface( |
| 497 shell::mojom::InterfaceProvider* provider, | 504 service_manager::mojom::InterfaceProvider* provider, |
| 498 const std::string& interface_name, | 505 const std::string& interface_name, |
| 499 mojo::ScopedMessagePipeHandle request_handle) { | 506 mojo::ScopedMessagePipeHandle request_handle) { |
| 500 provider->GetInterface(interface_name, std::move(request_handle)); | 507 provider->GetInterface(interface_name, std::move(request_handle)); |
| 501 } | 508 } |
| 502 | 509 |
| 503 } // namespace content | 510 } // namespace content |
| 504 | 511 |
| OLD | NEW |