1 // Copyright (c) 2012 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_RESTORE_SERVICE_H_ 6 #define APPS_APP_RESTORE_SERVICE_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "apps/app_lifetime_monitor.h" 12 #include "apps/shell_window_registry.h" 13 #include "components/browser_context_keyed_service/browser_context_keyed_service.h" 14 15 namespace extensions { 16 class Extension; 17 } 18 19 class Profile; 20 21 namespace apps { 22 23 // Tracks what apps need to be restarted when the browser restarts. 24 class AppRestoreService : public BrowserContextKeyedService, 25 public AppLifetimeMonitor::Observer { 26 public: 27 // Returns true if apps should be restored on the current platform, given 28 // whether this new browser process launched due to a restart. 29 static bool ShouldRestoreApps(bool is_browser_restart); 30 31 explicit AppRestoreService(Profile* profile); 32 33 // Restart apps that need to be restarted and clear the "running" preference 34 // from apps to prevent them being restarted in subsequent restarts. 35 void HandleStartup(bool should_restore_apps); 36 37 // Returns whether this extension is running or, at startup, whether it was 38 // running when Chrome was last terminated. 39 bool IsAppRestorable(const std::string& extension_id); 40 41 static AppRestoreService* Get(Profile* profile); 42 43 private: 44 // AppLifetimeMonitor::Observer. 45 virtual void OnAppStart(Profile* profile, const std::string& app_id) OVERRIDE; 46 virtual void OnAppActivated(Profile* profile, 47 const std::string& app_id) OVERRIDE; 48 virtual void OnAppDeactivated(Profile* profile, 49 const std::string& app_id) OVERRIDE; 50 virtual void OnAppStop(Profile* profile, const std::string& app_id) OVERRIDE; 51 virtual void OnChromeTerminating() OVERRIDE; 52 53 // BrowserContextKeyedService. 54 virtual void Shutdown() OVERRIDE; 55 56 void RecordAppStart(const std::string& extension_id); 57 void RecordAppStop(const std::string& extension_id); 58 void RecordAppActiveState(const std::string& id, bool is_active); 59 60 void RestoreApp(const extensions::Extension* extension); 61 62 void StartObservingAppLifetime(); 63 void StopObservingAppLifetime(); 64 65 Profile* profile_; 66 67 DISALLOW_COPY_AND_ASSIGN(AppRestoreService); 68 }; 69 70 } // namespace apps 71 72 #endif // APPS_APP_RESTORE_SERVICE_H_ 73