Index: chrome/browser/chromeos/arc/arc_session_manager.cc |
diff --git a/chrome/browser/chromeos/arc/arc_session_manager.cc b/chrome/browser/chromeos/arc/arc_session_manager.cc |
index 6ae5cb9b46f27a2d3d58ec52a74577213bcac569..7eab36a63c72b086c0c29b6e9e06b531d7179912 100644 |
--- a/chrome/browser/chromeos/arc/arc_session_manager.cc |
+++ b/chrome/browser/chromeos/arc/arc_session_manager.cc |
@@ -118,8 +118,12 @@ void ArcSessionManager::RegisterProfilePrefs( |
registry->RegisterBooleanPref(prefs::kArcEnabled, false); |
registry->RegisterBooleanPref(prefs::kArcSignedIn, false); |
registry->RegisterBooleanPref(prefs::kArcTermsAccepted, false); |
- registry->RegisterBooleanPref(prefs::kArcBackupRestoreEnabled, true); |
- registry->RegisterBooleanPref(prefs::kArcLocationServiceEnabled, true); |
+ // Note that ArcBackupRestoreEnabled and ArcLocationServiceEnabled prefs have |
+ // to be off by default, until an explicit gesture from the user to enable |
+ // them is received. This is crucial in the cases when these prefs transition |
+ // from a previous managed state to the unmanaged. |
+ registry->RegisterBooleanPref(prefs::kArcBackupRestoreEnabled, false); |
+ registry->RegisterBooleanPref(prefs::kArcLocationServiceEnabled, false); |
} |
// static |
@@ -706,18 +710,30 @@ void ArcSessionManager::RequestEnableImpl() { |
return; |
} |
+ PrefService* const prefs = profile_->GetPrefs(); |
+ |
// For ARC Kiosk we skip ToS because it is very likely that near the device |
// there will be no one who is eligible to accept them. |
// TODO(poromov): Move to more Kiosk dedicated set-up phase. |
if (IsArcKioskMode()) |
- profile_->GetPrefs()->SetBoolean(prefs::kArcTermsAccepted, true); |
+ prefs->SetBoolean(prefs::kArcTermsAccepted, true); |
+ |
+ // Skip to show UI asking users to enable/disable their preference for |
+ // backup-restore and location-service, if both are managed by the admin |
+ // policy. Note that the ToS agreement is anyway not shown in the case of the |
+ // managed ARC. |
+ if (IsArcManaged() && |
+ prefs->IsManagedPreference(prefs::kArcBackupRestoreEnabled) && |
+ prefs->IsManagedPreference(prefs::kArcLocationServiceEnabled)) { |
+ prefs->SetBoolean(prefs::kArcTermsAccepted, true); |
+ } |
// If it is marked that sign in has been successfully done, then directly |
// start ARC. |
- // For testing, and for Kisok mode, we also skip ToS negotiation procedure. |
+ // For testing, and for Kiosk mode, we also skip ToS negotiation procedure. |
// For backward compatibility, this check needs to be prior to the |
// kArcTermsAccepted check below. |
- if (profile_->GetPrefs()->GetBoolean(prefs::kArcSignedIn) || |
+ if (prefs->GetBoolean(prefs::kArcSignedIn) || |
IsArcOptInVerificationDisabled() || IsArcKioskMode()) { |
StartArc(); |
@@ -751,10 +767,12 @@ void ArcSessionManager::RequestEnableImpl() { |
// 1) User accepted the Terms of service on OOBE flow. |
// 2) User accepted the Terms of service on Opt-in flow, but logged out |
// before ARC sign in procedure was done. Then, logs in again. |
- if (profile_->GetPrefs()->GetBoolean(prefs::kArcTermsAccepted)) { |
+ if (prefs->GetBoolean(prefs::kArcTermsAccepted)) { |
// Don't show UI for this progress if it was not shown. |
- if (support_host_->ui_page() != ArcSupportHost::UIPage::NO_PAGE) |
+ if (support_host_ && |
+ support_host_->ui_page() != ArcSupportHost::UIPage::NO_PAGE) { |
support_host_->ShowArcLoading(); |
+ } |
StartArcAndroidManagementCheck(); |
return; |
} |