| Index: mojo/shell/application_manager.cc
|
| diff --git a/mojo/shell/application_manager.cc b/mojo/shell/application_manager.cc
|
| index c9ac34215464a976ce86f0a932721a3208807878..3994b15d7eee0a8340f19e62a2702f7b2ad2ecae 100644
|
| --- a/mojo/shell/application_manager.cc
|
| +++ b/mojo/shell/application_manager.cc
|
| @@ -41,8 +41,10 @@ class ApplicationManager::ContentHandlerConnection : public ErrorHandler {
|
| content_handler_url_(content_handler_url),
|
| content_handler_qualifier_(qualifier) {
|
| ServiceProviderPtr services;
|
| + mojo::URLRequestPtr request(mojo::URLRequest::New());
|
| + request->url = mojo::String::From(content_handler_url.spec());
|
| manager->ConnectToApplicationInternal(
|
| - content_handler_url, qualifier, requestor_url, GetProxy(&services),
|
| + request.Pass(), qualifier, requestor_url, GetProxy(&services),
|
| nullptr, base::Closure());
|
| MessagePipe pipe;
|
| content_handler_.Bind(
|
| @@ -101,32 +103,33 @@ void ApplicationManager::TerminateShellConnections() {
|
| }
|
|
|
| void ApplicationManager::ConnectToApplication(
|
| - const GURL& requested_url,
|
| + mojo::URLRequestPtr requested_url,
|
| const GURL& requestor_url,
|
| InterfaceRequest<ServiceProvider> services,
|
| ServiceProviderPtr exposed_services,
|
| const base::Closure& on_application_end) {
|
| ConnectToApplicationInternal(
|
| - requested_url, std::string(), requestor_url, services.Pass(),
|
| + requested_url.Pass(), std::string(), requestor_url, services.Pass(),
|
| exposed_services.Pass(), on_application_end);
|
| }
|
|
|
| void ApplicationManager::ConnectToApplicationInternal(
|
| - const GURL& requested_url,
|
| + mojo::URLRequestPtr requested_url,
|
| const std::string& qualifier,
|
| const GURL& requestor_url,
|
| InterfaceRequest<ServiceProvider> services,
|
| ServiceProviderPtr exposed_services,
|
| const base::Closure& on_application_end) {
|
| + GURL requested_gurl(requested_url->url.To<std::string>());
|
| TRACE_EVENT_INSTANT1(
|
| "mojo_shell", "ApplicationManager::ConnectToApplication",
|
| - TRACE_EVENT_SCOPE_THREAD, "requested_url", requested_url.spec());
|
| - DCHECK(requested_url.is_valid());
|
| + TRACE_EVENT_SCOPE_THREAD, "requested_url", requested_gurl.spec());
|
| + DCHECK(requested_gurl.is_valid());
|
|
|
| // We check both the mapped and resolved urls for existing shell_impls because
|
| // external applications can be registered for the unresolved mojo:foo urls.
|
|
|
| - GURL mapped_url = delegate_->ResolveMappings(requested_url);
|
| + GURL mapped_url = delegate_->ResolveMappings(requested_gurl);
|
| if (ConnectToRunningApplication(mapped_url, qualifier, requestor_url,
|
| &services, &exposed_services)) {
|
| return;
|
| @@ -140,27 +143,27 @@ void ApplicationManager::ConnectToApplicationInternal(
|
|
|
| // The application is not running, let's compute the parameters.
|
| if (ConnectToApplicationWithLoader(
|
| - requested_url, qualifier, mapped_url, requestor_url, &services,
|
| + requested_gurl, qualifier, mapped_url, requestor_url, &services,
|
| &exposed_services, on_application_end, GetLoaderForURL(mapped_url))) {
|
| return;
|
| }
|
|
|
| if (ConnectToApplicationWithLoader(
|
| - requested_url, qualifier, resolved_url, requestor_url, &services,
|
| + requested_gurl, qualifier, resolved_url, requestor_url, &services,
|
| &exposed_services, on_application_end,
|
| GetLoaderForURL(resolved_url))) {
|
| return;
|
| }
|
|
|
| if (ConnectToApplicationWithLoader(
|
| - requested_url, qualifier, resolved_url, requestor_url, &services,
|
| + requested_gurl, qualifier, resolved_url, requestor_url, &services,
|
| &exposed_services, on_application_end, default_loader_.get())) {
|
| return;
|
| }
|
|
|
| auto callback = base::Bind(
|
| &ApplicationManager::HandleFetchCallback, weak_ptr_factory_.GetWeakPtr(),
|
| - requested_url, qualifier, requestor_url, base::Passed(services.Pass()),
|
| + requested_gurl, qualifier, requestor_url, base::Passed(services.Pass()),
|
| base::Passed(exposed_services.Pass()), on_application_end);
|
|
|
| if (delegate_->CreateFetcher(
|
| @@ -185,8 +188,8 @@ void ApplicationManager::ConnectToApplicationInternal(
|
| ? NativeApplicationCleanup::DONT_DELETE
|
| : NativeApplicationCleanup::DELETE;
|
|
|
| - new NetworkFetcher(disable_cache_, resolved_url, network_service_.get(),
|
| - base::Bind(callback, cleanup));
|
| + new NetworkFetcher(disable_cache_, requested_url.Pass(),
|
| + network_service_.get(), base::Bind(callback, cleanup));
|
| }
|
|
|
| bool ApplicationManager::ConnectToRunningApplication(
|
| @@ -283,7 +286,13 @@ void ApplicationManager::HandleFetchCallback(
|
| if (!redirect_url.is_empty()) {
|
| // And around we go again... Whee!
|
| // TODO(sky): this loses |requested_url|.
|
| - ConnectToApplicationInternal(redirect_url, qualifier, requestor_url,
|
| + mojo::URLRequestPtr request(mojo::URLRequest::New());
|
| + request->url = mojo::String::From(redirect_url.spec());
|
| + HttpHeaderPtr header = HttpHeader::New();
|
| + header->name = "Referer";
|
| + header->value = fetcher->GetRedirectReferer().spec();
|
| + request->headers.push_back(header.Pass());
|
| + ConnectToApplicationInternal(request.Pass(), qualifier, requestor_url,
|
| services.Pass(), exposed_services.Pass(),
|
| on_application_end);
|
| return;
|
| @@ -508,7 +517,9 @@ ScopedMessagePipeHandle ApplicationManager::ConnectToServiceByName(
|
| const GURL& application_url,
|
| const std::string& interface_name) {
|
| ServiceProviderPtr services;
|
| - ConnectToApplication(application_url, GURL(), GetProxy(&services), nullptr,
|
| + mojo::URLRequestPtr request(mojo::URLRequest::New());
|
| + request->url = mojo::String::From(application_url.spec());
|
| + ConnectToApplication(request.Pass(), GURL(), GetProxy(&services), nullptr,
|
| base::Closure());
|
| MessagePipe pipe;
|
| services->ConnectToService(interface_name, pipe.handle1.Pass());
|
|
|