OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/application_manager/application_manager.h" | 5 #include "mojo/application_manager/application_manager.h" |
6 | 6 |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 ScopedMessagePipeHandle* shell_handle) { | 213 ScopedMessagePipeHandle* shell_handle) { |
214 ShellImpl* shell_impl = NULL; | 214 ShellImpl* shell_impl = NULL; |
215 URLToShellImplMap::iterator iter = url_to_shell_impl_.find(url); | 215 URLToShellImplMap::iterator iter = url_to_shell_impl_.find(url); |
216 if (iter != url_to_shell_impl_.end()) { | 216 if (iter != url_to_shell_impl_.end()) { |
217 // This can happen because services are loaded asynchronously. So if we get | 217 // This can happen because services are loaded asynchronously. So if we get |
218 // two requests for the same service close to each other, we might get here | 218 // two requests for the same service close to each other, we might get here |
219 // and find that we already have it. | 219 // and find that we already have it. |
220 shell_impl = iter->second; | 220 shell_impl = iter->second; |
221 } else { | 221 } else { |
222 MessagePipe pipe; | 222 MessagePipe pipe; |
| 223 URLToArgsMap::const_iterator args_it = url_to_args_.find(url); |
| 224 Array<String> args; |
| 225 if (args_it != url_to_args_.end()) |
| 226 args = Array<String>::From(args_it->second); |
223 shell_impl = WeakBindToPipe(new ShellImpl(this, url), pipe.handle1.Pass()); | 227 shell_impl = WeakBindToPipe(new ShellImpl(this, url), pipe.handle1.Pass()); |
224 url_to_shell_impl_[url] = shell_impl; | 228 url_to_shell_impl_[url] = shell_impl; |
225 *shell_handle = pipe.handle0.Pass(); | 229 *shell_handle = pipe.handle0.Pass(); |
| 230 shell_impl->client()->Initialize(args.Pass()); |
226 } | 231 } |
227 | 232 |
228 ConnectToClient(shell_impl, url, requestor_url, service_provider.Pass()); | 233 ConnectToClient(shell_impl, url, requestor_url, service_provider.Pass()); |
229 } | 234 } |
230 | 235 |
231 void ApplicationManager::LoadWithContentHandler( | 236 void ApplicationManager::LoadWithContentHandler( |
232 const GURL& content_url, | 237 const GURL& content_url, |
233 const GURL& requestor_url, | 238 const GURL& requestor_url, |
234 const GURL& content_handler_url, | 239 const GURL& content_handler_url, |
235 URLResponsePtr url_response, | 240 URLResponsePtr url_response, |
(...skipping 24 matching lines...) Expand all Loading... |
260 | 265 |
261 void ApplicationManager::SetLoaderForScheme( | 266 void ApplicationManager::SetLoaderForScheme( |
262 scoped_ptr<ApplicationLoader> loader, | 267 scoped_ptr<ApplicationLoader> loader, |
263 const std::string& scheme) { | 268 const std::string& scheme) { |
264 SchemeToLoaderMap::iterator it = scheme_to_loader_.find(scheme); | 269 SchemeToLoaderMap::iterator it = scheme_to_loader_.find(scheme); |
265 if (it != scheme_to_loader_.end()) | 270 if (it != scheme_to_loader_.end()) |
266 delete it->second; | 271 delete it->second; |
267 scheme_to_loader_[scheme] = loader.release(); | 272 scheme_to_loader_[scheme] = loader.release(); |
268 } | 273 } |
269 | 274 |
| 275 void ApplicationManager::SetArgsForURL(const std::vector<std::string>& args, |
| 276 const GURL& url) { |
| 277 url_to_args_[url] = args; |
| 278 } |
| 279 |
270 void ApplicationManager::SetInterceptor(Interceptor* interceptor) { | 280 void ApplicationManager::SetInterceptor(Interceptor* interceptor) { |
271 interceptor_ = interceptor; | 281 interceptor_ = interceptor; |
272 } | 282 } |
273 | 283 |
274 ApplicationLoader* ApplicationManager::GetLoaderForURL(const GURL& url) { | 284 ApplicationLoader* ApplicationManager::GetLoaderForURL(const GURL& url) { |
275 URLToLoaderMap::const_iterator url_it = url_to_loader_.find(url); | 285 URLToLoaderMap::const_iterator url_it = url_to_loader_.find(url); |
276 if (url_it != url_to_loader_.end()) | 286 if (url_it != url_to_loader_.end()) |
277 return url_it->second; | 287 return url_it->second; |
278 SchemeToLoaderMap::const_iterator scheme_it = | 288 SchemeToLoaderMap::const_iterator scheme_it = |
279 scheme_to_loader_.find(url.scheme()); | 289 scheme_to_loader_.find(url.scheme()); |
(...skipping 22 matching lines...) Expand all Loading... |
302 StubServiceProvider* stub_sp = new StubServiceProvider; | 312 StubServiceProvider* stub_sp = new StubServiceProvider; |
303 ServiceProviderPtr spp; | 313 ServiceProviderPtr spp; |
304 BindToProxy(stub_sp, &spp); | 314 BindToProxy(stub_sp, &spp); |
305 ConnectToApplication(application_url, GURL(), spp.Pass()); | 315 ConnectToApplication(application_url, GURL(), spp.Pass()); |
306 MessagePipe pipe; | 316 MessagePipe pipe; |
307 stub_sp->GetRemoteServiceProvider()->ConnectToService(interface_name, | 317 stub_sp->GetRemoteServiceProvider()->ConnectToService(interface_name, |
308 pipe.handle1.Pass()); | 318 pipe.handle1.Pass()); |
309 return pipe.handle0.Pass(); | 319 return pipe.handle0.Pass(); |
310 } | 320 } |
311 } // namespace mojo | 321 } // namespace mojo |
OLD | NEW |