Upstream version 7.35.136.0
[platform/framework/web/crosswalk.git] / src / apps / app_lifetime_monitor.h
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
3 // found in the LICENSE file.
4
5 #ifndef APPS_APP_LIFETIME_MONITOR_H_
6 #define APPS_APP_LIFETIME_MONITOR_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "apps/app_window_registry.h"
12 #include "base/observer_list.h"
13 #include "components/keyed_service/core/keyed_service.h"
14 #include "content/public/browser/notification_observer.h"
15 #include "content/public/browser/notification_registrar.h"
16
17 namespace extensions {
18 class Extension;
19 }
20
21 class Profile;
22
23 namespace apps {
24
25 // Observes startup of apps and their windows and notifies observers of these
26 // events.
27 class AppLifetimeMonitor : public KeyedService,
28                            public content::NotificationObserver,
29                            public AppWindowRegistry::Observer {
30  public:
31   class Observer {
32    public:
33     // Called when the app starts running.
34     virtual void OnAppStart(Profile* profile, const std::string& app_id) = 0;
35     // Called when the app becomes active to the user, i.e. it opens a window.
36     virtual void OnAppActivated(Profile* profile,
37                                 const std::string& app_id) = 0;
38     // Called when the app becomes inactive to the user.
39     virtual void OnAppDeactivated(Profile* profile,
40                                   const std::string& app_id) = 0;
41     // Called when the app stops running.
42     virtual void OnAppStop(Profile* profile, const std::string& app_id) = 0;
43     // Called when chrome is about to terminate. This gives observers a chance
44     // to do something before the apps shut down. This is a system-wide event
45     // so there is no associated profile and app id.
46     virtual void OnChromeTerminating() = 0;
47
48    protected:
49     virtual ~Observer() {}
50   };
51
52   explicit AppLifetimeMonitor(Profile* profile);
53   virtual ~AppLifetimeMonitor();
54
55   void AddObserver(Observer* observer);
56   void RemoveObserver(Observer* observer);
57
58  private:
59   // content::NotificationObserver overrides:
60   virtual void Observe(int type,
61                        const content::NotificationSource& source,
62                        const content::NotificationDetails& details) OVERRIDE;
63
64   // AppWindowRegistry::Observer overrides:
65   virtual void OnAppWindowAdded(AppWindow* app_window) OVERRIDE;
66   virtual void OnAppWindowIconChanged(AppWindow* app_window) OVERRIDE;
67   virtual void OnAppWindowRemoved(AppWindow* app_window) OVERRIDE;
68
69   // KeyedService overrides:
70   virtual void Shutdown() OVERRIDE;
71
72   void NotifyAppStart(const std::string& app_id);
73   void NotifyAppActivated(const std::string& app_id);
74   void NotifyAppDeactivated(const std::string& app_id);
75   void NotifyAppStop(const std::string& app_id);
76   void NotifyChromeTerminating();
77
78   content::NotificationRegistrar registrar_;
79   Profile* profile_;
80   ObserverList<Observer> observers_;
81
82   DISALLOW_COPY_AND_ASSIGN(AppLifetimeMonitor);
83 };
84
85 }  // namespace apps
86
87 #endif  // APPS_APP_LIFETIME_MONITOR_H_