• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 CHROME_BROWSER_CHROMEOS_APP_MODE_KIOSK_APP_UPDATE_SERVICE_H_
6 #define CHROME_BROWSER_CHROMEOS_APP_MODE_KIOSK_APP_UPDATE_SERVICE_H_
7 
8 #include <string>
9 
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "base/memory/singleton.h"
13 #include "base/timer/timer.h"
14 #include "chrome/browser/chromeos/system/automatic_reboot_manager_observer.h"
15 #include "components/browser_context_keyed_service/browser_context_keyed_service.h"
16 #include "components/browser_context_keyed_service/browser_context_keyed_service_factory.h"
17 #include "extensions/browser/update_observer.h"
18 
19 class Profile;
20 
21 namespace extensions {
22 class Extension;
23 }
24 
25 namespace chromeos {
26 
27 namespace system {
28 class AutomaticRebootManager;
29 }
30 
31 // This class enforces automatic restart on app and Chrome updates in app mode.
32 class KioskAppUpdateService : public BrowserContextKeyedService,
33                               public extensions::UpdateObserver,
34                               public system::AutomaticRebootManagerObserver {
35  public:
36   KioskAppUpdateService(
37       Profile* profile,
38       system::AutomaticRebootManager* automatic_reboot_manager);
39   virtual ~KioskAppUpdateService();
40 
set_app_id(const std::string & app_id)41   void set_app_id(const std::string& app_id) { app_id_ = app_id; }
get_app_id()42   std::string get_app_id() const { return app_id_; }
43 
44  private:
45   friend class KioskAppUpdateServiceTest;
46 
47   void StartAppUpdateRestartTimer();
48   void ForceAppUpdateRestart();
49 
50   // BrowserContextKeyedService overrides:
51   virtual void Shutdown() OVERRIDE;
52 
53   // extensions::UpdateObserver overrides:
54   virtual void OnAppUpdateAvailable(
55       const extensions::Extension* extension) OVERRIDE;
OnChromeUpdateAvailable()56   virtual void OnChromeUpdateAvailable() OVERRIDE {}
57 
58   // system::AutomaticRebootManagerObserver overrides:
59   virtual void OnRebootScheduled(Reason reason) OVERRIDE;
60   virtual void WillDestroyAutomaticRebootManager() OVERRIDE;
61 
62   Profile* profile_;
63   std::string app_id_;
64 
65   // After we detect an upgrade we start a one-short timer to force restart.
66   base::OneShotTimer<KioskAppUpdateService> restart_timer_;
67 
68   system::AutomaticRebootManager* automatic_reboot_manager_;  // Not owned.
69 
70   DISALLOW_COPY_AND_ASSIGN(KioskAppUpdateService);
71 };
72 
73 // Singleton that owns all KioskAppUpdateServices and associates them with
74 // profiles.
75 class KioskAppUpdateServiceFactory : public BrowserContextKeyedServiceFactory {
76  public:
77   // Returns the KioskAppUpdateService for |profile|, creating it if it is not
78   // yet created.
79   static KioskAppUpdateService* GetForProfile(Profile* profile);
80 
81   // Returns the KioskAppUpdateServiceFactory instance.
82   static KioskAppUpdateServiceFactory* GetInstance();
83 
84  private:
85   friend struct DefaultSingletonTraits<KioskAppUpdateServiceFactory>;
86 
87   KioskAppUpdateServiceFactory();
88   virtual ~KioskAppUpdateServiceFactory();
89 
90   // BrowserContextKeyedServiceFactory overrides:
91   virtual BrowserContextKeyedService* BuildServiceInstanceFor(
92       content::BrowserContext* profile) const OVERRIDE;
93 };
94 
95 }  // namespace chromeos
96 
97 #endif  // CHROME_BROWSER_CHROMEOS_APP_MODE_KIOSK_APP_UPDATE_SERVICE_H_
98