| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/arc/arc_util.h" | 5 #include "chrome/browser/chromeos/arc/arc_util.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| 11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
| 12 #include "base/sys_info.h" |
| 12 #include "base/test/scoped_command_line.h" | 13 #include "base/test/scoped_command_line.h" |
| 13 #include "base/values.h" | 14 #include "base/values.h" |
| 14 #include "chrome/browser/chromeos/login/supervised/supervised_user_creation_flow
.h" | 15 #include "chrome/browser/chromeos/login/supervised/supervised_user_creation_flow
.h" |
| 15 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" | 16 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" |
| 16 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" | 17 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" |
| 17 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h" | 18 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h" |
| 18 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 19 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
| 19 #include "chrome/browser/profiles/profile.h" | 20 #include "chrome/browser/profiles/profile.h" |
| 20 #include "chrome/common/pref_names.h" | 21 #include "chrome/common/pref_names.h" |
| 21 #include "chrome/test/base/testing_profile.h" | 22 #include "chrome/test/base/testing_profile.h" |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 std::unique_ptr<TestingProfile> profile_; | 132 std::unique_ptr<TestingProfile> profile_; |
| 132 | 133 |
| 133 DISALLOW_COPY_AND_ASSIGN(ChromeArcUtilTest); | 134 DISALLOW_COPY_AND_ASSIGN(ChromeArcUtilTest); |
| 134 }; | 135 }; |
| 135 | 136 |
| 136 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile) { | 137 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile) { |
| 137 ScopedLogIn login(GetFakeUserManager(), | 138 ScopedLogIn login(GetFakeUserManager(), |
| 138 AccountId::FromUserEmailGaiaId( | 139 AccountId::FromUserEmailGaiaId( |
| 139 profile()->GetProfileUserName(), kTestGaiaId)); | 140 profile()->GetProfileUserName(), kTestGaiaId)); |
| 140 EXPECT_TRUE(IsArcAllowedForProfile(profile())); | 141 EXPECT_TRUE(IsArcAllowedForProfile(profile())); |
| 142 EXPECT_TRUE(IsArcAllowedInAppListForProfile(profile())); |
| 141 | 143 |
| 142 // false for nullptr. | 144 // false for nullptr. |
| 143 EXPECT_FALSE(IsArcAllowedForProfile(nullptr)); | 145 EXPECT_FALSE(IsArcAllowedForProfile(nullptr)); |
| 146 EXPECT_FALSE(IsArcAllowedInAppListForProfile(nullptr)); |
| 144 | 147 |
| 145 // false for incognito mode profile. | 148 // false for incognito mode profile. |
| 146 EXPECT_FALSE(IsArcAllowedForProfile(profile()->GetOffTheRecordProfile())); | 149 EXPECT_FALSE(IsArcAllowedForProfile(profile()->GetOffTheRecordProfile())); |
| 150 EXPECT_FALSE( |
| 151 IsArcAllowedInAppListForProfile(profile()->GetOffTheRecordProfile())); |
| 147 | 152 |
| 148 // false for Legacy supervised user. | 153 // false for Legacy supervised user. |
| 149 profile()->SetSupervisedUserId("foo"); | 154 profile()->SetSupervisedUserId("foo"); |
| 150 EXPECT_FALSE(IsArcAllowedForProfile(profile())); | 155 EXPECT_FALSE(IsArcAllowedForProfile(profile())); |
| 156 EXPECT_FALSE(IsArcAllowedInAppListForProfile(profile())); |
| 151 } | 157 } |
| 152 | 158 |
| 153 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_DisableArc) { | 159 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_DisableArc) { |
| 154 base::CommandLine::ForCurrentProcess()->InitFromArgv({""}); | 160 base::CommandLine::ForCurrentProcess()->InitFromArgv({""}); |
| 155 ScopedLogIn login(GetFakeUserManager(), | 161 ScopedLogIn login(GetFakeUserManager(), |
| 156 AccountId::FromUserEmailGaiaId( | 162 AccountId::FromUserEmailGaiaId( |
| 157 profile()->GetProfileUserName(), kTestGaiaId)); | 163 profile()->GetProfileUserName(), kTestGaiaId)); |
| 158 EXPECT_FALSE(IsArcAllowedForProfile(profile())); | 164 EXPECT_FALSE(IsArcAllowedForProfile(profile())); |
| 165 EXPECT_FALSE(IsArcAllowedInAppListForProfile(profile())); |
| 159 } | 166 } |
| 160 | 167 |
| 161 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_NonPrimaryProfile) { | 168 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_NonPrimaryProfile) { |
| 162 ScopedLogIn login2( | 169 ScopedLogIn login2( |
| 163 GetFakeUserManager(), | 170 GetFakeUserManager(), |
| 164 AccountId::FromUserEmailGaiaId("user2@gmail.com", "0123456789")); | 171 AccountId::FromUserEmailGaiaId("user2@gmail.com", "0123456789")); |
| 165 ScopedLogIn login(GetFakeUserManager(), | 172 ScopedLogIn login(GetFakeUserManager(), |
| 166 AccountId::FromUserEmailGaiaId( | 173 AccountId::FromUserEmailGaiaId( |
| 167 profile()->GetProfileUserName(), kTestGaiaId)); | 174 profile()->GetProfileUserName(), kTestGaiaId)); |
| 168 EXPECT_FALSE(IsArcAllowedForProfile(profile())); | 175 EXPECT_FALSE(IsArcAllowedForProfile(profile())); |
| 176 EXPECT_FALSE(IsArcAllowedInAppListForProfile(profile())); |
| 169 } | 177 } |
| 170 | 178 |
| 171 // User without GAIA account. | 179 // User without GAIA account. |
| 172 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_PublicAccount) { | 180 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_PublicAccount) { |
| 173 ScopedLogIn login(GetFakeUserManager(), | 181 ScopedLogIn login(GetFakeUserManager(), |
| 174 AccountId::FromUserEmail("public_user@gmail.com"), | 182 AccountId::FromUserEmail("public_user@gmail.com"), |
| 175 user_manager::USER_TYPE_PUBLIC_ACCOUNT); | 183 user_manager::USER_TYPE_PUBLIC_ACCOUNT); |
| 176 EXPECT_FALSE(IsArcAllowedForProfile(profile())); | 184 EXPECT_FALSE(IsArcAllowedForProfile(profile())); |
| 185 EXPECT_FALSE(IsArcAllowedInAppListForProfile(profile())); |
| 177 } | 186 } |
| 178 | 187 |
| 179 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_ActiveDirectoryEnabled) { | 188 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_ActiveDirectoryEnabled) { |
| 180 base::CommandLine::ForCurrentProcess()->InitFromArgv( | 189 base::CommandLine::ForCurrentProcess()->InitFromArgv( |
| 181 {"", "--arc-availability=officially-supported-with-active-directory"}); | 190 {"", "--arc-availability=officially-supported-with-active-directory"}); |
| 182 ScopedLogIn login( | 191 ScopedLogIn login( |
| 183 GetFakeUserManager(), | 192 GetFakeUserManager(), |
| 184 AccountId::AdFromObjGuid("f04557de-5da2-40ce-ae9d-b8874d8da96e"), | 193 AccountId::AdFromObjGuid("f04557de-5da2-40ce-ae9d-b8874d8da96e"), |
| 185 user_manager::USER_TYPE_ACTIVE_DIRECTORY); | 194 user_manager::USER_TYPE_ACTIVE_DIRECTORY); |
| 186 EXPECT_FALSE(chromeos::ProfileHelper::Get() | 195 EXPECT_FALSE(chromeos::ProfileHelper::Get() |
| 187 ->GetUserByProfile(profile()) | 196 ->GetUserByProfile(profile()) |
| 188 ->HasGaiaAccount()); | 197 ->HasGaiaAccount()); |
| 189 EXPECT_TRUE(IsArcAllowedForProfile(profile())); | 198 EXPECT_TRUE(IsArcAllowedForProfile(profile())); |
| 199 EXPECT_TRUE(IsArcAllowedInAppListForProfile(profile())); |
| 190 } | 200 } |
| 191 | 201 |
| 192 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_ActiveDirectoryDisabled) { | 202 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_ActiveDirectoryDisabled) { |
| 193 ScopedLogIn login( | 203 ScopedLogIn login( |
| 194 GetFakeUserManager(), | 204 GetFakeUserManager(), |
| 195 AccountId::AdFromObjGuid("f04557de-5da2-40ce-ae9d-b8874d8da96e"), | 205 AccountId::AdFromObjGuid("f04557de-5da2-40ce-ae9d-b8874d8da96e"), |
| 196 user_manager::USER_TYPE_ACTIVE_DIRECTORY); | 206 user_manager::USER_TYPE_ACTIVE_DIRECTORY); |
| 197 EXPECT_FALSE(chromeos::ProfileHelper::Get() | 207 EXPECT_FALSE(chromeos::ProfileHelper::Get() |
| 198 ->GetUserByProfile(profile()) | 208 ->GetUserByProfile(profile()) |
| 199 ->HasGaiaAccount()); | 209 ->HasGaiaAccount()); |
| 200 EXPECT_FALSE(IsArcAllowedForProfile(profile())); | 210 EXPECT_FALSE(IsArcAllowedForProfile(profile())); |
| 211 EXPECT_FALSE(IsArcAllowedInAppListForProfile(profile())); |
| 201 } | 212 } |
| 202 | 213 |
| 203 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_KioskArcNotAvailable) { | 214 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_KioskArcNotAvailable) { |
| 204 base::CommandLine::ForCurrentProcess()->InitFromArgv({""}); | 215 base::CommandLine::ForCurrentProcess()->InitFromArgv({""}); |
| 205 ScopedLogIn login(GetFakeUserManager(), | 216 ScopedLogIn login(GetFakeUserManager(), |
| 206 AccountId::FromUserEmail(profile()->GetProfileUserName()), | 217 AccountId::FromUserEmail(profile()->GetProfileUserName()), |
| 207 user_manager::USER_TYPE_ARC_KIOSK_APP); | 218 user_manager::USER_TYPE_ARC_KIOSK_APP); |
| 208 EXPECT_FALSE(chromeos::ProfileHelper::Get() | 219 EXPECT_FALSE(chromeos::ProfileHelper::Get() |
| 209 ->GetUserByProfile(profile()) | 220 ->GetUserByProfile(profile()) |
| 210 ->HasGaiaAccount()); | 221 ->HasGaiaAccount()); |
| 211 EXPECT_FALSE(IsArcAllowedForProfile(profile())); | 222 EXPECT_FALSE(IsArcAllowedForProfile(profile())); |
| 223 EXPECT_FALSE(IsArcAllowedInAppListForProfile(profile())); |
| 212 } | 224 } |
| 213 | 225 |
| 214 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_KioskArcInstalled) { | 226 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_KioskArcInstalled) { |
| 215 base::CommandLine::ForCurrentProcess()->InitFromArgv( | 227 base::CommandLine::ForCurrentProcess()->InitFromArgv( |
| 216 {"", "--arc-availability=installed"}); | 228 {"", "--arc-availability=installed"}); |
| 217 ScopedLogIn login(GetFakeUserManager(), | 229 ScopedLogIn login(GetFakeUserManager(), |
| 218 AccountId::FromUserEmail(profile()->GetProfileUserName()), | 230 AccountId::FromUserEmail(profile()->GetProfileUserName()), |
| 219 user_manager::USER_TYPE_ARC_KIOSK_APP); | 231 user_manager::USER_TYPE_ARC_KIOSK_APP); |
| 220 EXPECT_FALSE(chromeos::ProfileHelper::Get() | 232 EXPECT_FALSE(chromeos::ProfileHelper::Get() |
| 221 ->GetUserByProfile(profile()) | 233 ->GetUserByProfile(profile()) |
| 222 ->HasGaiaAccount()); | 234 ->HasGaiaAccount()); |
| 223 EXPECT_TRUE(IsArcAllowedForProfile(profile())); | 235 EXPECT_TRUE(IsArcAllowedForProfile(profile())); |
| 236 EXPECT_TRUE(IsArcAllowedInAppListForProfile(profile())); |
| 224 } | 237 } |
| 225 | 238 |
| 226 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_KioskArcSupported) { | 239 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_KioskArcSupported) { |
| 227 base::CommandLine::ForCurrentProcess()->InitFromArgv( | 240 base::CommandLine::ForCurrentProcess()->InitFromArgv( |
| 228 {"", "--arc-availability=officially-supported"}); | 241 {"", "--arc-availability=officially-supported"}); |
| 229 ScopedLogIn login(GetFakeUserManager(), | 242 ScopedLogIn login(GetFakeUserManager(), |
| 230 AccountId::FromUserEmail(profile()->GetProfileUserName()), | 243 AccountId::FromUserEmail(profile()->GetProfileUserName()), |
| 231 user_manager::USER_TYPE_ARC_KIOSK_APP); | 244 user_manager::USER_TYPE_ARC_KIOSK_APP); |
| 232 EXPECT_FALSE(chromeos::ProfileHelper::Get() | 245 EXPECT_FALSE(chromeos::ProfileHelper::Get() |
| 233 ->GetUserByProfile(profile()) | 246 ->GetUserByProfile(profile()) |
| 234 ->HasGaiaAccount()); | 247 ->HasGaiaAccount()); |
| 235 EXPECT_TRUE(IsArcAllowedForProfile(profile())); | 248 EXPECT_TRUE(IsArcAllowedForProfile(profile())); |
| 249 EXPECT_TRUE(IsArcAllowedInAppListForProfile(profile())); |
| 236 } | 250 } |
| 237 | 251 |
| 238 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_SupervisedUserFlow) { | 252 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_SupervisedUserFlow) { |
| 239 auto manager_id = AccountId::FromUserEmailGaiaId( | 253 auto manager_id = AccountId::FromUserEmailGaiaId( |
| 240 profile()->GetProfileUserName(), kTestGaiaId); | 254 profile()->GetProfileUserName(), kTestGaiaId); |
| 241 ScopedLogIn login(GetFakeUserManager(), manager_id); | 255 ScopedLogIn login(GetFakeUserManager(), manager_id); |
| 242 GetFakeUserManager()->SetUserFlow( | 256 GetFakeUserManager()->SetUserFlow( |
| 243 manager_id, new chromeos::SupervisedUserCreationFlow(manager_id)); | 257 manager_id, new chromeos::SupervisedUserCreationFlow(manager_id)); |
| 244 EXPECT_FALSE(IsArcAllowedForProfile(profile())); | 258 EXPECT_FALSE(IsArcAllowedForProfile(profile())); |
| 245 GetFakeUserManager()->ResetUserFlow(manager_id); | 259 GetFakeUserManager()->ResetUserFlow(manager_id); |
| 246 } | 260 } |
| 247 | 261 |
| 248 // Guest account is interpreted as EphemeralDataUser. | 262 // Guest account is interpreted as EphemeralDataUser. |
| 249 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_GuestAccount) { | 263 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_GuestAccount) { |
| 250 ScopedLogIn login(GetFakeUserManager(), | 264 ScopedLogIn login(GetFakeUserManager(), |
| 251 GetFakeUserManager()->GetGuestAccountId()); | 265 GetFakeUserManager()->GetGuestAccountId()); |
| 252 EXPECT_FALSE(IsArcAllowedForProfile(profile())); | 266 EXPECT_FALSE(IsArcAllowedForProfile(profile())); |
| 267 EXPECT_FALSE(IsArcAllowedInAppListForProfile(profile())); |
| 253 } | 268 } |
| 254 | 269 |
| 255 // Demo account is interpreted as EphemeralDataUser. | 270 // Demo account is interpreted as EphemeralDataUser. |
| 256 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_DemoAccount) { | 271 TEST_F(ChromeArcUtilTest, IsArcAllowedForProfile_DemoAccount) { |
| 257 ScopedLogIn login(GetFakeUserManager(), user_manager::DemoAccountId()); | 272 ScopedLogIn login(GetFakeUserManager(), user_manager::DemoAccountId()); |
| 258 EXPECT_FALSE(IsArcAllowedForProfile(profile())); | 273 EXPECT_FALSE(IsArcAllowedForProfile(profile())); |
| 274 EXPECT_FALSE(IsArcAllowedInAppListForProfile(profile())); |
| 275 } |
| 276 |
| 277 TEST_F(ChromeArcUtilTest, IsProfileVerifiedToBeOnArcCompatibleFilesystem) { |
| 278 // TODO(kinaba): Come up with some way to test the conditions below |
| 279 // causes differences in the return values of IsArcAllowedForProfile() |
| 280 // and IsArcAllowedInAppListForProfile(). |
| 281 ScopedLogIn login(GetFakeUserManager(), |
| 282 AccountId::FromUserEmailGaiaId( |
| 283 profile()->GetProfileUserName(), kTestGaiaId)); |
| 284 |
| 285 // Unconfirmed + Old ARC |
| 286 profile()->GetPrefs()->ClearPref(prefs::kArcCompatibleFilesystemChosen); |
| 287 base::SysInfo::SetChromeOSVersionInfoForTest( |
| 288 "CHROMEOS_ARC_ANDROID_SDK_VERSION=23", base::Time::Now()); |
| 289 EXPECT_TRUE(IsProfileVerifiedToBeOnArcCompatibleFilesystem(profile())); |
| 290 |
| 291 // Unconfirmed + New ARC |
| 292 base::SysInfo::SetChromeOSVersionInfoForTest( |
| 293 "CHROMEOS_ARC_ANDROID_SDK_VERSION=25", base::Time::Now()); |
| 294 EXPECT_FALSE(IsProfileVerifiedToBeOnArcCompatibleFilesystem(profile())); |
| 295 |
| 296 // Old FS + Old ARC |
| 297 profile()->GetPrefs()->SetBoolean(prefs::kArcCompatibleFilesystemChosen, |
| 298 false); |
| 299 base::SysInfo::SetChromeOSVersionInfoForTest( |
| 300 "CHROMEOS_ARC_ANDROID_SDK_VERSION=23", base::Time::Now()); |
| 301 EXPECT_TRUE(IsProfileVerifiedToBeOnArcCompatibleFilesystem(profile())); |
| 302 |
| 303 // Old FS + New ARC |
| 304 base::SysInfo::SetChromeOSVersionInfoForTest( |
| 305 "CHROMEOS_ARC_ANDROID_SDK_VERSION=25", base::Time::Now()); |
| 306 EXPECT_FALSE(IsProfileVerifiedToBeOnArcCompatibleFilesystem(profile())); |
| 307 |
| 308 // New FS + Old ARC |
| 309 profile()->GetPrefs()->SetBoolean(prefs::kArcCompatibleFilesystemChosen, |
| 310 true); |
| 311 base::SysInfo::SetChromeOSVersionInfoForTest( |
| 312 "CHROMEOS_ARC_ANDROID_SDK_VERSION=23", base::Time::Now()); |
| 313 EXPECT_TRUE(IsProfileVerifiedToBeOnArcCompatibleFilesystem(profile())); |
| 314 |
| 315 // New FS + New ARC |
| 316 base::SysInfo::SetChromeOSVersionInfoForTest( |
| 317 "CHROMEOS_ARC_ANDROID_SDK_VERSION=25", base::Time::Now()); |
| 318 EXPECT_TRUE(IsProfileVerifiedToBeOnArcCompatibleFilesystem(profile())); |
| 259 } | 319 } |
| 260 | 320 |
| 261 TEST_F(ChromeArcUtilTest, ArcPlayStoreEnabledForProfile) { | 321 TEST_F(ChromeArcUtilTest, ArcPlayStoreEnabledForProfile) { |
| 262 // Ensure IsAllowedForProfile() true. | 322 // Ensure IsAllowedForProfile() true. |
| 263 ScopedLogIn login(GetFakeUserManager(), | 323 ScopedLogIn login(GetFakeUserManager(), |
| 264 AccountId::FromUserEmailGaiaId( | 324 AccountId::FromUserEmailGaiaId( |
| 265 profile()->GetProfileUserName(), kTestGaiaId)); | 325 profile()->GetProfileUserName(), kTestGaiaId)); |
| 266 ASSERT_TRUE(IsArcAllowedForProfile(profile())); | 326 ASSERT_TRUE(IsArcAllowedForProfile(profile())); |
| 267 | 327 |
| 268 // By default, Google Play Store is disabled. | 328 // By default, Google Play Store is disabled. |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 EXPECT_FALSE(AreArcAllOptInPreferencesManagedForProfile(profile())); | 414 EXPECT_FALSE(AreArcAllOptInPreferencesManagedForProfile(profile())); |
| 355 | 415 |
| 356 // Both OptIn prefs are set to managed values, and the function returns true. | 416 // Both OptIn prefs are set to managed values, and the function returns true. |
| 357 profile()->GetTestingPrefService()->SetManagedPref( | 417 profile()->GetTestingPrefService()->SetManagedPref( |
| 358 prefs::kArcBackupRestoreEnabled, base::MakeUnique<base::Value>(false)); | 418 prefs::kArcBackupRestoreEnabled, base::MakeUnique<base::Value>(false)); |
| 359 EXPECT_TRUE(AreArcAllOptInPreferencesManagedForProfile(profile())); | 419 EXPECT_TRUE(AreArcAllOptInPreferencesManagedForProfile(profile())); |
| 360 } | 420 } |
| 361 | 421 |
| 362 } // namespace util | 422 } // namespace util |
| 363 } // namespace arc | 423 } // namespace arc |
| OLD | NEW |