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

Side by Side Diff: chrome/browser/chromeos/system/automatic_reboot_manager.cc

Issue 1355063004: Template methods on Timer classes instead of the classes themselves. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: timer: fixcaller Created 5 years, 3 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/system/automatic_reboot_manager.h" 5 #include "chrome/browser/chromeos/system/automatic_reboot_manager.h"
6 6
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <sys/stat.h> 8 #include <sys/stat.h>
9 #include <sys/types.h> 9 #include <sys/types.h>
10 10
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 dbus_thread_manager->GetUpdateEngineClient()->AddObserver(this); 171 dbus_thread_manager->GetUpdateEngineClient()->AddObserver(this);
172 172
173 // If no user is logged in, a reboot may be performed whenever the user is 173 // If no user is logged in, a reboot may be performed whenever the user is
174 // idle. Start listening for user activity to determine whether the user is 174 // idle. Start listening for user activity to determine whether the user is
175 // idle or not. 175 // idle or not.
176 if (!user_manager::UserManager::Get()->IsUserLoggedIn()) { 176 if (!user_manager::UserManager::Get()->IsUserLoggedIn()) {
177 if (ui::UserActivityDetector::Get()) 177 if (ui::UserActivityDetector::Get())
178 ui::UserActivityDetector::Get()->AddObserver(this); 178 ui::UserActivityDetector::Get()->AddObserver(this);
179 notification_registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_CHANGED, 179 notification_registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_CHANGED,
180 content::NotificationService::AllSources()); 180 content::NotificationService::AllSources());
181 login_screen_idle_timer_.reset( 181 login_screen_idle_timer_.reset(new base::OneShotTimer);
182 new base::OneShotTimer<AutomaticRebootManager>);
183 OnUserActivity(NULL); 182 OnUserActivity(NULL);
184 } 183 }
185 184
186 // In a regular browser, base::ThreadTaskRunnerHandle::Get() and 185 // In a regular browser, base::ThreadTaskRunnerHandle::Get() and
187 // base::ThreadTaskRunnerHandle::Get() return pointers to the same object. 186 // base::ThreadTaskRunnerHandle::Get() return pointers to the same object.
188 // In unit tests, using base::ThreadTaskRunnerHandle::Get() has the advantage 187 // In unit tests, using base::ThreadTaskRunnerHandle::Get() has the advantage
189 // that it allows a custom base::SingleThreadTaskRunner to be injected. 188 // that it allows a custom base::SingleThreadTaskRunner to be injected.
190 base::SequencedWorkerPool* worker_pool = 189 base::SequencedWorkerPool* worker_pool =
191 content::BrowserThread::GetBlockingPool(); 190 content::BrowserThread::GetBlockingPool();
192 worker_pool->PostSequencedWorkerTaskWithShutdownBehavior( 191 worker_pool->PostSequencedWorkerTaskWithShutdownBehavior(
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 Reschedule(); 244 Reschedule();
246 } 245 }
247 246
248 void AutomaticRebootManager::OnUserActivity(const ui::Event* event) { 247 void AutomaticRebootManager::OnUserActivity(const ui::Event* event) {
249 if (!login_screen_idle_timer_) 248 if (!login_screen_idle_timer_)
250 return; 249 return;
251 250
252 // Destroying and re-creating the timer ensures that Start() posts a fresh 251 // Destroying and re-creating the timer ensures that Start() posts a fresh
253 // task with a delay of exactly |kLoginManagerIdleTimeoutMs|, ensuring that 252 // task with a delay of exactly |kLoginManagerIdleTimeoutMs|, ensuring that
254 // the timer fires predictably in tests. 253 // the timer fires predictably in tests.
255 login_screen_idle_timer_.reset( 254 login_screen_idle_timer_.reset(new base::OneShotTimer);
256 new base::OneShotTimer<AutomaticRebootManager>);
257 login_screen_idle_timer_->Start( 255 login_screen_idle_timer_->Start(
258 FROM_HERE, 256 FROM_HERE,
259 base::TimeDelta::FromMilliseconds(kLoginManagerIdleTimeoutMs), 257 base::TimeDelta::FromMilliseconds(kLoginManagerIdleTimeoutMs),
260 base::Bind(&AutomaticRebootManager::MaybeReboot, 258 base::Bind(&AutomaticRebootManager::MaybeReboot,
261 base::Unretained(this), 259 base::Unretained(this),
262 false)); 260 false));
263 } 261 }
264 262
265 void AutomaticRebootManager::Observe( 263 void AutomaticRebootManager::Observe(
266 int type, 264 int type,
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 // Safeguard against reboot loops: Ensure that the uptime after which a reboot 354 // Safeguard against reboot loops: Ensure that the uptime after which a reboot
357 // is actually requested and the grace period begins is never less than 355 // is actually requested and the grace period begins is never less than
358 // |kMinRebootUptimeMs|. 356 // |kMinRebootUptimeMs|.
359 const base::TimeTicks now = clock_->NowTicks(); 357 const base::TimeTicks now = clock_->NowTicks();
360 const base::TimeTicks grace_start_time = std::max(reboot_request_time, 358 const base::TimeTicks grace_start_time = std::max(reboot_request_time,
361 boot_time_ + base::TimeDelta::FromMilliseconds(kMinRebootUptimeMs)); 359 boot_time_ + base::TimeDelta::FromMilliseconds(kMinRebootUptimeMs));
362 360
363 // Set up a timer for the start of the grace period. If the grace period 361 // Set up a timer for the start of the grace period. If the grace period
364 // started in the past, the timer is still used with its delay set to zero. 362 // started in the past, the timer is still used with its delay set to zero.
365 if (!grace_start_timer_) 363 if (!grace_start_timer_)
366 grace_start_timer_.reset(new base::OneShotTimer<AutomaticRebootManager>); 364 grace_start_timer_.reset(new base::OneShotTimer);
367 grace_start_timer_->Start(FROM_HERE, 365 grace_start_timer_->Start(FROM_HERE,
368 std::max(grace_start_time - now, kZeroTimeDelta), 366 std::max(grace_start_time - now, kZeroTimeDelta),
369 base::Bind(&AutomaticRebootManager::RequestReboot, 367 base::Bind(&AutomaticRebootManager::RequestReboot,
370 base::Unretained(this))); 368 base::Unretained(this)));
371 369
372 const base::TimeTicks grace_end_time = grace_start_time + 370 const base::TimeTicks grace_end_time = grace_start_time +
373 base::TimeDelta::FromMilliseconds(kGracePeriodMs); 371 base::TimeDelta::FromMilliseconds(kGracePeriodMs);
374 // Set up a timer for the end of the grace period. If the grace period ended 372 // Set up a timer for the end of the grace period. If the grace period ended
375 // in the past, the timer is still used with its delay set to zero. 373 // in the past, the timer is still used with its delay set to zero.
376 if (!grace_end_timer_) 374 if (!grace_end_timer_)
377 grace_end_timer_.reset(new base::OneShotTimer<AutomaticRebootManager>); 375 grace_end_timer_.reset(new base::OneShotTimer);
378 grace_end_timer_->Start(FROM_HERE, 376 grace_end_timer_->Start(FROM_HERE,
379 std::max(grace_end_time - now, kZeroTimeDelta), 377 std::max(grace_end_time - now, kZeroTimeDelta),
380 base::Bind(&AutomaticRebootManager::Reboot, 378 base::Bind(&AutomaticRebootManager::Reboot,
381 base::Unretained(this))); 379 base::Unretained(this)));
382 } 380 }
383 381
384 void AutomaticRebootManager::RequestReboot() { 382 void AutomaticRebootManager::RequestReboot() {
385 reboot_requested_ = true; 383 reboot_requested_ = true;
386 DCHECK_NE(AutomaticRebootManagerObserver::REBOOT_REASON_UNKNOWN, 384 DCHECK_NE(AutomaticRebootManagerObserver::REBOOT_REASON_UNKNOWN,
387 reboot_reason_); 385 reboot_reason_);
(...skipping 25 matching lines...) Expand all
413 } 411 }
414 412
415 login_screen_idle_timer_.reset(); 413 login_screen_idle_timer_.reset();
416 grace_start_timer_.reset(); 414 grace_start_timer_.reset();
417 grace_end_timer_.reset(); 415 grace_end_timer_.reset();
418 DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); 416 DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
419 } 417 }
420 418
421 } // namespace system 419 } // namespace system
422 } // namespace chromeos 420 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698