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()); |
} |
} |