| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/standalone/context.h" | 5 #include "services/service_manager/standalone/context.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 | 142 |
| 143 if (!init_params || init_params->init_edk) | 143 if (!init_params || init_params->init_edk) |
| 144 EnsureEmbedderIsInitialized(); | 144 EnsureEmbedderIsInitialized(); |
| 145 | 145 |
| 146 service_manager_runner_ = base::ThreadTaskRunnerHandle::Get(); | 146 service_manager_runner_ = base::ThreadTaskRunnerHandle::Get(); |
| 147 blocking_pool_ = new base::SequencedWorkerPool( | 147 blocking_pool_ = new base::SequencedWorkerPool( |
| 148 kThreadPoolMaxThreads, "blocking_pool", base::TaskPriority::USER_VISIBLE); | 148 kThreadPoolMaxThreads, "blocking_pool", base::TaskPriority::USER_VISIBLE); |
| 149 | 149 |
| 150 init_edk_ = !init_params || init_params->init_edk; | 150 init_edk_ = !init_params || init_params->init_edk; |
| 151 if (init_edk_) { | 151 if (init_edk_) { |
| 152 mojo::edk::InitIPCSupport(this, io_thread_->task_runner().get()); | 152 mojo::edk::InitIPCSupport(io_thread_->task_runner().get()); |
| 153 #if defined(OS_MACOSX) | 153 #if defined(OS_MACOSX) |
| 154 mojo::edk::SetMachPortProvider(MachBroker::GetInstance()->port_provider()); | 154 mojo::edk::SetMachPortProvider(MachBroker::GetInstance()->port_provider()); |
| 155 #endif | 155 #endif |
| 156 } | 156 } |
| 157 | 157 |
| 158 std::unique_ptr<ServiceProcessLauncherFactory> | 158 std::unique_ptr<ServiceProcessLauncherFactory> |
| 159 service_process_launcher_factory = | 159 service_process_launcher_factory = |
| 160 base::MakeUnique<ServiceProcessLauncherFactoryImpl>( | 160 base::MakeUnique<ServiceProcessLauncherFactoryImpl>( |
| 161 blocking_pool_.get(), | 161 blocking_pool_.get(), |
| 162 init_params ? init_params->service_process_launcher_delegate | 162 init_params ? init_params->service_process_launcher_delegate |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 // loop shutdown. | 236 // loop shutdown. |
| 237 service_manager_.reset(); | 237 service_manager_.reset(); |
| 238 | 238 |
| 239 DCHECK_EQ(base::ThreadTaskRunnerHandle::Get(), service_manager_runner_); | 239 DCHECK_EQ(base::ThreadTaskRunnerHandle::Get(), service_manager_runner_); |
| 240 | 240 |
| 241 // If we didn't initialize the edk we should not shut it down. | 241 // If we didn't initialize the edk we should not shut it down. |
| 242 if (!init_edk_) | 242 if (!init_edk_) |
| 243 return; | 243 return; |
| 244 | 244 |
| 245 TRACE_EVENT0("service_manager", "Context::Shutdown"); | 245 TRACE_EVENT0("service_manager", "Context::Shutdown"); |
| 246 // Post a task in case OnShutdownComplete is called synchronously. | 246 mojo::edk::ShutdownIPCSupport( |
| 247 base::ThreadTaskRunnerHandle::Get()->PostTask( | 247 base::Bind(IgnoreResult(&base::TaskRunner::PostTask), |
| 248 FROM_HERE, base::Bind(mojo::edk::ShutdownIPCSupport)); | 248 base::ThreadTaskRunnerHandle::Get(), FROM_HERE, |
| 249 base::Bind(&Context::OnShutdownComplete, |
| 250 base::Unretained(this)))); |
| 249 // We'll quit when we get OnShutdownComplete(). | 251 // We'll quit when we get OnShutdownComplete(). |
| 250 base::RunLoop().Run(); | 252 base::RunLoop().Run(); |
| 251 } | 253 } |
| 252 | 254 |
| 253 void Context::OnShutdownComplete() { | 255 void Context::OnShutdownComplete() { |
| 254 DCHECK_EQ(base::ThreadTaskRunnerHandle::Get(), service_manager_runner_); | 256 DCHECK_EQ(base::ThreadTaskRunnerHandle::Get(), service_manager_runner_); |
| 255 base::MessageLoop::current()->QuitWhenIdle(); | 257 base::MessageLoop::current()->QuitWhenIdle(); |
| 256 } | 258 } |
| 257 | 259 |
| 258 void Context::RunCommandLineApplication() { | 260 void Context::RunCommandLineApplication() { |
| 259 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 261 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| 260 if (command_line->HasSwitch(kService)) | 262 if (command_line->HasSwitch(kService)) |
| 261 Run(command_line->GetSwitchValueASCII(kService)); | 263 Run(command_line->GetSwitchValueASCII(kService)); |
| 262 } | 264 } |
| 263 | 265 |
| 264 void Context::Run(const std::string& name) { | 266 void Context::Run(const std::string& name) { |
| 265 service_manager_->SetInstanceQuitCallback(base::Bind(&OnInstanceQuit, name)); | 267 service_manager_->SetInstanceQuitCallback(base::Bind(&OnInstanceQuit, name)); |
| 266 | 268 |
| 267 mojom::InterfaceProviderPtr remote_interfaces; | 269 mojom::InterfaceProviderPtr remote_interfaces; |
| 268 mojom::InterfaceProviderPtr local_interfaces; | 270 mojom::InterfaceProviderPtr local_interfaces; |
| 269 | 271 |
| 270 std::unique_ptr<ConnectParams> params(new ConnectParams); | 272 std::unique_ptr<ConnectParams> params(new ConnectParams); |
| 271 params->set_source(CreateServiceManagerIdentity()); | 273 params->set_source(CreateServiceManagerIdentity()); |
| 272 params->set_target(Identity(name, mojom::kRootUserID)); | 274 params->set_target(Identity(name, mojom::kRootUserID)); |
| 273 params->set_remote_interfaces(mojo::MakeRequest(&remote_interfaces)); | 275 params->set_remote_interfaces(mojo::MakeRequest(&remote_interfaces)); |
| 274 service_manager_->Connect(std::move(params)); | 276 service_manager_->Connect(std::move(params)); |
| 275 } | 277 } |
| 276 | 278 |
| 277 } // namespace service_manager | 279 } // namespace service_manager |
| OLD | NEW |