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

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

Issue 2682833003: Skip ARC initial screen when everything is set up by policy (Closed)
Patch Set: Make tests parametric 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 "chrome/browser/chromeos/arc/arc_session_manager.h" 5 #include "chrome/browser/chromeos/arc/arc_session_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "ash/common/shelf/shelf_delegate.h" 9 #include "ash/common/shelf/shelf_delegate.h"
10 #include "ash/common/wm_shell.h" 10 #include "ash/common/wm_shell.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 111
112 // static 112 // static
113 void ArcSessionManager::RegisterProfilePrefs( 113 void ArcSessionManager::RegisterProfilePrefs(
114 user_prefs::PrefRegistrySyncable* registry) { 114 user_prefs::PrefRegistrySyncable* registry) {
115 // TODO(dspaid): Implement a mechanism to allow this to sync on first boot 115 // TODO(dspaid): Implement a mechanism to allow this to sync on first boot
116 // only. 116 // only.
117 registry->RegisterBooleanPref(prefs::kArcDataRemoveRequested, false); 117 registry->RegisterBooleanPref(prefs::kArcDataRemoveRequested, false);
118 registry->RegisterBooleanPref(prefs::kArcEnabled, false); 118 registry->RegisterBooleanPref(prefs::kArcEnabled, false);
119 registry->RegisterBooleanPref(prefs::kArcSignedIn, false); 119 registry->RegisterBooleanPref(prefs::kArcSignedIn, false);
120 registry->RegisterBooleanPref(prefs::kArcTermsAccepted, false); 120 registry->RegisterBooleanPref(prefs::kArcTermsAccepted, false);
121 registry->RegisterBooleanPref(prefs::kArcBackupRestoreEnabled, true); 121 // Note that ArcBackupRestoreEnabled and ArcLocationServiceEnabled prefs have
122 registry->RegisterBooleanPref(prefs::kArcLocationServiceEnabled, true); 122 // to be off by default, until an explicit gesture from the user to enable
123 // them is received. This is crucial in the cases when these prefs transition
124 // from a previous managed state to the unmanaged.
125 registry->RegisterBooleanPref(prefs::kArcBackupRestoreEnabled, false);
126 registry->RegisterBooleanPref(prefs::kArcLocationServiceEnabled, false);
123 } 127 }
124 128
125 // static 129 // static
126 bool ArcSessionManager::IsOobeOptInActive() { 130 bool ArcSessionManager::IsOobeOptInActive() {
127 // ARC OOBE OptIn is optional for now. Test if it exists and login host is 131 // ARC OOBE OptIn is optional for now. Test if it exists and login host is
128 // active. 132 // active.
129 if (!user_manager::UserManager::Get()->IsCurrentUserNew()) 133 if (!user_manager::UserManager::Get()->IsCurrentUserNew())
130 return false; 134 return false;
131 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( 135 if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
132 chromeos::switches::kEnableArcOOBEOptIn)) 136 chromeos::switches::kEnableArcOOBEOptIn))
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 } 499 }
496 ShutdownSession(); 500 ShutdownSession();
497 if (support_host_) 501 if (support_host_)
498 support_host_->Close(); 502 support_host_->Close();
499 } 503 }
500 504
501 void ArcSessionManager::OnOptInPreferenceChanged() { 505 void ArcSessionManager::OnOptInPreferenceChanged() {
502 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 506 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
503 DCHECK(profile_); 507 DCHECK(profile_);
504 508
509 PrefService* const prefs = profile_->GetPrefs();
510
505 const bool arc_enabled = IsArcEnabled(); 511 const bool arc_enabled = IsArcEnabled();
506 if (!IsArcManaged()) { 512 if (!IsArcManaged()) {
507 // Update UMA only for non-Managed cases. 513 // Update UMA only for non-Managed cases.
508 UpdateOptInActionUMA(arc_enabled ? OptInActionType::OPTED_IN 514 UpdateOptInActionUMA(arc_enabled ? OptInActionType::OPTED_IN
509 : OptInActionType::OPTED_OUT); 515 : OptInActionType::OPTED_OUT);
510 516
511 if (!arc_enabled) { 517 if (!arc_enabled) {
512 // Remove the pinned Play Store icon launcher in Shelf. 518 // Remove the pinned Play Store icon launcher in Shelf.
513 // This is only for non-Managed cases. In managed cases, it is expected 519 // This is only for non-Managed cases. In managed cases, it is expected
514 // to be "disabled" rather than "removed", so keep it here. 520 // to be "disabled" rather than "removed", so keep it here.
515 ash::ShelfDelegate* shelf_delegate = GetShelfDelegate(); 521 ash::ShelfDelegate* shelf_delegate = GetShelfDelegate();
516 if (shelf_delegate) 522 if (shelf_delegate)
517 shelf_delegate->UnpinAppWithID(ArcSupportHost::kHostAppId); 523 shelf_delegate->UnpinAppWithID(ArcSupportHost::kHostAppId);
518 } 524 }
519 } 525 }
520 526
521 for (auto& observer : observer_list_) 527 for (auto& observer : observer_list_)
522 observer.OnArcOptInChanged(arc_enabled); 528 observer.OnArcOptInChanged(arc_enabled);
523 529
524 // Hide auth notification if it was opened before and arc.enabled pref was 530 // Hide auth notification if it was opened before and arc.enabled pref was
525 // explicitly set to true or false. 531 // explicitly set to true or false.
526 if (!g_disable_ui_for_testing && 532 if (!g_disable_ui_for_testing && prefs->HasPrefPath(prefs::kArcEnabled))
527 profile_->GetPrefs()->HasPrefPath(prefs::kArcEnabled)) {
528 ArcAuthNotification::Hide(); 533 ArcAuthNotification::Hide();
529 }
530 534
531 if (!arc_enabled) { 535 if (!arc_enabled) {
532 // Reset any pending request to re-enable ARC. 536 // Reset any pending request to re-enable ARC.
533 VLOG(1) << "ARC opt-out. Removing user data."; 537 VLOG(1) << "ARC opt-out. Removing user data.";
534 reenable_arc_ = false; 538 reenable_arc_ = false;
535 StopArc(); 539 StopArc();
536 RemoveArcData(); 540 RemoveArcData();
537 return; 541 return;
538 } 542 }
539 543
540 if (state_ == State::ACTIVE) 544 if (state_ == State::ACTIVE)
541 return; 545 return;
542 546
543 if (state_ == State::REMOVING_DATA_DIR) { 547 if (state_ == State::REMOVING_DATA_DIR) {
544 // Data removal request is in progress. Set flag to re-enable Arc once it is 548 // Data removal request is in progress. Set flag to re-enable Arc once it is
545 // finished. 549 // finished.
546 reenable_arc_ = true; 550 reenable_arc_ = true;
547 return; 551 return;
548 } 552 }
549 553
550 if (support_host_) 554 if (support_host_)
551 support_host_->SetArcManaged(IsArcManaged()); 555 support_host_->SetArcManaged(IsArcManaged());
552 556
553 // For ARC Kiosk we skip ToS because it is very likely that near the device 557 // For ARC Kiosk we skip ToS because it is very likely that near the device
554 // there will be no one who is eligible to accept them. 558 // there will be no one who is eligible to accept them.
555 // TODO(poromov): Move to more Kiosk dedicated set-up phase. 559 // TODO(poromov): Move to more Kiosk dedicated set-up phase.
556 if (IsArcKioskMode()) 560 if (IsArcKioskMode())
557 profile_->GetPrefs()->SetBoolean(prefs::kArcTermsAccepted, true); 561 prefs->SetBoolean(prefs::kArcTermsAccepted, true);
562
563 // Skip to show UI asking users to enable/disable their preference for
564 // backup-restore and location-service, if both are managed by the admin
565 // policy. Note that the ToS agreement is anyway not shown in the case of the
566 // managed ARC.
567 if (IsArcManaged() &&
568 prefs->IsManagedPreference(prefs::kArcBackupRestoreEnabled) &&
569 prefs->IsManagedPreference(prefs::kArcLocationServiceEnabled)) {
570 prefs->SetBoolean(prefs::kArcTermsAccepted, true);
571 }
558 572
559 // If it is marked that sign in has been successfully done, then directly 573 // If it is marked that sign in has been successfully done, then directly
560 // start ARC. 574 // start ARC.
561 // For testing, and for Kisok mode, we also skip ToS negotiation procedure. 575 // For testing, and for Kiosk mode, we also skip ToS negotiation procedure.
562 // For backward compatibility, this check needs to be prior to the 576 // For backward compatibility, this check needs to be prior to the
563 // kArcTermsAccepted check below. 577 // kArcTermsAccepted check below.
564 if (profile_->GetPrefs()->GetBoolean(prefs::kArcSignedIn) || 578 if (prefs->GetBoolean(prefs::kArcSignedIn) ||
565 IsArcOptInVerificationDisabled() || IsArcKioskMode()) { 579 IsArcOptInVerificationDisabled() || IsArcKioskMode()) {
566 StartArc(); 580 StartArc();
567 581
568 // Skip Android management check for testing. 582 // Skip Android management check for testing.
569 // We also skip if Android management check for Kiosk mode, 583 // We also skip if Android management check for Kiosk mode,
570 // because there are no managed human users for Kiosk exist. 584 // because there are no managed human users for Kiosk exist.
571 if (IsArcOptInVerificationDisabled() || IsArcKioskMode() || 585 if (IsArcOptInVerificationDisabled() || IsArcKioskMode() ||
572 (g_disable_ui_for_testing && 586 (g_disable_ui_for_testing &&
573 !g_enable_check_android_management_for_testing)) { 587 !g_enable_check_android_management_for_testing)) {
574 return; 588 return;
(...skipping 13 matching lines...) Expand all
588 return; 602 return;
589 } 603 }
590 604
591 // If it is marked that the Terms of service is accepted already, 605 // If it is marked that the Terms of service is accepted already,
592 // just skip the negotiation with user, and start Android management 606 // just skip the negotiation with user, and start Android management
593 // check directly. 607 // check directly.
594 // This happens, e.g., when; 608 // This happens, e.g., when;
595 // 1) User accepted the Terms of service on OOBE flow. 609 // 1) User accepted the Terms of service on OOBE flow.
596 // 2) User accepted the Terms of service on Opt-in flow, but logged out 610 // 2) User accepted the Terms of service on Opt-in flow, but logged out
597 // before ARC sign in procedure was done. Then, logs in again. 611 // before ARC sign in procedure was done. Then, logs in again.
598 if (profile_->GetPrefs()->GetBoolean(prefs::kArcTermsAccepted)) { 612 if (prefs->GetBoolean(prefs::kArcTermsAccepted)) {
599 // Don't show UI for this progress if it was not shown. 613 // Don't show UI for this progress if it was not shown.
600 if (support_host_->ui_page() != ArcSupportHost::UIPage::NO_PAGE) 614 if (support_host_ &&
615 support_host_->ui_page() != ArcSupportHost::UIPage::NO_PAGE) {
601 support_host_->ShowArcLoading(); 616 support_host_->ShowArcLoading();
617 }
602 StartArcAndroidManagementCheck(); 618 StartArcAndroidManagementCheck();
603 return; 619 return;
604 } 620 }
605 621
606 // Need user's explicit Terms Of Service agreement. Prevent race condition 622 // Need user's explicit Terms Of Service agreement. Prevent race condition
607 // when ARC can be enabled before profile is synced. In last case 623 // when ARC can be enabled before profile is synced. In last case
608 // OnOptInPreferenceChanged is called twice. 624 // OnOptInPreferenceChanged is called twice.
609 // TODO(crbug.com/687185): Remove the condition. 625 // TODO(crbug.com/687185): Remove the condition.
610 if (state_ != State::SHOWING_TERMS_OF_SERVICE) 626 if (state_ != State::SHOWING_TERMS_OF_SERVICE)
611 StartTermsOfServiceNegotiation(); 627 StartTermsOfServiceNegotiation();
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 987
972 #undef MAP_STATE 988 #undef MAP_STATE
973 989
974 // Some compilers report an error even if all values of an enum-class are 990 // Some compilers report an error even if all values of an enum-class are
975 // covered exhaustively in a switch statement. 991 // covered exhaustively in a switch statement.
976 NOTREACHED() << "Invalid value " << static_cast<int>(state); 992 NOTREACHED() << "Invalid value " << static_cast<int>(state);
977 return os; 993 return os;
978 } 994 }
979 995
980 } // namespace arc 996 } // namespace arc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698