Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Side by Side Diff: chrome/browser/chromeos/app_mode/kiosk_app_update_service.cc

Issue 16844020: app_mode: Add runtime.onRestartRequired event. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nodoc for onBrowserUpdateAvailable Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/app_mode/kiosk_app_update_service.h" 5 #include "chrome/browser/chromeos/app_mode/kiosk_app_update_service.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chrome/browser/app_mode/app_mode_utils.h" 8 #include "chrome/browser/app_mode/app_mode_utils.h"
9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/browser_process_platform_part_chromeos.h"
11 #include "chrome/browser/chromeos/system/automatic_reboot_manager.h"
12 #include "chrome/browser/extensions/api/runtime/runtime_api.h"
9 #include "chrome/browser/extensions/extension_service.h" 13 #include "chrome/browser/extensions/extension_service.h"
10 #include "chrome/browser/extensions/extension_system.h" 14 #include "chrome/browser/extensions/extension_system.h"
11 #include "chrome/browser/extensions/extension_system_factory.h" 15 #include "chrome/browser/extensions/extension_system_factory.h"
12 #include "chrome/browser/lifetime/application_lifetime.h" 16 #include "chrome/browser/lifetime/application_lifetime.h"
13 #include "chrome/browser/profiles/profile.h" 17 #include "chrome/browser/profiles/profile.h"
14 #include "components/browser_context_keyed_service/browser_context_dependency_ma nager.h" 18 #include "components/browser_context_keyed_service/browser_context_dependency_ma nager.h"
15 19
16 namespace chromeos { 20 namespace chromeos {
17 21
18 namespace { 22 namespace {
19 23
20 // How low to wait after an update is available before we force a restart. 24 // How low to wait after an update is available before we force a restart.
21 const int kForceRestartWaitTimeMs = 24 * 3600 * 1000; // 24 hours. 25 const int kForceRestartWaitTimeMs = 24 * 3600 * 1000; // 24 hours.
22 26
23 } // namespace 27 } // namespace
24 28
25 KioskAppUpdateService::KioskAppUpdateService(Profile* profile) 29 KioskAppUpdateService::KioskAppUpdateService(
26 : profile_(profile) { 30 Profile* profile,
31 system::AutomaticRebootManager* automatic_reboot_manager)
32 : profile_(profile),
33 automatic_reboot_manager_(automatic_reboot_manager) {
27 ExtensionService* service = 34 ExtensionService* service =
28 extensions::ExtensionSystem::Get(profile_)->extension_service(); 35 extensions::ExtensionSystem::Get(profile_)->extension_service();
29 if (service) 36 if (service)
30 service->AddUpdateObserver(this); 37 service->AddUpdateObserver(this);
38
39 if (automatic_reboot_manager_)
40 automatic_reboot_manager_->AddObserver(this);
31 } 41 }
32 42
33 KioskAppUpdateService::~KioskAppUpdateService() { 43 KioskAppUpdateService::~KioskAppUpdateService() {
34 } 44 }
35 45
46 void KioskAppUpdateService::StartAppUpdateRestartTimer() {
47 if (restart_timer_.IsRunning())
48 return;
49
50 // Setup timer to force restart once the wait period expires.
51 restart_timer_.Start(
52 FROM_HERE, base::TimeDelta::FromMilliseconds(kForceRestartWaitTimeMs),
53 this, &KioskAppUpdateService::ForceAppUpdateRestart);
54 }
55
56 void KioskAppUpdateService::ForceAppUpdateRestart() {
57 // Force a chrome restart (not a logout or reboot) by closing all browsers.
58 LOG(WARNING) << "Force closing all browsers to update kiosk app.";
59 chrome::CloseAllBrowsers();
60 }
61
36 void KioskAppUpdateService::Shutdown() { 62 void KioskAppUpdateService::Shutdown() {
37 ExtensionService* service = profile_->GetExtensionService(); 63 ExtensionService* service = profile_->GetExtensionService();
38 if (service) 64 if (service)
39 service->RemoveUpdateObserver(this); 65 service->RemoveUpdateObserver(this);
40 } 66 }
41 67
42 void KioskAppUpdateService::OnAppUpdateAvailable(const std::string& app_id) { 68 void KioskAppUpdateService::OnAppUpdateAvailable(const std::string& app_id) {
43 DCHECK(!app_id_.empty()); 69 DCHECK(!app_id_.empty());
44 if (app_id != app_id_) 70 if (app_id != app_id_)
45 return; 71 return;
46 72
47 StartRestartTimer(); 73 extensions::RuntimeEventRouter::DispatchOnRestartRequiredEvent(
74 profile_,
75 app_id_,
76 extensions::RuntimeEventRouter::RESTART_REASON_APP_UPDATE);
77
78 StartAppUpdateRestartTimer();
48 } 79 }
49 80
50 void KioskAppUpdateService::StartRestartTimer() { 81 void KioskAppUpdateService::OnRebootScheduled(Reason reason) {
51 if (restart_timer_.IsRunning()) 82 extensions::RuntimeEventRouter::RestartReason restart_reason =
52 return; 83 extensions::RuntimeEventRouter::RESTART_REASON_UNKNOWN;
84 switch (reason) {
85 case REBOOT_REASON_OS_UPDATE:
86 restart_reason = extensions::RuntimeEventRouter::RESTART_REASON_OS_UPDATE;
87 break;
88 case REBOOT_REASON_PERIODIC:
89 restart_reason = extensions::RuntimeEventRouter::RESTART_REASON_PERIODIC;
90 break;
91 default:
92 NOTREACHED() << "Unknown reboot reason=" << reason;
93 return;
94 }
53 95
54 // Setup timer to force restart once the wait period expires. 96 extensions::RuntimeEventRouter::DispatchOnRestartRequiredEvent(
55 restart_timer_.Start( 97 profile_, app_id_, restart_reason);
56 FROM_HERE, base::TimeDelta::FromMilliseconds(kForceRestartWaitTimeMs),
57 this, &KioskAppUpdateService::ForceRestart);
58 } 98 }
59 99
60 void KioskAppUpdateService::ForceRestart() { 100 void KioskAppUpdateService::WillDestroyAutomaticRebootManager() {
61 // Force a chrome restart (not a logout or reboot) by closing all browsers. 101 automatic_reboot_manager_->RemoveObserver(this);
62 LOG(WARNING) << "Force closing all browsers to update kiosk app."; 102 automatic_reboot_manager_ = NULL;
63 chrome::CloseAllBrowsers();
64 } 103 }
65 104
66 KioskAppUpdateServiceFactory::KioskAppUpdateServiceFactory() 105 KioskAppUpdateServiceFactory::KioskAppUpdateServiceFactory()
67 : BrowserContextKeyedServiceFactory( 106 : BrowserContextKeyedServiceFactory(
68 "KioskAppUpdateService", 107 "KioskAppUpdateService",
69 BrowserContextDependencyManager::GetInstance()) { 108 BrowserContextDependencyManager::GetInstance()) {
70 DependsOn(extensions::ExtensionSystemFactory::GetInstance()); 109 DependsOn(extensions::ExtensionSystemFactory::GetInstance());
71 } 110 }
72 111
73 KioskAppUpdateServiceFactory::~KioskAppUpdateServiceFactory() { 112 KioskAppUpdateServiceFactory::~KioskAppUpdateServiceFactory() {
(...skipping 11 matching lines...) Expand all
85 GetInstance()->GetServiceForBrowserContext(profile, true)); 124 GetInstance()->GetServiceForBrowserContext(profile, true));
86 } 125 }
87 126
88 // static 127 // static
89 KioskAppUpdateServiceFactory* KioskAppUpdateServiceFactory::GetInstance() { 128 KioskAppUpdateServiceFactory* KioskAppUpdateServiceFactory::GetInstance() {
90 return Singleton<KioskAppUpdateServiceFactory>::get(); 129 return Singleton<KioskAppUpdateServiceFactory>::get();
91 } 130 }
92 131
93 BrowserContextKeyedService* 132 BrowserContextKeyedService*
94 KioskAppUpdateServiceFactory::BuildServiceInstanceFor( 133 KioskAppUpdateServiceFactory::BuildServiceInstanceFor(
95 content::BrowserContext* profile) const { 134 content::BrowserContext* context) const {
96 return new KioskAppUpdateService(static_cast<Profile*>(profile)); 135 return new KioskAppUpdateService(
136 Profile::FromBrowserContext(context),
137 g_browser_process->platform_part()->automatic_reboot_manager());
97 } 138 }
98 139
99 } // namespace chromeos 140 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698