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

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: rebase 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::api::runtime::OnRestartRequired::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::api::runtime::OnRestartRequired::Reason restart_reason =
52 return; 83 extensions::api::runtime::OnRestartRequired::REASON_NONE;
84 switch (reason) {
85 case REBOOT_REASON_OS_UPDATE:
86 restart_reason =
87 extensions::api::runtime::OnRestartRequired::REASON_OS_UPDATE;
88 break;
89 case REBOOT_REASON_PERIODIC:
90 restart_reason =
91 extensions::api::runtime::OnRestartRequired::REASON_PERIODIC;
92 break;
93 default:
94 NOTREACHED() << "Unknown reboot reason=" << reason;
95 return;
96 }
53 97
54 // Setup timer to force restart once the wait period expires. 98 extensions::RuntimeEventRouter::DispatchOnRestartRequiredEvent(
55 restart_timer_.Start( 99 profile_, app_id_, restart_reason);
56 FROM_HERE, base::TimeDelta::FromMilliseconds(kForceRestartWaitTimeMs),
57 this, &KioskAppUpdateService::ForceRestart);
58 } 100 }
59 101
60 void KioskAppUpdateService::ForceRestart() { 102 void KioskAppUpdateService::WillDestroyAutomaticRebootManager() {
61 // Force a chrome restart (not a logout or reboot) by closing all browsers. 103 automatic_reboot_manager_->RemoveObserver(this);
62 LOG(WARNING) << "Force closing all browsers to update kiosk app."; 104 automatic_reboot_manager_ = NULL;
63 chrome::CloseAllBrowsers();
64 } 105 }
65 106
66 KioskAppUpdateServiceFactory::KioskAppUpdateServiceFactory() 107 KioskAppUpdateServiceFactory::KioskAppUpdateServiceFactory()
67 : BrowserContextKeyedServiceFactory( 108 : BrowserContextKeyedServiceFactory(
68 "KioskAppUpdateService", 109 "KioskAppUpdateService",
69 BrowserContextDependencyManager::GetInstance()) { 110 BrowserContextDependencyManager::GetInstance()) {
70 DependsOn(extensions::ExtensionSystemFactory::GetInstance()); 111 DependsOn(extensions::ExtensionSystemFactory::GetInstance());
71 } 112 }
72 113
73 KioskAppUpdateServiceFactory::~KioskAppUpdateServiceFactory() { 114 KioskAppUpdateServiceFactory::~KioskAppUpdateServiceFactory() {
(...skipping 11 matching lines...) Expand all
85 GetInstance()->GetServiceForBrowserContext(profile, true)); 126 GetInstance()->GetServiceForBrowserContext(profile, true));
86 } 127 }
87 128
88 // static 129 // static
89 KioskAppUpdateServiceFactory* KioskAppUpdateServiceFactory::GetInstance() { 130 KioskAppUpdateServiceFactory* KioskAppUpdateServiceFactory::GetInstance() {
90 return Singleton<KioskAppUpdateServiceFactory>::get(); 131 return Singleton<KioskAppUpdateServiceFactory>::get();
91 } 132 }
92 133
93 BrowserContextKeyedService* 134 BrowserContextKeyedService*
94 KioskAppUpdateServiceFactory::BuildServiceInstanceFor( 135 KioskAppUpdateServiceFactory::BuildServiceInstanceFor(
95 content::BrowserContext* profile) const { 136 content::BrowserContext* context) const {
96 return new KioskAppUpdateService(static_cast<Profile*>(profile)); 137 return new KioskAppUpdateService(
138 Profile::FromBrowserContext(context),
139 g_browser_process->platform_part()->automatic_reboot_manager());
97 } 140 }
98 141
99 } // namespace chromeos 142 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698