Chromium Code Reviews| Index: mojo/shell/application_instance.cc |
| diff --git a/mojo/shell/application_instance.cc b/mojo/shell/application_instance.cc |
| index 13a25763e6b44e4e7b18c2dc555a1088716faf48..0a378fb43182e382e67a8313ac03d2dee5172d49 100644 |
| --- a/mojo/shell/application_instance.cc |
| +++ b/mojo/shell/application_instance.cc |
| @@ -10,9 +10,11 @@ |
| #include "mojo/common/common_type_converters.h" |
| #include "mojo/common/url_type_converters.h" |
| #include "mojo/shell/application_manager.h" |
| +#include "mojo/shell/content_handler_connection.h" |
| namespace mojo { |
| namespace shell { |
| +namespace { |
| // It's valid to specify mojo: URLs in the filter either as mojo:foo or |
| // mojo://foo/ - but we store the filter in the latter form. |
| @@ -29,6 +31,8 @@ CapabilityFilter CanonicalizeFilter(const CapabilityFilter& filter) { |
| return canonicalized; |
| } |
| +} // namespace |
| + |
| ApplicationInstance::QueuedClientRequest::QueuedClientRequest() |
| : originator(nullptr) {} |
| @@ -41,12 +45,14 @@ ApplicationInstance::ApplicationInstance( |
| const Identity& originator_identity, |
| const Identity& identity, |
| const CapabilityFilter& filter, |
| + uint32_t requesting_content_handler_id, |
| const base::Closure& on_application_end) |
| : manager_(manager), |
| originator_identity_(originator_identity), |
| identity_(identity), |
| filter_(CanonicalizeFilter(filter)), |
| allow_any_application_(filter.size() == 1 && filter.count("*") == 1), |
| + requesting_content_handler_id_(requesting_content_handler_id), |
| on_application_end_(on_application_end), |
| application_(application.Pass()), |
| binding_(this), |
| @@ -108,24 +114,27 @@ void ApplicationInstance::ConnectToApplication( |
| URLRequestPtr app_request, |
| InterfaceRequest<ServiceProvider> services, |
| ServiceProviderPtr exposed_services, |
| - CapabilityFilterPtr filter) { |
| + CapabilityFilterPtr filter, |
| + const ConnectToApplicationCallback& callback) { |
| std::string url_string = app_request->url.To<std::string>(); |
| GURL url(url_string); |
| if (!url.is_valid()) { |
| LOG(ERROR) << "Error: invalid URL: " << url_string; |
| + callback.Run(ApplicationManager::kInvalidContentHandlerID); |
|
Ben Goodger (Google)
2015/08/31 17:41:07
if it's an expected part of the api that your call
sky
2015/08/31 19:46:06
I didn't realize you could have constants in the m
|
| return; |
| } |
| if (allow_any_application_ || filter_.find(url.spec()) != filter_.end()) { |
| CapabilityFilter capability_filter = GetPermissiveCapabilityFilter(); |
| if (!filter.is_null()) |
| capability_filter = filter->filter.To<CapabilityFilter>(); |
| - manager_->ConnectToApplication(this, app_request.Pass(), std::string(), |
| - identity_.url, services.Pass(), |
| - exposed_services.Pass(), capability_filter, |
| - base::Closure()); |
| + manager_->ConnectToApplication( |
| + this, app_request.Pass(), std::string(), identity_.url, |
| + ApplicationManager::kInvalidContentHandlerID, services.Pass(), |
| + exposed_services.Pass(), capability_filter, base::Closure(), callback); |
| } else { |
| LOG(WARNING) << "CapabilityFilter prevented connection from: " << |
| identity_.url << " to: " << url.spec(); |
| + callback.Run(ApplicationManager::kInvalidContentHandlerID); |
| } |
| } |
| @@ -167,12 +176,11 @@ void ApplicationInstance::OnConnectionError() { |
| url->url = mojo::String::From(request->requested_url.spec()); |
| ApplicationInstance* originator = |
| manager->GetApplicationInstance(originator_identity_); |
| - manager->ConnectToApplication(originator, url.Pass(), std::string(), |
| - request->requestor_url, |
| - request->services.Pass(), |
| - request->exposed_services.Pass(), |
| - request->filter, |
| - base::Closure()); |
| + manager->ConnectToApplication( |
| + originator, url.Pass(), std::string(), request->requestor_url, |
| + ApplicationManager::kInvalidContentHandlerID, request->services.Pass(), |
| + request->exposed_services.Pass(), request->filter, base::Closure(), |
| + EmptyConnectCallback()); |
| } |
| STLDeleteElements(&queued_client_requests); |
| } |
| @@ -183,11 +191,9 @@ void ApplicationInstance::OnQuitRequestedResult(bool can_quit) { |
| queue_requests_ = false; |
| for (auto request : queued_client_requests_) { |
| - CallAcceptConnection(request->originator, |
| - request->requestor_url, |
| - request->services.Pass(), |
| - request->exposed_services.Pass(), |
| - request->requested_url); |
| + CallAcceptConnection( |
| + request->originator, request->requestor_url, request->services.Pass(), |
| + request->exposed_services.Pass(), request->requested_url); |
| } |
| STLDeleteElements(&queued_client_requests_); |
| } |