Index: mojo/application/public/cpp/lib/service_registry.cc |
diff --git a/mojo/application/public/cpp/lib/service_registry.cc b/mojo/application/public/cpp/lib/service_registry.cc |
index 8b3be11aca74a44befda9dcb77c344d1350eef86..7edf8d6c1c821dd9b1b9c60d2e9cdd5d773e8f36 100644 |
--- a/mojo/application/public/cpp/lib/service_registry.cc |
+++ b/mojo/application/public/cpp/lib/service_registry.cc |
@@ -4,6 +4,7 @@ |
#include "mojo/application/public/cpp/lib/service_registry.h" |
+#include "base/bind.h" |
#include "base/logging.h" |
#include "mojo/application/public/cpp/application_connection.h" |
#include "mojo/application/public/cpp/service_connector.h" |
@@ -24,6 +25,8 @@ ServiceRegistry::ServiceRegistry( |
allowed_interfaces_(allowed_interfaces), |
allow_all_interfaces_(allowed_interfaces_.size() == 1 && |
allowed_interfaces_.count("*") == 1), |
+ content_handler_id_(0u), |
+ is_content_handler_id_valid_(false), |
weak_factory_(this) { |
if (local_services.is_pending()) |
local_binding_.Bind(local_services.Pass()); |
@@ -38,6 +41,12 @@ ServiceRegistry::ServiceRegistry() |
ServiceRegistry::~ServiceRegistry() { |
} |
+Shell::ConnectToApplicationCallback |
+ServiceRegistry::GetConnectToApplicationCallback() { |
+ return base::Bind(&ServiceRegistry::OnGotContentHandlerID, |
+ weak_factory_.GetWeakPtr()); |
+} |
+ |
void ServiceRegistry::SetServiceConnector(ServiceConnector* connector) { |
service_connector_registry_.set_service_connector(connector); |
} |
@@ -65,6 +74,22 @@ void ServiceRegistry::SetRemoteServiceProviderConnectionErrorHandler( |
remote_service_provider_.set_connection_error_handler(handler); |
} |
+bool ServiceRegistry::GetContentHandlerID(uint32_t* content_handler_id) { |
+ if (!is_content_handler_id_valid_) |
+ return false; |
+ |
+ *content_handler_id = content_handler_id_; |
+ return true; |
+} |
+ |
+void ServiceRegistry::AddContentHandlerIDCallback(const Closure& callback) { |
+ if (is_content_handler_id_valid_) { |
+ callback.Run(); |
+ return; |
+ } |
+ content_handler_id_callbacks_.push_back(callback); |
+} |
+ |
base::WeakPtr<ApplicationConnection> ServiceRegistry::GetWeakPtr() { |
return weak_factory_.GetWeakPtr(); |
} |
@@ -88,6 +113,16 @@ ServiceProvider* ServiceRegistry::GetServiceProvider() { |
return remote_service_provider_.get(); |
} |
+void ServiceRegistry::OnGotContentHandlerID(uint32_t content_handler_id) { |
+ DCHECK(!is_content_handler_id_valid_); |
+ is_content_handler_id_valid_ = true; |
+ content_handler_id_ = content_handler_id; |
+ std::vector<Closure> callbacks; |
+ callbacks.swap(content_handler_id_callbacks_); |
+ for (auto callback : callbacks) |
+ callback.Run(); |
+} |
+ |
void ServiceRegistry::ConnectToService(const mojo::String& service_name, |
ScopedMessagePipeHandle client_handle) { |
service_connector_registry_.ConnectToService(this, service_name, |