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

Side by Side Diff: shell/context.cc

Issue 873253003: Resolve URLs passed on the command line relative to the CWD. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Rebase Created 5 years, 10 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 unified diff | Download patch
« no previous file with comments | « shell/context.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "shell/context.h" 5 #include "shell/context.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/base_switches.h" 9 #include "base/base_switches.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 if (command_line->HasSwitch(switches::kURLMappings)) { 130 if (command_line->HasSwitch(switches::kURLMappings)) {
131 const std::string mappings = 131 const std::string mappings =
132 command_line->GetSwitchValueASCII(switches::kURLMappings); 132 command_line->GetSwitchValueASCII(switches::kURLMappings);
133 133
134 base::StringPairs pairs; 134 base::StringPairs pairs;
135 if (!base::SplitStringIntoKeyValuePairs(mappings, '=', ',', &pairs)) 135 if (!base::SplitStringIntoKeyValuePairs(mappings, '=', ',', &pairs))
136 return false; 136 return false;
137 using StringPair = std::pair<std::string, std::string>; 137 using StringPair = std::pair<std::string, std::string>;
138 for (const StringPair& pair : pairs) { 138 for (const StringPair& pair : pairs) {
139 const GURL from(pair.first); 139 const GURL from(pair.first);
140 const GURL to(pair.second); 140 const GURL to = context->ResolveCommandLineURL(pair.second);
141 if (!from.is_valid() || !to.is_valid()) 141 if (!from.is_valid() || !to.is_valid())
142 return false; 142 return false;
143 resolver->AddCustomMapping(from, to); 143 resolver->AddCustomMapping(from, to);
144 } 144 }
145 } 145 }
146 return true; 146 return true;
147 } 147 }
148 148
149 } // namespace 149 } // namespace
150 150
151 Context::Context() : application_manager_(this) { 151 Context::Context() : application_manager_(this) {
152 DCHECK(!base::MessageLoop::current()); 152 DCHECK(!base::MessageLoop::current());
153 153
154 // By default assume that the local apps reside alongside the shell. 154 // By default assume that the local apps reside alongside the shell.
155 // TODO(ncbray): really, this should be passed in rather than defaulting. 155 // TODO(ncbray): really, this should be passed in rather than defaulting.
156 // This default makes sense for desktop but not Android. 156 // This default makes sense for desktop but not Android.
157 base::FilePath shell_dir; 157 base::FilePath shell_dir;
158 PathService::Get(base::DIR_MODULE, &shell_dir); 158 PathService::Get(base::DIR_MODULE, &shell_dir);
159 SetShellFileRoot(shell_dir); 159 SetShellFileRoot(shell_dir);
160
161 base::FilePath cwd;
162 PathService::Get(base::DIR_CURRENT, &cwd);
163 SetCommandLineCWD(cwd);
160 } 164 }
161 165
162 Context::~Context() { 166 Context::~Context() {
163 DCHECK(!base::MessageLoop::current()); 167 DCHECK(!base::MessageLoop::current());
164 } 168 }
165 169
166 void Context::EnsureEmbedderIsInitialized() { 170 void Context::EnsureEmbedderIsInitialized() {
167 setup.Get(); 171 setup.Get();
168 } 172 }
169 173
170 void Context::SetShellFileRoot(const base::FilePath& path) { 174 void Context::SetShellFileRoot(const base::FilePath& path) {
171 shell_file_root_ = AddTrailingSlashIfNeeded(FilePathToFileURL(path)); 175 shell_file_root_ = AddTrailingSlashIfNeeded(FilePathToFileURL(path));
172 } 176 }
173 177
174 GURL Context::ResolveShellFileURL(const std::string& path) { 178 GURL Context::ResolveShellFileURL(const std::string& path) {
175 return shell_file_root_.Resolve(path); 179 return shell_file_root_.Resolve(path);
176 } 180 }
177 181
182 void Context::SetCommandLineCWD(const base::FilePath& path) {
183 command_line_cwd_ = AddTrailingSlashIfNeeded(FilePathToFileURL(path));
184 }
185
186 GURL Context::ResolveCommandLineURL(const std::string& path) {
187 return command_line_cwd_.Resolve(path);
188 }
189
178 bool Context::Init() { 190 bool Context::Init() {
179 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 191 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
180 192
181 if (command_line->HasSwitch(switches::kWaitForDebugger)) 193 if (command_line->HasSwitch(switches::kWaitForDebugger))
182 base::debug::WaitForDebugger(60, true); 194 base::debug::WaitForDebugger(60, true);
183 195
184 EnsureEmbedderIsInitialized(); 196 EnsureEmbedderIsInitialized();
185 task_runners_.reset( 197 task_runners_.reset(
186 new TaskRunners(base::MessageLoop::current()->message_loop_proxy())); 198 new TaskRunners(base::MessageLoop::current()->message_loop_proxy()));
187 199
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 ScopedMessagePipeHandle Context::ConnectToServiceByName( 268 ScopedMessagePipeHandle Context::ConnectToServiceByName(
257 const GURL& application_url, 269 const GURL& application_url,
258 const std::string& service_name) { 270 const std::string& service_name) {
259 app_urls_.insert(application_url); 271 app_urls_.insert(application_url);
260 return application_manager_.ConnectToServiceByName(application_url, 272 return application_manager_.ConnectToServiceByName(application_url,
261 service_name).Pass(); 273 service_name).Pass();
262 } 274 }
263 275
264 } // namespace shell 276 } // namespace shell
265 } // namespace mojo 277 } // namespace mojo
OLDNEW
« no previous file with comments | « shell/context.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698