| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "mojo/shell/public/cpp/lib/service_registry.h" | 5 #include "mojo/shell/public/cpp/lib/service_registry.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "mojo/shell/public/cpp/application_connection.h" | 13 #include "mojo/shell/public/cpp/application_connection.h" |
| 14 #include "mojo/shell/public/cpp/service_connector.h" | 14 #include "mojo/shell/public/cpp/service_connector.h" |
| 15 | 15 |
| 16 namespace mojo { | 16 namespace mojo { |
| 17 namespace internal { | 17 namespace internal { |
| 18 | 18 |
| 19 ServiceRegistry::ServiceRegistry( | 19 ServiceRegistry::ServiceRegistry( |
| 20 const std::string& connection_url, | 20 const std::string& connection_url, |
| 21 const std::string& remote_url, | 21 const std::string& remote_url, |
| 22 uint32_t remote_id, |
| 22 ServiceProviderPtr remote_services, | 23 ServiceProviderPtr remote_services, |
| 23 InterfaceRequest<ServiceProvider> local_services, | 24 InterfaceRequest<ServiceProvider> local_services, |
| 24 const std::set<std::string>& allowed_interfaces) | 25 const std::set<std::string>& allowed_interfaces) |
| 25 : connection_url_(connection_url), | 26 : connection_url_(connection_url), |
| 26 remote_url_(remote_url), | 27 remote_url_(remote_url), |
| 27 local_binding_(this), | 28 local_binding_(this), |
| 28 remote_service_provider_(std::move(remote_services)), | 29 remote_service_provider_(std::move(remote_services)), |
| 29 allowed_interfaces_(allowed_interfaces), | 30 allowed_interfaces_(allowed_interfaces), |
| 30 allow_all_interfaces_(allowed_interfaces_.size() == 1 && | 31 allow_all_interfaces_(allowed_interfaces_.size() == 1 && |
| 31 allowed_interfaces_.count("*") == 1), | 32 allowed_interfaces_.count("*") == 1), |
| 33 remote_id_(remote_id), |
| 32 content_handler_id_(0u), | 34 content_handler_id_(0u), |
| 33 is_content_handler_id_valid_(false), | 35 remote_ids_valid_(false), |
| 34 weak_factory_(this) { | 36 weak_factory_(this) { |
| 35 if (local_services.is_pending()) | 37 if (local_services.is_pending()) |
| 36 local_binding_.Bind(std::move(local_services)); | 38 local_binding_.Bind(std::move(local_services)); |
| 37 } | 39 } |
| 38 | 40 |
| 39 ServiceRegistry::ServiceRegistry() | 41 ServiceRegistry::ServiceRegistry() |
| 40 : local_binding_(this), | 42 : local_binding_(this), |
| 41 allow_all_interfaces_(true), | 43 allow_all_interfaces_(true), |
| 42 weak_factory_(this) { | 44 weak_factory_(this) { |
| 43 } | 45 } |
| 44 | 46 |
| 45 ServiceRegistry::~ServiceRegistry() { | 47 ServiceRegistry::~ServiceRegistry() { |
| 46 } | 48 } |
| 47 | 49 |
| 48 Shell::ConnectToApplicationCallback | 50 Shell::ConnectToApplicationCallback |
| 49 ServiceRegistry::GetConnectToApplicationCallback() { | 51 ServiceRegistry::GetConnectToApplicationCallback() { |
| 50 return base::Bind(&ServiceRegistry::OnGotContentHandlerID, | 52 return base::Bind(&ServiceRegistry::OnGotRemoteIDs, |
| 51 weak_factory_.GetWeakPtr()); | 53 weak_factory_.GetWeakPtr()); |
| 52 } | 54 } |
| 53 | 55 |
| 54 void ServiceRegistry::SetServiceConnector(ServiceConnector* connector) { | 56 void ServiceRegistry::SetServiceConnector(ServiceConnector* connector) { |
| 55 service_connector_registry_.set_service_connector(connector); | 57 service_connector_registry_.set_service_connector(connector); |
| 56 } | 58 } |
| 57 | 59 |
| 58 bool ServiceRegistry::SetServiceConnectorForName( | 60 bool ServiceRegistry::SetServiceConnectorForName( |
| 59 ServiceConnector* service_connector, | 61 ServiceConnector* service_connector, |
| 60 const std::string& interface_name) { | 62 const std::string& interface_name) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 72 | 74 |
| 73 ServiceProvider* ServiceRegistry::GetLocalServiceProvider() { | 75 ServiceProvider* ServiceRegistry::GetLocalServiceProvider() { |
| 74 return this; | 76 return this; |
| 75 } | 77 } |
| 76 | 78 |
| 77 void ServiceRegistry::SetRemoteServiceProviderConnectionErrorHandler( | 79 void ServiceRegistry::SetRemoteServiceProviderConnectionErrorHandler( |
| 78 const Closure& handler) { | 80 const Closure& handler) { |
| 79 remote_service_provider_.set_connection_error_handler(handler); | 81 remote_service_provider_.set_connection_error_handler(handler); |
| 80 } | 82 } |
| 81 | 83 |
| 82 bool ServiceRegistry::GetContentHandlerID(uint32_t* content_handler_id) { | 84 bool ServiceRegistry::GetRemoteApplicationID(uint32_t* remote_id) const { |
| 83 if (!is_content_handler_id_valid_) | 85 if (!remote_ids_valid_) |
| 86 return false; |
| 87 |
| 88 *remote_id = remote_id_; |
| 89 return true; |
| 90 } |
| 91 |
| 92 bool ServiceRegistry::GetRemoteContentHandlerID( |
| 93 uint32_t* content_handler_id) const { |
| 94 if (!remote_ids_valid_) |
| 84 return false; | 95 return false; |
| 85 | 96 |
| 86 *content_handler_id = content_handler_id_; | 97 *content_handler_id = content_handler_id_; |
| 87 return true; | 98 return true; |
| 88 } | 99 } |
| 89 | 100 |
| 90 void ServiceRegistry::AddContentHandlerIDCallback(const Closure& callback) { | 101 void ServiceRegistry::AddRemoteIDCallback(const Closure& callback) { |
| 91 if (is_content_handler_id_valid_) { | 102 if (remote_ids_valid_) { |
| 92 callback.Run(); | 103 callback.Run(); |
| 93 return; | 104 return; |
| 94 } | 105 } |
| 95 content_handler_id_callbacks_.push_back(callback); | 106 remote_id_callbacks_.push_back(callback); |
| 96 } | 107 } |
| 97 | 108 |
| 98 base::WeakPtr<ApplicationConnection> ServiceRegistry::GetWeakPtr() { | 109 base::WeakPtr<ApplicationConnection> ServiceRegistry::GetWeakPtr() { |
| 99 return weak_factory_.GetWeakPtr(); | 110 return weak_factory_.GetWeakPtr(); |
| 100 } | 111 } |
| 101 | 112 |
| 102 void ServiceRegistry::RemoveServiceConnectorForName( | 113 void ServiceRegistry::RemoveServiceConnectorForName( |
| 103 const std::string& interface_name) { | 114 const std::string& interface_name) { |
| 104 service_connector_registry_.RemoveServiceConnectorForName(interface_name); | 115 service_connector_registry_.RemoveServiceConnectorForName(interface_name); |
| 105 if (service_connector_registry_.empty()) | 116 if (service_connector_registry_.empty()) |
| 106 remote_service_provider_.reset(); | 117 remote_service_provider_.reset(); |
| 107 } | 118 } |
| 108 | 119 |
| 109 const std::string& ServiceRegistry::GetConnectionURL() { | 120 const std::string& ServiceRegistry::GetConnectionURL() { |
| 110 return connection_url_; | 121 return connection_url_; |
| 111 } | 122 } |
| 112 | 123 |
| 113 const std::string& ServiceRegistry::GetRemoteApplicationURL() { | 124 const std::string& ServiceRegistry::GetRemoteApplicationURL() { |
| 114 return remote_url_; | 125 return remote_url_; |
| 115 } | 126 } |
| 116 | 127 |
| 117 ServiceProvider* ServiceRegistry::GetServiceProvider() { | 128 ServiceProvider* ServiceRegistry::GetServiceProvider() { |
| 118 return remote_service_provider_.get(); | 129 return remote_service_provider_.get(); |
| 119 } | 130 } |
| 120 | 131 |
| 121 void ServiceRegistry::OnGotContentHandlerID(uint32_t content_handler_id) { | 132 void ServiceRegistry::OnGotRemoteIDs(uint32_t target_application_id, |
| 122 DCHECK(!is_content_handler_id_valid_); | 133 uint32_t content_handler_id) { |
| 123 is_content_handler_id_valid_ = true; | 134 DCHECK(!remote_ids_valid_); |
| 135 remote_ids_valid_ = true; |
| 136 |
| 137 remote_id_ = target_application_id; |
| 124 content_handler_id_ = content_handler_id; | 138 content_handler_id_ = content_handler_id; |
| 125 std::vector<Closure> callbacks; | 139 std::vector<Closure> callbacks; |
| 126 callbacks.swap(content_handler_id_callbacks_); | 140 callbacks.swap(remote_id_callbacks_); |
| 127 for (auto callback : callbacks) | 141 for (auto callback : callbacks) |
| 128 callback.Run(); | 142 callback.Run(); |
| 129 } | 143 } |
| 130 | 144 |
| 131 void ServiceRegistry::ConnectToService(const mojo::String& service_name, | 145 void ServiceRegistry::ConnectToService(const mojo::String& service_name, |
| 132 ScopedMessagePipeHandle client_handle) { | 146 ScopedMessagePipeHandle client_handle) { |
| 133 service_connector_registry_.ConnectToService(this, service_name, | 147 service_connector_registry_.ConnectToService(this, service_name, |
| 134 std::move(client_handle)); | 148 std::move(client_handle)); |
| 135 } | 149 } |
| 136 | 150 |
| 137 } // namespace internal | 151 } // namespace internal |
| 138 } // namespace mojo | 152 } // namespace mojo |
| OLD | NEW |