| Index: mojo/shell/application_instance.cc
|
| diff --git a/mojo/shell/application_instance.cc b/mojo/shell/application_instance.cc
|
| index 13a25763e6b44e4e7b18c2dc555a1088716faf48..1c2479b1a1a88205307d453e55b928dcd8dc1199 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),
|
| @@ -70,7 +76,9 @@ void ApplicationInstance::ConnectToClient(
|
| const GURL& requestor_url,
|
| InterfaceRequest<ServiceProvider> services,
|
| ServiceProviderPtr exposed_services,
|
| - const CapabilityFilter& filter) {
|
| + const CapabilityFilter& filter,
|
| + const ConnectToApplicationCallback& callback) {
|
| + callback.Run(requesting_content_handler_id_);
|
| if (queue_requests_) {
|
| QueuedClientRequest* queued_request = new QueuedClientRequest();
|
| queued_request->originator = originator;
|
| @@ -108,24 +116,26 @@ 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(kInvalidContentHandlerID);
|
| 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, services.Pass(),
|
| + exposed_services.Pass(), capability_filter, base::Closure(), callback);
|
| } else {
|
| LOG(WARNING) << "CapabilityFilter prevented connection from: " <<
|
| identity_.url << " to: " << url.spec();
|
| + callback.Run(kInvalidContentHandlerID);
|
| }
|
| }
|
|
|
| @@ -167,12 +177,10 @@ 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,
|
| + 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_);
|
| }
|
|
|