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

Unified Diff: shell/context.cc

Issue 868963002: Simplify resolution of mojo: URLs. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | shell/mojo_url_resolver.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: shell/context.cc
diff --git a/shell/context.cc b/shell/context.cc
index af889d47d5e0a275099ee62b57557fd20e2dacd5..08fbe006f5c519c9ba8933137ff91c052c8f0233 100644
--- a/shell/context.cc
+++ b/shell/context.cc
@@ -14,6 +14,7 @@
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/scoped_vector.h"
+#include "base/path_service.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "build/build_config.h"
@@ -28,6 +29,7 @@
#include "shell/application_manager/application_manager.h"
#include "shell/dynamic_application_loader.h"
#include "shell/external_application_listener.h"
+#include "shell/filename_util.h"
#include "shell/in_process_dynamic_service_runner.h"
#include "shell/out_of_process_dynamic_service_runner.h"
#include "shell/switches.h"
@@ -37,12 +39,6 @@ namespace mojo {
namespace shell {
namespace {
-// These mojo: URLs are loaded directly from the local filesystem. They
-// correspond to shared libraries bundled alongside the mojo_shell.
-const char* kLocalMojoURLs[] = {
- "mojo:network_service",
-};
-
// Used to ensure we only init once.
class Setup {
public:
@@ -106,18 +102,58 @@ void InitContentHandlers(DynamicApplicationLoader* loader,
}
}
-bool ConfigureURLMappings(const std::string& mappings,
- mojo::shell::MojoURLResolver* resolver) {
- base::StringPairs pairs;
- if (!base::SplitStringIntoKeyValuePairs(mappings, '=', ',', &pairs))
+GURL AddTrailingSlashIfNeeded(const GURL& url) {
+ if (!url.has_path() || *url.path().rbegin() == '/')
+ return url;
+
+ std::string path(url.path() + '/');
+ GURL::Replacements replacements;
+ replacements.SetPathStr(path);
+ return url.ReplaceComponents(replacements);
+}
+
+bool ConfigureURLMappings(base::CommandLine *command_line,
+ MojoURLResolver *resolver) {
abarth-chromium 2015/01/23 02:23:15 s/base::CommandLine */base::CommandLine* / Same fo
abarth-chromium 2015/01/23 02:23:15 s/base::CommandLine */base::CommandLine* / Same fo
Nick Bray (chromium) 2015/01/24 01:09:04 Done.
Nick Bray (chromium) 2015/01/24 01:09:04 Done.
+ // By default assume that the local apps reside alongside the shell.
+ base::FilePath shell_dir;
+ PathService::Get(base::DIR_MODULE, &shell_dir);
+ GURL shell_dir_url = AddTrailingSlashIfNeeded(FilePathToFileURL(shell_dir));
Aaron Boodman 2015/01/23 02:34:06 Is there really ambiguity about whether FilePathTo
Nick Bray (chromium) 2015/01/24 01:09:04 I believe it never returns a trailing slash. Ther
+
+ // Configure the resolution of unknown mojo: URLs.
+ GURL base_url;
+ if (command_line->HasSwitch(switches::kOrigin)) {
+ base_url = GURL(command_line->GetSwitchValueASCII(switches::kOrigin));
+ base_url = AddTrailingSlashIfNeeded(base_url);
Aaron Boodman 2015/01/23 02:34:06 Why add the trailing slash in this case? Seems lik
Nick Bray (chromium) 2015/01/24 01:09:04 Ther difference is subtle: GURL("http://foo/bar").
Aaron Boodman 2015/01/27 00:37:13 In that case, I think that we should ensure the ca
Nick Bray (chromium) 2015/01/27 01:44:35 Requiring no slash will interact badly with tab co
Aaron Boodman 2015/01/27 07:29:54 OK, I was initially going to suggest requiring a s
+ } else {
+ base_url = shell_dir_url;
+ }
+ if (!base_url.is_valid()) {
Aaron Boodman 2015/01/23 02:34:06 no braces.
Nick Bray (chromium) 2015/01/24 01:09:03 Sad panda about this style - goto fail, and all th
return false;
- using StringPair = std::pair<std::string, std::string>;
- for (const StringPair& pair : pairs) {
- const GURL from(pair.first);
- const GURL to(pair.second);
- if (!from.is_valid() || !to.is_valid())
+ }
+ resolver->SetBaseURL(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->AddCustomMapping(GURL("mojo:network_service"),
+ shell_dir_url.Resolve("network_service.mojo"));
+
+ // Command line URL mapping.
+ 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;
- resolver->AddCustomMapping(from, to);
+ using StringPair = std::pair<std::string, std::string>;
+ for (const StringPair& pair : pairs) {
+ const GURL from(pair.first);
+ const GURL to(pair.second);
+ if (!from.is_valid() || !to.is_valid())
+ return false;
+ resolver->AddCustomMapping(from, to);
+ }
}
return true;
}
@@ -146,8 +182,9 @@ bool Context::Init() {
task_runners_.reset(
new TaskRunners(base::MessageLoop::current()->message_loop_proxy()));
- for (size_t i = 0; i < arraysize(kLocalMojoURLs); ++i)
- mojo_url_resolver_.AddLocalFileMapping(GURL(kLocalMojoURLs[i]));
+ if (!ConfigureURLMappings(command_line, &mojo_url_resolver_)) {
Aaron Boodman 2015/01/23 02:34:06 This file uses the no-braces-for-one-line-if style
Nick Bray (chromium) 2015/01/24 01:09:04 Done.
+ return false;
+ }
if (command_line->HasSwitch(switches::kEnableExternalApplications)) {
listener_.reset(new ExternalApplicationListener(
@@ -163,16 +200,6 @@ bool Context::Init() {
base::Bind(&ApplicationManager::RegisterExternalApplication,
base::Unretained(&application_manager_)));
}
- if (command_line->HasSwitch(switches::kOrigin)) {
- mojo_url_resolver()->SetBaseURL(
- GURL(command_line->GetSwitchValueASCII(switches::kOrigin)));
- }
- if (command_line->HasSwitch(switches::kURLMappings) &&
- !ConfigureURLMappings(
- command_line->GetSwitchValueASCII(switches::kURLMappings),
- mojo_url_resolver())) {
- return false;
- }
scoped_ptr<DynamicServiceRunnerFactory> runner_factory;
if (command_line->HasSwitch(switches::kEnableMultiprocess))
« no previous file with comments | « no previous file | shell/mojo_url_resolver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698