| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stdio.h> | 5 #include <stdio.h> |
| 6 | 6 |
| 7 #include "mojo/service_manager/service_manager.h" | 7 #include "mojo/service_manager/service_manager.h" |
| 8 | 8 |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 // static | 63 // static |
| 64 bool ServiceManager::TestAPI::HasCreatedInstance() { | 64 bool ServiceManager::TestAPI::HasCreatedInstance() { |
| 65 return has_created_instance; | 65 return has_created_instance; |
| 66 } | 66 } |
| 67 | 67 |
| 68 bool ServiceManager::TestAPI::HasFactoryForURL(const GURL& url) const { | 68 bool ServiceManager::TestAPI::HasFactoryForURL(const GURL& url) const { |
| 69 return manager_->url_to_service_factory_.find(url) != | 69 return manager_->url_to_service_factory_.find(url) != |
| 70 manager_->url_to_service_factory_.end(); | 70 manager_->url_to_service_factory_.end(); |
| 71 } | 71 } |
| 72 | 72 |
| 73 ServiceManager::ServiceManager() : default_loader_(NULL) { | 73 ServiceManager::ServiceManager() |
| 74 : default_loader_(NULL), |
| 75 interceptor_(NULL) { |
| 74 } | 76 } |
| 75 | 77 |
| 76 ServiceManager::~ServiceManager() { | 78 ServiceManager::~ServiceManager() { |
| 77 for (URLToServiceFactoryMap::iterator it = url_to_service_factory_.begin(); | 79 for (URLToServiceFactoryMap::iterator it = url_to_service_factory_.begin(); |
| 78 it != url_to_service_factory_.end(); ++it) { | 80 it != url_to_service_factory_.end(); ++it) { |
| 79 delete it->second; | 81 delete it->second; |
| 80 } | 82 } |
| 81 url_to_service_factory_.clear(); | 83 url_to_service_factory_.clear(); |
| 82 } | 84 } |
| 83 | 85 |
| 84 // static | 86 // static |
| 85 ServiceManager* ServiceManager::GetInstance() { | 87 ServiceManager* ServiceManager::GetInstance() { |
| 86 static base::LazyInstance<ServiceManager> instance = | 88 static base::LazyInstance<ServiceManager> instance = |
| 87 LAZY_INSTANCE_INITIALIZER; | 89 LAZY_INSTANCE_INITIALIZER; |
| 88 has_created_instance = true; | 90 has_created_instance = true; |
| 89 return &instance.Get(); | 91 return &instance.Get(); |
| 90 } | 92 } |
| 91 | 93 |
| 92 void ServiceManager::Connect(const GURL& url, | 94 void ServiceManager::Connect(const GURL& url, |
| 93 ScopedMessagePipeHandle client_handle) { | 95 ScopedMessagePipeHandle client_handle) { |
| 94 URLToServiceFactoryMap::const_iterator service_it = | 96 URLToServiceFactoryMap::const_iterator service_it = |
| 95 url_to_service_factory_.find(url); | 97 url_to_service_factory_.find(url); |
| 96 ServiceFactory* service_factory; | 98 ServiceFactory* service_factory; |
| 97 if (service_it != url_to_service_factory_.end()) { | 99 if (service_it != url_to_service_factory_.end()) { |
| 98 service_factory = service_it->second; | 100 service_factory = service_it->second; |
| 99 } else { | 101 } else { |
| 100 service_factory = new ServiceFactory(this, url); | 102 service_factory = new ServiceFactory(this, url); |
| 101 url_to_service_factory_[url] = service_factory; | 103 url_to_service_factory_[url] = service_factory; |
| 102 } | 104 } |
| 103 service_factory->ConnectToClient(client_handle.Pass()); | 105 if (interceptor_) { |
| 106 service_factory->ConnectToClient( |
| 107 interceptor_->OnConnectToClient(url, client_handle.Pass())); |
| 108 } else { |
| 109 service_factory->ConnectToClient(client_handle.Pass()); |
| 110 } |
| 104 } | 111 } |
| 105 | 112 |
| 106 void ServiceManager::SetLoaderForURL(ServiceLoader* loader, const GURL& url) { | 113 void ServiceManager::SetLoaderForURL(ServiceLoader* loader, const GURL& url) { |
| 107 DCHECK(url_to_loader_.find(url) == url_to_loader_.end()); | 114 DCHECK(url_to_loader_.find(url) == url_to_loader_.end()); |
| 108 url_to_loader_[url] = loader; | 115 url_to_loader_[url] = loader; |
| 109 } | 116 } |
| 110 | 117 |
| 111 void ServiceManager::SetLoaderForScheme(ServiceLoader* loader, | 118 void ServiceManager::SetLoaderForScheme(ServiceLoader* loader, |
| 112 const std::string& scheme) { | 119 const std::string& scheme) { |
| 113 DCHECK(scheme_to_loader_.find(scheme) == scheme_to_loader_.end()); | 120 DCHECK(scheme_to_loader_.find(scheme) == scheme_to_loader_.end()); |
| 114 scheme_to_loader_[scheme] = loader; | 121 scheme_to_loader_[scheme] = loader; |
| 115 } | 122 } |
| 116 | 123 |
| 124 void ServiceManager::SetInterceptor(Interceptor* interceptor) { |
| 125 interceptor_ = interceptor; |
| 126 } |
| 127 |
| 117 ServiceLoader* ServiceManager::GetLoaderForURL(const GURL& url) { | 128 ServiceLoader* ServiceManager::GetLoaderForURL(const GURL& url) { |
| 118 URLToLoaderMap::const_iterator url_it = url_to_loader_.find(url); | 129 URLToLoaderMap::const_iterator url_it = url_to_loader_.find(url); |
| 119 if (url_it != url_to_loader_.end()) | 130 if (url_it != url_to_loader_.end()) |
| 120 return url_it->second; | 131 return url_it->second; |
| 121 SchemeToLoaderMap::const_iterator scheme_it = | 132 SchemeToLoaderMap::const_iterator scheme_it = |
| 122 scheme_to_loader_.find(url.scheme()); | 133 scheme_to_loader_.find(url.scheme()); |
| 123 if (scheme_it != scheme_to_loader_.end()) | 134 if (scheme_it != scheme_to_loader_.end()) |
| 124 return scheme_it->second; | 135 return scheme_it->second; |
| 125 DCHECK(default_loader_); | 136 DCHECK(default_loader_); |
| 126 return default_loader_; | 137 return default_loader_; |
| 127 } | 138 } |
| 128 | 139 |
| 129 void ServiceManager::OnServiceFactoryError(ServiceFactory* service_factory) { | 140 void ServiceManager::OnServiceFactoryError(ServiceFactory* service_factory) { |
| 130 const GURL url = service_factory->url(); | 141 const GURL url = service_factory->url(); |
| 131 URLToServiceFactoryMap::iterator it = url_to_service_factory_.find(url); | 142 URLToServiceFactoryMap::iterator it = url_to_service_factory_.find(url); |
| 132 DCHECK(it != url_to_service_factory_.end()); | 143 DCHECK(it != url_to_service_factory_.end()); |
| 133 delete it->second; | 144 delete it->second; |
| 134 url_to_service_factory_.erase(it); | 145 url_to_service_factory_.erase(it); |
| 135 GetLoaderForURL(url)->OnServiceError(this, url); | 146 GetLoaderForURL(url)->OnServiceError(this, url); |
| 136 } | 147 } |
| 137 | 148 |
| 138 } // namespace mojo | 149 } // namespace mojo |
| OLD | NEW |