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

Unified Diff: mojo/shell/application_manager.cc

Issue 1229903003: Mandoline: Implement basic "process per site" support (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 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
« no previous file with comments | « mojo/shell/application_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/shell/application_manager.cc
diff --git a/mojo/shell/application_manager.cc b/mojo/shell/application_manager.cc
index 4602a68ad78860d45eaefb60270d9e4394e18c02..4dc965cb5d8cf438b1776d2ca3496cafbe1f9666 100644
--- a/mojo/shell/application_manager.cc
+++ b/mojo/shell/application_manager.cc
@@ -290,22 +290,58 @@ void ApplicationManager::HandleFetchCallback(
RegisterShell(app_url, qualifier, requestor_url, services.Pass(),
exposed_services.Pass(), on_application_end));
+ // For resources that are loaded with content handlers, we group app instances
+ // by site.
+
// If the response begins with a #!mojo <content-handler-url>, use it.
GURL content_handler_url;
std::string shebang;
if (fetcher->PeekContentHandler(&shebang, &content_handler_url)) {
- LoadWithContentHandler(
- content_handler_url, requestor_url, qualifier, request.Pass(),
- fetcher->AsURLResponse(blocking_pool_,
- static_cast<int>(shebang.size())));
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableMultiprocess)) {
jam 2015/07/09 22:32:37 why should this behavior change with multiprocess?
+ if (!network_service_)
+ ConnectToService(GURL("mojo:network_service"), &network_service_);
+ network_service_->GetSiteForURL(
+ fetcher->GetURL().spec(),
+ base::Bind(&ApplicationManager::LoadWithContentHandler,
+ weak_ptr_factory_.GetWeakPtr(),
+ content_handler_url,
+ requestor_url,
+ base::Passed(request.Pass()),
+ base::Passed(fetcher->AsURLResponse(blocking_pool_, 0))));
+ } else {
+ LoadWithContentHandler(
+ content_handler_url, requestor_url,
+ request.Pass(),
+ fetcher->AsURLResponse(blocking_pool_,
+ static_cast<int>(shebang.size())),
+ qualifier);
+ }
return;
}
MimeTypeToURLMap::iterator iter = mime_type_to_url_.find(fetcher->MimeType());
if (iter != mime_type_to_url_.end()) {
- LoadWithContentHandler(iter->second, requestor_url, qualifier,
- request.Pass(),
- fetcher->AsURLResponse(blocking_pool_, 0));
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableMultiprocess)) {
+ if (!network_service_)
+ ConnectToService(GURL("mojo:network_service"), &network_service_);
+ network_service_->GetSiteForURL(
+ fetcher->GetURL().spec(),
+ base::Bind(&ApplicationManager::LoadWithContentHandler,
+ weak_ptr_factory_.GetWeakPtr(),
+ iter->second,
+ requestor_url,
+ base::Passed(request.Pass()),
+ base::Passed(fetcher->AsURLResponse(blocking_pool_, 0))));
+ } else {
+ LoadWithContentHandler(
+ iter->second, requestor_url,
+ request.Pass(),
+ fetcher->AsURLResponse(blocking_pool_,
+ static_cast<int>(shebang.size())),
+ qualifier);
+ }
return;
}
@@ -330,8 +366,8 @@ void ApplicationManager::HandleFetchCallback(
qualifier = alias_iter->second.second;
}
- LoadWithContentHandler(alias_iter->second.first, requestor_url, qualifier,
- request.Pass(), response.Pass());
+ LoadWithContentHandler(alias_iter->second.first, requestor_url,
+ request.Pass(), response.Pass(), qualifier);
return;
}
@@ -403,9 +439,9 @@ void ApplicationManager::RegisterApplicationPackageAlias(
void ApplicationManager::LoadWithContentHandler(
const GURL& content_handler_url,
const GURL& requestor_url,
- const std::string& qualifier,
InterfaceRequest<Application> application_request,
- URLResponsePtr url_response) {
+ URLResponsePtr url_response,
+ const std::string& qualifier) {
ContentHandlerConnection* connection = nullptr;
std::pair<GURL, std::string> key(content_handler_url, qualifier);
URLToContentHandlerMap::iterator iter = url_to_content_handler_.find(key);
« no previous file with comments | « mojo/shell/application_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698