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

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

Issue 2737453003: Fix ArcSessionManager state machine, part 1. (Closed)
Patch Set: Address comments. Created 3 years, 9 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 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 EXPECT_TRUE(arc_session_manager()->arc_start_time().is_null()); 229 EXPECT_TRUE(arc_session_manager()->arc_start_time().is_null());
230 230
231 arc_session_manager()->SetProfile(profile()); 231 arc_session_manager()->SetProfile(profile());
232 232
233 // By default ARC is not enabled. 233 // By default ARC is not enabled.
234 EXPECT_EQ(ArcSessionManager::State::STOPPED, arc_session_manager()->state()); 234 EXPECT_EQ(ArcSessionManager::State::STOPPED, arc_session_manager()->state());
235 235
236 // Enables ARC. First time, ToS negotiation should start. 236 // Enables ARC. First time, ToS negotiation should start.
237 arc_session_manager()->RequestEnable(); 237 arc_session_manager()->RequestEnable();
238 base::RunLoop().RunUntilIdle(); 238 base::RunLoop().RunUntilIdle();
239 ASSERT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 239 ASSERT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE,
240 arc_session_manager()->state()); 240 arc_session_manager()->state());
241 241
242 // TODO(hidehiko): Verify state transition from SHOWING_TERMS_OF_SERVICE -> 242 // TODO(hidehiko): Verify state transition from NEGOTIATING_TERMS_OF_SERVICE
243 // CHECKING_ANDROID_MANAGEMENT, when we extract ArcSessionManager. 243 // -> CHECKING_ANDROID_MANAGEMENT, when we extract ArcSessionManager.
244 arc_session_manager()->StartArcForTesting(); 244 arc_session_manager()->StartArcForTesting();
245 245
246 EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null()); 246 EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null());
247 EXPECT_FALSE(arc_session_manager()->arc_start_time().is_null()); 247 EXPECT_FALSE(arc_session_manager()->arc_start_time().is_null());
248 248
249 ASSERT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 249 ASSERT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
250 ASSERT_TRUE(arc_session_manager()->IsSessionRunning()); 250 ASSERT_TRUE(arc_session_manager()->IsSessionRunning());
251 251
252 arc_session_manager()->Shutdown(); 252 arc_session_manager()->Shutdown();
253 } 253 }
254 254
255 TEST_F(ArcSessionManagerTest, CancelFetchingDisablesArc) { 255 TEST_F(ArcSessionManagerTest, CancelFetchingDisablesArc) {
256 SetArcPlayStoreEnabledForProfile(profile(), true); 256 SetArcPlayStoreEnabledForProfile(profile(), true);
257 257
258 // Starts ARC. 258 // Starts ARC.
259 arc_session_manager()->SetProfile(profile()); 259 arc_session_manager()->SetProfile(profile());
260 arc_session_manager()->RequestEnable(); 260 arc_session_manager()->RequestEnable();
261 base::RunLoop().RunUntilIdle(); 261 base::RunLoop().RunUntilIdle();
262 ASSERT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 262 ASSERT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE,
263 arc_session_manager()->state()); 263 arc_session_manager()->state());
264 264
265 // Emulate to cancel the ToS UI (e.g. closing the window). 265 // Emulate to cancel the ToS UI (e.g. closing the window).
266 arc_session_manager()->CancelAuthCode(); 266 arc_session_manager()->CancelAuthCode();
267 267
268 // Google Play Store enabled preference should be set to false, too. 268 // Google Play Store enabled preference should be set to false, too.
269 EXPECT_FALSE(IsArcPlayStoreEnabledForProfile(profile())); 269 EXPECT_FALSE(IsArcPlayStoreEnabledForProfile(profile()));
270 270
271 // Emulate the preference handling. 271 // Emulate the preference handling.
272 arc_session_manager()->RequestDisable(); 272 arc_session_manager()->RequestDisable();
273 273
274 // Wait until data is removed. 274 // Wait until data is removed.
275 ASSERT_TRUE(WaitForDataRemoved(ArcSessionManager::State::STOPPED)); 275 ASSERT_TRUE(WaitForDataRemoved(ArcSessionManager::State::STOPPED));
276 276
277 // Correctly stop service. 277 // Correctly stop service.
278 arc_session_manager()->Shutdown(); 278 arc_session_manager()->Shutdown();
279 } 279 }
280 280
281 TEST_F(ArcSessionManagerTest, CloseUIKeepsArcEnabled) { 281 TEST_F(ArcSessionManagerTest, CloseUIKeepsArcEnabled) {
282 // Starts ARC. 282 // Starts ARC.
283 SetArcPlayStoreEnabledForProfile(profile(), true); 283 SetArcPlayStoreEnabledForProfile(profile(), true);
284 arc_session_manager()->SetProfile(profile()); 284 arc_session_manager()->SetProfile(profile());
285 arc_session_manager()->RequestEnable(); 285 arc_session_manager()->RequestEnable();
286 base::RunLoop().RunUntilIdle(); 286 base::RunLoop().RunUntilIdle();
287 ASSERT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 287 ASSERT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE,
288 arc_session_manager()->state()); 288 arc_session_manager()->state());
289 arc_session_manager()->StartArcForTesting(); 289 arc_session_manager()->StartArcForTesting();
290 ASSERT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 290 ASSERT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
291 291
292 // When ARC is properly started, closing UI should be no-op. 292 // When ARC is properly started, closing UI should be no-op.
293 arc_session_manager()->CancelAuthCode(); 293 arc_session_manager()->CancelAuthCode();
294 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 294 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
295 EXPECT_TRUE(IsArcPlayStoreEnabledForProfile(profile())); 295 EXPECT_TRUE(IsArcPlayStoreEnabledForProfile(profile()));
296 296
297 // Correctly stop service. 297 // Correctly stop service.
298 arc_session_manager()->Shutdown(); 298 arc_session_manager()->Shutdown();
299 } 299 }
300 300
301 TEST_F(ArcSessionManagerTest, Provisioning_Success) { 301 TEST_F(ArcSessionManagerTest, Provisioning_Success) {
302 PrefService* const prefs = profile()->GetPrefs(); 302 PrefService* const prefs = profile()->GetPrefs();
303 303
304 EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null()); 304 EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null());
305 EXPECT_TRUE(arc_session_manager()->arc_start_time().is_null()); 305 EXPECT_TRUE(arc_session_manager()->arc_start_time().is_null());
306 EXPECT_FALSE(arc_session_manager()->IsPlaystoreLaunchRequestedForTesting()); 306 EXPECT_FALSE(arc_session_manager()->IsPlaystoreLaunchRequestedForTesting());
307 307
308 ASSERT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn)); 308 ASSERT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn));
309 309
310 arc_session_manager()->SetProfile(profile()); 310 arc_session_manager()->SetProfile(profile());
311 arc_session_manager()->RequestEnable(); 311 arc_session_manager()->RequestEnable();
312 ASSERT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 312 ASSERT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE,
313 arc_session_manager()->state()); 313 arc_session_manager()->state());
314 314
315 // Emulate to accept the terms of service. 315 // Emulate to accept the terms of service.
316 prefs->SetBoolean(prefs::kArcTermsAccepted, true); 316 prefs->SetBoolean(prefs::kArcTermsAccepted, true);
317 arc_session_manager()->StartArcForTesting(); 317 arc_session_manager()->StartArcForTesting();
318 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 318 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
319 EXPECT_TRUE(arc_session_manager()->IsSessionRunning()); 319 EXPECT_TRUE(arc_session_manager()->IsSessionRunning());
320 320
321 // Here, provisining is not yet completed, so kArcSignedIn should be false. 321 // Here, provisining is not yet completed, so kArcSignedIn should be false.
322 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn)); 322 EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 // should be in REMOVING_DATA_DIR state. 374 // should be in REMOVING_DATA_DIR state.
375 arc_session_manager()->RequestEnable(); 375 arc_session_manager()->RequestEnable();
376 EXPECT_TRUE( 376 EXPECT_TRUE(
377 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)); 377 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested));
378 EXPECT_EQ(ArcSessionManager::State::REMOVING_DATA_DIR, 378 EXPECT_EQ(ArcSessionManager::State::REMOVING_DATA_DIR,
379 arc_session_manager()->state()); 379 arc_session_manager()->state());
380 // Wait until data is removed. 380 // Wait until data is removed.
381 base::RunLoop().RunUntilIdle(); 381 base::RunLoop().RunUntilIdle();
382 EXPECT_FALSE( 382 EXPECT_FALSE(
383 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)); 383 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested));
384 EXPECT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 384 EXPECT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE,
385 arc_session_manager()->state()); 385 arc_session_manager()->state());
386 arc_session_manager()->StartArcForTesting(); 386 arc_session_manager()->StartArcForTesting();
387 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 387 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
388 388
389 // Request to remove data and stop session manager. 389 // Request to remove data and stop session manager.
390 arc_session_manager()->RemoveArcData(); 390 arc_session_manager()->RemoveArcData();
391 ASSERT_TRUE( 391 ASSERT_TRUE(
392 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)); 392 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested));
393 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 393 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
394 arc_session_manager()->Shutdown(); 394 arc_session_manager()->Shutdown();
395 base::RunLoop().RunUntilIdle(); 395 base::RunLoop().RunUntilIdle();
396 // Request should persist. 396 // Request should persist.
397 ASSERT_TRUE( 397 ASSERT_TRUE(
398 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)); 398 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested));
399 } 399 }
400 400
401 TEST_F(ArcSessionManagerTest, RemoveDataDir_Restart) { 401 TEST_F(ArcSessionManagerTest, RemoveDataDir_Restart) {
402 // Emulate second sign-in. Data should be removed first and ARC started after. 402 // Emulate second sign-in. Data should be removed first and ARC started after.
403 PrefService* const prefs = profile()->GetPrefs(); 403 PrefService* const prefs = profile()->GetPrefs();
404 prefs->SetBoolean(prefs::kArcDataRemoveRequested, true); 404 prefs->SetBoolean(prefs::kArcDataRemoveRequested, true);
405 arc_session_manager()->SetProfile(profile()); 405 arc_session_manager()->SetProfile(profile());
406 arc_session_manager()->RequestEnable(); 406 arc_session_manager()->RequestEnable();
407 EXPECT_TRUE( 407 EXPECT_TRUE(
408 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)); 408 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested));
409 ASSERT_TRUE( 409 ASSERT_TRUE(WaitForDataRemoved(
410 WaitForDataRemoved(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE)); 410 ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE));
411 EXPECT_FALSE( 411 EXPECT_FALSE(
412 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)); 412 profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested));
413 413
414 arc_session_manager()->Shutdown(); 414 arc_session_manager()->Shutdown();
415 } 415 }
416 416
417 TEST_F(ArcSessionManagerTest, IgnoreSecondErrorReporting) { 417 TEST_F(ArcSessionManagerTest, IgnoreSecondErrorReporting) {
418 arc_session_manager()->SetProfile(profile()); 418 arc_session_manager()->SetProfile(profile());
419 arc_session_manager()->RequestEnable(); 419 arc_session_manager()->RequestEnable();
420 arc_session_manager()->StartArcForTesting(); 420 arc_session_manager()->StartArcForTesting();
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 472
473 arc_session_manager()->SetProfile(profile()); 473 arc_session_manager()->SetProfile(profile());
474 arc_session_manager()->RequestEnable(); 474 arc_session_manager()->RequestEnable();
475 475
476 // Terms of Service are skipped if both ArcBackupRestoreEnabled and 476 // Terms of Service are skipped if both ArcBackupRestoreEnabled and
477 // ArcLocationServiceEnabled are managed. 477 // ArcLocationServiceEnabled are managed.
478 const bool expected_terms_skipping = backup_restore_pref_value().is_bool() && 478 const bool expected_terms_skipping = backup_restore_pref_value().is_bool() &&
479 location_service_pref_value().is_bool(); 479 location_service_pref_value().is_bool();
480 EXPECT_EQ(expected_terms_skipping 480 EXPECT_EQ(expected_terms_skipping
481 ? ArcSessionManager::State::ACTIVE 481 ? ArcSessionManager::State::ACTIVE
482 : ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 482 : ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE,
483 arc_session_manager()->state()); 483 arc_session_manager()->state());
484 484
485 // Complete provisioning if it's not done yet. 485 // Complete provisioning if it's not done yet.
486 if (!expected_terms_skipping) { 486 if (!expected_terms_skipping) {
487 arc_session_manager()->StartArcForTesting(); 487 arc_session_manager()->StartArcForTesting();
488 arc_session_manager()->OnProvisioningFinished(ProvisioningResult::SUCCESS); 488 arc_session_manager()->OnProvisioningFinished(ProvisioningResult::SUCCESS);
489 } 489 }
490 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 490 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
491 491
492 // Play Store app is launched unless the Terms screen was suppressed by the 492 // Play Store app is launched unless the Terms screen was suppressed by the
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 682
683 DISALLOW_COPY_AND_ASSIGN(ArcSessionOobeOptInNegotiatorTest); 683 DISALLOW_COPY_AND_ASSIGN(ArcSessionOobeOptInNegotiatorTest);
684 }; 684 };
685 685
686 INSTANTIATE_TEST_CASE_P(ArcSessionOobeOptInNegotiatorTestImpl, 686 INSTANTIATE_TEST_CASE_P(ArcSessionOobeOptInNegotiatorTestImpl,
687 ArcSessionOobeOptInNegotiatorTest, 687 ArcSessionOobeOptInNegotiatorTest,
688 ::testing::Values(true, false)); 688 ::testing::Values(true, false));
689 689
690 TEST_P(ArcSessionOobeOptInNegotiatorTest, OobeTermsAccepted) { 690 TEST_P(ArcSessionOobeOptInNegotiatorTest, OobeTermsAccepted) {
691 view()->Show(); 691 view()->Show();
692 EXPECT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 692 EXPECT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE,
693 arc_session_manager()->state()); 693 arc_session_manager()->state());
694 ReportResult(true); 694 ReportResult(true);
695 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); 695 EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state());
696 } 696 }
697 697
698 TEST_P(ArcSessionOobeOptInNegotiatorTest, OobeTermsRejected) { 698 TEST_P(ArcSessionOobeOptInNegotiatorTest, OobeTermsRejected) {
699 view()->Show(); 699 view()->Show();
700 EXPECT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 700 EXPECT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE,
701 arc_session_manager()->state()); 701 arc_session_manager()->state());
702 ReportResult(false); 702 ReportResult(false);
703 EXPECT_EQ(ArcSessionManager::State::STOPPED, arc_session_manager()->state()); 703 // ArcPlayStoreEnabledPreferenceHandler is not running, so the state should
704 // be kept as is.
705 EXPECT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE,
706 arc_session_manager()->state());
707 // Managed user's preference should not be overwritten.
708 if (!IsManagedUser())
709 EXPECT_FALSE(IsArcPlayStoreEnabledForProfile(profile()));
704 } 710 }
705 711
706 TEST_P(ArcSessionOobeOptInNegotiatorTest, OobeTermsViewDestroyed) { 712 TEST_P(ArcSessionOobeOptInNegotiatorTest, OobeTermsViewDestroyed) {
707 view()->Show(); 713 view()->Show();
708 EXPECT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, 714 EXPECT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE,
709 arc_session_manager()->state()); 715 arc_session_manager()->state());
710 CloseLoginDisplayHost(); 716 CloseLoginDisplayHost();
711 ReportViewDestroyed(); 717 ReportViewDestroyed();
712 EXPECT_EQ(ArcSessionManager::State::STOPPED, arc_session_manager()->state()); 718 // ArcPlayStoreEnabledPreferenceHandler is not running, so the state should
719 // be kept as is.
720 EXPECT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE,
721 arc_session_manager()->state());
722 // Managed user's preference should not be overwritten.
723 if (!IsManagedUser())
724 EXPECT_FALSE(IsArcPlayStoreEnabledForProfile(profile()));
713 } 725 }
714 726
715 } // namespace arc 727 } // namespace arc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698