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

Unified Diff: mojo/services/launcher/launcher.cc

Issue 345773003: Mojo: teach launcher about mojo:// URLs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
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());
}
}

Powered by Google App Engine
This is Rietveld 408576698