| Index: mojo/shell/application_manager.cc
|
| diff --git a/mojo/shell/application_manager.cc b/mojo/shell/application_manager.cc
|
| index d953a9013ef81095b6a990b827c29044db671e73..10d8d146035d46e065e8185b2bfdfb0c5b2d0856 100644
|
| --- a/mojo/shell/application_manager.cc
|
| +++ b/mojo/shell/application_manager.cc
|
| @@ -14,6 +14,7 @@
|
| #include "mojo/application/public/interfaces/content_handler.mojom.h"
|
| #include "mojo/public/cpp/bindings/binding.h"
|
| #include "mojo/public/cpp/bindings/error_handler.h"
|
| +#include "mojo/shell/content_handler_connection.h"
|
| #include "mojo/shell/fetcher.h"
|
| #include "mojo/shell/local_fetcher.h"
|
| #include "mojo/shell/network_fetcher.h"
|
| @@ -32,45 +33,6 @@ bool has_created_instance = false;
|
|
|
| } // namespace
|
|
|
| -class ApplicationManager::ContentHandlerConnection : public ErrorHandler {
|
| - public:
|
| - ContentHandlerConnection(ApplicationManager* manager,
|
| - const GURL& content_handler_url,
|
| - const GURL& requestor_url,
|
| - const std::string& qualifier)
|
| - : manager_(manager),
|
| - content_handler_url_(content_handler_url),
|
| - content_handler_qualifier_(qualifier) {
|
| - ServiceProviderPtr services;
|
| - mojo::URLRequestPtr request(mojo::URLRequest::New());
|
| - request->url = mojo::String::From(content_handler_url.spec());
|
| - manager->ConnectToApplicationInternal(
|
| - request.Pass(), qualifier, requestor_url, GetProxy(&services),
|
| - nullptr, base::Closure());
|
| - MessagePipe pipe;
|
| - content_handler_.Bind(
|
| - InterfacePtrInfo<ContentHandler>(pipe.handle0.Pass(), 0u));
|
| - services->ConnectToService(ContentHandler::Name_, pipe.handle1.Pass());
|
| - content_handler_.set_error_handler(this);
|
| - }
|
| -
|
| - ContentHandler* content_handler() { return content_handler_.get(); }
|
| -
|
| - GURL content_handler_url() { return content_handler_url_; }
|
| - std::string content_handler_qualifier() { return content_handler_qualifier_; }
|
| -
|
| - private:
|
| - // ErrorHandler implementation:
|
| - void OnConnectionError() override { manager_->OnContentHandlerError(this); }
|
| -
|
| - ApplicationManager* manager_;
|
| - GURL content_handler_url_;
|
| - std::string content_handler_qualifier_;
|
| - ContentHandlerPtr content_handler_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ContentHandlerConnection);
|
| -};
|
| -
|
| // static
|
| ApplicationManager::TestAPI::TestAPI(ApplicationManager* manager)
|
| : manager_(manager) {
|
| @@ -93,7 +55,9 @@ ApplicationManager::ApplicationManager(Delegate* delegate)
|
| }
|
|
|
| ApplicationManager::~ApplicationManager() {
|
| - STLDeleteValues(&url_to_content_handler_);
|
| + URLToContentHandlerMap url_to_content_handler(url_to_content_handler_);
|
| + for (auto& pair : url_to_content_handler)
|
| + pair.second->CloseConnection();
|
| TerminateShellConnections();
|
| STLDeleteValues(&url_to_loader_);
|
| STLDeleteValues(&scheme_to_loader_);
|
| @@ -523,14 +487,13 @@ void ApplicationManager::OnShellImplError(ShellImpl* shell_impl) {
|
| on_application_end.Run();
|
| }
|
|
|
| -void ApplicationManager::OnContentHandlerError(
|
| +void ApplicationManager::OnContentHandlerConnectionClosed(
|
| ContentHandlerConnection* content_handler) {
|
| // Remove the mapping to the content handler.
|
| auto it = url_to_content_handler_.find(
|
| std::make_pair(content_handler->content_handler_url(),
|
| content_handler->content_handler_qualifier()));
|
| DCHECK(it != url_to_content_handler_.end());
|
| - delete it->second;
|
| url_to_content_handler_.erase(it);
|
| }
|
|
|
|
|