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

Side by Side Diff: chrome/browser/chromeos/arc/arc_session_manager_unittest.cc

Issue 2707133006: Start ARC and sign in after Chrome OS login (Closed)
Patch Set: test coverage in chrome_launcher_controller_impl_unittest.cc Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 <memory> 5 #include <memory>
6 #include <string> 6 #include <string>
7 #include <tuple> 7 #include <tuple>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 16 matching lines...) Expand all
27 #include "chrome/browser/chromeos/login/ui/login_display_host.h" 27 #include "chrome/browser/chromeos/login/ui/login_display_host.h"
28 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" 28 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
29 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" 29 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
30 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h" 30 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
31 #include "chrome/browser/chromeos/profiles/profile_helper.h" 31 #include "chrome/browser/chromeos/profiles/profile_helper.h"
32 #include "chrome/browser/policy/profile_policy_connector.h" 32 #include "chrome/browser/policy/profile_policy_connector.h"
33 #include "chrome/browser/policy/profile_policy_connector_factory.h" 33 #include "chrome/browser/policy/profile_policy_connector_factory.h"
34 #include "chrome/browser/prefs/pref_service_syncable_util.h" 34 #include "chrome/browser/prefs/pref_service_syncable_util.h"
35 #include "chrome/browser/profiles/profile.h" 35 #include "chrome/browser/profiles/profile.h"
36 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" 36 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
37 #include "chrome/browser/ui/app_list/arc/arc_app_test.h"
37 #include "chrome/browser/ui/ash/multi_user/multi_user_util.h" 38 #include "chrome/browser/ui/ash/multi_user/multi_user_util.h"
38 #include "chrome/common/pref_names.h" 39 #include "chrome/common/pref_names.h"
39 #include "chrome/test/base/testing_profile.h" 40 #include "chrome/test/base/testing_profile.h"
40 #include "chromeos/chromeos_switches.h" 41 #include "chromeos/chromeos_switches.h"
41 #include "chromeos/dbus/dbus_thread_manager.h" 42 #include "chromeos/dbus/dbus_thread_manager.h"
42 #include "chromeos/dbus/fake_session_manager_client.h" 43 #include "chromeos/dbus/fake_session_manager_client.h"
43 #include "components/arc/arc_service_manager.h" 44 #include "components/arc/arc_service_manager.h"
44 #include "components/arc/arc_session_runner.h" 45 #include "components/arc/arc_session_runner.h"
45 #include "components/arc/arc_util.h" 46 #include "components/arc/arc_util.h"
46 #include "components/arc/test/fake_arc_session.h" 47 #include "components/arc/test/fake_arc_session.h"
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 content::TestBrowserThreadBundle thread_bundle_; 196 content::TestBrowserThreadBundle thread_bundle_;
196 std::unique_ptr<TestingProfile> profile_; 197 std::unique_ptr<TestingProfile> profile_;
197 std::unique_ptr<ArcServiceManager> arc_service_manager_; 198 std::unique_ptr<ArcServiceManager> arc_service_manager_;
198 std::unique_ptr<ArcSessionManager> arc_session_manager_; 199 std::unique_ptr<ArcSessionManager> arc_session_manager_;
199 chromeos::ScopedUserManagerEnabler user_manager_enabler_; 200 chromeos::ScopedUserManagerEnabler user_manager_enabler_;
200 base::ScopedTempDir temp_dir_; 201 base::ScopedTempDir temp_dir_;
201 202
202 DISALLOW_COPY_AND_ASSIGN(ArcSessionManagerTestBase); 203 DISALLOW_COPY_AND_ASSIGN(ArcSessionManagerTestBase);
203 }; 204 };
204 205
205 class ArcSessionManagerTest : public ArcSessionManagerTestBase { 206 // Intermediate class so that the children can inject test parameter freely.
207 class AbstractArcSessionManagerTest : public ArcSessionManagerTestBase {
206 public: 208 public:
207 ArcSessionManagerTest() = default; 209 AbstractArcSessionManagerTest() = default;
208
209 void SetUp() override { 210 void SetUp() override {
210 ArcSessionManagerTestBase::SetUp(); 211 ArcSessionManagerTestBase::SetUp();
212 if (ShouldAlwaysStartArcInTest())
213 SetAlwaysStartArcForTesting();
211 214
212 const AccountId account_id(AccountId::FromUserEmailGaiaId( 215 const AccountId account_id(AccountId::FromUserEmailGaiaId(
213 profile()->GetProfileUserName(), "1234567890")); 216 profile()->GetProfileUserName(), "1234567890"));
214 GetFakeUserManager()->AddUser(account_id); 217 GetFakeUserManager()->AddUser(account_id);
215 GetFakeUserManager()->LoginUser(account_id); 218 GetFakeUserManager()->LoginUser(account_id);
216 } 219 }
217 220
221 protected:
222 virtual bool ShouldAlwaysStartArcInTest() = 0;
223
224 private:
225 DISALLOW_COPY_AND_ASSIGN(AbstractArcSessionManagerTest);
226 };
227
228 class ArcSessionManagerTest : public AbstractArcSessionManagerTest,
229 public ::testing::WithParamInterface<bool> {
230 public:
231 ArcSessionManagerTest() = default;
232
233 protected:
234 bool ShouldAlwaysStartArcInTest() override { return GetParam(); }
235
218 private: 236 private:
219 DISALLOW_COPY_AND_ASSIGN(ArcSessionManagerTest); 237 DISALLOW_COPY_AND_ASSIGN(ArcSessionManagerTest);
220 }; 238 };
221 239
222 TEST_F(ArcSessionManagerTest, PrefChangeTriggersService) { 240 INSTANTIATE_TEST_CASE_P(, ArcSessionManagerTest, ::testing::Bool());
241
242 TEST_P(ArcSessionManagerTest, PrefChangeTriggersService) {
243 // TODO(victorhsieh): Implement opt-in and opt-out flow.
244 if (ShouldAlwaysStartArc())
245 return;
246
223 ASSERT_EQ(ArcSessionManager::State::NOT_INITIALIZED, 247 ASSERT_EQ(ArcSessionManager::State::NOT_INITIALIZED,
224 arc_session_manager()->state()); 248 arc_session_manager()->state());
225 249
226 PrefService* const pref = profile()->GetPrefs(); 250 PrefService* const pref = profile()->GetPrefs();
227 ASSERT_FALSE(pref->GetBoolean(prefs::kArcEnabled)); 251 ASSERT_FALSE(pref->GetBoolean(prefs::kArcEnabled));
228 252
229 arc_session_manager()->OnPrimaryUserProfilePrepared(profile()); 253 arc_session_manager()->OnPrimaryUserProfilePrepared(profile());
230 254
231 ASSERT_TRUE(WaitForDataRemoved(ArcSessionManager::State::STOPPED)); 255 ASSERT_TRUE(WaitForDataRemoved(ArcSessionManager::State::STOPPED));
232 256
233 pref->SetBoolean(prefs::kArcEnabled, true); 257 pref->SetBoolean(prefs::kArcEnabled, true);
234 base::RunLoop().RunUntilIdle(); 258 base::RunLoop().RunUntilIdle();
235 ASSERT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 259 ASSERT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE,
236 arc_session_manager()->state()); 260 arc_session_manager()->state());
237 261
238 pref->SetBoolean(prefs::kArcEnabled, false); 262 pref->SetBoolean(prefs::kArcEnabled, false);
239 263
240 ASSERT_TRUE(WaitForDataRemoved(ArcSessionManager::State::STOPPED)); 264 ASSERT_TRUE(WaitForDataRemoved(ArcSessionManager::State::STOPPED));
241 265
242 // Correctly stop service. 266 // Correctly stop service.
243 arc_session_manager()->Shutdown(); 267 arc_session_manager()->Shutdown();
244 } 268 }
245 269
246 TEST_F(ArcSessionManagerTest, DisabledForEphemeralDataUsers) { 270 TEST_P(ArcSessionManagerTest, DisabledForEphemeralDataUsers) {
247 PrefService* const prefs = profile()->GetPrefs(); 271 PrefService* const prefs = profile()->GetPrefs();
248 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn)); 272 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn));
249 prefs->SetBoolean(prefs::kArcEnabled, true); 273 prefs->SetBoolean(prefs::kArcEnabled, true);
250 274
251 chromeos::FakeChromeUserManager* const fake_user_manager = 275 chromeos::FakeChromeUserManager* const fake_user_manager =
252 GetFakeUserManager(); 276 GetFakeUserManager();
253 277
254 fake_user_manager->AddUser(fake_user_manager->GetGuestAccountId()); 278 fake_user_manager->AddUser(fake_user_manager->GetGuestAccountId());
255 fake_user_manager->SwitchActiveUser(fake_user_manager->GetGuestAccountId()); 279 fake_user_manager->SwitchActiveUser(fake_user_manager->GetGuestAccountId());
256 arc_session_manager()->OnPrimaryUserProfilePrepared(profile()); 280 arc_session_manager()->OnPrimaryUserProfilePrepared(profile());
(...skipping 24 matching lines...) Expand all
281 fake_user_manager->RemoveUserFromList(not_in_list_account_id); 305 fake_user_manager->RemoveUserFromList(not_in_list_account_id);
282 arc_session_manager()->Shutdown(); 306 arc_session_manager()->Shutdown();
283 arc_session_manager()->OnPrimaryUserProfilePrepared(profile()); 307 arc_session_manager()->OnPrimaryUserProfilePrepared(profile());
284 ASSERT_EQ(ArcSessionManager::State::NOT_INITIALIZED, 308 ASSERT_EQ(ArcSessionManager::State::NOT_INITIALIZED,
285 arc_session_manager()->state()); 309 arc_session_manager()->state());
286 310
287 // Correctly stop service. 311 // Correctly stop service.
288 arc_session_manager()->Shutdown(); 312 arc_session_manager()->Shutdown();
289 } 313 }
290 314
291 TEST_F(ArcSessionManagerTest, BaseWorkflow) { 315 TEST_P(ArcSessionManagerTest, BaseWorkflow) {
316 // See BaseWorkflowOnPersistentArc for Persistent ARC flow.
317 if (ShouldAlwaysStartArc())
318 return;
319
292 ASSERT_TRUE(arc_session_manager()->IsSessionStopped()); 320 ASSERT_TRUE(arc_session_manager()->IsSessionStopped());
293 ASSERT_EQ(ArcSessionManager::State::NOT_INITIALIZED, 321 ASSERT_EQ(ArcSessionManager::State::NOT_INITIALIZED,
294 arc_session_manager()->state()); 322 arc_session_manager()->state());
295 EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null()); 323 EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null());
296 EXPECT_TRUE(arc_session_manager()->arc_start_time().is_null()); 324 EXPECT_TRUE(arc_session_manager()->arc_start_time().is_null());
297 325
298 arc_session_manager()->OnPrimaryUserProfilePrepared(profile()); 326 arc_session_manager()->OnPrimaryUserProfilePrepared(profile());
299 327
300 // By default ARC is not enabled. 328 // By default ARC is not enabled.
301 ASSERT_TRUE(WaitForDataRemoved(ArcSessionManager::State::STOPPED)); 329 ASSERT_TRUE(WaitForDataRemoved(ArcSessionManager::State::STOPPED));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 base::RunLoop().RunUntilIdle(); 361 base::RunLoop().RunUntilIdle();
334 362
335 // UI is disabled in unit tests and this code is unchanged. 363 // UI is disabled in unit tests and this code is unchanged.
336 ASSERT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 364 ASSERT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE,
337 arc_session_manager()->state()); 365 arc_session_manager()->state());
338 366
339 // Correctly stop service. 367 // Correctly stop service.
340 arc_session_manager()->Shutdown(); 368 arc_session_manager()->Shutdown();
341 } 369 }
342 370
343 TEST_F(ArcSessionManagerTest, CancelFetchingDisablesArc) { 371 TEST_P(ArcSessionManagerTest, CancelFetchingDisablesArc) {
372 // TODO(victorhsieh): Implement opt-in flow on Persistent ARC.
373 if (ShouldAlwaysStartArc())
374 return;
375
344 PrefService* const pref = profile()->GetPrefs(); 376 PrefService* const pref = profile()->GetPrefs();
345 377
346 arc_session_manager()->OnPrimaryUserProfilePrepared(profile()); 378 arc_session_manager()->OnPrimaryUserProfilePrepared(profile());
347 pref->SetBoolean(prefs::kArcEnabled, true); 379 pref->SetBoolean(prefs::kArcEnabled, true);
348 base::RunLoop().RunUntilIdle(); 380 base::RunLoop().RunUntilIdle();
349 381
350 ASSERT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 382 ASSERT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE,
351 arc_session_manager()->state()); 383 arc_session_manager()->state());
352 384
353 arc_session_manager()->CancelAuthCode(); 385 arc_session_manager()->CancelAuthCode();
354 386
355 // Wait until data is removed. 387 // Wait until data is removed.
356 ASSERT_TRUE(WaitForDataRemoved(ArcSessionManager::State::STOPPED)); 388 ASSERT_TRUE(WaitForDataRemoved(ArcSessionManager::State::STOPPED));
357 389
358 ASSERT_FALSE(pref->GetBoolean(prefs::kArcEnabled)); 390 ASSERT_FALSE(pref->GetBoolean(prefs::kArcEnabled));
359 391
360 // Correctly stop service. 392 // Correctly stop service.
361 arc_session_manager()->Shutdown(); 393 arc_session_manager()->Shutdown();
362 } 394 }
363 395
364 TEST_F(ArcSessionManagerTest, CloseUIKeepsArcEnabled) { 396 TEST_P(ArcSessionManagerTest, CloseUIKeepsArcEnabled) {
365 PrefService* const pref = profile()->GetPrefs(); 397 PrefService* const pref = profile()->GetPrefs();
366 398
367 arc_session_manager()->OnPrimaryUserProfilePrepared(profile()); 399 arc_session_manager()->OnPrimaryUserProfilePrepared(profile());
368 pref->SetBoolean(prefs::kArcEnabled, true); 400 pref->SetBoolean(prefs::kArcEnabled, true);
369 base::RunLoop().RunUntilIdle(); 401 base::RunLoop().RunUntilIdle();
370 402
371 arc_session_manager()->StartArc(); 403 arc_session_manager()->StartArc();
372 404
373 ASSERT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 405 ASSERT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
374 406
375 arc_session_manager()->CancelAuthCode(); 407 arc_session_manager()->CancelAuthCode();
376 ASSERT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 408 ASSERT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
377 ASSERT_TRUE(pref->GetBoolean(prefs::kArcEnabled)); 409 ASSERT_TRUE(pref->GetBoolean(prefs::kArcEnabled));
378 410
379 // Correctly stop service. 411 // Correctly stop service.
380 arc_session_manager()->Shutdown(); 412 arc_session_manager()->Shutdown();
381 } 413 }
382 414
383 TEST_F(ArcSessionManagerTest, EnableDisablesArc) { 415 TEST_P(ArcSessionManagerTest, EnableDisablesArc) {
384 const PrefService* pref = profile()->GetPrefs(); 416 const PrefService* pref = profile()->GetPrefs();
385 arc_session_manager()->OnPrimaryUserProfilePrepared(profile()); 417 arc_session_manager()->OnPrimaryUserProfilePrepared(profile());
386 418
387 EXPECT_FALSE(pref->GetBoolean(prefs::kArcEnabled)); 419 EXPECT_FALSE(pref->GetBoolean(prefs::kArcEnabled));
388 arc_session_manager()->SetArcPlayStoreEnabled(true); 420 arc_session_manager()->SetArcPlayStoreEnabled(true);
389 EXPECT_TRUE(pref->GetBoolean(prefs::kArcEnabled)); 421 EXPECT_TRUE(pref->GetBoolean(prefs::kArcEnabled));
390 arc_session_manager()->SetArcPlayStoreEnabled(false); 422 arc_session_manager()->SetArcPlayStoreEnabled(false);
391 EXPECT_FALSE(pref->GetBoolean(prefs::kArcEnabled)); 423 EXPECT_FALSE(pref->GetBoolean(prefs::kArcEnabled));
392 424
393 // Correctly stop service. 425 // Correctly stop service.
394 arc_session_manager()->Shutdown(); 426 arc_session_manager()->Shutdown();
395 } 427 }
396 428
397 TEST_F(ArcSessionManagerTest, SignInStatus) { 429 TEST_P(ArcSessionManagerTest, SignInStatus) {
398 PrefService* const prefs = profile()->GetPrefs(); 430 PrefService* const prefs = profile()->GetPrefs();
399 431
400 EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null()); 432 EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null());
401 EXPECT_TRUE(arc_session_manager()->arc_start_time().is_null()); 433 EXPECT_TRUE(arc_session_manager()->arc_start_time().is_null());
402 434
403 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn)); 435 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn));
404 prefs->SetBoolean(prefs::kArcEnabled, true); 436 prefs->SetBoolean(prefs::kArcEnabled, true);
405 437
406 arc_session_manager()->OnPrimaryUserProfilePrepared(profile()); 438 arc_session_manager()->OnPrimaryUserProfilePrepared(profile());
407 EXPECT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 439 if (ShouldAlwaysStartArc()) {
408 arc_session_manager()->state()); 440 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
441 } else {
442 EXPECT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE,
443 arc_session_manager()->state());
444 }
409 445
410 // Emulate to accept the terms of service. 446 // Emulate to accept the terms of service.
411 prefs->SetBoolean(prefs::kArcTermsAccepted, true); 447 prefs->SetBoolean(prefs::kArcTermsAccepted, true);
412 arc_session_manager()->StartArc(); 448 if (!ShouldAlwaysStartArc()) {
449 arc_session_manager()->StartArc();
450 }
413 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 451 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
414 EXPECT_TRUE(arc_session_manager()->IsSessionRunning()); 452 EXPECT_TRUE(arc_session_manager()->IsSessionRunning());
415 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn)); 453 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn));
416 EXPECT_FALSE(arc_session_manager()->arc_start_time().is_null()); 454 EXPECT_FALSE(arc_session_manager()->arc_start_time().is_null());
417 arc_session_manager()->OnProvisioningFinished(ProvisioningResult::SUCCESS); 455 arc_session_manager()->OnProvisioningFinished(ProvisioningResult::SUCCESS);
418 EXPECT_TRUE(prefs->GetBoolean(prefs::kArcSignedIn)); 456 EXPECT_TRUE(prefs->GetBoolean(prefs::kArcSignedIn));
419 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 457 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
420 EXPECT_TRUE(arc_session_manager()->IsSessionRunning()); 458 EXPECT_TRUE(arc_session_manager()->IsSessionRunning());
421 EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null()); 459 EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null());
422 460
(...skipping 13 matching lines...) Expand all
436 // On error, UI to send feedback is showing. In that case, 474 // On error, UI to send feedback is showing. In that case,
437 // the ARC is still necessary to run on background for gathering the logs. 475 // the ARC is still necessary to run on background for gathering the logs.
438 EXPECT_TRUE(prefs->GetBoolean(prefs::kArcSignedIn)); 476 EXPECT_TRUE(prefs->GetBoolean(prefs::kArcSignedIn));
439 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 477 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
440 EXPECT_TRUE(arc_session_manager()->IsSessionRunning()); 478 EXPECT_TRUE(arc_session_manager()->IsSessionRunning());
441 479
442 // Correctly stop service. 480 // Correctly stop service.
443 arc_session_manager()->Shutdown(); 481 arc_session_manager()->Shutdown();
444 } 482 }
445 483
446 TEST_F(ArcSessionManagerTest, DisabledForDeviceLocalAccount) { 484 TEST_P(ArcSessionManagerTest, DisabledForDeviceLocalAccount) {
447 PrefService* const prefs = profile()->GetPrefs(); 485 PrefService* const prefs = profile()->GetPrefs();
448 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn)); 486 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn));
449 prefs->SetBoolean(prefs::kArcEnabled, true); 487 prefs->SetBoolean(prefs::kArcEnabled, true);
450 arc_session_manager()->OnPrimaryUserProfilePrepared(profile()); 488 arc_session_manager()->OnPrimaryUserProfilePrepared(profile());
451 arc_session_manager()->StartArc(); 489 arc_session_manager()->StartArc();
452 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 490 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
453 491
454 // Create device local account and set it as active. 492 // Create device local account and set it as active.
455 const std::string email = "device-local-account@fake-email.com"; 493 const std::string email = "device-local-account@fake-email.com";
456 TestingProfile::Builder profile_builder; 494 TestingProfile::Builder profile_builder;
(...skipping 11 matching lines...) Expand all
468 device_local_profile->GetPrefs()->SetBoolean(prefs::kArcEnabled, true); 506 device_local_profile->GetPrefs()->SetBoolean(prefs::kArcEnabled, true);
469 arc_session_manager()->OnPrimaryUserProfilePrepared( 507 arc_session_manager()->OnPrimaryUserProfilePrepared(
470 device_local_profile.get()); 508 device_local_profile.get());
471 EXPECT_EQ(ArcSessionManager::State::NOT_INITIALIZED, 509 EXPECT_EQ(ArcSessionManager::State::NOT_INITIALIZED,
472 arc_session_manager()->state()); 510 arc_session_manager()->state());
473 511
474 // Correctly stop service. 512 // Correctly stop service.
475 arc_session_manager()->Shutdown(); 513 arc_session_manager()->Shutdown();
476 } 514 }
477 515
478 TEST_F(ArcSessionManagerTest, DisabledForNonPrimaryProfile) { 516 TEST_P(ArcSessionManagerTest, DisabledForNonPrimaryProfile) {
479 profile()->GetPrefs()->SetBoolean(prefs::kArcEnabled, true); 517 profile()->GetPrefs()->SetBoolean(prefs::kArcEnabled, true);
480 arc_session_manager()->OnPrimaryUserProfilePrepared(profile()); 518 arc_session_manager()->OnPrimaryUserProfilePrepared(profile());
481 arc_session_manager()->StartArc(); 519 arc_session_manager()->StartArc();
482 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 520 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
483 521
484 // Create a second profile and set it as the active profile. 522 // Create a second profile and set it as the active profile.
485 const std::string email = "test@example.com"; 523 const std::string email = "test@example.com";
486 TestingProfile::Builder profile_builder; 524 TestingProfile::Builder profile_builder;
487 profile_builder.SetProfileName(email); 525 profile_builder.SetProfileName(email);
488 std::unique_ptr<TestingProfile> second_profile(profile_builder.Build()); 526 std::unique_ptr<TestingProfile> second_profile(profile_builder.Build());
489 const AccountId account_id(AccountId::FromUserEmail(email)); 527 const AccountId account_id(AccountId::FromUserEmail(email));
490 GetFakeUserManager()->AddUser(account_id); 528 GetFakeUserManager()->AddUser(account_id);
491 GetFakeUserManager()->SwitchActiveUser(account_id); 529 GetFakeUserManager()->SwitchActiveUser(account_id);
492 second_profile->GetPrefs()->SetBoolean(prefs::kArcEnabled, true); 530 second_profile->GetPrefs()->SetBoolean(prefs::kArcEnabled, true);
493 531
494 // Check that non-primary user can't use ARC. 532 // Check that non-primary user can't use ARC.
495 EXPECT_FALSE(chromeos::ProfileHelper::IsPrimaryProfile(second_profile.get())); 533 EXPECT_FALSE(chromeos::ProfileHelper::IsPrimaryProfile(second_profile.get()));
496 EXPECT_FALSE(ArcAppListPrefs::Get(second_profile.get())); 534 EXPECT_FALSE(ArcAppListPrefs::Get(second_profile.get()));
497 535
498 arc_session_manager()->Shutdown(); 536 arc_session_manager()->Shutdown();
499 } 537 }
500 538
501 TEST_F(ArcSessionManagerTest, RemoveDataFolder) { 539 TEST_P(ArcSessionManagerTest, RemoveDataFolder) {
540 // TODO(victorhsieh): Implement data removal on Persistent ARC.
541 if (ShouldAlwaysStartArc())
542 return;
543
502 profile()->GetPrefs()->SetBoolean(prefs::kArcEnabled, false); 544 profile()->GetPrefs()->SetBoolean(prefs::kArcEnabled, false);
503 // Starting session manager with prefs::kArcEnabled off automatically removes 545 // Starting session manager with prefs::kArcEnabled off automatically removes
504 // Android's data folder. 546 // Android's data folder.
505 arc_session_manager()->OnPrimaryUserProfilePrepared(profile()); 547 arc_session_manager()->OnPrimaryUserProfilePrepared(profile());
506 EXPECT_TRUE( 548 EXPECT_TRUE(
507 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)); 549 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested));
508 EXPECT_EQ(ArcSessionManager::State::REMOVING_DATA_DIR, 550 EXPECT_EQ(ArcSessionManager::State::REMOVING_DATA_DIR,
509 arc_session_manager()->state()); 551 arc_session_manager()->state());
510 // Enable ARC. Data is removed asyncronously. At this moment session manager 552 // Enable ARC. Data is removed asyncronously. At this moment session manager
511 // should be in REMOVING_DATA_DIR state. 553 // should be in REMOVING_DATA_DIR state.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 586
545 EXPECT_FALSE( 587 EXPECT_FALSE(
546 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)); 588 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested));
547 589
548 arc_session_manager()->StartArc(); 590 arc_session_manager()->StartArc();
549 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 591 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
550 592
551 arc_session_manager()->Shutdown(); 593 arc_session_manager()->Shutdown();
552 } 594 }
553 595
554 TEST_F(ArcSessionManagerTest, IgnoreSecondErrorReporting) { 596 TEST_P(ArcSessionManagerTest, IgnoreSecondErrorReporting) {
555 profile()->GetPrefs()->SetBoolean(prefs::kArcEnabled, true); 597 profile()->GetPrefs()->SetBoolean(prefs::kArcEnabled, true);
556 arc_session_manager()->OnPrimaryUserProfilePrepared(profile()); 598 arc_session_manager()->OnPrimaryUserProfilePrepared(profile());
557 arc_session_manager()->StartArc(); 599 arc_session_manager()->StartArc();
558 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 600 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
559 601
560 // Report some failure that does not stop the bridge. 602 // Report some failure that does not stop the bridge.
561 arc_session_manager()->OnProvisioningFinished( 603 arc_session_manager()->OnProvisioningFinished(
562 ProvisioningResult::GMS_SIGN_IN_FAILED); 604 ProvisioningResult::GMS_SIGN_IN_FAILED);
563 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 605 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
564 606
565 // Try to send another error that stops the bridge if sent first. It should 607 // Try to send another error that stops the bridge if sent first. It should
566 // be ignored. 608 // be ignored.
567 arc_session_manager()->OnProvisioningFinished( 609 arc_session_manager()->OnProvisioningFinished(
568 ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR); 610 ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR);
569 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 611 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
570 612
571 arc_session_manager()->Shutdown(); 613 arc_session_manager()->Shutdown();
572 } 614 }
573 615
574 class ArcSessionManagerPolicyTest 616 class ArcSessionManagerPolicyTest
575 : public ArcSessionManagerTest, 617 : public AbstractArcSessionManagerTest,
576 public testing::WithParamInterface<std::tuple<base::Value, base::Value>> { 618 public testing::WithParamInterface<
619 std::tuple<base::Value, base::Value, bool>> {
577 public: 620 public:
578 const base::Value& backup_restore_pref_value() const { 621 const base::Value& backup_restore_pref_value() const {
579 return std::get<0>(GetParam()); 622 return std::get<0>(GetParam());
580 } 623 }
581 624
582 const base::Value& location_service_pref_value() const { 625 const base::Value& location_service_pref_value() const {
583 return std::get<1>(GetParam()); 626 return std::get<1>(GetParam());
584 } 627 }
628
629 protected:
630 bool ShouldAlwaysStartArcInTest() override { return std::get<2>(GetParam()); }
585 }; 631 };
586 632
587 TEST_P(ArcSessionManagerPolicyTest, SkippingTerms) { 633 TEST_P(ArcSessionManagerPolicyTest, SkippingTerms) {
634 // TODO(victorhsieh): Implement opt-in flow.
635 if (ShouldAlwaysStartArc())
636 return;
637
588 sync_preferences::TestingPrefServiceSyncable* const prefs = 638 sync_preferences::TestingPrefServiceSyncable* const prefs =
589 profile()->GetTestingPrefService(); 639 profile()->GetTestingPrefService();
590 640
591 // Backup-restore and location-service prefs are off by default. 641 // Backup-restore and location-service prefs are off by default.
592 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn)); 642 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn));
593 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcTermsAccepted)); 643 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcTermsAccepted));
594 644
595 // Set ARC to be managed. 645 // Set ARC to be managed.
596 prefs->SetManagedPref(prefs::kArcEnabled, new base::Value(true)); 646 prefs->SetManagedPref(prefs::kArcEnabled, new base::Value(true));
597 647
(...skipping 29 matching lines...) Expand all
627 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcBackupRestoreEnabled)); 677 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcBackupRestoreEnabled));
628 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcLocationServiceEnabled)); 678 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcLocationServiceEnabled));
629 679
630 // Stop ARC and shutdown the service. 680 // Stop ARC and shutdown the service.
631 prefs->RemoveManagedPref(prefs::kArcEnabled); 681 prefs->RemoveManagedPref(prefs::kArcEnabled);
632 WaitForDataRemoved(ArcSessionManager::State::STOPPED); 682 WaitForDataRemoved(ArcSessionManager::State::STOPPED);
633 arc_session_manager()->Shutdown(); 683 arc_session_manager()->Shutdown();
634 } 684 }
635 685
636 INSTANTIATE_TEST_CASE_P( 686 INSTANTIATE_TEST_CASE_P(
637 ArcSessionManagerPolicyTest, 687 ,
638 ArcSessionManagerPolicyTest, 688 ArcSessionManagerPolicyTest,
639 testing::Combine( 689 testing::Combine(
640 testing::Values(base::Value(), base::Value(false), base::Value(true)), 690 testing::Values(base::Value(), base::Value(false), base::Value(true)),
641 testing::Values(base::Value(), base::Value(false), base::Value(true)))); 691 testing::Values(base::Value(), base::Value(false), base::Value(true)),
692 testing::Bool()));
642 693
643 class ArcSessionManagerKioskTest : public ArcSessionManagerTestBase { 694 class ArcSessionManagerKioskTest : public ArcSessionManagerTestBase {
644 public: 695 public:
645 ArcSessionManagerKioskTest() = default; 696 ArcSessionManagerKioskTest() = default;
646 697
647 void SetUp() override { 698 void SetUp() override {
648 ArcSessionManagerTestBase::SetUp(); 699 ArcSessionManagerTestBase::SetUp();
649 const AccountId account_id( 700 const AccountId account_id(
650 AccountId::FromUserEmail(profile()->GetProfileUserName())); 701 AccountId::FromUserEmail(profile()->GetProfileUserName()));
651 GetFakeUserManager()->AddArcKioskAppUser(account_id); 702 GetFakeUserManager()->AddArcKioskAppUser(account_id);
(...skipping 15 matching lines...) Expand all
667 // and not invoked then, including TearDown(). 718 // and not invoked then, including TearDown().
668 bool terminated = false; 719 bool terminated = false;
669 arc_session_manager()->SetAttemptUserExitCallbackForTesting( 720 arc_session_manager()->SetAttemptUserExitCallbackForTesting(
670 base::Bind([](bool* terminated) { *terminated = true; }, &terminated)); 721 base::Bind([](bool* terminated) { *terminated = true; }, &terminated));
671 722
672 arc_session_manager()->OnProvisioningFinished( 723 arc_session_manager()->OnProvisioningFinished(
673 ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR); 724 ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR);
674 EXPECT_TRUE(terminated); 725 EXPECT_TRUE(terminated);
675 } 726 }
676 727
677 class ArcSessionOobeOptInTest : public ArcSessionManagerTest { 728 // This class takes two test parameters because the both itself and its child
729 // need to be parameterized. Having redundant parameter here avoid the trouble
730 // to deal with multiple inheritance from WithParamInterface instances.
731 class ArcSessionOobeOptInTest
732 : public AbstractArcSessionManagerTest,
733 public ::testing::WithParamInterface<std::tuple<bool, bool>> {
678 public: 734 public:
679 ArcSessionOobeOptInTest() = default; 735 ArcSessionOobeOptInTest() = default;
680 736
681 protected: 737 protected:
738 bool ShouldAlwaysStartArcInTest() override { return std::get<0>(GetParam()); }
739
682 void CreateLoginDisplayHost() { 740 void CreateLoginDisplayHost() {
683 fake_login_display_host_ = base::MakeUnique<FakeLoginDisplayHost>(); 741 fake_login_display_host_ = base::MakeUnique<FakeLoginDisplayHost>();
684 } 742 }
685 743
686 void CloseLoginDisplayHost() { fake_login_display_host_.reset(); } 744 void CloseLoginDisplayHost() { fake_login_display_host_.reset(); }
687 745
688 void AppendEnableArcOOBEOptInSwitch() { 746 void AppendEnableArcOOBEOptInSwitch() {
689 base::CommandLine::ForCurrentProcess()->AppendSwitch( 747 base::CommandLine::ForCurrentProcess()->AppendSwitch(
690 chromeos::switches::kEnableArcOOBEOptIn); 748 chromeos::switches::kEnableArcOOBEOptIn);
691 } 749 }
692 750
693 private: 751 private:
694 std::unique_ptr<FakeLoginDisplayHost> fake_login_display_host_; 752 std::unique_ptr<FakeLoginDisplayHost> fake_login_display_host_;
695 753
696 DISALLOW_COPY_AND_ASSIGN(ArcSessionOobeOptInTest); 754 DISALLOW_COPY_AND_ASSIGN(ArcSessionOobeOptInTest);
697 }; 755 };
698 756
699 TEST_F(ArcSessionOobeOptInTest, OobeOptInActive) { 757 INSTANTIATE_TEST_CASE_P(
758 ,
759 ArcSessionOobeOptInTest,
760 testing::Combine(::testing::Bool() /* always start arc */,
761 ::testing::Values(false) /* dummy */));
762
763 TEST_P(ArcSessionOobeOptInTest, OobeOptInActive) {
700 // OOBE OptIn is active in case of OOBE is started for new user and ARC OOBE 764 // OOBE OptIn is active in case of OOBE is started for new user and ARC OOBE
701 // is enabled by switch. 765 // is enabled by switch.
702 EXPECT_FALSE(ArcSessionManager::IsOobeOptInActive()); 766 EXPECT_FALSE(ArcSessionManager::IsOobeOptInActive());
703 GetFakeUserManager()->set_current_user_new(true); 767 GetFakeUserManager()->set_current_user_new(true);
704 EXPECT_FALSE(ArcSessionManager::IsOobeOptInActive()); 768 EXPECT_FALSE(ArcSessionManager::IsOobeOptInActive());
705 CreateLoginDisplayHost(); 769 CreateLoginDisplayHost();
706 EXPECT_FALSE(ArcSessionManager::IsOobeOptInActive()); 770 EXPECT_FALSE(ArcSessionManager::IsOobeOptInActive());
707 771
708 AppendEnableArcOOBEOptInSwitch(); 772 AppendEnableArcOOBEOptInSwitch();
709 GetFakeUserManager()->set_current_user_new(false); 773 GetFakeUserManager()->set_current_user_new(false);
710 CloseLoginDisplayHost(); 774 CloseLoginDisplayHost();
711 EXPECT_FALSE(ArcSessionManager::IsOobeOptInActive()); 775 EXPECT_FALSE(ArcSessionManager::IsOobeOptInActive());
712 GetFakeUserManager()->set_current_user_new(true); 776 GetFakeUserManager()->set_current_user_new(true);
713 EXPECT_FALSE(ArcSessionManager::IsOobeOptInActive()); 777 EXPECT_FALSE(ArcSessionManager::IsOobeOptInActive());
714 CreateLoginDisplayHost(); 778 CreateLoginDisplayHost();
715 EXPECT_TRUE(ArcSessionManager::IsOobeOptInActive()); 779 EXPECT_TRUE(ArcSessionManager::IsOobeOptInActive());
716 } 780 }
717 781
718 class ArcSessionOobeOptInNegotiatorTest 782 class ArcSessionOobeOptInNegotiatorTest
719 : public ArcSessionOobeOptInTest, 783 : public ArcSessionOobeOptInTest,
720 public chromeos::ArcTermsOfServiceScreenActor, 784 public chromeos::ArcTermsOfServiceScreenActor {
721 public testing::WithParamInterface<bool> {
722 public: 785 public:
723 ArcSessionOobeOptInNegotiatorTest() = default; 786 ArcSessionOobeOptInNegotiatorTest() = default;
724 787
725 void SetUp() override { 788 void SetUp() override {
726 ArcSessionOobeOptInTest::SetUp(); 789 ArcSessionOobeOptInTest::SetUp();
727 790
728 AppendEnableArcOOBEOptInSwitch(); 791 AppendEnableArcOOBEOptInSwitch();
729 792
730 ArcTermsOfServiceOobeNegotiator::SetArcTermsOfServiceScreenActorForTesting( 793 ArcTermsOfServiceOobeNegotiator::SetArcTermsOfServiceScreenActorForTesting(
731 this); 794 this);
(...skipping 19 matching lines...) Expand all
751 // Correctly stop service. 814 // Correctly stop service.
752 arc_session_manager()->Shutdown(); 815 arc_session_manager()->Shutdown();
753 816
754 ArcTermsOfServiceOobeNegotiator::SetArcTermsOfServiceScreenActorForTesting( 817 ArcTermsOfServiceOobeNegotiator::SetArcTermsOfServiceScreenActorForTesting(
755 nullptr); 818 nullptr);
756 819
757 ArcSessionOobeOptInTest::TearDown(); 820 ArcSessionOobeOptInTest::TearDown();
758 } 821 }
759 822
760 protected: 823 protected:
761 bool IsManagedUser() { return GetParam(); } 824 bool ShouldAlwaysStartArcInTest() override { return std::get<0>(GetParam()); }
825 bool IsManagedUser() { return std::get<1>(GetParam()); }
762 826
763 void ReportResult(bool accepted) { 827 void ReportResult(bool accepted) {
764 for (auto& observer : observer_list_) { 828 for (auto& observer : observer_list_) {
765 if (accepted) 829 if (accepted)
766 observer.OnAccept(); 830 observer.OnAccept();
767 else 831 else
768 observer.OnSkip(); 832 observer.OnSkip();
769 } 833 }
770 base::RunLoop().RunUntilIdle(); 834 base::RunLoop().RunUntilIdle();
771 } 835 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 } 873 }
810 874
811 void Hide() override {} 875 void Hide() override {}
812 876
813 base::ObserverList<chromeos::ArcTermsOfServiceScreenActorObserver> 877 base::ObserverList<chromeos::ArcTermsOfServiceScreenActorObserver>
814 observer_list_; 878 observer_list_;
815 879
816 DISALLOW_COPY_AND_ASSIGN(ArcSessionOobeOptInNegotiatorTest); 880 DISALLOW_COPY_AND_ASSIGN(ArcSessionOobeOptInNegotiatorTest);
817 }; 881 };
818 882
819 INSTANTIATE_TEST_CASE_P(ArcSessionOobeOptInNegotiatorTestImpl, 883 // TODO(victorhsieh): Add test to cover when ARC always start
820 ArcSessionOobeOptInNegotiatorTest, 884 INSTANTIATE_TEST_CASE_P(
821 ::testing::Values(true, false)); 885 ,
886 ArcSessionOobeOptInNegotiatorTest,
887 testing::Combine(::testing::Values(false) /* always start arc */,
888 ::testing::Bool() /* managed user */));
822 889
823 TEST_P(ArcSessionOobeOptInNegotiatorTest, OobeTermsAccepted) { 890 TEST_P(ArcSessionOobeOptInNegotiatorTest, OobeTermsAccepted) {
824 actor()->Show(); 891 actor()->Show();
825 MaybeWaitForDataRemoved(); 892 MaybeWaitForDataRemoved();
826 EXPECT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 893 EXPECT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE,
827 arc_session_manager()->state()); 894 arc_session_manager()->state());
828 ReportResult(true); 895 ReportResult(true);
829 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 896 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
830 EXPECT_TRUE(arc_session_manager()->IsArcPlayStoreEnabled()); 897 EXPECT_TRUE(arc_session_manager()->IsArcPlayStoreEnabled());
831 } 898 }
(...skipping 15 matching lines...) Expand all
847 EXPECT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 914 EXPECT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE,
848 arc_session_manager()->state()); 915 arc_session_manager()->state());
849 CloseLoginDisplayHost(); 916 CloseLoginDisplayHost();
850 ReportActorDestroyed(); 917 ReportActorDestroyed();
851 EXPECT_EQ(ArcSessionManager::State::STOPPED, arc_session_manager()->state()); 918 EXPECT_EQ(ArcSessionManager::State::STOPPED, arc_session_manager()->state());
852 EXPECT_FALSE(!IsManagedUser() && 919 EXPECT_FALSE(!IsManagedUser() &&
853 arc_session_manager()->IsArcPlayStoreEnabled()); 920 arc_session_manager()->IsArcPlayStoreEnabled());
854 } 921 }
855 922
856 } // namespace arc 923 } // namespace arc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698