Chromium Code Reviews| Index: mojo/service_manager/service_loader.h |
| diff --git a/mojo/service_manager/service_loader.h b/mojo/service_manager/service_loader.h |
| index 07be7d9a1bf0a314ce4f257bf045c2be2b6524af..9ea7f64a4311e03ed4b32b5aa65548518cbd84ba 100644 |
| --- a/mojo/service_manager/service_loader.h |
| +++ b/mojo/service_manager/service_loader.h |
| @@ -5,8 +5,10 @@ |
| #ifndef MOJO_SERVICE_MANAGER_SERVICE_LOADER_H_ |
| #define MOJO_SERVICE_MANAGER_SERVICE_LOADER_H_ |
| +#include "base/memory/ref_counted.h" |
| #include "mojo/public/cpp/system/core.h" |
| #include "mojo/service_manager/service_manager_export.h" |
| +#include "mojo/services/public/interfaces/network/url_loader.mojom.h" |
| #include "url/gurl.h" |
| namespace mojo { |
| @@ -23,10 +25,53 @@ class ServiceManager; |
| // apps and services. |
| class MOJO_SERVICE_MANAGER_EXPORT ServiceLoader { |
| public: |
| + class LoadServiceCallbacks : public base::RefCounted<LoadServiceCallbacks> { |
|
darin (slow to review)
2014/08/06 23:10:02
nit: you might consider just naming this class Cal
Aaron Boodman
2014/08/07 00:03:12
I like the second idea. Done.
|
| + public: |
| + // Register the requested application with ServiceManager. If the returned |
| + // handle is valid, it should be used to implement the mojo::Application |
| + // interface. |
| + virtual ScopedMessagePipeHandle RegisterApplication() = 0; |
| + |
| + // Load the requested application with a content handler. |
| + virtual void LoadWithContentHandler(const GURL& content_handler_url, |
| + URLResponsePtr response) = 0; |
| + protected: |
| + friend base::RefCounted<LoadServiceCallbacks>; |
| + virtual ~LoadServiceCallbacks() {} |
| + }; |
| + |
| + // Implements RegisterApplication() by returning a handle that was specified |
| + // at construction time. LoadWithContentHandler() is not supported. |
| + class SimpleLoadServiceCallbacks : public LoadServiceCallbacks { |
| + public: |
| + SimpleLoadServiceCallbacks(ScopedMessagePipeHandle shell_handle); |
| + virtual ScopedMessagePipeHandle RegisterApplication() OVERRIDE; |
| + virtual void LoadWithContentHandler(const GURL& content_handler_url, |
| + URLResponsePtr response) OVERRIDE; |
| + private: |
| + ScopedMessagePipeHandle shell_handle_; |
| + virtual ~SimpleLoadServiceCallbacks(); |
| + }; |
| + |
| virtual ~ServiceLoader() {} |
| - virtual void LoadService(ServiceManager* manager, |
| + |
| + // Load the application named |url|. Applications can be loaded two ways: |
| + // |
| + // 1. |url| can refer directly to a Mojo application. In this case, call |
| + // callbacks->RegisterApplication(). The returned handle should be used to |
| + // implement the mojo.Application interface. Note that the returned handle |
| + // can be invalid in the case where the application has already been |
| + // loaded. |
| + // |
| + // 2. |url| can refer to some content that can be handled by some other Mojo |
| + // application. In this case, call callbacks->LoadWithContentHandler() and |
| + // specify the URL of the application that should handle the content. |
| + // The specified application must implement the mojo.ContentHandler |
| + // interface. |
| + virtual void LoadService(ServiceManager* service_manager, |
|
darin (slow to review)
2014/08/06 23:10:01
nit: this method could just be called Load
Aaron Boodman
2014/08/07 00:03:12
Done.
|
| const GURL& url, |
| - ScopedMessagePipeHandle shell_handle) = 0; |
| + scoped_refptr<LoadServiceCallbacks> callbacks) = 0; |
| + |
| virtual void OnServiceError(ServiceManager* manager, const GURL& url) = 0; |
| protected: |