| Index: mojo/application/public/cpp/lib/application_impl.cc
|
| diff --git a/mojo/application/public/cpp/lib/application_impl.cc b/mojo/application/public/cpp/lib/application_impl.cc
|
| index 200bce4083a13c223f4f06e5d1314f7bf2d3bb44..8798974431735e6766f8d77a3ee5afe31df33ed8 100644
|
| --- a/mojo/application/public/cpp/lib/application_impl.cc
|
| +++ b/mojo/application/public/cpp/lib/application_impl.cc
|
| @@ -23,6 +23,18 @@ void DefaultTerminationClosure() {
|
| base::MessageLoop::current()->Quit();
|
| }
|
|
|
| +template <typename E, typename T>
|
| +struct TypeConverter<std::set<E>, Array<T>> {
|
| + static std::set<E> Convert(const Array<T>& input) {
|
| + std::set<E> result;
|
| + if (!input.is_null()) {
|
| + for (size_t i = 0; i < input.size(); ++i)
|
| + result.insert(TypeConverter<E, T>::Convert(input[i]));
|
| + }
|
| + return result;
|
| + }
|
| +};
|
| +
|
| } // namespace
|
|
|
| ApplicationImpl::ApplicationImpl(ApplicationDelegate* delegate,
|
| @@ -65,7 +77,8 @@ ApplicationImpl::~ApplicationImpl() {
|
| }
|
|
|
| ApplicationConnection* ApplicationImpl::ConnectToApplication(
|
| - mojo::URLRequestPtr request) {
|
| + mojo::URLRequestPtr request,
|
| + CapabilityFilterPtr filter) {
|
| if (!shell_)
|
| return nullptr;
|
| ServiceProviderPtr local_services;
|
| @@ -73,10 +86,10 @@ ApplicationConnection* ApplicationImpl::ConnectToApplication(
|
| ServiceProviderPtr remote_services;
|
| std::string application_url = request->url.To<std::string>();
|
| shell_->ConnectToApplication(request.Pass(), GetProxy(&remote_services),
|
| - local_services.Pass());
|
| + local_services.Pass(), filter.Pass());
|
| internal::ServiceRegistry* registry = new internal::ServiceRegistry(
|
| this, application_url, application_url, remote_services.Pass(),
|
| - local_request.Pass());
|
| + local_request.Pass(), std::set<std::string>());
|
| if (!delegate_->ConfigureOutgoingConnection(registry)) {
|
| registry->CloseConnection();
|
| return nullptr;
|
| @@ -141,9 +154,11 @@ void ApplicationImpl::AcceptConnection(
|
| const String& requestor_url,
|
| InterfaceRequest<ServiceProvider> services,
|
| ServiceProviderPtr exposed_services,
|
| + Array<String> allowed_interfaces,
|
| const String& url) {
|
| internal::ServiceRegistry* registry = new internal::ServiceRegistry(
|
| - this, url, requestor_url, exposed_services.Pass(), services.Pass());
|
| + this, url, requestor_url, exposed_services.Pass(), services.Pass(),
|
| + allowed_interfaces.To<std::set<std::string>>());
|
| if (!delegate_->ConfigureIncomingConnection(registry)) {
|
| registry->CloseConnection();
|
| return;
|
|
|