summaryrefslogtreecommitdiffstats
path: root/mojo/service_manager
diff options
context:
space:
mode:
authorcpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-07 22:04:42 +0000
committercpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-07 22:04:42 +0000
commite2682416232911ea031f922ad63674a7a999a6dd (patch)
treef94ea6c31f9d529a9c83c76c6045531959654cbb /mojo/service_manager
parent2ddd5657a5f1b693cd0b65bc21cd220083647d62 (diff)
downloadchromium_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.cc15
-rw-r--r--mojo/service_manager/service_manager.h12
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);