| 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,
 | 
| 
 |