diff options
author | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-07 22:04:42 +0000 |
---|---|---|
committer | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-07 22:04:42 +0000 |
commit | e2682416232911ea031f922ad63674a7a999a6dd (patch) | |
tree | f94ea6c31f9d529a9c83c76c6045531959654cbb /mojo/service_manager | |
parent | 2ddd5657a5f1b693cd0b65bc21cd220083647d62 (diff) | |
download | chromium_src-e2682416232911ea031f922ad63674a7a999a6dd.zip chromium_src-e2682416232911ea031f922ad63674a7a999a6dd.tar.gz chromium_src-e2682416232911ea031f922ad63674a7a999a6dd.tar.bz2 |
Mojo Spy core first CL. Introduces mojo::Spy files
Currently only the most basic interception of message pipes.
See design document:
https://docs.google.com/a/chromium.org/document/d/11FKYXf9mSohlsgl4JmGlyWE1ScX3DKdssdjub63tkwA/edit#heading=h.fi6hmvi95gtz
BUG=360188
TEST=none
Review URL: https://codereview.chromium.org/225203002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@262209 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo/service_manager')
-rw-r--r-- | mojo/service_manager/service_manager.cc | 15 | ||||
-rw-r--r-- | mojo/service_manager/service_manager.h | 12 |
2 files changed, 25 insertions, 2 deletions
diff --git a/mojo/service_manager/service_manager.cc b/mojo/service_manager/service_manager.cc index ab72bdf..f12249e 100644 --- a/mojo/service_manager/service_manager.cc +++ b/mojo/service_manager/service_manager.cc @@ -70,7 +70,9 @@ bool ServiceManager::TestAPI::HasFactoryForURL(const GURL& url) const { manager_->url_to_service_factory_.end(); } -ServiceManager::ServiceManager() : default_loader_(NULL) { +ServiceManager::ServiceManager() + : default_loader_(NULL), + interceptor_(NULL) { } ServiceManager::~ServiceManager() { @@ -100,7 +102,12 @@ void ServiceManager::Connect(const GURL& url, service_factory = new ServiceFactory(this, url); url_to_service_factory_[url] = service_factory; } - service_factory->ConnectToClient(client_handle.Pass()); + if (interceptor_) { + service_factory->ConnectToClient( + interceptor_->OnConnectToClient(url, client_handle.Pass())); + } else { + service_factory->ConnectToClient(client_handle.Pass()); + } } void ServiceManager::SetLoaderForURL(ServiceLoader* loader, const GURL& url) { @@ -114,6 +121,10 @@ void ServiceManager::SetLoaderForScheme(ServiceLoader* loader, scheme_to_loader_[scheme] = loader; } +void ServiceManager::SetInterceptor(Interceptor* interceptor) { + interceptor_ = interceptor; +} + ServiceLoader* ServiceManager::GetLoaderForURL(const GURL& url) { URLToLoaderMap::const_iterator url_it = url_to_loader_.find(url); if (url_it != url_to_loader_.end()) diff --git a/mojo/service_manager/service_manager.h b/mojo/service_manager/service_manager.h index f2ee988..6d9ab5d 100644 --- a/mojo/service_manager/service_manager.h +++ b/mojo/service_manager/service_manager.h @@ -39,6 +39,15 @@ class MOJO_SERVICE_MANAGER_EXPORT ServiceManager { ServiceManager* manager_; }; + // Interface class for debugging only. + class Interceptor { + public: + virtual ~Interceptor() {} + // Called when ServiceManager::Connect is called. + virtual ScopedMessagePipeHandle OnConnectToClient( + const GURL& url, ScopedMessagePipeHandle handle) = 0; + }; + ServiceManager(); ~ServiceManager(); @@ -58,6 +67,8 @@ class MOJO_SERVICE_MANAGER_EXPORT ServiceManager { // Sets a Loader to be used for a specific url scheme. // Does not take ownership of |loader|. void SetLoaderForScheme(ServiceLoader* loader, const std::string& scheme); + // Allows to interpose a debugger to service connections. + void SetInterceptor(Interceptor* interceptor); private: class ServiceFactory; @@ -77,6 +88,7 @@ class MOJO_SERVICE_MANAGER_EXPORT ServiceManager { URLToLoaderMap url_to_loader_; SchemeToLoaderMap scheme_to_loader_; ServiceLoader* default_loader_; + Interceptor* interceptor_; URLToServiceFactoryMap url_to_service_factory_; DISALLOW_COPY_AND_ASSIGN(ServiceManager); |