| Index: mojo/shell/service_connector.cc
|
| diff --git a/mojo/shell/service_connector.cc b/mojo/shell/service_connector.cc
|
| index afbb8041384ef240b923abe89e0558fda06bebf3..3b924233fccf0b583eccf29f009b5ae113799964 100644
|
| --- a/mojo/shell/service_connector.cc
|
| +++ b/mojo/shell/service_connector.cc
|
| @@ -5,19 +5,20 @@
|
| #include "mojo/shell/service_connector.h"
|
|
|
| #include "base/logging.h"
|
| +#include "mojo/public/bindings/error_handler.h"
|
| #include "mojo/public/bindings/remote_ptr.h"
|
| #include "mojom/shell.h"
|
|
|
| namespace mojo {
|
| namespace shell {
|
|
|
| -class ServiceConnector::ServiceFactory : public Shell {
|
| +class ServiceConnector::ServiceFactory : public Shell, public ErrorHandler {
|
| public:
|
| ServiceFactory(ServiceConnector* connector, const GURL& url)
|
| : connector_(connector),
|
| url_(url) {
|
| MessagePipe pipe;
|
| - shell_client_.reset(pipe.handle0.Pass(), this);
|
| + shell_client_.reset(pipe.handle0.Pass(), this, this);
|
| connector_->GetLoaderForURL(url)->Load(url, pipe.handle1.Pass());
|
| }
|
| virtual ~ServiceFactory() {}
|
| @@ -32,6 +33,12 @@ class ServiceConnector::ServiceFactory : public Shell {
|
| connector_->Connect(GURL(url.To<std::string>()), client_pipe.Pass());
|
| }
|
|
|
| + virtual void OnError() MOJO_OVERRIDE {
|
| + connector_->RemoveServiceFactory(this);
|
| + }
|
| +
|
| + GURL url() const { return url_; }
|
| +
|
| private:
|
| ServiceConnector* connector_;
|
| GURL url_;
|
| @@ -80,5 +87,17 @@ void ServiceConnector::Connect(const GURL& url,
|
| service_factory->ConnectToClient(client_handle.Pass());
|
| }
|
|
|
| +bool ServiceConnector::HasFactoryForURL(const GURL& url) const {
|
| + return url_to_service_factory_.find(url) != url_to_service_factory_.end();
|
| +}
|
| +
|
| +void ServiceConnector::RemoveServiceFactory(ServiceFactory* service_factory) {
|
| + ServiceFactoryMap::iterator it =
|
| + url_to_service_factory_.find(service_factory->url());
|
| + DCHECK(it != url_to_service_factory_.end());
|
| + delete it->second;
|
| + url_to_service_factory_.erase(it);
|
| +}
|
| +
|
| } // namespace shell
|
| } // namespace mojo
|
|
|