Index: mojo/shell/public/cpp/lib/connection_impl.cc |
diff --git a/mojo/shell/public/cpp/lib/connection_impl.cc b/mojo/shell/public/cpp/lib/connection_impl.cc |
index bc66e70ecc60b0406357c34c4dfe7abc72229c1d..8f41dcbc1b8cdf6ad8ea6933cc9e8dbca6290989 100644 |
--- a/mojo/shell/public/cpp/lib/connection_impl.cc |
+++ b/mojo/shell/public/cpp/lib/connection_impl.cc |
@@ -31,32 +31,22 @@ ConnectionImpl::ConnectionImpl( |
remote_id_(remote_id), |
content_handler_id_(0u), |
remote_ids_valid_(false), |
- local_binding_(this), |
+ local_registry_(std::move(local_interfaces), this), |
remote_interfaces_(std::move(remote_interfaces)), |
allowed_interfaces_(allowed_interfaces), |
allow_all_interfaces_(allowed_interfaces_.size() == 1 && |
allowed_interfaces_.count("*") == 1), |
- default_binder_(nullptr), |
- weak_factory_(this) { |
- if (local_interfaces.is_pending()) |
- local_binding_.Bind(std::move(local_interfaces)); |
-} |
+ weak_factory_(this) {} |
ConnectionImpl::ConnectionImpl() |
: remote_id_(shell::mojom::Shell::kInvalidApplicationID), |
content_handler_id_(shell::mojom::Shell::kInvalidApplicationID), |
remote_ids_valid_(false), |
- local_binding_(this), |
+ local_registry_(shell::mojom::InterfaceProviderRequest(), this), |
allow_all_interfaces_(true), |
- default_binder_(nullptr), |
- weak_factory_(this) { |
-} |
+ weak_factory_(this) {} |
-ConnectionImpl::~ConnectionImpl() { |
- for (auto& i : name_to_binder_) |
- delete i.second; |
- name_to_binder_.clear(); |
-} |
+ConnectionImpl::~ConnectionImpl() {} |
shell::mojom::Shell::ConnectToApplicationCallback |
ConnectionImpl::GetConnectToApplicationCallback() { |
@@ -67,25 +57,6 @@ ConnectionImpl::GetConnectToApplicationCallback() { |
//////////////////////////////////////////////////////////////////////////////// |
// ConnectionImpl, Connection implementation: |
-void ConnectionImpl::SetDefaultInterfaceBinder(InterfaceBinder* binder) { |
- default_binder_ = binder; |
-} |
- |
-bool ConnectionImpl::SetInterfaceBinderForName( |
- InterfaceBinder* binder, |
- const std::string& interface_name) { |
- if (allow_all_interfaces_ || |
- allowed_interfaces_.count(interface_name)) { |
- RemoveInterfaceBinderForName(interface_name); |
- name_to_binder_[interface_name] = binder; |
- return true; |
- } |
- LOG(WARNING) << "CapabilityFilter prevented connection to interface: " |
- << interface_name << " connection_url:" << connection_url_ |
- << " remote_url:" << remote_url_; |
- return false; |
-} |
- |
const std::string& ConnectionImpl::GetConnectionURL() { |
return connection_url_; |
} |
@@ -94,14 +65,6 @@ const std::string& ConnectionImpl::GetRemoteApplicationURL() { |
return remote_url_; |
} |
-shell::mojom::InterfaceProvider* ConnectionImpl::GetRemoteInterfaces() { |
- return remote_interfaces_.get(); |
-} |
- |
-shell::mojom::InterfaceProvider* ConnectionImpl::GetLocalInterfaces() { |
- return this; |
-} |
- |
void ConnectionImpl::SetRemoteInterfaceProviderConnectionErrorHandler( |
const Closure& handler) { |
remote_interfaces_.set_connection_error_handler(handler); |
@@ -132,34 +95,25 @@ void ConnectionImpl::AddRemoteIDCallback(const Closure& callback) { |
remote_id_callbacks_.push_back(callback); |
} |
-base::WeakPtr<Connection> ConnectionImpl::GetWeakPtr() { |
- return weak_factory_.GetWeakPtr(); |
+bool ConnectionImpl::AllowsInterface(const std::string& interface_name) const { |
+ return allow_all_interfaces_ || allowed_interfaces_.count(interface_name); |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// ConnectionImpl, shell::mojom::InterfaceProvider implementation: |
- |
-void ConnectionImpl::GetInterface(const mojo::String& interface_name, |
- ScopedMessagePipeHandle handle) { |
- auto iter = name_to_binder_.find(interface_name); |
- InterfaceBinder* binder = iter != name_to_binder_.end() ? iter->second : |
- default_binder_; |
- if (binder) |
- binder->BindInterface(this, interface_name, std::move(handle)); |
+shell::mojom::InterfaceProvider* ConnectionImpl::GetRemoteInterfaces() { |
+ return remote_interfaces_.get(); |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// ConnectionImpl, private: |
+InterfaceRegistry* ConnectionImpl::GetLocalRegistry() { |
+ return &local_registry_; |
+} |
-void ConnectionImpl::RemoveInterfaceBinderForName( |
- const std::string& interface_name) { |
- NameToInterfaceBinderMap::iterator it = name_to_binder_.find(interface_name); |
- if (it == name_to_binder_.end()) |
- return; |
- delete it->second; |
- name_to_binder_.erase(it); |
+base::WeakPtr<Connection> ConnectionImpl::GetWeakPtr() { |
+ return weak_factory_.GetWeakPtr(); |
} |
+//////////////////////////////////////////////////////////////////////////////// |
+// ConnectionImpl, private: |
+ |
void ConnectionImpl::OnGotRemoteIDs(uint32_t target_application_id, |
uint32_t content_handler_id) { |
DCHECK(!remote_ids_valid_); |