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 #ifndef APPS_APP_SHIM_EXTENSION_APP_SHIM_HANDLER_H_ | 5 #ifndef APPS_APP_SHIM_EXTENSION_APP_SHIM_HANDLER_H_ |
6 #define APPS_APP_SHIM_EXTENSION_APP_SHIM_HANDLER_H_ | 6 #define APPS_APP_SHIM_EXTENSION_APP_SHIM_HANDLER_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 | 10 |
11 #include "apps/app_lifetime_monitor.h" | 11 #include "apps/app_lifetime_monitor.h" |
12 #include "apps/app_shim/app_shim_handler_mac.h" | 12 #include "apps/app_shim/app_shim_handler_mac.h" |
13 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
| 14 #include "chrome/browser/extensions/shell_window_registry.h" |
14 #include "content/public/browser/notification_observer.h" | 15 #include "content/public/browser/notification_observer.h" |
15 #include "content/public/browser/notification_registrar.h" | 16 #include "content/public/browser/notification_registrar.h" |
16 | 17 |
17 class Profile; | 18 class Profile; |
18 | 19 |
19 namespace base { | 20 namespace base { |
20 class FilePath; | 21 class FilePath; |
21 } | 22 } |
22 | 23 |
| 24 namespace content { |
| 25 class WebContents; |
| 26 } |
| 27 |
23 namespace extensions { | 28 namespace extensions { |
24 class Extension; | 29 class Extension; |
25 } | 30 } |
26 | 31 |
27 namespace apps { | 32 namespace apps { |
28 | 33 |
29 // This app shim handler that handles events for app shims that correspond to an | 34 // This app shim handler that handles events for app shims that correspond to an |
30 // extension. | 35 // extension. |
31 class ExtensionAppShimHandler : public AppShimHandler, | 36 class ExtensionAppShimHandler : public AppShimHandler, |
32 public content::NotificationObserver, | 37 public content::NotificationObserver, |
33 public AppLifetimeMonitor::Observer { | 38 public AppLifetimeMonitor::Observer { |
34 public: | 39 public: |
35 class ProfileManagerFacade { | 40 class Delegate { |
36 public: | 41 public: |
37 virtual ~ProfileManagerFacade() {} | 42 virtual ~Delegate() {} |
| 43 |
38 virtual bool ProfileExistsForPath(const base::FilePath& path); | 44 virtual bool ProfileExistsForPath(const base::FilePath& path); |
39 virtual Profile* ProfileForPath(const base::FilePath& path); | 45 virtual Profile* ProfileForPath(const base::FilePath& path); |
| 46 |
| 47 virtual extensions::ShellWindowRegistry::ShellWindowList GetWindows( |
| 48 Profile* profile, const std::string& extension_id); |
| 49 |
| 50 virtual const extensions::Extension* GetAppExtension( |
| 51 Profile* profile, const std::string& extension_id); |
| 52 virtual void LaunchApp(Profile* profile, |
| 53 const extensions::Extension* extension); |
| 54 virtual void LaunchShim(Profile* profile, |
| 55 const extensions::Extension* extension); |
| 56 |
40 }; | 57 }; |
41 | 58 |
42 ExtensionAppShimHandler(); | 59 ExtensionAppShimHandler(); |
43 virtual ~ExtensionAppShimHandler(); | 60 virtual ~ExtensionAppShimHandler(); |
44 | 61 |
45 // AppShimHandler overrides: | 62 // AppShimHandler overrides: |
46 virtual bool OnShimLaunch(Host* host, AppShimLaunchType launch_type) OVERRIDE; | 63 virtual bool OnShimLaunch(Host* host, AppShimLaunchType launch_type) OVERRIDE; |
47 virtual void OnShimClose(Host* host) OVERRIDE; | 64 virtual void OnShimClose(Host* host) OVERRIDE; |
48 virtual void OnShimFocus(Host* host) OVERRIDE; | 65 virtual void OnShimFocus(Host* host) OVERRIDE; |
49 virtual void OnShimQuit(Host* host) OVERRIDE; | 66 virtual void OnShimQuit(Host* host) OVERRIDE; |
50 | 67 |
51 // AppLifetimeMonitor::Observer overrides: | 68 // AppLifetimeMonitor::Observer overrides: |
52 virtual void OnAppStart(Profile* profile, const std::string& app_id) OVERRIDE; | 69 virtual void OnAppStart(Profile* profile, const std::string& app_id) OVERRIDE; |
53 virtual void OnAppActivated(Profile* profile, | 70 virtual void OnAppActivated(Profile* profile, |
54 const std::string& app_id) OVERRIDE; | 71 const std::string& app_id) OVERRIDE; |
55 virtual void OnAppDeactivated(Profile* profile, | 72 virtual void OnAppDeactivated(Profile* profile, |
56 const std::string& app_id) OVERRIDE; | 73 const std::string& app_id) OVERRIDE; |
57 virtual void OnAppStop(Profile* profile, const std::string& app_id) OVERRIDE; | 74 virtual void OnAppStop(Profile* profile, const std::string& app_id) OVERRIDE; |
58 virtual void OnChromeTerminating() OVERRIDE; | 75 virtual void OnChromeTerminating() OVERRIDE; |
59 | 76 |
60 protected: | 77 protected: |
61 typedef std::map<std::pair<Profile*, std::string>, AppShimHandler::Host*> | 78 typedef std::map<std::pair<Profile*, std::string>, AppShimHandler::Host*> |
62 HostMap; | 79 HostMap; |
63 | 80 |
64 // Exposed for testing. | 81 // Exposed for testing. |
65 void set_profile_manager_facade(ProfileManagerFacade* profile_manager_facade); | 82 void set_delegate(Delegate* delegate); |
66 HostMap& hosts() { return hosts_; } | 83 HostMap& hosts() { return hosts_; } |
67 content::NotificationRegistrar& registrar() { return registrar_; } | 84 content::NotificationRegistrar& registrar() { return registrar_; } |
68 | 85 |
69 private: | 86 private: |
70 virtual bool LaunchApp(Profile* profile, | |
71 const std::string& app_id, | |
72 AppShimLaunchType launch_type); | |
73 | |
74 // Listen to the NOTIFICATION_EXTENSION_HOST_DESTROYED message to detect when | 87 // Listen to the NOTIFICATION_EXTENSION_HOST_DESTROYED message to detect when |
75 // an app closes. When that happens, call OnAppClosed on the relevant | 88 // an app closes. When that happens, call OnAppClosed on the relevant |
76 // AppShimHandler::Host which causes the app shim process to quit. | 89 // AppShimHandler::Host which causes the app shim process to quit. |
77 // The host will call OnShimClose on this. | 90 // The host will call OnShimClose on this. |
78 virtual void Observe(int type, | 91 virtual void Observe(int type, |
79 const content::NotificationSource& source, | 92 const content::NotificationSource& source, |
80 const content::NotificationDetails& details) OVERRIDE; | 93 const content::NotificationDetails& details) OVERRIDE; |
81 | 94 |
82 scoped_ptr<ProfileManagerFacade> profile_manager_facade_; | 95 scoped_ptr<Delegate> delegate_; |
83 | 96 |
84 HostMap hosts_; | 97 HostMap hosts_; |
85 | 98 |
86 content::NotificationRegistrar registrar_; | 99 content::NotificationRegistrar registrar_; |
87 }; | 100 }; |
88 | 101 |
89 } // namespace apps | 102 } // namespace apps |
90 | 103 |
91 #endif // APPS_APP_SHIM_EXTENSION_APP_SHIM_HANDLER_H_ | 104 #endif // APPS_APP_SHIM_EXTENSION_APP_SHIM_HANDLER_H_ |
OLD | NEW |