| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 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/login/screens/device_disabled_screen.h" | |
| 6 | |
| 7 #include "base/command_line.h" | |
| 8 #include "base/macros.h" | |
| 9 #include "base/memory/scoped_ptr.h" | |
| 10 #include "base/prefs/scoped_user_pref_update.h" | |
| 11 #include "base/prefs/testing_pref_service.h" | |
| 12 #include "chrome/browser/browser_process_platform_part.h" | |
| 13 #include "chrome/browser/chromeos/login/screens/base_screen_delegate.h" | |
| 14 #include "chrome/browser/chromeos/login/screens/mock_device_disabled_screen_acto
r.h" | |
| 15 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" | |
| 16 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" | |
| 17 #include "chrome/browser/chromeos/policy/server_backed_device_state.h" | |
| 18 #include "chrome/browser/chromeos/policy/stub_enterprise_install_attributes.h" | |
| 19 #include "chrome/common/pref_names.h" | |
| 20 #include "chrome/test/base/testing_browser_process.h" | |
| 21 #include "chromeos/chromeos_switches.h" | |
| 22 #include "components/policy/core/common/cloud/cloud_policy_constants.h" | |
| 23 #include "testing/gmock/include/gmock/gmock.h" | |
| 24 #include "testing/gtest/include/gtest/gtest.h" | |
| 25 | |
| 26 using ::testing::_; | |
| 27 | |
| 28 namespace chromeos { | |
| 29 | |
| 30 namespace { | |
| 31 | |
| 32 const char kDisabledMessage[] = "Device disabled."; | |
| 33 | |
| 34 } | |
| 35 | |
| 36 class DeviceDisabledScreenTest : public testing::Test, | |
| 37 public BaseScreenDelegate { | |
| 38 public: | |
| 39 DeviceDisabledScreenTest(); | |
| 40 ~DeviceDisabledScreenTest() override; | |
| 41 | |
| 42 // testing::Test: | |
| 43 void SetUp() override; | |
| 44 void TearDown() override; | |
| 45 | |
| 46 // BaseScreenDelegate: | |
| 47 MOCK_METHOD1(OnExit, void(ExitCodes)); | |
| 48 void ShowCurrentScreen() override; | |
| 49 ErrorScreen* GetErrorScreen() override; | |
| 50 void ShowErrorScreen() override; | |
| 51 void HideErrorScreen(BaseScreen* parent_screen) override; | |
| 52 | |
| 53 void SetDeviceDisabled(bool disabled); | |
| 54 void SetDeviceMode(policy::DeviceMode device_mode); | |
| 55 | |
| 56 void ExpectScreenToNotShow(); | |
| 57 void ExpectScreenToShow(); | |
| 58 | |
| 59 void TryToShowScreen(); | |
| 60 | |
| 61 private: | |
| 62 scoped_ptr<DeviceDisabledScreen> screen_; | |
| 63 scoped_ptr<MockDeviceDisabledScreenActor> actor_; | |
| 64 TestingPrefServiceSimple local_state_; | |
| 65 policy::ScopedStubEnterpriseInstallAttributes install_attributes_; | |
| 66 | |
| 67 DISALLOW_COPY_AND_ASSIGN(DeviceDisabledScreenTest); | |
| 68 }; | |
| 69 | |
| 70 DeviceDisabledScreenTest::DeviceDisabledScreenTest() | |
| 71 : install_attributes_("", "", "", policy::DEVICE_MODE_NOT_SET) { | |
| 72 } | |
| 73 | |
| 74 DeviceDisabledScreenTest::~DeviceDisabledScreenTest() { | |
| 75 } | |
| 76 | |
| 77 void DeviceDisabledScreenTest::SetUp() { | |
| 78 TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_); | |
| 79 policy::DeviceCloudPolicyManagerChromeOS::RegisterPrefs( | |
| 80 local_state_.registry()); | |
| 81 | |
| 82 actor_.reset(new MockDeviceDisabledScreenActor); | |
| 83 screen_.reset(new DeviceDisabledScreen(this, actor_.get())); | |
| 84 } | |
| 85 | |
| 86 void DeviceDisabledScreenTest::TearDown() { | |
| 87 TestingBrowserProcess::GetGlobal()->SetLocalState(nullptr); | |
| 88 } | |
| 89 | |
| 90 void DeviceDisabledScreenTest::ShowCurrentScreen() { | |
| 91 } | |
| 92 | |
| 93 ErrorScreen* DeviceDisabledScreenTest::GetErrorScreen() { | |
| 94 return nullptr; | |
| 95 } | |
| 96 | |
| 97 void DeviceDisabledScreenTest::ShowErrorScreen() { | |
| 98 } | |
| 99 | |
| 100 void DeviceDisabledScreenTest::HideErrorScreen(BaseScreen* parent_screen) { | |
| 101 } | |
| 102 | |
| 103 void DeviceDisabledScreenTest::SetDeviceDisabled(bool disabled) { | |
| 104 DictionaryPrefUpdate dict(&local_state_, prefs::kServerBackedDeviceState); | |
| 105 if (disabled) { | |
| 106 dict->SetString(policy::kDeviceStateRestoreMode, | |
| 107 policy::kDeviceStateRestoreModeDisabled); | |
| 108 } else { | |
| 109 dict->Remove(policy::kDeviceStateRestoreMode, nullptr); | |
| 110 } | |
| 111 dict->SetString(policy::kDeviceStateDisabledMessage, kDisabledMessage); | |
| 112 } | |
| 113 | |
| 114 void DeviceDisabledScreenTest::SetDeviceMode(policy::DeviceMode device_mode) { | |
| 115 reinterpret_cast<policy::StubEnterpriseInstallAttributes*>( | |
| 116 TestingBrowserProcess::GetGlobal()->platform_part()-> | |
| 117 browser_policy_connector_chromeos()->GetInstallAttributes())-> | |
| 118 SetMode(device_mode); | |
| 119 } | |
| 120 | |
| 121 void DeviceDisabledScreenTest::ExpectScreenToNotShow() { | |
| 122 EXPECT_CALL(*actor_, Show(_)).Times(0); | |
| 123 EXPECT_CALL(*this, OnExit(BaseScreenDelegate::DEVICE_NOT_DISABLED)).Times(1); | |
| 124 } | |
| 125 | |
| 126 void DeviceDisabledScreenTest::ExpectScreenToShow() { | |
| 127 EXPECT_CALL(*actor_, Show(kDisabledMessage)).Times(1); | |
| 128 EXPECT_CALL(*this, OnExit(BaseScreenDelegate::DEVICE_NOT_DISABLED)).Times(0); | |
| 129 } | |
| 130 | |
| 131 void DeviceDisabledScreenTest::TryToShowScreen() { | |
| 132 screen_->Show(); | |
| 133 } | |
| 134 | |
| 135 // Verifies that the device disabled screen is not shown by default. | |
| 136 TEST_F(DeviceDisabledScreenTest, DoNotShowByDefault) { | |
| 137 ExpectScreenToNotShow(); | |
| 138 TryToShowScreen(); | |
| 139 } | |
| 140 | |
| 141 // Verifies that the device disabled screen is not shown when the device is | |
| 142 // explicitly marked as not disabled. | |
| 143 TEST_F(DeviceDisabledScreenTest, DoNotShowWhenNotDisabled) { | |
| 144 SetDeviceDisabled(false); | |
| 145 ExpectScreenToNotShow(); | |
| 146 TryToShowScreen(); | |
| 147 } | |
| 148 | |
| 149 // Verifies that the device disabled screen is not shown when device disabling | |
| 150 // is turned off by flag, even if the device is marked as disabled. | |
| 151 TEST_F(DeviceDisabledScreenTest, DoNotShowWhenTurnedOffByFlag) { | |
| 152 CommandLine::ForCurrentProcess()->AppendSwitch( | |
| 153 switches::kDisableDeviceDisabling); | |
| 154 SetDeviceDisabled(true); | |
| 155 ExpectScreenToNotShow(); | |
| 156 TryToShowScreen(); | |
| 157 } | |
| 158 | |
| 159 // Verifies that the device disabled screen is not shown when the device is | |
| 160 // already enrolled, even if the device is marked as disabled. | |
| 161 TEST_F(DeviceDisabledScreenTest, DoNotShowWhenEnterpriseOwned) { | |
| 162 SetDeviceMode(policy::DEVICE_MODE_ENTERPRISE); | |
| 163 SetDeviceDisabled(true); | |
| 164 ExpectScreenToNotShow(); | |
| 165 TryToShowScreen(); | |
| 166 } | |
| 167 | |
| 168 // Verifies that the device disabled screen is not shown when the device is | |
| 169 // already owned by a consumer, even if the device is marked as disabled. | |
| 170 TEST_F(DeviceDisabledScreenTest, DoNotShowWhenConsumerOwned) { | |
| 171 SetDeviceMode(policy::DEVICE_MODE_CONSUMER); | |
| 172 SetDeviceDisabled(true); | |
| 173 ExpectScreenToNotShow(); | |
| 174 TryToShowScreen(); | |
| 175 } | |
| 176 | |
| 177 // Verifies that the device disabled screen is shown when the device is marked | |
| 178 // as disabled, device disabling is not turned off by flag and the device is not | |
| 179 // owned yet. | |
| 180 TEST_F(DeviceDisabledScreenTest, ShowWhenDisabledAndNotOwned) { | |
| 181 SetDeviceDisabled(true); | |
| 182 ExpectScreenToShow(); | |
| 183 TryToShowScreen(); | |
| 184 } | |
| 185 | |
| 186 } // namespace chromeos | |
| OLD | NEW |