| 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 4f8e6e6565c1b6494daaac7c2fd8f372437caf23..279209d393102afa9e8e066ce82555f7a3106644 100644
 | 
| --- a/mojo/application/public/cpp/lib/service_registry.cc
 | 
| +++ b/mojo/application/public/cpp/lib/service_registry.cc
 | 
| @@ -4,36 +4,38 @@
 | 
|  
 | 
|  #include "mojo/application/public/cpp/lib/service_registry.h"
 | 
|  
 | 
| +#include "base/logging.h"
 | 
|  #include "mojo/application/public/cpp/application_connection.h"
 | 
| -#include "mojo/application/public/cpp/application_impl.h"
 | 
|  #include "mojo/application/public/cpp/service_connector.h"
 | 
|  
 | 
|  namespace mojo {
 | 
|  namespace internal {
 | 
|  
 | 
|  ServiceRegistry::ServiceRegistry(
 | 
| -    ApplicationImpl* application_impl,
 | 
|      const std::string& connection_url,
 | 
|      const std::string& remote_url,
 | 
|      ServiceProviderPtr remote_services,
 | 
|      InterfaceRequest<ServiceProvider> local_services,
 | 
|      const std::set<std::string>& allowed_interfaces)
 | 
| -    : application_impl_(application_impl),
 | 
| -      connection_url_(connection_url),
 | 
| +    : connection_url_(connection_url),
 | 
|        remote_url_(remote_url),
 | 
|        local_binding_(this),
 | 
|        remote_service_provider_(remote_services.Pass()),
 | 
|        allowed_interfaces_(allowed_interfaces),
 | 
|        allow_all_interfaces_(allowed_interfaces_.size() == 1 &&
 | 
| -                            allowed_interfaces_.count("*") == 1) {
 | 
| +                            allowed_interfaces_.count("*") == 1),
 | 
| +      weak_factory_(this) {
 | 
|    if (local_services.is_pending())
 | 
|      local_binding_.Bind(local_services.Pass());
 | 
|  }
 | 
|  
 | 
|  ServiceRegistry::ServiceRegistry()
 | 
| -    : application_impl_(nullptr),
 | 
| -      local_binding_(this),
 | 
| -      allow_all_interfaces_(true) {
 | 
| +    : local_binding_(this),
 | 
| +      allow_all_interfaces_(true),
 | 
| +      weak_factory_(this) {
 | 
| +}
 | 
| +
 | 
| +ServiceRegistry::~ServiceRegistry() {
 | 
|  }
 | 
|  
 | 
|  void ServiceRegistry::SetServiceConnector(ServiceConnector* connector) {
 | 
| @@ -63,6 +65,10 @@ void ServiceRegistry::SetRemoteServiceProviderConnectionErrorHandler(
 | 
|    remote_service_provider_.set_connection_error_handler(handler);
 | 
|  }
 | 
|  
 | 
| +base::WeakPtr<ApplicationConnection> ServiceRegistry::GetWeakPtr() {
 | 
| +  return weak_factory_.GetWeakPtr();
 | 
| +}
 | 
| +
 | 
|  void ServiceRegistry::RemoveServiceConnectorForName(
 | 
|      const std::string& interface_name) {
 | 
|    service_connector_registry_.RemoveServiceConnectorForName(interface_name);
 | 
| @@ -82,14 +88,6 @@ ServiceProvider* ServiceRegistry::GetServiceProvider() {
 | 
|    return remote_service_provider_.get();
 | 
|  }
 | 
|  
 | 
| -ServiceRegistry::~ServiceRegistry() {
 | 
| -}
 | 
| -
 | 
| -void ServiceRegistry::OnCloseConnection() {
 | 
| -  if (application_impl_)
 | 
| -    application_impl_->CloseConnection(this);
 | 
| -}
 | 
| -
 | 
|  void ServiceRegistry::ConnectToService(const mojo::String& service_name,
 | 
|                                         ScopedMessagePipeHandle client_handle) {
 | 
|    service_connector_registry_.ConnectToService(this, service_name,
 | 
| 
 |