Home | History | Annotate | Download | only in app_mode
      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/keyed_service/content/browser_context_keyed_service_factory.h"
     16 #include "components/keyed_service/core/keyed_service.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 KeyedService,
     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 
     41   void set_app_id(const std::string& app_id) { app_id_ = 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   // KeyedService overrides:
     51   virtual void Shutdown() OVERRIDE;
     52 
     53   // extensions::UpdateObserver overrides:
     54   virtual void OnAppUpdateAvailable(
     55       const extensions::Extension* extension) OVERRIDE;
     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 KeyedService* 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