| 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 "mojo/shell/standalone/context.h" | 5 #include "mojo/shell/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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 LOG(ERROR) << "Invalid value for switch " << switches::kContentHandlers | 108 LOG(ERROR) << "Invalid value for switch " << switches::kContentHandlers |
| 109 << ": '" << parts[i + 1] << "' is not a valid URL."; | 109 << ": '" << parts[i + 1] << "' is not a valid URL."; |
| 110 return; | 110 return; |
| 111 } | 111 } |
| 112 // TODO(eseidel): We should also validate that the mimetype is valid | 112 // TODO(eseidel): We should also validate that the mimetype is valid |
| 113 // net/base/mime_util.h could do this, but we don't want to depend on net. | 113 // net/base/mime_util.h could do this, but we don't want to depend on net. |
| 114 manager->RegisterContentHandler(parts[i], url); | 114 manager->RegisterContentHandler(parts[i], url); |
| 115 } | 115 } |
| 116 } | 116 } |
| 117 | 117 |
| 118 class TracingServiceProvider : public ServiceProvider { | 118 class TracingInterfaceProvider : public InterfaceProvider { |
| 119 public: | 119 public: |
| 120 TracingServiceProvider(Tracer* tracer, | 120 TracingInterfaceProvider(Tracer* tracer, |
| 121 InterfaceRequest<ServiceProvider> request) | 121 InterfaceRequest<InterfaceProvider> request) |
| 122 : tracer_(tracer), binding_(this, std::move(request)) {} | 122 : tracer_(tracer), binding_(this, std::move(request)) {} |
| 123 ~TracingServiceProvider() override {} | 123 ~TracingInterfaceProvider() override {} |
| 124 | 124 |
| 125 void ConnectToService(const mojo::String& service_name, | 125 void GetInterface(const mojo::String& interface_name, |
| 126 ScopedMessagePipeHandle client_handle) override { | 126 ScopedMessagePipeHandle client_handle) override { |
| 127 if (tracer_ && service_name == tracing::TraceProvider::Name_) { | 127 if (tracer_ && interface_name == tracing::TraceProvider::Name_) { |
| 128 tracer_->ConnectToProvider( | 128 tracer_->ConnectToProvider( |
| 129 MakeRequest<tracing::TraceProvider>(std::move(client_handle))); | 129 MakeRequest<tracing::TraceProvider>(std::move(client_handle))); |
| 130 } | 130 } |
| 131 } | 131 } |
| 132 | 132 |
| 133 private: | 133 private: |
| 134 Tracer* tracer_; | 134 Tracer* tracer_; |
| 135 StrongBinding<ServiceProvider> binding_; | 135 StrongBinding<InterfaceProvider> binding_; |
| 136 | 136 |
| 137 DISALLOW_COPY_AND_ASSIGN(TracingServiceProvider); | 137 DISALLOW_COPY_AND_ASSIGN(TracingInterfaceProvider); |
| 138 }; | 138 }; |
| 139 | 139 |
| 140 } // namespace | 140 } // namespace |
| 141 | 141 |
| 142 Context::Context() | 142 Context::Context() |
| 143 : package_manager_(nullptr), main_entry_time_(base::Time::Now()) {} | 143 : package_manager_(nullptr), main_entry_time_(base::Time::Now()) {} |
| 144 | 144 |
| 145 Context::~Context() { | 145 Context::~Context() { |
| 146 DCHECK(!base::MessageLoop::current()); | 146 DCHECK(!base::MessageLoop::current()); |
| 147 } | 147 } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 runner_factory.reset( | 190 runner_factory.reset( |
| 191 new InProcessNativeRunnerFactory(task_runners_->blocking_pool())); | 191 new InProcessNativeRunnerFactory(task_runners_->blocking_pool())); |
| 192 } else { | 192 } else { |
| 193 runner_factory.reset( | 193 runner_factory.reset( |
| 194 new OutOfProcessNativeRunnerFactory(task_runners_->blocking_pool())); | 194 new OutOfProcessNativeRunnerFactory(task_runners_->blocking_pool())); |
| 195 } | 195 } |
| 196 application_manager_.reset(new ApplicationManager( | 196 application_manager_.reset(new ApplicationManager( |
| 197 make_scoped_ptr(package_manager_), std::move(runner_factory), | 197 make_scoped_ptr(package_manager_), std::move(runner_factory), |
| 198 task_runners_->blocking_pool())); | 198 task_runners_->blocking_pool())); |
| 199 | 199 |
| 200 ServiceProviderPtr tracing_services; | 200 InterfaceProviderPtr tracing_remote_interfaces; |
| 201 ServiceProviderPtr tracing_exposed_services; | 201 InterfaceProviderPtr tracing_local_interfaces; |
| 202 new TracingServiceProvider(&tracer_, GetProxy(&tracing_exposed_services)); | 202 new TracingInterfaceProvider(&tracer_, GetProxy(&tracing_local_interfaces)); |
| 203 | 203 |
| 204 scoped_ptr<ConnectToApplicationParams> params(new ConnectToApplicationParams); | 204 scoped_ptr<ConnectToApplicationParams> params(new ConnectToApplicationParams); |
| 205 params->set_source(Identity(GURL("mojo:shell"), std::string(), | 205 params->set_source(Identity(GURL("mojo:shell"), std::string(), |
| 206 GetPermissiveCapabilityFilter())); | 206 GetPermissiveCapabilityFilter())); |
| 207 params->SetTarget(Identity(GURL("mojo:tracing"), std::string(), | 207 params->SetTarget(Identity(GURL("mojo:tracing"), std::string(), |
| 208 GetPermissiveCapabilityFilter())); | 208 GetPermissiveCapabilityFilter())); |
| 209 params->set_services(GetProxy(&tracing_services)); | 209 params->set_remote_interfaces(GetProxy(&tracing_remote_interfaces)); |
| 210 params->set_exposed_services(std::move(tracing_exposed_services)); | 210 params->set_local_interfaces(std::move(tracing_local_interfaces)); |
| 211 application_manager_->ConnectToApplication(std::move(params)); | 211 application_manager_->ConnectToApplication(std::move(params)); |
| 212 | 212 |
| 213 if (command_line.HasSwitch(tracing::kTraceStartup)) { | 213 if (command_line.HasSwitch(tracing::kTraceStartup)) { |
| 214 tracing::TraceCollectorPtr coordinator; | 214 tracing::TraceCollectorPtr coordinator; |
| 215 auto coordinator_request = GetProxy(&coordinator); | 215 auto coordinator_request = GetProxy(&coordinator); |
| 216 tracing_services->ConnectToService(tracing::TraceCollector::Name_, | 216 tracing_remote_interfaces->GetInterface( |
| 217 coordinator_request.PassMessagePipe()); | 217 tracing::TraceCollector::Name_, coordinator_request.PassMessagePipe()); |
| 218 tracer_.StartCollectingFromTracingService(std::move(coordinator)); | 218 tracer_.StartCollectingFromTracingService(std::move(coordinator)); |
| 219 } | 219 } |
| 220 | 220 |
| 221 // Record the shell startup metrics used for performance testing. | 221 // Record the shell startup metrics used for performance testing. |
| 222 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 222 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 223 tracing::kEnableStatsCollectionBindings)) { | 223 tracing::kEnableStatsCollectionBindings)) { |
| 224 tracing::StartupPerformanceDataCollectorPtr collector; | 224 tracing::StartupPerformanceDataCollectorPtr collector; |
| 225 tracing_services->ConnectToService( | 225 tracing_remote_interfaces->GetInterface( |
| 226 tracing::StartupPerformanceDataCollector::Name_, | 226 tracing::StartupPerformanceDataCollector::Name_, |
| 227 GetProxy(&collector).PassMessagePipe()); | 227 GetProxy(&collector).PassMessagePipe()); |
| 228 #if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) | 228 #if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) |
| 229 // CurrentProcessInfo::CreationTime is only defined on some platforms. | 229 // CurrentProcessInfo::CreationTime is only defined on some platforms. |
| 230 const base::Time creation_time = base::CurrentProcessInfo::CreationTime(); | 230 const base::Time creation_time = base::CurrentProcessInfo::CreationTime(); |
| 231 collector->SetShellProcessCreationTime(creation_time.ToInternalValue()); | 231 collector->SetShellProcessCreationTime(creation_time.ToInternalValue()); |
| 232 #endif | 232 #endif |
| 233 collector->SetShellMainEntryPointTime(main_entry_time_.ToInternalValue()); | 233 collector->SetShellMainEntryPointTime(main_entry_time_.ToInternalValue()); |
| 234 } | 234 } |
| 235 } | 235 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 251 } | 251 } |
| 252 | 252 |
| 253 void Context::OnShutdownComplete() { | 253 void Context::OnShutdownComplete() { |
| 254 DCHECK_EQ(base::MessageLoop::current()->task_runner(), | 254 DCHECK_EQ(base::MessageLoop::current()->task_runner(), |
| 255 task_runners_->shell_runner()); | 255 task_runners_->shell_runner()); |
| 256 base::MessageLoop::current()->QuitWhenIdle(); | 256 base::MessageLoop::current()->QuitWhenIdle(); |
| 257 } | 257 } |
| 258 | 258 |
| 259 void Context::Run(const GURL& url) { | 259 void Context::Run(const GURL& url) { |
| 260 DCHECK(app_complete_callback_.is_null()); | 260 DCHECK(app_complete_callback_.is_null()); |
| 261 ServiceProviderPtr services; | 261 InterfaceProviderPtr remote_interfaces; |
| 262 ServiceProviderPtr exposed_services; | 262 InterfaceProviderPtr local_interfaces; |
| 263 | 263 |
| 264 app_urls_.insert(url); | 264 app_urls_.insert(url); |
| 265 | 265 |
| 266 scoped_ptr<ConnectToApplicationParams> params(new ConnectToApplicationParams); | 266 scoped_ptr<ConnectToApplicationParams> params(new ConnectToApplicationParams); |
| 267 params->SetTarget( | 267 params->SetTarget( |
| 268 Identity(url, std::string(), GetPermissiveCapabilityFilter())); | 268 Identity(url, std::string(), GetPermissiveCapabilityFilter())); |
| 269 params->set_services(GetProxy(&services)); | 269 params->set_remote_interfaces(GetProxy(&remote_interfaces)); |
| 270 params->set_exposed_services(std::move(exposed_services)); | 270 params->set_local_interfaces(std::move(local_interfaces)); |
| 271 params->set_on_application_end( | 271 params->set_on_application_end( |
| 272 base::Bind(&Context::OnApplicationEnd, base::Unretained(this), url)); | 272 base::Bind(&Context::OnApplicationEnd, base::Unretained(this), url)); |
| 273 application_manager_->ConnectToApplication(std::move(params)); | 273 application_manager_->ConnectToApplication(std::move(params)); |
| 274 } | 274 } |
| 275 | 275 |
| 276 void Context::RunCommandLineApplication(const base::Closure& callback) { | 276 void Context::RunCommandLineApplication(const base::Closure& callback) { |
| 277 DCHECK(app_urls_.empty()); | 277 DCHECK(app_urls_.empty()); |
| 278 DCHECK(app_complete_callback_.is_null()); | 278 DCHECK(app_complete_callback_.is_null()); |
| 279 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 279 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| 280 base::CommandLine::StringVector args = command_line->GetArgs(); | 280 base::CommandLine::StringVector args = command_line->GetArgs(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 298 base::MessageLoop::current()->QuitWhenIdle(); | 298 base::MessageLoop::current()->QuitWhenIdle(); |
| 299 } else { | 299 } else { |
| 300 app_complete_callback_.Run(); | 300 app_complete_callback_.Run(); |
| 301 } | 301 } |
| 302 } | 302 } |
| 303 } | 303 } |
| 304 } | 304 } |
| 305 | 305 |
| 306 } // namespace shell | 306 } // namespace shell |
| 307 } // namespace mojo | 307 } // namespace mojo |
| OLD | NEW |