| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef SHELL_APPLICATION_MANAGER_APPLICATION_MANAGER_H_ | 5 #ifndef SHELL_APPLICATION_MANAGER_APPLICATION_MANAGER_H_ |
| 6 #define SHELL_APPLICATION_MANAGER_APPLICATION_MANAGER_H_ | 6 #define SHELL_APPLICATION_MANAGER_APPLICATION_MANAGER_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 } | 27 } |
| 28 | 28 |
| 29 namespace mojo { | 29 namespace mojo { |
| 30 | 30 |
| 31 // ApplicationManager requires implementations of NativeRunner and | 31 // ApplicationManager requires implementations of NativeRunner and |
| 32 // NativeRunnerFactory to run native applications. | 32 // NativeRunnerFactory to run native applications. |
| 33 class NativeRunner { | 33 class NativeRunner { |
| 34 public: | 34 public: |
| 35 // Parameter for |Start()| to specify its cleanup behavior. | 35 // Parameter for |Start()| to specify its cleanup behavior. |
| 36 enum CleanupBehavior { DeleteAppPath, DontDeleteAppPath }; | 36 enum CleanupBehavior { DeleteAppPath, DontDeleteAppPath }; |
| 37 |
| 37 virtual ~NativeRunner() {} | 38 virtual ~NativeRunner() {} |
| 38 | 39 |
| 39 // Loads the app in the file at |app_path| and runs it on some other | 40 // Loads the app in the file at |app_path| and runs it on some other |
| 40 // thread/process. If |cleanup_behavior| is |true|, takes ownership of the | 41 // thread/process. If |cleanup_behavior| is |true|, takes ownership of the |
| 41 // file. |app_completed_callback| is posted (to the thread on which |Start()| | 42 // file. |app_completed_callback| is posted (to the thread on which |Start()| |
| 42 // was called) after |MojoMain()| completes. | 43 // was called) after |MojoMain()| completes. |
| 44 // TODO(vtl): |app_path| and |cleanup_behavior| should probably be moved to |
| 45 // the factory's Create(). Rationale: The factory may need information from |
| 46 // the file to decide what kind of NativeRunner to make. |
| 43 virtual void Start(const base::FilePath& app_path, | 47 virtual void Start(const base::FilePath& app_path, |
| 44 CleanupBehavior cleanup_behavior, | 48 CleanupBehavior cleanup_behavior, |
| 45 InterfaceRequest<Application> application_request, | 49 InterfaceRequest<Application> application_request, |
| 46 const base::Closure& app_completed_callback) = 0; | 50 const base::Closure& app_completed_callback) = 0; |
| 47 }; | 51 }; |
| 48 | 52 |
| 49 class NativeRunnerFactory { | 53 class NativeRunnerFactory { |
| 50 public: | 54 public: |
| 55 // Options for running the native app. (This will contain, e.g., information |
| 56 // about the sandbox profile, etc.) |
| 57 struct Options { |
| 58 // Constructs with default options. |
| 59 Options() : force_in_process(false) {} |
| 60 |
| 61 bool force_in_process; |
| 62 }; |
| 63 |
| 51 virtual ~NativeRunnerFactory() {} | 64 virtual ~NativeRunnerFactory() {} |
| 52 virtual scoped_ptr<NativeRunner> Create() = 0; | 65 virtual scoped_ptr<NativeRunner> Create(const Options& options) = 0; |
| 53 }; | 66 }; |
| 54 | 67 |
| 55 class ApplicationManager { | 68 class ApplicationManager { |
| 56 public: | 69 public: |
| 57 class Delegate { | 70 class Delegate { |
| 58 public: | 71 public: |
| 59 virtual ~Delegate(); | 72 virtual ~Delegate(); |
| 60 // Send when the Application holding the handle on the other end of the | 73 // Send when the Application holding the handle on the other end of the |
| 61 // Shell pipe goes away. | 74 // Shell pipe goes away. |
| 62 virtual void OnApplicationError(const GURL& url); | 75 virtual void OnApplicationError(const GURL& url); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 } | 136 } |
| 124 void set_disable_cache(bool disable_cache) { disable_cache_ = disable_cache; } | 137 void set_disable_cache(bool disable_cache) { disable_cache_ = disable_cache; } |
| 125 // Sets a Loader to be used for a specific url. | 138 // Sets a Loader to be used for a specific url. |
| 126 void SetLoaderForURL(scoped_ptr<ApplicationLoader> loader, const GURL& url); | 139 void SetLoaderForURL(scoped_ptr<ApplicationLoader> loader, const GURL& url); |
| 127 // Sets a Loader to be used for a specific url scheme. | 140 // Sets a Loader to be used for a specific url scheme. |
| 128 void SetLoaderForScheme(scoped_ptr<ApplicationLoader> loader, | 141 void SetLoaderForScheme(scoped_ptr<ApplicationLoader> loader, |
| 129 const std::string& scheme); | 142 const std::string& scheme); |
| 130 // These strings will be passed to the Initialize() method when an | 143 // These strings will be passed to the Initialize() method when an |
| 131 // Application is instantiated. | 144 // Application is instantiated. |
| 132 void SetArgsForURL(const std::vector<std::string>& args, const GURL& url); | 145 void SetArgsForURL(const std::vector<std::string>& args, const GURL& url); |
| 146 // These options will be used in running any native application at |url|. |
| 147 void SetNativeOptionsForURL(const NativeRunnerFactory::Options& options, |
| 148 const GURL& url); |
| 133 | 149 |
| 134 // Destroys all Shell-ends of connections established with Applications. | 150 // Destroys all Shell-ends of connections established with Applications. |
| 135 // Applications connected by this ApplicationManager will observe pipe errors | 151 // Applications connected by this ApplicationManager will observe pipe errors |
| 136 // and have a chance to shutdown. | 152 // and have a chance to shutdown. |
| 137 void TerminateShellConnections(); | 153 void TerminateShellConnections(); |
| 138 | 154 |
| 139 // Removes a ShellImpl when it encounters an error. | 155 // Removes a ShellImpl when it encounters an error. |
| 140 void OnShellImplError(ShellImpl* shell_impl); | 156 void OnShellImplError(ShellImpl* shell_impl); |
| 141 | 157 |
| 142 private: | 158 private: |
| 143 class ContentHandlerConnection; | 159 class ContentHandlerConnection; |
| 144 | 160 |
| 145 typedef std::map<std::string, ApplicationLoader*> SchemeToLoaderMap; | 161 typedef std::map<std::string, ApplicationLoader*> SchemeToLoaderMap; |
| 146 typedef std::map<GURL, ApplicationLoader*> URLToLoaderMap; | 162 typedef std::map<GURL, ApplicationLoader*> URLToLoaderMap; |
| 147 typedef std::map<GURL, ShellImpl*> URLToShellImplMap; | 163 typedef std::map<GURL, ShellImpl*> URLToShellImplMap; |
| 148 typedef std::map<GURL, ContentHandlerConnection*> URLToContentHandlerMap; | 164 typedef std::map<GURL, ContentHandlerConnection*> URLToContentHandlerMap; |
| 149 typedef std::map<GURL, std::vector<std::string>> URLToArgsMap; | 165 typedef std::map<GURL, std::vector<std::string>> URLToArgsMap; |
| 150 typedef std::map<std::string, GURL> MimeTypeToURLMap; | 166 typedef std::map<std::string, GURL> MimeTypeToURLMap; |
| 167 typedef std::map<GURL, NativeRunnerFactory::Options> URLToNativeOptionsMap; |
| 151 | 168 |
| 152 bool ConnectToRunningApplication(const GURL& resolved_url, | 169 bool ConnectToRunningApplication(const GURL& resolved_url, |
| 153 const GURL& requestor_url, | 170 const GURL& requestor_url, |
| 154 InterfaceRequest<ServiceProvider>* services, | 171 InterfaceRequest<ServiceProvider>* services, |
| 155 ServiceProviderPtr* exposed_services); | 172 ServiceProviderPtr* exposed_services); |
| 156 | 173 |
| 157 bool ConnectToApplicationWithLoader( | 174 bool ConnectToApplicationWithLoader( |
| 158 const GURL& requested_url, | 175 const GURL& requested_url, |
| 159 const GURL& resolved_url, | 176 const GURL& resolved_url, |
| 160 const GURL& requestor_url, | 177 const GURL& requestor_url, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 182 ServiceProviderPtr exposed_services); | 199 ServiceProviderPtr exposed_services); |
| 183 | 200 |
| 184 void HandleFetchCallback(const GURL& requested_url, | 201 void HandleFetchCallback(const GURL& requested_url, |
| 185 const GURL& requestor_url, | 202 const GURL& requestor_url, |
| 186 InterfaceRequest<ServiceProvider> services, | 203 InterfaceRequest<ServiceProvider> services, |
| 187 ServiceProviderPtr exposed_services, | 204 ServiceProviderPtr exposed_services, |
| 188 NativeRunner::CleanupBehavior cleanup_behavior, | 205 NativeRunner::CleanupBehavior cleanup_behavior, |
| 189 scoped_ptr<Fetcher> fetcher); | 206 scoped_ptr<Fetcher> fetcher); |
| 190 | 207 |
| 191 void RunNativeApplication(InterfaceRequest<Application> application_request, | 208 void RunNativeApplication(InterfaceRequest<Application> application_request, |
| 209 const NativeRunnerFactory::Options& options, |
| 192 NativeRunner::CleanupBehavior cleanup_behavior, | 210 NativeRunner::CleanupBehavior cleanup_behavior, |
| 193 scoped_ptr<Fetcher> fetcher, | 211 scoped_ptr<Fetcher> fetcher, |
| 194 const base::FilePath& file_path, | 212 const base::FilePath& file_path, |
| 195 bool path_exists); | 213 bool path_exists); |
| 196 | 214 |
| 197 void LoadWithContentHandler(const GURL& content_handler_url, | 215 void LoadWithContentHandler(const GURL& content_handler_url, |
| 198 InterfaceRequest<Application> application_request, | 216 InterfaceRequest<Application> application_request, |
| 199 URLResponsePtr url_response); | 217 URLResponsePtr url_response); |
| 200 | 218 |
| 201 // Return the appropriate loader for |url|. This can return NULL if there is | 219 // Return the appropriate loader for |url|. This can return NULL if there is |
| (...skipping 12 matching lines...) Expand all Loading... |
| 214 // Loader management. | 232 // Loader management. |
| 215 // Loaders are chosen in the order they are listed here. | 233 // Loaders are chosen in the order they are listed here. |
| 216 URLToLoaderMap url_to_loader_; | 234 URLToLoaderMap url_to_loader_; |
| 217 SchemeToLoaderMap scheme_to_loader_; | 235 SchemeToLoaderMap scheme_to_loader_; |
| 218 scoped_ptr<ApplicationLoader> default_loader_; | 236 scoped_ptr<ApplicationLoader> default_loader_; |
| 219 scoped_ptr<NativeRunnerFactory> native_runner_factory_; | 237 scoped_ptr<NativeRunnerFactory> native_runner_factory_; |
| 220 | 238 |
| 221 URLToShellImplMap url_to_shell_impl_; | 239 URLToShellImplMap url_to_shell_impl_; |
| 222 URLToContentHandlerMap url_to_content_handler_; | 240 URLToContentHandlerMap url_to_content_handler_; |
| 223 URLToArgsMap url_to_args_; | 241 URLToArgsMap url_to_args_; |
| 242 URLToNativeOptionsMap url_to_native_options_; |
| 224 | 243 |
| 225 base::WeakPtrFactory<ApplicationManager> weak_ptr_factory_; | 244 base::WeakPtrFactory<ApplicationManager> weak_ptr_factory_; |
| 226 | 245 |
| 227 base::SequencedWorkerPool* blocking_pool_; | 246 base::SequencedWorkerPool* blocking_pool_; |
| 228 NetworkServicePtr network_service_; | 247 NetworkServicePtr network_service_; |
| 229 MimeTypeToURLMap mime_type_to_url_; | 248 MimeTypeToURLMap mime_type_to_url_; |
| 230 ScopedVector<NativeRunner> native_runners_; | 249 ScopedVector<NativeRunner> native_runners_; |
| 231 bool disable_cache_; | 250 bool disable_cache_; |
| 232 | 251 |
| 233 DISALLOW_COPY_AND_ASSIGN(ApplicationManager); | 252 DISALLOW_COPY_AND_ASSIGN(ApplicationManager); |
| 234 }; | 253 }; |
| 235 | 254 |
| 236 } // namespace mojo | 255 } // namespace mojo |
| 237 | 256 |
| 238 #endif // SHELL_APPLICATION_MANAGER_APPLICATION_MANAGER_H_ | 257 #endif // SHELL_APPLICATION_MANAGER_APPLICATION_MANAGER_H_ |
| OLD | NEW |