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 OnAppWindowRemoved(AppWindow* app_window) OVERRIDE; 66 virtual void OnAppWindowHidden(apps::AppWindow* app_window) OVERRIDE; 67 virtual void OnAppWindowShown(apps::AppWindow* app_window) OVERRIDE; 68 69 // KeyedService overrides: 70 virtual void Shutdown() OVERRIDE; 71 72 bool HasVisibleAppWindows(apps::AppWindow* app_window) const; 73 74 void NotifyAppStart(const std::string& app_id); 75 void NotifyAppActivated(const std::string& app_id); 76 void NotifyAppDeactivated(const std::string& app_id); 77 void NotifyAppStop(const std::string& app_id); 78 void NotifyChromeTerminating(); 79 80 content::NotificationRegistrar registrar_; 81 Profile* profile_; 82 ObserverList<Observer> observers_; 83 84 DISALLOW_COPY_AND_ASSIGN(AppLifetimeMonitor); 85 }; 86 87 } // namespace apps 88 89 #endif // APPS_APP_LIFETIME_MONITOR_H_ 90