Index: shell/context.cc |
diff --git a/shell/context.cc b/shell/context.cc |
index b4ea0f2f199d80db51de1589a893e68dcf086a53..8b3c076def87dfe2876760874354da984462a7fb 100644 |
--- a/shell/context.cc |
+++ b/shell/context.cc |
@@ -55,8 +55,61 @@ class Setup { |
DISALLOW_COPY_AND_ASSIGN(Setup); |
}; |
+bool ConfigureURLMappings(const base::CommandLine& command_line, |
+ Context* context) { |
+ URLResolver* resolver = context->url_resolver(); |
+ |
+ // Configure the resolution of unknown mojo: URLs. |
+ GURL base_url; |
+ if (command_line.HasSwitch(switches::kOrigin)) |
+ base_url = GURL(command_line.GetSwitchValueASCII(switches::kOrigin)); |
+ else |
+ // Use the shell's file root if the base was not specified. |
+ base_url = context->ResolveShellFileURL(""); |
+ |
+ if (!base_url.is_valid()) |
+ return false; |
+ |
+ resolver->SetMojoBaseURL(base_url); |
+ |
+ // The network service must be loaded from the filesystem. |
+ // This mapping is done before the command line URL mapping are processed, so |
+ // that it can be overridden. |
+ resolver->AddURLMapping( |
+ GURL("mojo:network_service"), |
+ context->ResolveShellFileURL("file:network_service.mojo")); |
+ |
+ // Temporary mapping to avoid workflow breakages after app rename. |
+ resolver->AddURLMapping(GURL("mojo:sample_app"), GURL("mojo:spinning_cube")); |
+ |
+ // Command line URL mapping. |
+ std::vector<URLResolver::OriginMapping> origin_mappings = |
+ URLResolver::GetOriginMappings(command_line.argv()); |
+ for (const auto& origin_mapping : origin_mappings) |
+ resolver->AddOriginMapping(GURL(origin_mapping.origin), |
+ GURL(origin_mapping.base_url)); |
+ |
+ if (command_line.HasSwitch(switches::kURLMappings)) { |
+ const std::string mappings = |
+ command_line.GetSwitchValueASCII(switches::kURLMappings); |
+ |
+ base::StringPairs pairs; |
+ if (!base::SplitStringIntoKeyValuePairs(mappings, '=', ',', &pairs)) |
+ return false; |
+ using StringPair = std::pair<std::string, std::string>; |
+ for (const StringPair& pair : pairs) { |
+ const GURL from(pair.first); |
+ const GURL to = context->ResolveCommandLineURL(pair.second); |
+ if (!from.is_valid() || !to.is_valid()) |
+ return false; |
+ resolver->AddURLMapping(from, to); |
+ } |
+ } |
+ return true; |
+} |
+ |
void InitContentHandlers(ApplicationManager* manager, |
- base::CommandLine* command_line) { |
+ const base::CommandLine& command_line) { |
// Default content handlers. |
manager->RegisterContentHandler("application/pdf", GURL("mojo:pdf_viewer")); |
manager->RegisterContentHandler("image/png", GURL("mojo:png_viewer")); |
@@ -64,7 +117,7 @@ void InitContentHandlers(ApplicationManager* manager, |
// Command-line-specified content handlers. |
std::string handlers_spec = |
- command_line->GetSwitchValueASCII(switches::kContentHandlers); |
+ command_line.GetSwitchValueASCII(switches::kContentHandlers); |
if (handlers_spec.empty()) |
return; |
@@ -102,56 +155,23 @@ void InitContentHandlers(ApplicationManager* manager, |
} |
} |
-bool ConfigureURLMappings(base::CommandLine* command_line, Context* context) { |
- URLResolver* resolver = context->url_resolver(); |
- |
- // Configure the resolution of unknown mojo: URLs. |
- GURL base_url; |
- if (command_line->HasSwitch(switches::kOrigin)) |
- base_url = GURL(command_line->GetSwitchValueASCII(switches::kOrigin)); |
- else |
- // Use the shell's file root if the base was not specified. |
- base_url = context->ResolveShellFileURL(""); |
- |
- if (!base_url.is_valid()) |
- return false; |
- |
- resolver->SetMojoBaseURL(base_url); |
- |
- // The network service must be loaded from the filesystem. |
- // This mapping is done before the command line URL mapping are processed, so |
- // that it can be overridden. |
- resolver->AddURLMapping( |
- GURL("mojo:network_service"), |
- context->ResolveShellFileURL("file:network_service.mojo")); |
- |
- // Temporary mapping to avoid workflow breakages after app rename. |
- resolver->AddURLMapping(GURL("mojo:sample_app"), GURL("mojo:spinning_cube")); |
- |
- // Command line URL mapping. |
- std::vector<URLResolver::OriginMapping> origin_mappings = |
- URLResolver::GetOriginMappings(command_line->argv()); |
- for (const auto& origin_mapping : origin_mappings) |
- resolver->AddOriginMapping(GURL(origin_mapping.origin), |
- GURL(origin_mapping.base_url)); |
- |
- if (command_line->HasSwitch(switches::kURLMappings)) { |
- const std::string mappings = |
- command_line->GetSwitchValueASCII(switches::kURLMappings); |
- |
- base::StringPairs pairs; |
- if (!base::SplitStringIntoKeyValuePairs(mappings, '=', ',', &pairs)) |
- return false; |
- using StringPair = std::pair<std::string, std::string>; |
- for (const StringPair& pair : pairs) { |
- const GURL from(pair.first); |
- const GURL to = context->ResolveCommandLineURL(pair.second); |
- if (!from.is_valid() || !to.is_valid()) |
- return false; |
- resolver->AddURLMapping(from, to); |
+void InitNativeOptions(ApplicationManager* manager, |
+ const base::CommandLine& command_line) { |
+ std::vector<std::string> force_in_process_url_list; |
+ base::SplitString(command_line.GetSwitchValueASCII(switches::kForceInProcess), |
+ ',', &force_in_process_url_list); |
+ for (const auto& force_in_process_url : force_in_process_url_list) { |
+ GURL gurl(force_in_process_url); |
+ if (!gurl.is_valid()) { |
+ LOG(ERROR) << "Invalid value for switch " << switches::kForceInProcess |
+ << ": '" << force_in_process_url << "'is not a valid URL."; |
+ return; |
} |
+ |
+ NativeRunnerFactory::Options options; |
+ options.force_in_process = true; |
+ manager->SetNativeOptionsForURL(options, gurl); |
} |
- return true; |
} |
class TracingServiceProvider : public ServiceProvider { |
@@ -218,9 +238,10 @@ GURL Context::ResolveCommandLineURL(const std::string& path) { |
} |
bool Context::Init() { |
- base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
+ const base::CommandLine& command_line = |
+ *base::CommandLine::ForCurrentProcess(); |
- if (command_line->HasSwitch(switches::kWaitForDebugger)) |
+ if (command_line.HasSwitch(switches::kWaitForDebugger)) |
base::debug::WaitForDebugger(60, true); |
EnsureEmbedderIsInitialized(); |
@@ -239,12 +260,12 @@ bool Context::Init() { |
embedder::ProcessType::NONE, task_runners_->shell_runner(), this, |
task_runners_->io_runner(), embedder::ScopedPlatformHandle()); |
- if (command_line->HasSwitch(switches::kEnableExternalApplications)) { |
+ if (command_line.HasSwitch(switches::kEnableExternalApplications)) { |
listener_.reset(new ExternalApplicationListener( |
task_runners_->shell_runner(), task_runners_->io_runner())); |
base::FilePath socket_path = |
- command_line->GetSwitchValuePath(switches::kEnableExternalApplications); |
+ command_line.GetSwitchValuePath(switches::kEnableExternalApplications); |
if (socket_path.empty()) |
socket_path = ExternalApplicationListener::ConstructDefaultSocketPath(); |
@@ -255,7 +276,7 @@ bool Context::Init() { |
} |
scoped_ptr<NativeRunnerFactory> runner_factory; |
- if (command_line->HasSwitch(switches::kEnableMultiprocess)) |
+ if (command_line.HasSwitch(switches::kEnableMultiprocess)) |
runner_factory.reset(new OutOfProcessDynamicServiceRunnerFactory(this)); |
else |
runner_factory.reset(new InProcessDynamicServiceRunnerFactory(this)); |
@@ -266,6 +287,7 @@ bool Context::Init() { |
switches::kDisableCache)); |
InitContentHandlers(&application_manager_, command_line); |
+ InitNativeOptions(&application_manager_, command_line); |
ServiceProviderPtr tracing_service_provider_ptr; |
new TracingServiceProvider(GetProxy(&tracing_service_provider_ptr)); |