Home | History | Annotate | Download | only in system
      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
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/chromeos/system/automatic_reboot_manager.h"
      6 
      7 #include <string>
      8 #include <utility>
      9 
     10 #include "ash/shell.h"
     11 #include "ash/test/test_shell_delegate.h"
     12 #include "base/compiler_specific.h"
     13 #include "base/files/file_path.h"
     14 #include "base/files/file_util.h"
     15 #include "base/files/scoped_temp_dir.h"
     16 #include "base/memory/ref_counted.h"
     17 #include "base/message_loop/message_loop.h"
     18 #include "base/path_service.h"
     19 #include "base/prefs/pref_registry_simple.h"
     20 #include "base/prefs/testing_pref_service.h"
     21 #include "base/run_loop.h"
     22 #include "base/single_thread_task_runner.h"
     23 #include "base/strings/string_number_conversions.h"
     24 #include "base/test/simple_test_tick_clock.h"
     25 #include "base/thread_task_runner_handle.h"
     26 #include "base/threading/sequenced_worker_pool.h"
     27 #include "base/time/tick_clock.h"
     28 #include "base/values.h"
     29 #include "chrome/browser/chrome_notification_types.h"
     30 #include "chrome/browser/chromeos/login/users/mock_user_manager.h"
     31 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
     32 #include "chrome/common/pref_names.h"
     33 #include "chrome/test/base/testing_browser_process.h"
     34 #include "chromeos/chromeos_paths.h"
     35 #include "chromeos/dbus/dbus_thread_manager.h"
     36 #include "chromeos/dbus/fake_power_manager_client.h"
     37 #include "chromeos/dbus/fake_update_engine_client.h"
     38 #include "content/public/browser/browser_thread.h"
     39 #include "content/public/browser/notification_details.h"
     40 #include "content/public/browser/notification_service.h"
     41 #include "content/public/browser/notification_source.h"
     42 #include "content/public/test/test_browser_thread.h"
     43 #include "testing/gmock/include/gmock/gmock.h"
     44 #include "testing/gtest/include/gtest/gtest.h"
     45 #include "ui/message_center/message_center.h"
     46 
     47 using ::testing::ReturnPointee;
     48 
     49 namespace chromeos {
     50 namespace system {
     51 
     52 namespace {
     53 
     54 // A SingleThreadTaskRunner that mocks the current time and allows it to be
     55 // fast-forwarded. The current time in ticks is returned by Now(). The
     56 // corresponding device uptime is written to |uptime_file_|, providing a mock
     57 // for /proc/uptime.
     58 class MockTimeSingleThreadTaskRunner : public base::SingleThreadTaskRunner {
     59  public:
     60   MockTimeSingleThreadTaskRunner();
     61 
     62   // base::SingleThreadTaskRunner:
     63   virtual bool RunsTasksOnCurrentThread() const OVERRIDE;
     64   virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
     65                                const base::Closure& task,
     66                                base::TimeDelta delay) OVERRIDE;
     67   virtual bool PostNonNestableDelayedTask(
     68       const tracked_objects::Location& from_here,
     69       const base::Closure& task,
     70       base::TimeDelta delay) OVERRIDE;
     71 
     72   void SetUptimeFile(const base::FilePath& uptime_file);
     73   void SetUptime(const base::TimeDelta& uptime);
     74 
     75   const base::TimeDelta& Uptime() const;
     76   const base::TimeTicks& Now() const;
     77 
     78   void FastForwardBy(const base::TimeDelta& delta);
     79   void FastForwardUntilNoTasksRemain();
     80   void RunUntilIdle();
     81 
     82  private:
     83   // Strict weak temporal ordering of tasks.
     84   class TemporalOrder {
     85    public:
     86     bool operator()(
     87         const std::pair<base::TimeTicks, base::Closure>& first_task,
     88         const std::pair<base::TimeTicks, base::Closure>& second_task) const;
     89   };
     90 
     91   virtual ~MockTimeSingleThreadTaskRunner();
     92 
     93   base::FilePath uptime_file_;
     94   base::TimeDelta uptime_;
     95   base::TimeTicks now_;
     96   std::priority_queue<std::pair<base::TimeTicks, base::Closure>,
     97                       std::vector<std::pair<base::TimeTicks, base::Closure> >,
     98                       TemporalOrder> tasks_;
     99 
    100   DISALLOW_COPY_AND_ASSIGN(MockTimeSingleThreadTaskRunner);
    101 };
    102 
    103 class MockTimeTickClock : public base::TickClock {
    104  public:
    105   explicit MockTimeTickClock(
    106       scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner);
    107   virtual ~MockTimeTickClock();
    108 
    109   // base::TickClock:
    110   virtual base::TimeTicks NowTicks() OVERRIDE;
    111 
    112  private:
    113   scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner_;
    114 
    115   DISALLOW_COPY_AND_ASSIGN(MockTimeTickClock);
    116 };
    117 
    118 }  // namespace
    119 
    120 class AutomaticRebootManagerBasicTest : public testing::Test {
    121  protected:
    122   typedef base::OneShotTimer<AutomaticRebootManager> Timer;
    123 
    124   AutomaticRebootManagerBasicTest();
    125   virtual ~AutomaticRebootManagerBasicTest();
    126 
    127   // testing::Test:
    128   virtual void SetUp() OVERRIDE;
    129   virtual void TearDown() OVERRIDE;
    130 
    131   void SetUpdateRebootNeededUptime(const base::TimeDelta& uptime);
    132   void SetRebootAfterUpdate(bool reboot_after_update, bool expect_reboot);
    133   void SetUptimeLimit(const base::TimeDelta& limit, bool expect_reboot);
    134   void NotifyUpdateRebootNeeded();
    135   void NotifyResumed(bool expect_reboot);
    136   void NotifyTerminating(bool expect_reboot);
    137 
    138   void FastForwardBy(const base::TimeDelta& delta, bool expect_reboot);
    139   void FastForwardUntilNoTasksRemain(bool expect_reboot);
    140 
    141   void CreateAutomaticRebootManager(bool expect_reboot);
    142 
    143   bool ReadUpdateRebootNeededUptimeFromFile(base::TimeDelta* uptime);
    144   void VerifyLoginScreenIdleTimerIsStopped() const;
    145   void VerifyNoGracePeriod() const;
    146   void VerifyGracePeriod(const base::TimeDelta& start_uptime) const;
    147 
    148   bool is_user_logged_in_;
    149   bool is_logged_in_as_kiosk_app_;
    150 
    151   // The uptime is read in the blocking thread pool and then processed on the
    152   // UI thread. This causes the UI thread to start processing the uptime when it
    153   // has increased by a small offset already. The offset is calculated and
    154   // stored in |uptime_processing_delay_| so that tests can accurately determine
    155   // the uptime seen by the UI thread.
    156   base::TimeDelta uptime_processing_delay_;
    157   base::TimeDelta update_reboot_needed_uptime_;
    158   base::TimeDelta uptime_limit_;
    159 
    160   scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner_;
    161 
    162   scoped_ptr<AutomaticRebootManager> automatic_reboot_manager_;
    163 
    164  protected:
    165   FakePowerManagerClient* power_manager_client_;  // Not owned.
    166   FakeUpdateEngineClient* update_engine_client_;  // Not owned.
    167 
    168   // Sets the status of |update_engine_client_| to NEED_REBOOT for tests.
    169   void SetUpdateStatusNeedReboot();
    170 
    171  private:
    172   void VerifyTimerIsStopped(const Timer* timer) const;
    173   void VerifyTimerIsRunning(const Timer* timer,
    174                             const base::TimeDelta& delay) const;
    175   void VerifyLoginScreenIdleTimerIsRunning() const;
    176 
    177   base::ScopedTempDir temp_dir_;
    178   base::FilePath update_reboot_needed_uptime_file_;
    179 
    180   bool reboot_after_update_;
    181 
    182   base::ThreadTaskRunnerHandle ui_thread_task_runner_handle_;
    183 
    184   TestingPrefServiceSimple local_state_;
    185   MockUserManager* mock_user_manager_;  // Not owned.
    186   ScopedUserManagerEnabler user_manager_enabler_;
    187 };
    188 
    189 enum AutomaticRebootManagerTestScenario {
    190   AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_LOGIN_SCREEN,
    191   AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_KIOSK_APP_SESSION,
    192   AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_NON_KIOSK_APP_SESSION,
    193 };
    194 
    195 // This class runs each test case three times:
    196 // * once while the login screen is being shown
    197 // * once while a kiosk app session is in progress
    198 // * once while a non-kiosk-app session is in progress
    199 class AutomaticRebootManagerTest
    200     : public AutomaticRebootManagerBasicTest,
    201       public testing::WithParamInterface<AutomaticRebootManagerTestScenario> {
    202  protected:
    203   AutomaticRebootManagerTest();
    204   virtual ~AutomaticRebootManagerTest();
    205 };
    206 
    207 void SaveUptimeToFile(const base::FilePath& path,
    208                       const base::TimeDelta& uptime) {
    209   if (path.empty() || uptime == base::TimeDelta())
    210     return;
    211 
    212   const std::string uptime_seconds = base::DoubleToString(uptime.InSecondsF());
    213   ASSERT_EQ(static_cast<int>(uptime_seconds.size()),
    214             base::WriteFile(path, uptime_seconds.c_str(),
    215                             uptime_seconds.size()));
    216 }
    217 
    218 MockTimeSingleThreadTaskRunner::MockTimeSingleThreadTaskRunner() {
    219 }
    220 
    221 bool MockTimeSingleThreadTaskRunner::RunsTasksOnCurrentThread() const {
    222   return true;
    223 }
    224 
    225 bool MockTimeSingleThreadTaskRunner::PostDelayedTask(
    226     const tracked_objects::Location& from_here,
    227     const base::Closure& task,
    228     base::TimeDelta delay) {
    229   tasks_.push(std::pair<base::TimeTicks, base::Closure>(now_ + delay, task));
    230   return true;
    231 }
    232 
    233 bool MockTimeSingleThreadTaskRunner::PostNonNestableDelayedTask(
    234     const tracked_objects::Location& from_here,
    235     const base::Closure& task,
    236     base::TimeDelta delay) {
    237   NOTREACHED();
    238   return false;
    239 }
    240 
    241 void MockTimeSingleThreadTaskRunner::SetUptimeFile(
    242     const base::FilePath& uptime_file) {
    243   uptime_file_ = uptime_file;
    244   SaveUptimeToFile(uptime_file_, uptime_);
    245 }
    246 
    247 void MockTimeSingleThreadTaskRunner::SetUptime(const base::TimeDelta& uptime) {
    248   uptime_ = uptime;
    249   SaveUptimeToFile(uptime_file_, uptime_);
    250 }
    251 
    252 const base::TimeDelta& MockTimeSingleThreadTaskRunner::Uptime() const {
    253   return uptime_;
    254 }
    255 
    256 const base::TimeTicks& MockTimeSingleThreadTaskRunner::Now() const {
    257   return now_;
    258 }
    259 
    260 void MockTimeSingleThreadTaskRunner::FastForwardBy(
    261     const base::TimeDelta& delta) {
    262   const base::TimeTicks latest = now_ + delta;
    263   base::SequencedWorkerPool* blocking_pool =
    264       content::BrowserThread::GetBlockingPool();
    265   blocking_pool->FlushForTesting();
    266   while (!tasks_.empty() && tasks_.top().first <= latest) {
    267     uptime_ += tasks_.top().first - now_;
    268     SaveUptimeToFile(uptime_file_, uptime_);
    269     now_ = tasks_.top().first;
    270     base::Closure task = tasks_.top().second;
    271     tasks_.pop();
    272     task.Run();
    273     blocking_pool->FlushForTesting();
    274   }
    275   uptime_ += latest - now_;
    276   SaveUptimeToFile(uptime_file_, uptime_);
    277   now_ = latest;
    278 }
    279 
    280 void MockTimeSingleThreadTaskRunner::FastForwardUntilNoTasksRemain() {
    281   base::SequencedWorkerPool* blocking_pool =
    282       content::BrowserThread::GetBlockingPool();
    283   blocking_pool->FlushForTesting();
    284   while (!tasks_.empty()) {
    285     uptime_ += tasks_.top().first - now_;
    286     SaveUptimeToFile(uptime_file_, uptime_);
    287     now_ = tasks_.top().first;
    288     base::Closure task = tasks_.top().second;
    289     tasks_.pop();
    290     task.Run();
    291     blocking_pool->FlushForTesting();
    292   }
    293 }
    294 
    295 void MockTimeSingleThreadTaskRunner::RunUntilIdle() {
    296   base::SequencedWorkerPool* blocking_pool =
    297       content::BrowserThread::GetBlockingPool();
    298   blocking_pool->FlushForTesting();
    299   while (!tasks_.empty() && tasks_.top().first <= now_) {
    300     base::Closure task = tasks_.top().second;
    301     tasks_.pop();
    302     task.Run();
    303     blocking_pool->FlushForTesting();
    304   }
    305 }
    306 
    307 bool MockTimeSingleThreadTaskRunner::TemporalOrder::operator()(
    308     const std::pair<base::TimeTicks, base::Closure>& first_task,
    309     const std::pair<base::TimeTicks, base::Closure>& second_task) const {
    310   return first_task.first > second_task.first;
    311 }
    312 
    313 MockTimeSingleThreadTaskRunner::~MockTimeSingleThreadTaskRunner() {
    314 }
    315 
    316 MockTimeTickClock::MockTimeTickClock(
    317     scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner)
    318     : task_runner_(task_runner) {
    319 }
    320 
    321 MockTimeTickClock::~MockTimeTickClock() {
    322 }
    323 
    324 base::TimeTicks MockTimeTickClock::NowTicks() {
    325   return task_runner_->Now();
    326 }
    327 
    328 AutomaticRebootManagerBasicTest::AutomaticRebootManagerBasicTest()
    329     : is_user_logged_in_(false),
    330       is_logged_in_as_kiosk_app_(false),
    331       task_runner_(new MockTimeSingleThreadTaskRunner),
    332       power_manager_client_(NULL),
    333       update_engine_client_(NULL),
    334       reboot_after_update_(false),
    335       ui_thread_task_runner_handle_(task_runner_),
    336       mock_user_manager_(new MockUserManager),
    337       user_manager_enabler_(mock_user_manager_) {
    338 }
    339 
    340 AutomaticRebootManagerBasicTest::~AutomaticRebootManagerBasicTest() {
    341 }
    342 
    343 void AutomaticRebootManagerBasicTest::SetUp() {
    344   ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
    345   const base::FilePath& temp_dir = temp_dir_.path();
    346   const base::FilePath uptime_file = temp_dir.Append("uptime");
    347   task_runner_->SetUptimeFile(uptime_file);
    348   ASSERT_FALSE(base::WriteFile(uptime_file, NULL, 0));
    349   update_reboot_needed_uptime_file_ =
    350       temp_dir.Append("update_reboot_needed_uptime");
    351   ASSERT_FALSE(base::WriteFile(update_reboot_needed_uptime_file_, NULL, 0));
    352   ASSERT_TRUE(PathService::Override(chromeos::FILE_UPTIME, uptime_file));
    353   ASSERT_TRUE(PathService::Override(chromeos::FILE_UPDATE_REBOOT_NEEDED_UPTIME,
    354                                     update_reboot_needed_uptime_file_));
    355 
    356   TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_);
    357   AutomaticRebootManager::RegisterPrefs(local_state_.registry());
    358 
    359   scoped_ptr<DBusThreadManagerSetter> dbus_setter =
    360       chromeos::DBusThreadManager::GetSetterForTesting();
    361   power_manager_client_ = new FakePowerManagerClient;
    362   dbus_setter->SetPowerManagerClient(
    363       scoped_ptr<PowerManagerClient>(power_manager_client_));
    364   update_engine_client_ = new FakeUpdateEngineClient;
    365   dbus_setter->SetUpdateEngineClient(
    366       scoped_ptr<UpdateEngineClient>(update_engine_client_));
    367 
    368   EXPECT_CALL(*mock_user_manager_, IsUserLoggedIn())
    369      .WillRepeatedly(ReturnPointee(&is_user_logged_in_));
    370   EXPECT_CALL(*mock_user_manager_, IsLoggedInAsKioskApp())
    371      .WillRepeatedly(ReturnPointee(&is_logged_in_as_kiosk_app_));
    372 }
    373 
    374 void AutomaticRebootManagerBasicTest::TearDown() {
    375   // Let the AutomaticRebootManager, if any, unregister itself as an observer of
    376   // several subsystems.
    377   automatic_reboot_manager_.reset();
    378   task_runner_->RunUntilIdle();
    379 
    380   DBusThreadManager::Shutdown();
    381   TestingBrowserProcess::GetGlobal()->SetLocalState(NULL);
    382 }
    383 
    384 void AutomaticRebootManagerBasicTest::SetUpdateRebootNeededUptime(
    385     const base::TimeDelta& uptime) {
    386   update_reboot_needed_uptime_ = uptime;
    387   SaveUptimeToFile(update_reboot_needed_uptime_file_, uptime);
    388 }
    389 
    390 
    391 void AutomaticRebootManagerBasicTest::SetRebootAfterUpdate(
    392     bool reboot_after_update,
    393     bool expect_reboot) {
    394   reboot_after_update_ = reboot_after_update;
    395   local_state_.SetManagedPref(prefs::kRebootAfterUpdate,
    396                               new base::FundamentalValue(reboot_after_update));
    397   task_runner_->RunUntilIdle();
    398   EXPECT_EQ(expect_reboot ? 1 : 0,
    399             power_manager_client_->num_request_restart_calls());
    400 }
    401 
    402 void AutomaticRebootManagerBasicTest::SetUptimeLimit(
    403     const base::TimeDelta& limit,
    404     bool expect_reboot) {
    405   uptime_limit_ = limit;
    406   if (limit == base::TimeDelta()) {
    407     local_state_.RemoveManagedPref(prefs::kUptimeLimit);
    408   } else {
    409     local_state_.SetManagedPref(
    410         prefs::kUptimeLimit,
    411         new base::FundamentalValue(static_cast<int>(limit.InSeconds())));
    412   }
    413   task_runner_->RunUntilIdle();
    414   EXPECT_EQ(expect_reboot ? 1 : 0,
    415             power_manager_client_->num_request_restart_calls());
    416 }
    417 
    418 void AutomaticRebootManagerBasicTest::NotifyUpdateRebootNeeded() {
    419   SetUpdateStatusNeedReboot();
    420   automatic_reboot_manager_->UpdateStatusChanged(
    421       update_engine_client_->GetLastStatus());
    422   task_runner_->RunUntilIdle();
    423   EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
    424 }
    425 
    426 void AutomaticRebootManagerBasicTest::NotifyResumed(bool expect_reboot) {
    427   automatic_reboot_manager_->SuspendDone(base::TimeDelta::FromHours(1));
    428   task_runner_->RunUntilIdle();
    429   EXPECT_EQ(expect_reboot ? 1 : 0,
    430             power_manager_client_->num_request_restart_calls());
    431 }
    432 
    433 void AutomaticRebootManagerBasicTest::NotifyTerminating(bool expect_reboot) {
    434   automatic_reboot_manager_->Observe(
    435       chrome::NOTIFICATION_APP_TERMINATING,
    436       content::Source<AutomaticRebootManagerBasicTest>(this),
    437       content::NotificationService::NoDetails());
    438   task_runner_->RunUntilIdle();
    439   EXPECT_EQ(expect_reboot ? 1 : 0,
    440             power_manager_client_->num_request_restart_calls());
    441 }
    442 
    443 void AutomaticRebootManagerBasicTest::FastForwardBy(
    444     const base::TimeDelta& delta,
    445     bool expect_reboot) {
    446   task_runner_->FastForwardBy(delta);
    447   EXPECT_EQ(expect_reboot ? 1 : 0,
    448             power_manager_client_->num_request_restart_calls());
    449 }
    450 
    451 void AutomaticRebootManagerBasicTest::FastForwardUntilNoTasksRemain(
    452     bool expect_reboot) {
    453   task_runner_->FastForwardUntilNoTasksRemain();
    454   EXPECT_EQ(expect_reboot ? 1 : 0,
    455             power_manager_client_->num_request_restart_calls());
    456 }
    457 
    458 void AutomaticRebootManagerBasicTest::CreateAutomaticRebootManager(
    459     bool expect_reboot) {
    460   automatic_reboot_manager_.reset(new AutomaticRebootManager(
    461       scoped_ptr<base::TickClock>(new MockTimeTickClock(task_runner_))));
    462   task_runner_->RunUntilIdle();
    463   EXPECT_EQ(expect_reboot ? 1 : 0,
    464             power_manager_client_->num_request_restart_calls());
    465 
    466   uptime_processing_delay_ =
    467       base::TimeTicks() - automatic_reboot_manager_->boot_time_ -
    468       task_runner_->Uptime();
    469   EXPECT_GE(uptime_processing_delay_, base::TimeDelta());
    470   EXPECT_LE(uptime_processing_delay_, base::TimeDelta::FromSeconds(1));
    471 
    472   if (is_user_logged_in_ || expect_reboot)
    473     VerifyLoginScreenIdleTimerIsStopped();
    474   else
    475     VerifyLoginScreenIdleTimerIsRunning();
    476 }
    477 
    478 bool AutomaticRebootManagerBasicTest::ReadUpdateRebootNeededUptimeFromFile(
    479     base::TimeDelta* uptime) {
    480   std::string contents;
    481   if (!base::ReadFileToString(update_reboot_needed_uptime_file_, &contents)) {
    482     return false;
    483   }
    484   double seconds;
    485   if (!base::StringToDouble(contents.substr(0, contents.find(' ')), &seconds) ||
    486       seconds < 0.0) {
    487     return false;
    488   }
    489   *uptime = base::TimeDelta::FromMilliseconds(seconds * 1000.0);
    490   return true;
    491 }
    492 
    493 void AutomaticRebootManagerBasicTest::
    494     VerifyLoginScreenIdleTimerIsStopped() const {
    495   VerifyTimerIsStopped(
    496       automatic_reboot_manager_->login_screen_idle_timer_.get());
    497 }
    498 
    499 void AutomaticRebootManagerBasicTest::VerifyNoGracePeriod() const {
    500   EXPECT_FALSE(automatic_reboot_manager_->reboot_requested_);
    501   VerifyTimerIsStopped(automatic_reboot_manager_->grace_start_timer_.get());
    502   VerifyTimerIsStopped(automatic_reboot_manager_->grace_end_timer_.get());
    503 }
    504 
    505 void AutomaticRebootManagerBasicTest::VerifyGracePeriod(
    506     const base::TimeDelta& start_uptime) const {
    507   const base::TimeDelta start =
    508       start_uptime - task_runner_->Uptime() - uptime_processing_delay_;
    509   const base::TimeDelta end = start + base::TimeDelta::FromHours(24);
    510   if (start <= base::TimeDelta()) {
    511     EXPECT_TRUE(automatic_reboot_manager_->reboot_requested_);
    512     VerifyTimerIsStopped(automatic_reboot_manager_->grace_start_timer_.get());
    513     VerifyTimerIsRunning(automatic_reboot_manager_->grace_end_timer_.get(),
    514                          end);
    515   } else {
    516     EXPECT_FALSE(automatic_reboot_manager_->reboot_requested_);
    517     VerifyTimerIsRunning(automatic_reboot_manager_->grace_start_timer_.get(),
    518                          start);
    519     VerifyTimerIsRunning(automatic_reboot_manager_->grace_end_timer_.get(),
    520                          end);
    521   }
    522 }
    523 
    524 void AutomaticRebootManagerBasicTest::VerifyTimerIsStopped(
    525     const Timer* timer) const {
    526   if (timer)
    527     EXPECT_FALSE(timer->IsRunning());
    528 }
    529 
    530 void AutomaticRebootManagerBasicTest::VerifyTimerIsRunning(
    531     const Timer* timer,
    532     const base::TimeDelta& delay) const {
    533   ASSERT_TRUE(timer);
    534   EXPECT_TRUE(timer->IsRunning());
    535   EXPECT_EQ(delay.ToInternalValue(),
    536             timer->GetCurrentDelay().ToInternalValue());
    537 }
    538 
    539 void AutomaticRebootManagerBasicTest::
    540     VerifyLoginScreenIdleTimerIsRunning() const {
    541   VerifyTimerIsRunning(
    542       automatic_reboot_manager_->login_screen_idle_timer_.get(),
    543       base::TimeDelta::FromSeconds(60));
    544 }
    545 
    546 void AutomaticRebootManagerBasicTest::SetUpdateStatusNeedReboot() {
    547   UpdateEngineClient::Status client_status;
    548   client_status.status = UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT;
    549   update_engine_client_->set_default_status(client_status);
    550 }
    551 
    552 AutomaticRebootManagerTest::AutomaticRebootManagerTest() {
    553   switch (GetParam()) {
    554     case AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_LOGIN_SCREEN:
    555       is_user_logged_in_ = false;
    556       is_logged_in_as_kiosk_app_ = false;
    557       break;
    558     case AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_KIOSK_APP_SESSION:
    559       is_user_logged_in_ = true;
    560       is_logged_in_as_kiosk_app_ = true;
    561       break;
    562     case AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_NON_KIOSK_APP_SESSION:
    563       is_user_logged_in_ = true;
    564       is_logged_in_as_kiosk_app_ = false;
    565       break;
    566   }
    567 }
    568 
    569 AutomaticRebootManagerTest::~AutomaticRebootManagerTest() {
    570 }
    571 
    572 // Chrome is showing the login screen. The current uptime is 12 hours.
    573 // Verifies that the idle timer is running. Further verifies that when a kiosk
    574 // app session begins, the idle timer is stopped.
    575 TEST_F(AutomaticRebootManagerBasicTest, LoginStopsIdleTimer) {
    576   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
    577 
    578   // Verify that the device does not reboot immediately and the login screen
    579   // idle timer is started.
    580   CreateAutomaticRebootManager(false);
    581 
    582   // Notify that a kiosk app session has been started.
    583   is_user_logged_in_ = true;
    584   is_logged_in_as_kiosk_app_ = true;
    585   automatic_reboot_manager_->Observe(
    586       chrome::NOTIFICATION_LOGIN_USER_CHANGED,
    587       content::Source<AutomaticRebootManagerBasicTest>(this),
    588       content::NotificationService::NoDetails());
    589 
    590   // Verify that the login screen idle timer is stopped.
    591   VerifyLoginScreenIdleTimerIsStopped();
    592 
    593   // Verify that the device does not reboot eventually.
    594   FastForwardUntilNoTasksRemain(false);
    595 }
    596 
    597 // Chrome is showing the login screen. The current uptime is 12 hours.
    598 // Verifies that the idle timer is running. Further verifies that when a
    599 // non-kiosk-app session begins, the idle timer is stopped.
    600 TEST_F(AutomaticRebootManagerBasicTest, NonKioskLoginStopsIdleTimer) {
    601   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
    602 
    603   // Verify that the device does not reboot immediately and the login screen
    604   // idle timer is started.
    605   CreateAutomaticRebootManager(false);
    606 
    607   // Notify that a non-kiosk-app session has been started.
    608   is_user_logged_in_ = true;
    609   automatic_reboot_manager_->Observe(
    610       chrome::NOTIFICATION_LOGIN_USER_CHANGED,
    611       content::Source<AutomaticRebootManagerBasicTest>(this),
    612       content::NotificationService::NoDetails());
    613 
    614   // Verify that the login screen idle timer is stopped.
    615   VerifyLoginScreenIdleTimerIsStopped();
    616 
    617   // Verify that the device does not reboot eventually.
    618   FastForwardUntilNoTasksRemain(false);
    619 }
    620 
    621 // Chrome is showing the login screen. The uptime limit is 6 hours. The current
    622 // uptime is 12 hours.
    623 // Verifies that user activity prevents the device from rebooting. Further
    624 // verifies that when user activity ceases, the devices reboots.
    625 TEST_F(AutomaticRebootManagerBasicTest, UserActivityResetsIdleTimer) {
    626   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
    627 
    628   // Verify that the device does not reboot immediately and the login screen
    629   // idle timer is started.
    630   CreateAutomaticRebootManager(false);
    631 
    632   // Set the uptime limit. Verify that the device does not reboot immediately.
    633   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
    634 
    635   // Verify that a grace period has started.
    636   VerifyGracePeriod(uptime_limit_);
    637 
    638   // Fast forward the uptime by 25 minutes while simulating user activity every
    639   // 50 seconds.
    640   for (int i = 0; i < 30; ++i) {
    641     // Fast forward uptime by 50 seconds. Verify that the device does not reboot
    642     // immediately.
    643     FastForwardBy(base::TimeDelta::FromSeconds(50), false);
    644 
    645     // Simulate user activity.
    646     automatic_reboot_manager_->OnUserActivity(NULL);
    647   }
    648 
    649   // Fast forward the uptime by 60 seconds without simulating user activity.
    650   // Verify that the device reboots immediately.
    651   FastForwardBy(base::TimeDelta::FromSeconds(60), true);
    652 }
    653 
    654 // Chrome is running a kiosk app session. The current uptime is 10 days.
    655 // Verifies that when the device is suspended and then resumes, it does not
    656 // immediately reboot.
    657 TEST_F(AutomaticRebootManagerBasicTest, ResumeNoPolicy) {
    658   is_user_logged_in_ = true;
    659   is_logged_in_as_kiosk_app_ = true;
    660   task_runner_->SetUptime(base::TimeDelta::FromDays(10));
    661 
    662   // Verify that the device does not reboot immediately.
    663   CreateAutomaticRebootManager(false);
    664 
    665   // Verify that no grace period has started.
    666   VerifyNoGracePeriod();
    667 
    668   // Notify that the device has resumed from 1 hour of sleep. Verify that the
    669   // device does not reboot immediately.
    670   NotifyResumed(false);
    671 
    672   // Verify that the device does not reboot eventually.
    673   FastForwardUntilNoTasksRemain(false);
    674 }
    675 
    676 // Chrome is running a non-kiosk-app session. The current uptime is 10 days.
    677 // Verifies that when the device is suspended and then resumes, it does not
    678 // immediately reboot.
    679 TEST_F(AutomaticRebootManagerBasicTest, NonKioskResumeAppNoPolicy) {
    680   is_user_logged_in_ = true;
    681   task_runner_->SetUptime(base::TimeDelta::FromDays(10));
    682 
    683   // Verify that the device does not reboot immediately.
    684   CreateAutomaticRebootManager(false);
    685 
    686   // Verify that no grace period has started.
    687   VerifyNoGracePeriod();
    688 
    689   // Notify that the device has resumed from 1 hour of sleep. Verify that the
    690   // device does not reboot immediately.
    691   NotifyResumed(false);
    692 
    693   // Verify that the device does not reboot eventually.
    694   FastForwardUntilNoTasksRemain(false);
    695 }
    696 
    697 // Chrome is running a kiosk app session. The uptime limit is 24 hours. The
    698 // current uptime is 12 hours.
    699 // Verifies that when the device is suspended and then resumes, it does not
    700 // immediately reboot.
    701 TEST_F(AutomaticRebootManagerBasicTest, ResumeBeforeGracePeriod) {
    702   is_user_logged_in_ = true;
    703   is_logged_in_as_kiosk_app_ = true;
    704   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
    705 
    706   // Verify that the device does not reboot immediately.
    707   CreateAutomaticRebootManager(false);
    708 
    709   // Set the uptime limit. Verify that the device does not reboot immediately.
    710   SetUptimeLimit(base::TimeDelta::FromHours(24), false);
    711 
    712   // Verify that a grace period has been scheduled to start in the future.
    713   VerifyGracePeriod(uptime_limit_);
    714 
    715   // Notify that the device has resumed from 1 hour of sleep. Verify that the
    716   // device does not reboot immediately.
    717   NotifyResumed(false);
    718 
    719   // Verify that the device eventually reboots.
    720   FastForwardUntilNoTasksRemain(true);
    721 }
    722 
    723 // Chrome is running a non-kiosk-app session. The uptime limit is 24 hours. The
    724 // current uptime is 12 hours.
    725 // Verifies that when the device is suspended and then resumes, it does not
    726 // immediately reboot.
    727 TEST_F(AutomaticRebootManagerBasicTest, NonKioskResumeBeforeGracePeriod) {
    728   is_user_logged_in_ = true;
    729   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
    730 
    731   // Verify that the device does not reboot immediately.
    732   CreateAutomaticRebootManager(false);
    733 
    734   // Set the uptime limit. Verify that the device does not reboot immediately.
    735   SetUptimeLimit(base::TimeDelta::FromHours(24), false);
    736 
    737   // Verify that a grace period has been scheduled to start in the future.
    738   VerifyGracePeriod(uptime_limit_);
    739 
    740   // Notify that the device has resumed from 1 hour of sleep. Verify that the
    741   // device does not reboot immediately.
    742   NotifyResumed(false);
    743 
    744   // Verify that the device does not reboot eventually.
    745   FastForwardUntilNoTasksRemain(false);
    746 }
    747 
    748 // Chrome is running a kiosk app session. The uptime limit is 6 hours. The
    749 // current uptime is 12 hours.
    750 // Verifies that when the device is suspended and then resumes, it immediately
    751 // reboots.
    752 TEST_F(AutomaticRebootManagerBasicTest, ResumeInGracePeriod) {
    753   is_user_logged_in_ = true;
    754   is_logged_in_as_kiosk_app_ = true;
    755   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
    756 
    757   // Verify that the device does not reboot immediately.
    758   CreateAutomaticRebootManager(false);
    759 
    760   // Set the uptime limit. Verify that the device does not reboot immediately.
    761   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
    762 
    763   // Verify that a grace period has started.
    764   VerifyGracePeriod(uptime_limit_);
    765 
    766   // Notify that the device has resumed from 1 hour of sleep. Verify that the
    767   // device reboots immediately.
    768   NotifyResumed(true);
    769 }
    770 
    771 // Chrome is running a non-kiosk-app session. The uptime limit is 6 hours. The
    772 // current uptime is 12 hours.
    773 // Verifies that when the device is suspended and then resumes, it does not
    774 // immediately reboot.
    775 TEST_F(AutomaticRebootManagerBasicTest, NonKioskResumeInGracePeriod) {
    776   is_user_logged_in_ = true;
    777   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
    778 
    779   // Verify that the device does not reboot immediately.
    780   CreateAutomaticRebootManager(false);
    781 
    782   // Set the uptime limit. Verify that the device does not reboot immediately.
    783   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
    784 
    785   // Verify that a grace period has started.
    786   VerifyGracePeriod(uptime_limit_);
    787 
    788   // Notify that the device has resumed from 1 hour of sleep. Verify that the
    789   // device does not reboot immediately.
    790   NotifyResumed(false);
    791 
    792   // Verify that the device does not reboot eventually.
    793   FastForwardUntilNoTasksRemain(false);
    794 }
    795 
    796 // Chrome is running a kiosk app session. The uptime limit is 6 hours. The
    797 // current uptime is 29 hours 30 minutes.
    798 // Verifies that when the device is suspended and then resumes, it immediately
    799 // reboots.
    800 TEST_F(AutomaticRebootManagerBasicTest, ResumeAfterGracePeriod) {
    801   is_user_logged_in_ = true;
    802   is_logged_in_as_kiosk_app_ = true;
    803   task_runner_->SetUptime(base::TimeDelta::FromHours(29) +
    804                           base::TimeDelta::FromMinutes(30));
    805 
    806   // Verify that the device does not reboot immediately.
    807   CreateAutomaticRebootManager(false);
    808 
    809   // Set the uptime limit. Verify that the device does not reboot immediately.
    810   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
    811 
    812   // Verify that a grace period has started.
    813   VerifyGracePeriod(uptime_limit_);
    814 
    815   // Notify that the device has resumed from 1 hour of sleep. Verify that the
    816   // device reboots immediately.
    817   NotifyResumed(true);
    818 }
    819 
    820 // Chrome is running a non-kiosk-app session. The uptime limit is 6 hours. The
    821 // current uptime is 29 hours 30 minutes.
    822 // Verifies that when the device is suspended and then resumes, it does not
    823 // immediately reboot.
    824 TEST_F(AutomaticRebootManagerBasicTest, NonKioskResumeAfterGracePeriod) {
    825   is_user_logged_in_ = true;
    826   task_runner_->SetUptime(base::TimeDelta::FromHours(29) +
    827                           base::TimeDelta::FromMinutes(30));
    828 
    829   // Verify that the device does not reboot immediately.
    830   CreateAutomaticRebootManager(false);
    831 
    832   // Set the uptime limit. Verify that the device does not reboot immediately.
    833   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
    834 
    835   // Verify that a grace period has started.
    836   VerifyGracePeriod(uptime_limit_);
    837 
    838   // Notify that the device has resumed from 1 hour of sleep. Verify that the
    839   // device does not reboot immediately.
    840   NotifyResumed(false);
    841 
    842   // Verify that the device does not reboot eventually.
    843   FastForwardUntilNoTasksRemain(false);
    844 }
    845 
    846 // Chrome is running. The current uptime is 10 days.
    847 // Verifies that when the browser terminates, the device does not immediately
    848 // reboot.
    849 TEST_P(AutomaticRebootManagerTest, TerminateNoPolicy) {
    850   task_runner_->SetUptime(base::TimeDelta::FromDays(10));
    851 
    852   // Verify that the device does not reboot immediately.
    853   CreateAutomaticRebootManager(false);
    854 
    855   // Verify that no grace period has started.
    856   VerifyNoGracePeriod();
    857 
    858   // Notify that the browser is terminating. Verify that the device does not
    859   // reboot immediately.
    860   NotifyTerminating(false);
    861 
    862   // Verify that the device does not reboot eventually.
    863   FastForwardUntilNoTasksRemain(false);
    864 }
    865 
    866 // Chrome is running. The uptime limit is set to 24 hours. The current uptime is
    867 // 12 hours.
    868 // Verifies that when the browser terminates, it does not immediately reboot.
    869 TEST_P(AutomaticRebootManagerTest, TerminateBeforeGracePeriod) {
    870   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
    871 
    872   // Verify that the device does not reboot immediately.
    873   CreateAutomaticRebootManager(false);
    874 
    875   // Set the uptime limit. Verify that the device does not reboot immediately.
    876   SetUptimeLimit(base::TimeDelta::FromHours(24), false);
    877 
    878   // Verify that a grace period has been scheduled to start in the future.
    879   VerifyGracePeriod(uptime_limit_);
    880 
    881   // Notify that the browser is terminating. Verify that the device does not
    882   // reboot immediately.
    883   NotifyTerminating(false);
    884 
    885   // Verify that unless a non-kiosk-app session is in progress, the device
    886   // eventually reboots.
    887   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
    888                                 is_logged_in_as_kiosk_app_);
    889 }
    890 
    891 // Chrome is running. The uptime limit is set to 6 hours. The current uptime is
    892 // 12 hours.
    893 // Verifies that when the browser terminates, the device immediately reboots if
    894 // a kiosk app session is in progress.
    895 TEST_P(AutomaticRebootManagerTest, TerminateInGracePeriod) {
    896   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
    897 
    898   // Verify that the device does not reboot immediately.
    899   CreateAutomaticRebootManager(false);
    900 
    901   // Set the uptime limit. Verify that the device does not reboot immediately.
    902   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
    903 
    904   // Verify that a grace period has started.
    905   VerifyGracePeriod(uptime_limit_);
    906 
    907   // Notify that the browser is terminating. Verify that the device immediately
    908   // reboots if a kiosk app session is in progress.
    909   NotifyTerminating(is_logged_in_as_kiosk_app_);
    910 
    911   // Verify that if a non-kiosk-app session is in progress, the device does not
    912   // reboot eventually.
    913   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
    914                                 is_logged_in_as_kiosk_app_);
    915 }
    916 
    917 // Chrome is running. The current uptime is 12 hours.
    918 // Verifies that when the uptime limit is set to 24 hours, no reboot occurs and
    919 // a grace period is scheduled to begin after 24 hours of uptime.
    920 TEST_P(AutomaticRebootManagerTest, BeforeUptimeLimitGracePeriod) {
    921   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
    922 
    923   // Verify that the device does not reboot immediately.
    924   CreateAutomaticRebootManager(false);
    925 
    926   // Verify that no grace period has started.
    927   VerifyNoGracePeriod();
    928 
    929   // Set the uptime limit. Verify that the device does not reboot immediately.
    930   SetUptimeLimit(base::TimeDelta::FromHours(24), false);
    931 
    932   // Verify that a grace period has been scheduled to start in the future.
    933   VerifyGracePeriod(uptime_limit_);
    934 
    935   // Verify that unless a non-kiosk-app session is in progress, the device
    936   // eventually reboots.
    937   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
    938                                 is_logged_in_as_kiosk_app_);
    939 }
    940 
    941 // Chrome is running. The current uptime is 12 hours.
    942 // Verifies that when the uptime limit is set to 6 hours, a reboot is requested
    943 // and a grace period is started that will end after 6 + 24 hours of uptime.
    944 TEST_P(AutomaticRebootManagerTest, InUptimeLimitGracePeriod) {
    945   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
    946 
    947   // Verify that the device does not reboot immediately.
    948   CreateAutomaticRebootManager(false);
    949 
    950   // Verify that no grace period has started.
    951   VerifyNoGracePeriod();
    952 
    953   // Set the uptime limit. Verify that the device does not reboot immediately.
    954   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
    955 
    956   // Verify that a grace period has started.
    957   VerifyGracePeriod(uptime_limit_);
    958 
    959   // Verify that unless a non-kiosk-app session is in progress, the device
    960   // eventually reboots.
    961   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
    962                                 is_logged_in_as_kiosk_app_);
    963 }
    964 
    965 // Chrome is running. The current uptime is 10 days.
    966 // Verifies that when the uptime limit is set to 6 hours, the device reboots
    967 // immediately if no non-kiosk-app-session is in progress because the grace
    968 // period ended after 6 + 24 hours of uptime.
    969 TEST_P(AutomaticRebootManagerTest, AfterUptimeLimitGracePeriod) {
    970   task_runner_->SetUptime(base::TimeDelta::FromDays(10));
    971 
    972   // Verify that the device does not reboot immediately.
    973   CreateAutomaticRebootManager(false);
    974 
    975   // Verify that no grace period has started.
    976   VerifyNoGracePeriod();
    977 
    978   // Set the uptime limit. Verify that unless a non-kiosk-app session is in
    979   // progress, the the device immediately reboots.
    980   SetUptimeLimit(base::TimeDelta::FromHours(6), !is_user_logged_in_ ||
    981                                                 is_logged_in_as_kiosk_app_);
    982 
    983   // Verify that if a non-kiosk-app session is in progress, the device does not
    984   // reboot eventually.
    985   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
    986                                 is_logged_in_as_kiosk_app_);
    987 }
    988 
    989 // Chrome is running. The uptime limit is set to 12 hours. The current uptime is
    990 // 6 hours.
    991 // Verifies that when the uptime limit is removed, the grace period is removed.
    992 TEST_P(AutomaticRebootManagerTest, UptimeLimitOffBeforeGracePeriod) {
    993   task_runner_->SetUptime(base::TimeDelta::FromHours(6));
    994 
    995   // Verify that the device does not reboot immediately.
    996   CreateAutomaticRebootManager(false);
    997 
    998   // Set the uptime limit. Verify that the device does not reboot immediately.
    999   SetUptimeLimit(base::TimeDelta::FromHours(12), false);
   1000 
   1001   // Verify that a grace period has been scheduled to start in the future.
   1002   VerifyGracePeriod(uptime_limit_);
   1003 
   1004   // Fast forward the uptime by 1 hour. Verify that the device does not reboot
   1005   // immediately.
   1006   FastForwardBy(base::TimeDelta::FromHours(1), false);
   1007 
   1008   // Remove the uptime limit. Verify that the device does not reboot
   1009   // immediately.
   1010   SetUptimeLimit(base::TimeDelta(), false);
   1011 
   1012   // Verify that the grace period has been removed.
   1013   VerifyNoGracePeriod();
   1014 
   1015   // Verify that the device does not reboot eventually.
   1016   FastForwardUntilNoTasksRemain(false);
   1017 }
   1018 
   1019 // Chrome is running. The uptime limit is set to 12 hours. The current uptime is
   1020 // 24 hours.
   1021 // Verifies that when the uptime limit is removed, the grace period is removed.
   1022 TEST_P(AutomaticRebootManagerTest, UptimeLimitOffInGracePeriod) {
   1023   task_runner_->SetUptime(base::TimeDelta::FromHours(24));
   1024 
   1025   // Verify that the device does not reboot immediately.
   1026   CreateAutomaticRebootManager(false);
   1027 
   1028   // Set the uptime limit. Verify that the device does not reboot immediately.
   1029   SetUptimeLimit(base::TimeDelta::FromHours(12), false);
   1030 
   1031   // Verify that a grace period has started.
   1032   VerifyGracePeriod(uptime_limit_);
   1033 
   1034   // Fast forward the uptime by 20 seconds. Verify that the device does not
   1035   // reboot immediately.
   1036   FastForwardBy(base::TimeDelta::FromSeconds(20), false);
   1037 
   1038   // Remove the uptime limit. Verify that the device does not reboot
   1039   // immediately.
   1040   SetUptimeLimit(base::TimeDelta(), false);
   1041 
   1042   // Verify that the grace period has been removed.
   1043   VerifyNoGracePeriod();
   1044 
   1045   // Verify that the device does not reboot eventually.
   1046   FastForwardUntilNoTasksRemain(false);
   1047 }
   1048 
   1049 // Chrome is running. The uptime limit is set to 12 hours. The current uptime is
   1050 // 6 hours.
   1051 // Verifies that when the uptime limit is extended to 24 hours, the grace period
   1052 // is rescheduled to start further in the future.
   1053 TEST_P(AutomaticRebootManagerTest, ExtendUptimeLimitBeforeGracePeriod) {
   1054   task_runner_->SetUptime(base::TimeDelta::FromHours(6));
   1055 
   1056   // Verify that the device does not reboot immediately.
   1057   CreateAutomaticRebootManager(false);
   1058 
   1059   // Set the uptime limit. Verify that the device does not reboot immediately.
   1060   SetUptimeLimit(base::TimeDelta::FromHours(12), false);
   1061 
   1062   // Verify that a grace period has been scheduled to start in the future.
   1063   VerifyGracePeriod(uptime_limit_);
   1064 
   1065   // Fast forward the uptime by 20 seconds. Verify that the device does not
   1066   // reboot immediately.
   1067   FastForwardBy(base::TimeDelta::FromSeconds(20), false);
   1068 
   1069   // Extend the uptime limit. Verify that the device does not reboot
   1070   // immediately.
   1071   SetUptimeLimit(base::TimeDelta::FromHours(24), false);
   1072 
   1073   // Verify that the grace period has been rescheduled to start further in the
   1074   // future.
   1075   VerifyGracePeriod(uptime_limit_);
   1076 
   1077   // Verify that unless a non-kiosk-app session is in progress, the device
   1078   // eventually reboots.
   1079   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1080                                 is_logged_in_as_kiosk_app_);
   1081 }
   1082 
   1083 // Chrome is running. The uptime limit is set to 12 hours. The current uptime is
   1084 // 18 hours.
   1085 // Verifies that when the uptime limit is extended to 24 hours, the grace period
   1086 // is rescheduled to start in the future.
   1087 TEST_P(AutomaticRebootManagerTest, ExtendUptimeLimitInGracePeriod) {
   1088   task_runner_->SetUptime(base::TimeDelta::FromHours(18));
   1089 
   1090   // Verify that the device does not reboot immediately.
   1091   CreateAutomaticRebootManager(false);
   1092 
   1093   // Set the uptime limit. Verify that the device does not reboot immediately.
   1094   SetUptimeLimit(base::TimeDelta::FromHours(12), false);
   1095 
   1096   // Verify that a grace period has started.
   1097   VerifyGracePeriod(uptime_limit_);
   1098 
   1099   // Fast forward the uptime by 20 seconds. Verify that the device does not
   1100   // reboot immediately.
   1101   FastForwardBy(base::TimeDelta::FromSeconds(20), false);
   1102 
   1103   // Extend the uptime limit. Verify that the device does not reboot
   1104   // immediately.
   1105   SetUptimeLimit(base::TimeDelta::FromHours(24), false);
   1106 
   1107   // Verify that the grace period has been rescheduled to start in the future.
   1108   VerifyGracePeriod(uptime_limit_);
   1109 
   1110   // Verify that unless a non-kiosk-app session is in progress, the device
   1111   // eventually reboots.
   1112   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1113                                 is_logged_in_as_kiosk_app_);
   1114 }
   1115 
   1116 // Chrome is running. The uptime limit is set to 18 hours. The current uptime is
   1117 // 12 hours.
   1118 // Verifies that when the uptime limit is shortened to 6 hours, the grace period
   1119 // is rescheduled to have already started.
   1120 TEST_P(AutomaticRebootManagerTest, ShortenUptimeLimitBeforeToInGracePeriod) {
   1121   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1122 
   1123   // Verify that the device does not reboot immediately.
   1124   CreateAutomaticRebootManager(false);
   1125 
   1126   // Set the uptime limit. Verify that the device does not reboot immediately.
   1127   SetUptimeLimit(base::TimeDelta::FromHours(18), false);
   1128 
   1129   // Verify that a grace period has been scheduled to start in the future.
   1130   VerifyGracePeriod(uptime_limit_);
   1131 
   1132   // Fast forward the uptime by 20 seconds. Verify that the device does not
   1133   // reboot immediately.
   1134   FastForwardBy(base::TimeDelta::FromSeconds(20), false);
   1135 
   1136   // Shorten the uptime limit. Verify that the device does not reboot
   1137   // immediately.
   1138   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
   1139 
   1140   // Verify that the grace period has been rescheduled and has started already.
   1141   VerifyGracePeriod(uptime_limit_);
   1142 
   1143   // Verify that unless a non-kiosk-app session is in progress, the device
   1144   // eventually reboots.
   1145   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1146                                 is_logged_in_as_kiosk_app_);
   1147 }
   1148 
   1149 // Chrome is running. The uptime limit is set to 24 hours. The current uptime is
   1150 // 36 hours.
   1151 // Verifies that when the uptime limit is shortened to 18 hours, the grace
   1152 // period is rescheduled to have started earlier.
   1153 TEST_P(AutomaticRebootManagerTest, ShortenUptimeLimitInToInGracePeriod) {
   1154   task_runner_->SetUptime(base::TimeDelta::FromHours(36));
   1155 
   1156   // Verify that the device does not reboot immediately.
   1157   CreateAutomaticRebootManager(false);
   1158 
   1159   // Set the uptime limit. Verify that the device does not reboot immediately.
   1160   SetUptimeLimit(base::TimeDelta::FromHours(24), false);
   1161 
   1162   // Verify that a grace period has started.
   1163   VerifyGracePeriod(uptime_limit_);
   1164 
   1165   // Fast forward the uptime by 20 seconds. Verify that the device does not
   1166   // reboot immediately.
   1167   FastForwardBy(base::TimeDelta::FromSeconds(20), false);
   1168 
   1169   // Shorten the uptime limit. Verify that the device does not reboot
   1170   // immediately.
   1171   SetUptimeLimit(base::TimeDelta::FromHours(18), false);
   1172 
   1173   // Verify that the grace period has been rescheduled to have started earlier.
   1174   VerifyGracePeriod(uptime_limit_);
   1175 
   1176   // Verify that unless a non-kiosk-app session is in progress, the device
   1177   // eventually reboots.
   1178   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1179                                 is_logged_in_as_kiosk_app_);
   1180 }
   1181 
   1182 // Chrome is running. The uptime limit is set to 24 hours. The current uptime is
   1183 // 36 hours.
   1184 // Verifies that when the uptime limit is shortened to 6 hours, the device
   1185 // reboots immediately if no non-kiosk-app session is in progress because the
   1186 // grace period ended after 6 + 24 hours of uptime.
   1187 TEST_P(AutomaticRebootManagerTest, ShortenUptimeLimitInToAfterGracePeriod) {
   1188   task_runner_->SetUptime(base::TimeDelta::FromHours(36));
   1189 
   1190   // Verify that the device does not reboot immediately.
   1191   CreateAutomaticRebootManager(false);
   1192 
   1193   // Set the uptime limit. Verify that the device does not reboot immediately.
   1194   SetUptimeLimit(base::TimeDelta::FromHours(24), false);
   1195 
   1196   // Verify that a grace period has started.
   1197   VerifyGracePeriod(uptime_limit_);
   1198 
   1199   // Fast forward the uptime by 20 seconds. Verify that the device does not
   1200   // reboot immediately.
   1201   FastForwardBy(base::TimeDelta::FromSeconds(20), false);
   1202 
   1203   // Shorten the uptime limit. Verify that unless a non-kiosk-app session is in
   1204   // progress, the the device immediately reboots.
   1205   SetUptimeLimit(base::TimeDelta::FromHours(6), !is_user_logged_in_ ||
   1206                                                 is_logged_in_as_kiosk_app_);
   1207 
   1208   // Verify that if a non-kiosk-app session is in progress, the device does not
   1209   // reboot eventually.
   1210   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1211                                 is_logged_in_as_kiosk_app_);
   1212 }
   1213 
   1214 // Chrome is running. The current uptime is 12 hours.
   1215 // Verifies that when an update is applied, the current uptime is persisted as
   1216 // the time at which a reboot became necessary. Further verifies that when the
   1217 // policy to automatically reboot after an update is not enabled, no reboot
   1218 // occurs and no grace period is scheduled.
   1219 TEST_P(AutomaticRebootManagerTest, UpdateNoPolicy) {
   1220   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1221 
   1222   // Verify that the device does not reboot immediately.
   1223   CreateAutomaticRebootManager(false);
   1224 
   1225   // Verify that no grace period has started.
   1226   VerifyNoGracePeriod();
   1227 
   1228   // Notify that an update has been applied and a reboot is necessary. Verify
   1229   // that the device does not reboot immediately.
   1230   NotifyUpdateRebootNeeded();
   1231 
   1232   // Verify that the current uptime has been persisted as the time at which a
   1233   // reboot became necessary.
   1234   EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
   1235       &update_reboot_needed_uptime_));
   1236   EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_);
   1237 
   1238   // Verify that no grace period has started.
   1239   VerifyNoGracePeriod();
   1240 
   1241   // Verify that the device does not reboot eventually.
   1242   FastForwardUntilNoTasksRemain(false);
   1243 }
   1244 
   1245 // Chrome is running. The current uptime is 12 hours.
   1246 // Verifies that when an update is applied, the current uptime is persisted as
   1247 // the time at which a reboot became necessary. Further verifies that when the
   1248 // policy to automatically reboot after an update is enabled, a reboot is
   1249 // requested and a grace period is started that will end 24 hours from now.
   1250 TEST_P(AutomaticRebootManagerTest, Update) {
   1251   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1252   SetRebootAfterUpdate(true, false);
   1253 
   1254   // Verify that the device does not reboot immediately.
   1255   CreateAutomaticRebootManager(false);
   1256 
   1257   // Verify that no grace period has started.
   1258   VerifyNoGracePeriod();
   1259 
   1260   // Notify that an update has been applied and a reboot is necessary. Verify
   1261   // that the device does not reboot immediately.
   1262   NotifyUpdateRebootNeeded();
   1263 
   1264   // Verify that the current uptime has been persisted as the time at which a
   1265   // reboot became necessary.
   1266   EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
   1267       &update_reboot_needed_uptime_));
   1268   EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_);
   1269 
   1270   // Verify that a grace period has started.
   1271   VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_);
   1272 
   1273   // Verify that unless a non-kiosk-app session is in progress, the device
   1274   // eventually reboots.
   1275   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1276                                 is_logged_in_as_kiosk_app_);
   1277 }
   1278 
   1279 // Chrome is running. The current uptime is 12 hours.
   1280 // Verifies that when Chrome is notified twice that an update has been applied,
   1281 // the second notification is ignored and the uptime at which it occured does
   1282 // not get persisted as the time at which an update became necessary.
   1283 TEST_P(AutomaticRebootManagerTest, UpdateAfterUpdate) {
   1284   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1285   SetRebootAfterUpdate(true, false);
   1286 
   1287   // Verify that the device does not reboot immediately.
   1288   CreateAutomaticRebootManager(false);
   1289 
   1290   // Verify that no grace period has started.
   1291   VerifyNoGracePeriod();
   1292 
   1293   // Notify that an update has been applied and a reboot is necessary. Verify
   1294   // that the device does not reboot immediately.
   1295   NotifyUpdateRebootNeeded();
   1296 
   1297   // Verify that the current uptime has been persisted as the time at which a
   1298   // reboot became necessary.
   1299   EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
   1300       &update_reboot_needed_uptime_));
   1301   EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_);
   1302 
   1303   // Verify that a grace period has started.
   1304   VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_);
   1305 
   1306   // Fast forward the uptime by 20 seconds. Verify that the device does not
   1307   // reboot immediately.
   1308   FastForwardBy(base::TimeDelta::FromSeconds(20), false);
   1309 
   1310   // Notify that an update has been applied and a reboot is necessary. Verify
   1311   // that the device does not reboot immediately.
   1312   NotifyUpdateRebootNeeded();
   1313 
   1314   // Verify that the previously persisted time at which a reboot became
   1315   // necessary has not been overwritten.
   1316   base::TimeDelta new_update_reboot_needed_uptime;
   1317   EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
   1318       &new_update_reboot_needed_uptime));
   1319   EXPECT_EQ(update_reboot_needed_uptime_, new_update_reboot_needed_uptime);
   1320 
   1321   // Verify that unless a non-kiosk-app session is in progress, the device
   1322   // eventually reboots.
   1323   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1324                                 is_logged_in_as_kiosk_app_);
   1325 }
   1326 
   1327 // Chrome is running. The current uptime is 10 minutes.
   1328 // Verifies that when the policy to automatically reboot after an update is
   1329 // enabled, no reboot occurs a grace period is scheduled to begin after the
   1330 // minimum of 1 hour of uptime. Further verifies that when an update is applied,
   1331 // the current uptime is persisted as the time at which a reboot became
   1332 // necessary.
   1333 TEST_P(AutomaticRebootManagerTest, UpdateBeforeMinimumUptime) {
   1334   task_runner_->SetUptime(base::TimeDelta::FromMinutes(10));
   1335   SetRebootAfterUpdate(true, false);
   1336 
   1337   // Verify that the device does not reboot immediately.
   1338   CreateAutomaticRebootManager(false);
   1339 
   1340   // Verify that no grace period has started.
   1341   VerifyNoGracePeriod();
   1342 
   1343   // Notify that an update has been applied and a reboot is necessary. Verify
   1344   // that the device does not reboot immediately.
   1345   NotifyUpdateRebootNeeded();
   1346 
   1347   // Verify that the current uptime has been persisted as the time at which a
   1348   // reboot became necessary.
   1349   EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
   1350       &update_reboot_needed_uptime_));
   1351   EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_);
   1352 
   1353   // Verify that a grace period has been scheduled to begin in the future.
   1354   VerifyGracePeriod(base::TimeDelta::FromHours(1));
   1355 
   1356   // Verify that unless a non-kiosk-app session is in progress, the device
   1357   // eventually reboots.
   1358   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1359                                 is_logged_in_as_kiosk_app_);
   1360 }
   1361 
   1362 // Chrome is running. An update was applied and a reboot became necessary to
   1363 // complete the update process after 6 hours of uptime. The current uptime is
   1364 // 12 hours.
   1365 // Verifies that when the policy to automatically reboot after an update is
   1366 // enabled, a reboot is requested and a grace period is started that will end
   1367 // after 6 + 24 hours of uptime.
   1368 TEST_P(AutomaticRebootManagerTest, PolicyAfterUpdateInGracePeriod) {
   1369   task_runner_->SetUptime(base::TimeDelta::FromHours(6));
   1370 
   1371   // Verify that the device does not reboot immediately.
   1372   CreateAutomaticRebootManager(false);
   1373 
   1374   // Notify that an update has been applied and a reboot is necessary. Verify
   1375   // that the device does not reboot immediately.
   1376   NotifyUpdateRebootNeeded();
   1377 
   1378   // Fast forward the uptime to 12 hours. Verify that the device does not reboot
   1379   // immediately.
   1380   FastForwardBy(base::TimeDelta::FromHours(6), false);
   1381 
   1382   // Simulate user activity.
   1383   automatic_reboot_manager_->OnUserActivity(NULL);
   1384 
   1385   // Enable automatic reboot after an update has been applied. Verify that the
   1386   // device does not reboot immediately.
   1387   SetRebootAfterUpdate(true, false);
   1388 
   1389   // Verify that a grace period has started.
   1390   VerifyGracePeriod(base::TimeDelta::FromHours(6) + uptime_processing_delay_);
   1391 
   1392   // Verify that unless a non-kiosk-app session is in progress, the device
   1393   // eventually reboots.
   1394   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1395                                 is_logged_in_as_kiosk_app_);
   1396 }
   1397 
   1398 // Chrome is running. An update was applied and a reboot became necessary to
   1399 // complete the update process after 6 hours of uptime. The current uptime is
   1400 // 10 days.
   1401 // Verifies that when the policy to automatically reboot after an update is
   1402 // enabled, the device reboots immediately if no non-kiosk-app session is in
   1403 // progress because the grace period ended after 6 + 24 hours of uptime.
   1404 TEST_P(AutomaticRebootManagerTest, PolicyAfterUpdateAfterGracePeriod) {
   1405   task_runner_->SetUptime(base::TimeDelta::FromHours(6));
   1406 
   1407   // Verify that the device does not reboot immediately.
   1408   CreateAutomaticRebootManager(false);
   1409 
   1410   // Notify that an update has been applied and a reboot is necessary. Verify
   1411   // that the device does not reboot immediately.
   1412   NotifyUpdateRebootNeeded();
   1413 
   1414   // Fast forward the uptime to 12 hours. Verify that the device does not reboot
   1415   // immediately.
   1416   FastForwardBy(base::TimeDelta::FromDays(10) - base::TimeDelta::FromHours(6),
   1417                 false);
   1418 
   1419   // Simulate user activity.
   1420   automatic_reboot_manager_->OnUserActivity(NULL);
   1421 
   1422   // Enable automatic rebooting after an update has been applied. Verify that
   1423   // unless a non-kiosk-app session is in progress, the the device immediately
   1424   // reboots.
   1425   SetRebootAfterUpdate(true, !is_user_logged_in_ || is_logged_in_as_kiosk_app_);
   1426 
   1427   // Verify that if a non-kiosk-app session is in progress, the device does not
   1428   // reboot eventually.
   1429   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1430                                 is_logged_in_as_kiosk_app_);
   1431 }
   1432 
   1433 // Chrome is running. An update was applied and a reboot became necessary to
   1434 // complete the update process after 6 hours of uptime. The policy to
   1435 // automatically reboot after an update is enabled. The current uptime is
   1436 // 6 hours 20 seconds.
   1437 // Verifies that when the policy to automatically reboot after an update is
   1438 // disabled, the reboot request and grace period are removed.
   1439 TEST_P(AutomaticRebootManagerTest, PolicyOffAfterUpdate) {
   1440   task_runner_->SetUptime(base::TimeDelta::FromHours(6));
   1441   SetRebootAfterUpdate(true, false);
   1442 
   1443   // Verify that the device does not reboot immediately.
   1444   CreateAutomaticRebootManager(false);
   1445 
   1446   // Notify that an update has been applied and a reboot is necessary. Verify
   1447   // that the device does not reboot immediately.
   1448   NotifyUpdateRebootNeeded();
   1449 
   1450   // Verify that a grace period has started.
   1451   VerifyGracePeriod(task_runner_->Uptime() + uptime_processing_delay_);
   1452 
   1453   // Fast forward the uptime by 20 seconds. Verify that the device does not
   1454   // reboot immediately.
   1455   FastForwardBy(base::TimeDelta::FromSeconds(20), false);
   1456 
   1457   // Disable automatic rebooting after an update has been applied. Verify that
   1458   // the device does not reboot immediately.
   1459   SetRebootAfterUpdate(false, false);
   1460 
   1461   // Verify that the grace period has been removed.
   1462   VerifyNoGracePeriod();
   1463 
   1464   // Verify that the device does not reboot eventually.
   1465   FastForwardUntilNoTasksRemain(false);
   1466 }
   1467 
   1468 // Chrome is running. The current uptime is not available.
   1469 // Verifies that even if an uptime limit is set, the policy to automatically
   1470 // reboot after an update is enabled and an update has been applied, no reboot
   1471 // occurs and no grace period is scheduled. Further verifies that no time is
   1472 // persisted as the time at which a reboot became necessary.
   1473 TEST_P(AutomaticRebootManagerTest, NoUptime) {
   1474   // Verify that the device does not reboot immediately.
   1475   CreateAutomaticRebootManager(false);
   1476 
   1477   // Set the uptime limit. Verify that the device does not reboot immediately.
   1478   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
   1479 
   1480   // Verify that no grace period has started.
   1481   VerifyNoGracePeriod();
   1482 
   1483   // Enable automatic rebooting after an update has been applied. Verify that
   1484   // the device does not reboot immediately.
   1485   SetRebootAfterUpdate(true, false);
   1486 
   1487   // Verify that no grace period has started.
   1488   VerifyNoGracePeriod();
   1489 
   1490   // Notify that an update has been applied and a reboot is necessary. Verify
   1491   // that the device does not reboot immediately.
   1492   NotifyUpdateRebootNeeded();
   1493 
   1494   // Verify that no time is persisted as the time at which a reboot became
   1495   // necessary.
   1496   EXPECT_FALSE(ReadUpdateRebootNeededUptimeFromFile(
   1497       &update_reboot_needed_uptime_));
   1498 
   1499   // Verify that no grace period has started.
   1500   VerifyNoGracePeriod();
   1501 
   1502   // Verify that the device does not reboot eventually.
   1503   FastForwardUntilNoTasksRemain(false);
   1504 }
   1505 
   1506 // Chrome is running. The policy to automatically reboot after an update is
   1507 // enabled. The current uptime is 12 hours.
   1508 // Verifies that when an uptime limit of 6 hours is set, the availability of an
   1509 // update does not cause the grace period to be rescheduled. Further verifies
   1510 // that the current uptime is persisted as the time at which a reboot became
   1511 // necessary.
   1512 TEST_P(AutomaticRebootManagerTest, UptimeLimitBeforeUpdate) {
   1513   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1514   SetRebootAfterUpdate(true, false);
   1515 
   1516   // Verify that the device does not reboot immediately.
   1517   CreateAutomaticRebootManager(false);
   1518 
   1519   // Set the uptime limit. Verify that the device does not reboot immediately.
   1520   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
   1521 
   1522   // Verify that a grace period has been scheduled to start in the future.
   1523   VerifyGracePeriod(uptime_limit_);
   1524 
   1525   // Fast forward the uptime by 20 seconds. Verify that the device does not
   1526   // reboot immediately.
   1527   FastForwardBy(base::TimeDelta::FromSeconds(20), false);
   1528 
   1529   // Notify that an update has been applied and a reboot is necessary. Verify
   1530   // that the device does not reboot immediately.
   1531   NotifyUpdateRebootNeeded();
   1532 
   1533   // Verify that the current uptime has been persisted as the time at which a
   1534   // reboot became necessary.
   1535   EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
   1536       &update_reboot_needed_uptime_));
   1537   EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_);
   1538 
   1539   // Verify that the grace period has not been rescheduled.
   1540   VerifyGracePeriod(uptime_limit_);
   1541 
   1542   // Verify that unless a non-kiosk-app session is in progress, the device
   1543   // eventually reboots.
   1544   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1545                                 is_logged_in_as_kiosk_app_);
   1546 }
   1547 
   1548 // Chrome is running. The policy to automatically reboot after an update is
   1549 // enabled. The current uptime is 12 hours.
   1550 // Verifies that when an uptime limit of 24 hours is set, the availability of an
   1551 // update causes the grace period to be rescheduled so that it ends 24 hours
   1552 // from now. Further verifies that the current uptime is persisted as the time
   1553 // at which a reboot became necessary.
   1554 TEST_P(AutomaticRebootManagerTest, UpdateBeforeUptimeLimit) {
   1555   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1556   SetRebootAfterUpdate(true, false);
   1557 
   1558   // Verify that the device does not reboot immediately.
   1559   CreateAutomaticRebootManager(false);
   1560 
   1561   // Set the uptime limit. Verify that the device does not reboot immediately.
   1562   SetUptimeLimit(base::TimeDelta::FromHours(24), false);
   1563 
   1564   // Verify that a grace period has been scheduled to start in the future.
   1565   VerifyGracePeriod(uptime_limit_);
   1566 
   1567   // Fast forward the uptime by 20 seconds. Verify that the device does not
   1568   // reboot immediately.
   1569   FastForwardBy(base::TimeDelta::FromSeconds(20), false);
   1570 
   1571   // Notify that an update has been applied and a reboot is necessary. Verify
   1572   // that the device does not reboot immediately.
   1573   NotifyUpdateRebootNeeded();
   1574 
   1575   // Verify that the current uptime has been persisted as the time at which a
   1576   // reboot became necessary.
   1577   EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
   1578       &update_reboot_needed_uptime_));
   1579   EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_);
   1580 
   1581   // Verify that the grace period has been rescheduled to start at the time that
   1582   // the update became available.
   1583   VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_);
   1584 
   1585   // Verify that unless a non-kiosk-app session is in progress, the device
   1586   // eventually reboots.
   1587   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1588                                 is_logged_in_as_kiosk_app_);
   1589 }
   1590 
   1591 // Chrome is running. The uptime limit is set to 24 hours. An update was applied
   1592 // and a reboot became necessary to complete the update process after 12 hours.
   1593 // The policy to automatically reboot after an update is enabled. The current
   1594 // uptime is 12 hours 20 seconds.
   1595 // Verifies that when the policy to reboot after an update is disabled, the
   1596 // grace period is rescheduled to start after 24 hours of uptime. Further
   1597 // verifies that when the uptime limit is removed, the grace period is removed.
   1598 TEST_P(AutomaticRebootManagerTest, PolicyOffThenUptimeLimitOff) {
   1599   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1600   SetRebootAfterUpdate(true, false);
   1601 
   1602   // Verify that the device does not reboot immediately.
   1603   CreateAutomaticRebootManager(false);
   1604 
   1605   // Set the uptime limit. Verify that the device does not reboot immediately.
   1606   SetUptimeLimit(base::TimeDelta::FromHours(24), false);
   1607 
   1608   // Verify that the grace period has started.
   1609   VerifyGracePeriod(uptime_limit_);
   1610 
   1611   // Notify that an update has been applied and a reboot is necessary. Verify
   1612   // that the device does not reboot immediately.
   1613   NotifyUpdateRebootNeeded();
   1614 
   1615   // Verify that the current uptime has been persisted as the time at which a
   1616   // reboot became necessary.
   1617   EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
   1618       &update_reboot_needed_uptime_));
   1619   EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_);
   1620 
   1621   // Verify that a grace period has been rescheduled to end 24 hours from now.
   1622   VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_);
   1623 
   1624   // Fast forward the uptime by 20 seconds. Verify that the device does not
   1625   // reboot immediately.
   1626   FastForwardBy(base::TimeDelta::FromSeconds(20), false);
   1627 
   1628   // Disable automatic reboot after an update has been applied. Verify that the
   1629   // device does not reboot immediately.
   1630   SetRebootAfterUpdate(false, false);
   1631 
   1632   // Verify that the grace period has been rescheduled to start after 24 hours
   1633   // of uptime.
   1634   VerifyGracePeriod(uptime_limit_);
   1635 
   1636   // Remove the uptime limit. Verify that the device does not reboot
   1637   // immediately.
   1638   SetUptimeLimit(base::TimeDelta(), false);
   1639 
   1640   // Verify that the grace period has been removed.
   1641   VerifyNoGracePeriod();
   1642 
   1643   // Verify that the device does not reboot eventually.
   1644   FastForwardUntilNoTasksRemain(false);
   1645 }
   1646 
   1647 // Chrome is running. The uptime limit is set to 6 hours. An update was applied
   1648 // and a reboot became necessary to complete the update process after 12 hours.
   1649 // The policy to automatically reboot after an update is enabled. The current
   1650 // uptime is 12 hours 20 seconds.
   1651 // Verifies that when the uptime limit is removed, the grace period is
   1652 // rescheduled to have started after 12 hours of uptime. Further verifies that
   1653 // when the policy to reboot after an update is disabled, the reboot request and
   1654 // grace period are removed.
   1655 TEST_P(AutomaticRebootManagerTest, UptimeLimitOffThenPolicyOff) {
   1656   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1657   SetRebootAfterUpdate(true, false);
   1658 
   1659   // Verify that the device does not reboot immediately.
   1660   CreateAutomaticRebootManager(false);
   1661 
   1662   // Notify that an update has been applied and a reboot is necessary. Verify
   1663   // that the device does not reboot immediately.
   1664   NotifyUpdateRebootNeeded();
   1665 
   1666   // Verify that the current uptime has been persisted as the time at which a
   1667   // reboot became necessary.
   1668   EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
   1669       &update_reboot_needed_uptime_));
   1670   EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_);
   1671 
   1672   // Verify that the grace period has started.
   1673   VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_);
   1674 
   1675   // Set the uptime limit. Verify that the device does not reboot immediately.
   1676   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
   1677 
   1678   // Verify that the grace period has been rescheduled to have started after
   1679   // 6 hours of uptime.
   1680   VerifyGracePeriod(uptime_limit_);
   1681 
   1682   // Fast forward the uptime by 20 seconds. Verify that the device does not
   1683   // reboot immediately.
   1684   FastForwardBy(base::TimeDelta::FromSeconds(20), false);
   1685 
   1686   // Remove the uptime limit. Verify that the device does not reboot
   1687   // immediately.
   1688   SetUptimeLimit(base::TimeDelta(), false);
   1689 
   1690   // Verify that a grace period has been rescheduled to have started after 12
   1691   // hours of uptime.
   1692   VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_);
   1693 
   1694   // Disable automatic reboot after an update has been applied. Verify that the
   1695   // device does not reboot immediately.
   1696   SetRebootAfterUpdate(false, false);
   1697 
   1698   // Verify that the grace period has been removed.
   1699   VerifyNoGracePeriod();
   1700 
   1701   // Verify that the device does not reboot eventually.
   1702   FastForwardUntilNoTasksRemain(false);
   1703 }
   1704 
   1705 // Chrome is running. The uptime limit is 6 hours. The current uptime is
   1706 // 29 hours 59 minutes 59 seconds.
   1707 // Verifies that if no non-kiosk-app session is in progress, the device reboots
   1708 // immediately when the grace period ends after 6 + 24 hours of uptime.
   1709 TEST_P(AutomaticRebootManagerTest, GracePeriodEnd) {
   1710   task_runner_->SetUptime(base::TimeDelta::FromHours(29) +
   1711                           base::TimeDelta::FromMinutes(59) +
   1712                           base::TimeDelta::FromSeconds(59));
   1713 
   1714   // Verify that the device does not reboot immediately.
   1715   CreateAutomaticRebootManager(false);
   1716 
   1717   // Set the uptime limit. Verify that the device does not reboot immediately.
   1718   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
   1719 
   1720   // Verify that a grace period has started.
   1721   VerifyGracePeriod(uptime_limit_);
   1722 
   1723   // Fast forward the uptime by 1 second. Verify that unless a non-kiosk-app
   1724   // session is in progress, the the device immediately reboots.
   1725   FastForwardBy(base::TimeDelta::FromSeconds(1), !is_user_logged_in_ ||
   1726                                                  is_logged_in_as_kiosk_app_);
   1727 
   1728   // Verify that if a non-kiosk-app session is in progress, the device does not
   1729   // reboot eventually.
   1730   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1731                                 is_logged_in_as_kiosk_app_);
   1732 }
   1733 
   1734 // Chrome is starting. The current uptime is 10 days.
   1735 // Verifies that when no automatic reboot policy is enabled, no reboot occurs
   1736 // and no grace period is scheduled.
   1737 TEST_P(AutomaticRebootManagerTest, StartNoPolicy) {
   1738   task_runner_->SetUptime(base::TimeDelta::FromDays(10));
   1739 
   1740   // Verify that the device does not reboot immediately.
   1741   CreateAutomaticRebootManager(false);
   1742 
   1743   // Verify that no grace period has started.
   1744   VerifyNoGracePeriod();
   1745 
   1746   // Verify that the device does not reboot eventually.
   1747   FastForwardUntilNoTasksRemain(false);
   1748 }
   1749 
   1750 // Chrome is starting. The uptime limit is set to 24 hours. The current uptime
   1751 // is 12 hours.
   1752 // Verifies that no reboot occurs and a grace period is scheduled to begin after
   1753 // 24 hours of uptime.
   1754 TEST_P(AutomaticRebootManagerTest, StartBeforeUptimeLimitGracePeriod) {
   1755   SetUptimeLimit(base::TimeDelta::FromHours(24), false);
   1756   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1757 
   1758   // Verify that the device does not reboot immediately.
   1759   CreateAutomaticRebootManager(false);
   1760 
   1761   // Verify that a grace period has been scheduled to start in the future.
   1762   VerifyGracePeriod(uptime_limit_);
   1763 
   1764   // Verify that unless a non-kiosk-app session is in progress, the device
   1765   // eventually reboots.
   1766   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1767                                 is_logged_in_as_kiosk_app_);
   1768 }
   1769 
   1770 // Chrome is starting. The uptime limit is set to 6 hours. The current uptime is
   1771 // 10 days.
   1772 // Verifies that if no non-kiosk-app session is in progress, the device reboots
   1773 // immediately because the grace period ended after 6 + 24 hours of uptime.
   1774 TEST_P(AutomaticRebootManagerTest, StartAfterUptimeLimitGracePeriod) {
   1775   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
   1776   task_runner_->SetUptime(base::TimeDelta::FromDays(10));
   1777 
   1778   // Verify that unless a non-kiosk-app session is in progress, the the device
   1779   // immediately reboots.
   1780   CreateAutomaticRebootManager(!is_user_logged_in_ ||
   1781                                is_logged_in_as_kiosk_app_);
   1782 
   1783   // Verify that if a non-kiosk-app session is in progress, the device does not
   1784   // reboot eventually.
   1785   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1786                                 is_logged_in_as_kiosk_app_);
   1787 }
   1788 
   1789 // Chrome is starting. The uptime limit is set to 6 hours. The current uptime is
   1790 // 12 hours.
   1791 // Verifies that a reboot is requested and a grace period is started that will
   1792 // end after 6 + 24 hours of uptime.
   1793 TEST_P(AutomaticRebootManagerTest, StartInUptimeLimitGracePeriod) {
   1794   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
   1795   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1796 
   1797   // Verify that the device does not reboot immediately.
   1798   CreateAutomaticRebootManager(false);
   1799 
   1800   // Verify that a grace period has started.
   1801   VerifyGracePeriod(uptime_limit_);
   1802 
   1803   // Verify that unless a non-kiosk-app session is in progress, the device
   1804   // eventually reboots.
   1805   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1806                                 is_logged_in_as_kiosk_app_);
   1807 }
   1808 
   1809 // Chrome is starting. An update was applied and a reboot became necessary to
   1810 // complete the update process after 6 hours of uptime. The current uptime is
   1811 // 10 days.
   1812 // Verifies that when the policy to automatically reboot after an update is
   1813 // enabled, the device reboots immediately if no non-kiosk-app session is in
   1814 // progress because the grace period ended after 6 + 24 hours of uptime.
   1815 TEST_P(AutomaticRebootManagerTest, StartAfterUpdateGracePeriod) {
   1816   SetUpdateStatusNeedReboot();
   1817   SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6));
   1818   task_runner_->SetUptime(base::TimeDelta::FromDays(10));
   1819   SetRebootAfterUpdate(true, false);
   1820 
   1821   // Verify that unless a non-kiosk-app session is in progress, the device
   1822   // reboots immediately.
   1823   CreateAutomaticRebootManager(!is_user_logged_in_ ||
   1824                                is_logged_in_as_kiosk_app_);
   1825 
   1826   // Verify that if a non-kiosk-app session is in progress, the device does not
   1827   // reboot eventually.
   1828   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1829                                 is_logged_in_as_kiosk_app_);
   1830 }
   1831 
   1832 // Chrome is starting. An update was applied and a reboot became necessary to
   1833 // complete the update process after 6 hours of uptime. The current uptime is
   1834 // 12 hours.
   1835 // Verifies that when the policy to automatically reboot after an update is
   1836 // enabled, a reboot is requested and a grace period is started that will end
   1837 // after 6 + 24 hours of uptime.
   1838 TEST_P(AutomaticRebootManagerTest, StartInUpdateGracePeriod) {
   1839   SetUpdateStatusNeedReboot();
   1840   SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6));
   1841   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1842   SetRebootAfterUpdate(true, false);
   1843 
   1844   // Verify that the device does not reboot immediately.
   1845   CreateAutomaticRebootManager(false);
   1846 
   1847   // Verify that a grace period has started.
   1848   VerifyGracePeriod(update_reboot_needed_uptime_);
   1849 
   1850   // Verify that unless a non-kiosk-app session is in progress, the device
   1851   // eventually reboots.
   1852   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1853                                 is_logged_in_as_kiosk_app_);
   1854 }
   1855 
   1856 // Chrome is starting. An update was applied and a reboot became necessary to
   1857 // complete the update process after 10 minutes of uptime. The current uptime is
   1858 // 20 minutes.
   1859 // Verifies that when the policy to automatically reboot after an update is
   1860 // enabled, no reboot occurs and a grace period is scheduled to begin after the
   1861 // minimum of 1 hour of uptime.
   1862 TEST_P(AutomaticRebootManagerTest, StartBeforeUpdateGracePeriod) {
   1863   SetUpdateStatusNeedReboot();
   1864   SetUpdateRebootNeededUptime(base::TimeDelta::FromMinutes(10));
   1865   task_runner_->SetUptime(base::TimeDelta::FromMinutes(20));
   1866   SetRebootAfterUpdate(true, false);
   1867 
   1868   // Verify that the device does not reboot immediately.
   1869   CreateAutomaticRebootManager(false);
   1870 
   1871   // Verify that a grace period has been scheduled to start in the future.
   1872   VerifyGracePeriod(base::TimeDelta::FromHours(1));
   1873 
   1874   // Verify that unless a non-kiosk-app session is in progress, the device
   1875   // eventually reboots.
   1876   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1877                                 is_logged_in_as_kiosk_app_);
   1878 }
   1879 
   1880 // Chrome is starting. An update was applied and a reboot became necessary to
   1881 // complete the update process after 6 hours of uptime. The current uptime is
   1882 // 10 days.
   1883 // Verifies that when the policy to automatically reboot after an update is not
   1884 // enabled, no reboot occurs and no grace period is scheduled.
   1885 TEST_P(AutomaticRebootManagerTest, StartUpdateNoPolicy) {
   1886   SetUpdateStatusNeedReboot();
   1887   SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6));
   1888   task_runner_->SetUptime(base::TimeDelta::FromDays(10));
   1889 
   1890   // Verify that the device does not reboot immediately.
   1891   CreateAutomaticRebootManager(false);
   1892 
   1893   // Verify that no grace period has started.
   1894   VerifyNoGracePeriod();
   1895 
   1896   // Verify that the device does not reboot eventually.
   1897   FastForwardUntilNoTasksRemain(false);
   1898 }
   1899 
   1900 // Chrome is starting. An update was applied and a reboot became necessary to
   1901 // complete the update process but the time at which this happened was lost. The
   1902 // current uptime is 10 days.
   1903 // Verifies that the current uptime is persisted as the time at which a reboot
   1904 // became necessary. Further verifies that when the policy to automatically
   1905 // reboot after an update is enabled, a reboot is requested and a grace period
   1906 // is started that will end 24 hours from now.
   1907 TEST_P(AutomaticRebootManagerTest, StartUpdateTimeLost) {
   1908   SetUpdateStatusNeedReboot();
   1909   task_runner_->SetUptime(base::TimeDelta::FromDays(10));
   1910   SetRebootAfterUpdate(true, false);
   1911 
   1912   // Verify that the device does not reboot immediately.
   1913   CreateAutomaticRebootManager(false);
   1914 
   1915   // Verify that the current uptime has been persisted as the time at which a
   1916   // reboot became necessary.
   1917   EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
   1918       &update_reboot_needed_uptime_));
   1919   EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_);
   1920 
   1921   // Verify that a grace period has started.
   1922   VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_);
   1923 
   1924   // Verify that unless a non-kiosk-app session is in progress, the device
   1925   // eventually reboots.
   1926   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   1927                                 is_logged_in_as_kiosk_app_);
   1928 }
   1929 
   1930 // Chrome is starting. An update was applied and a reboot became necessary to
   1931 // complete the update process but the time at which this happened was lost. The
   1932 // current uptime is 10 days.
   1933 // Verifies that the current uptime is persisted as the time at which a reboot
   1934 // became necessary. Further verifies that when the policy to automatically
   1935 // reboot after an update is not enabled, no reboot occurs and no grace period
   1936 // is scheduled.
   1937 TEST_P(AutomaticRebootManagerTest, StartUpdateNoPolicyTimeLost) {
   1938   SetUpdateStatusNeedReboot();
   1939   task_runner_->SetUptime(base::TimeDelta::FromDays(10));
   1940 
   1941   // Verify that the device does not reboot immediately.
   1942   CreateAutomaticRebootManager(false);
   1943 
   1944   // Verify that the current uptime has been persisted as the time at which a
   1945   // reboot became necessary.
   1946   EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
   1947       &update_reboot_needed_uptime_));
   1948   EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_);
   1949 
   1950   // Verify that no grace period has started.
   1951   VerifyNoGracePeriod();
   1952 
   1953   // Verify that the device does not reboot eventually.
   1954   FastForwardUntilNoTasksRemain(false);
   1955 }
   1956 
   1957 // Chrome is starting. No update has been applied. The current uptime is
   1958 // 12 hours.
   1959 // Verifies that no time is persisted as the time at which a reboot became
   1960 // necessary. Further verifies that no reboot occurs and no grace period is
   1961 // scheduled.
   1962 TEST_P(AutomaticRebootManagerTest, StartNoUpdate) {
   1963   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1964   SetRebootAfterUpdate(true, false);
   1965 
   1966   // Verify that the device does not reboot immediately.
   1967   CreateAutomaticRebootManager(false);
   1968 
   1969   // Verify that no time is persisted as the time at which a reboot became
   1970   // necessary.
   1971   EXPECT_FALSE(ReadUpdateRebootNeededUptimeFromFile(
   1972       &update_reboot_needed_uptime_));
   1973 
   1974   // Verify that no grace period has started.
   1975   VerifyNoGracePeriod();
   1976 
   1977   // Verify that the device does not reboot eventually.
   1978   FastForwardUntilNoTasksRemain(false);
   1979 }
   1980 
   1981 // Chrome is starting. The uptime limit is set to 6 hours. Also, an update was
   1982 // applied and a reboot became necessary to complete the update process after
   1983 // 8 hours of uptime. The current uptime is 12 hours.
   1984 // Verifies that when the policy to automatically reboot after an update is
   1985 // enabled, a reboot is requested and a grace period is started that will end
   1986 // after 6 + 24 hours of uptime.
   1987 TEST_P(AutomaticRebootManagerTest, StartUptimeLimitBeforeUpdate) {
   1988   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
   1989   SetUpdateStatusNeedReboot();
   1990   SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(8));
   1991   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   1992   SetRebootAfterUpdate(true, false);
   1993 
   1994   // Verify that the device does not reboot immediately.
   1995   CreateAutomaticRebootManager(false);
   1996 
   1997   // Verify that a grace period has started.
   1998   VerifyGracePeriod(uptime_limit_);
   1999 
   2000   // Verify that unless a non-kiosk-app session is in progress, the device
   2001   // eventually reboots.
   2002   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   2003                                 is_logged_in_as_kiosk_app_);
   2004 }
   2005 
   2006 // Chrome is starting. The uptime limit is set to 8 hours. Also, an update was
   2007 // applied and a reboot became necessary to complete the update process after
   2008 // 6 hours of uptime. The current uptime is 12 hours.
   2009 // Verifies that when the policy to automatically reboot after an update is
   2010 // enabled, a reboot is requested and a grace period is started that will end
   2011 // after 6 + 24 hours of uptime.
   2012 TEST_P(AutomaticRebootManagerTest, StartUpdateBeforeUptimeLimit) {
   2013   SetUptimeLimit(base::TimeDelta::FromHours(8), false);
   2014   SetUpdateStatusNeedReboot();
   2015   SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6));
   2016   task_runner_->SetUptime(base::TimeDelta::FromHours(12));
   2017   SetRebootAfterUpdate(true, false);
   2018 
   2019   // Verify that the device does not reboot immediately.
   2020   CreateAutomaticRebootManager(false);
   2021 
   2022   // Verify that a grace period has started.
   2023   VerifyGracePeriod(update_reboot_needed_uptime_);
   2024 
   2025   // Verify that unless a non-kiosk-app session is in progress, the device
   2026   // eventually reboots.
   2027   FastForwardUntilNoTasksRemain(!is_user_logged_in_ ||
   2028                                 is_logged_in_as_kiosk_app_);
   2029 }
   2030 
   2031 // Chrome is starting. The uptime limit is set to 6 hours. Also, an update was
   2032 // applied and a reboot became necessary to complete the update process after
   2033 // 6 hours of uptime. The current uptime is not available.
   2034 // Verifies that even if the policy to automatically reboot after an update is
   2035 // enabled, no reboot occurs and no grace period is scheduled.
   2036 TEST_P(AutomaticRebootManagerTest, StartNoUptime) {
   2037   SetUptimeLimit(base::TimeDelta::FromHours(6), false);
   2038   SetUpdateStatusNeedReboot();
   2039   SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6));
   2040   SetRebootAfterUpdate(true, false);
   2041 
   2042   // Verify that the device does not reboot immediately.
   2043   CreateAutomaticRebootManager(false);
   2044 
   2045   // Verify that no grace period has started.
   2046   VerifyNoGracePeriod();
   2047 
   2048   // Verify that the device does not reboot eventually.
   2049   FastForwardUntilNoTasksRemain(false);
   2050 }
   2051 
   2052 INSTANTIATE_TEST_CASE_P(
   2053     AutomaticRebootManagerTestInstance,
   2054     AutomaticRebootManagerTest,
   2055     ::testing::Values(
   2056         AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_LOGIN_SCREEN,
   2057         AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_KIOSK_APP_SESSION,
   2058         AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_NON_KIOSK_APP_SESSION));
   2059 
   2060 }  // namespace system
   2061 }  // namespace chromeos
   2062