Chromium Code Reviews| Index: mojo/services/launcher/launcher.cc |
| diff --git a/mojo/services/launcher/launcher.cc b/mojo/services/launcher/launcher.cc |
| index 62883a7386596cff07fdbcf16f105956bcb369fc..e187bfa3fbec8c1c11e1024332067bda40cf9390 100644 |
| --- a/mojo/services/launcher/launcher.cc |
| +++ b/mojo/services/launcher/launcher.cc |
| @@ -10,6 +10,7 @@ |
| #include "mojo/services/public/interfaces/launcher/launcher.mojom.h" |
| #include "mojo/services/public/interfaces/network/network_service.mojom.h" |
| #include "mojo/services/public/interfaces/network/url_loader.mojom.h" |
| +#include "url/gurl.h" |
| namespace mojo { |
| namespace launcher { |
| @@ -76,6 +77,7 @@ class LaunchInstance : public URLLoaderClient { |
| LauncherApp* app_; |
| bool destroy_scheduled_; |
| LauncherClient* client_; |
| + String url_; |
| URLLoaderPtr url_loader_; |
| ScopedDataPipeConsumerHandle response_body_stream_; |
| @@ -117,8 +119,19 @@ class LauncherApp : public Application { |
| DISALLOW_COPY_AND_ASSIGN(LauncherApp); |
| }; |
| -void LauncherConnection::Launch(const String& url) { |
| - new LaunchInstance(app_, client(), url); |
| +void LauncherConnection::Launch(const String& url_string) { |
| + GURL url(url_string.To<std::string>()); |
| + |
| + // For Mojo URLs, the handler can always be found at the origin. |
| + // TODO(aa): Return error for invalid URL? |
| + if (url.is_valid() && url.SchemeIs("mojo")) { |
|
Ben Goodger (Google)
2014/06/19 21:09:47
I think this is fine for now, but note that when a
Aaron Boodman
2014/06/19 21:25:12
Hm, ok.
I didn't realize/remember we wanted mojo
|
| + client()->OnLaunch(url_string, |
| + url.GetOrigin().spec(), |
| + navigation::ResponseDetailsPtr()); |
| + return; |
| + } |
| + |
| + new LaunchInstance(app_, client(), url_string); |
| } |
| LaunchInstance::LaunchInstance(LauncherApp* app, |
| @@ -126,7 +139,8 @@ LaunchInstance::LaunchInstance(LauncherApp* app, |
| const String& url) |
| : app_(app), |
| destroy_scheduled_(false), |
| - client_(client) { |
| + client_(client), |
| + url_(url) { |
| url_loader_ = app_->CreateURLLoader(); |
| url_loader_.set_client(this); |
| @@ -145,8 +159,11 @@ void LaunchInstance::OnReceivedResponse(URLResponsePtr response) { |
| std::string content_type = GetContentType(response->headers); |
| std::string handler_url = app_->GetHandlerForContentType(content_type); |
| if (!handler_url.empty()) { |
| - client_->OnLaunch(handler_url, response.Pass(), |
| - response_body_stream_.Pass()); |
| + navigation::ResponseDetailsPtr nav_response( |
| + navigation::ResponseDetails::New()); |
| + nav_response->response = response.Pass(); |
| + nav_response->response_body_stream = response_body_stream_.Pass(); |
| + client_->OnLaunch(url_, handler_url, nav_response.Pass()); |
| } |
| } |