Chromium Code Reviews| 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 7eab36a63c72b086c0c29b6e9e06b531d7179912..a87b1b41836752785befe3551b9ad76db3687af3 100644 |
| --- a/chrome/browser/chromeos/arc/arc_session_manager.cc |
| +++ b/chrome/browser/chromeos/arc/arc_session_manager.cc |
| @@ -156,6 +156,12 @@ void ArcSessionManager::EnableCheckAndroidManagementForTesting() { |
| g_enable_check_android_management_for_testing = true; |
| } |
| +// static |
| +bool ArcSessionManager::IsPersistentArc() { |
| + return base::CommandLine::ForCurrentProcess()->HasSwitch( |
| + chromeos::switches::kEnableArcPersistently); |
| +} |
| + |
| void ArcSessionManager::OnSessionReady() { |
| for (auto& observer : arc_session_observer_list_) |
| observer.OnSessionReady(); |
| @@ -395,6 +401,7 @@ void ArcSessionManager::OnPrimaryUserProfilePrepared(Profile* profile) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| DCHECK(profile && profile != profile_); |
| + // TODO(victorhsieh): Keep using the instance from login screen when ready. |
| Shutdown(); |
| if (!IsArcAllowedForProfile(profile)) |
| @@ -449,7 +456,7 @@ void ArcSessionManager::OnPrimaryUserProfilePrepared(Profile* profile) { |
| RemoveArcData(); |
| } |
| - if (IsArcPlayStoreEnabled()) { |
| + if (IsPersistentArc() || IsArcPlayStoreEnabled()) { |
| VLOG(1) << "ARC is already enabled."; |
| DCHECK(!enable_requested_); |
| RequestEnable(); |
| @@ -513,13 +520,13 @@ void ArcSessionManager::OnOptInPreferenceChanged() { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| DCHECK(profile_); |
| - const bool arc_enabled = IsArcPlayStoreEnabled(); |
| + const bool play_enabled = IsArcPlayStoreEnabled(); |
|
hidehiko
2017/02/23 10:29:16
Could you use "play_store" instead of "play" for c
victorhsieh
2017/02/24 00:44:59
Done.
hidehiko
2017/02/28 19:26:06
There are still many "play" (not "play store") usa
victorhsieh
2017/02/28 21:47:06
Really done. Double checked with `git show | grep
|
| if (!IsArcManaged()) { |
| // Update UMA only for non-Managed cases. |
| - UpdateOptInActionUMA(arc_enabled ? OptInActionType::OPTED_IN |
| - : OptInActionType::OPTED_OUT); |
| + UpdateOptInActionUMA(play_enabled ? OptInActionType::OPTED_IN |
| + : OptInActionType::OPTED_OUT); |
| - if (!arc_enabled) { |
| + if (!play_enabled) { |
| // Remove the pinned Play Store icon launcher in Shelf. |
| // This is only for non-Managed cases. In managed cases, it is expected |
| // to be "disabled" rather than "removed", so keep it here. |
| @@ -539,13 +546,19 @@ void ArcSessionManager::OnOptInPreferenceChanged() { |
| ArcAuthNotification::Hide(); |
| } |
| - if (arc_enabled) |
| + if (IsPersistentArc()) { |
|
hidehiko
2017/02/23 10:29:16
Clarification: Several services expect OnArcPlaySt
victorhsieh
2017/02/24 00:44:59
Fixed. It's not intentional. Thanks.
|
| + // TODO(victorhsieh): Implement opt-in and opt-out flow. For now, do |
| + // nothing but keep the existing ARC instance running. |
| + return; |
| + } |
| + |
| + if (play_enabled) |
| RequestEnable(); |
| else |
| RequestDisable(); |
| for (auto& observer : observer_list_) |
| - observer.OnArcPlayStoreEnabledChanged(arc_enabled); |
| + observer.OnArcPlayStoreEnabledChanged(play_enabled); |
| } |
| void ArcSessionManager::ShutdownSession() { |
| @@ -728,6 +741,14 @@ void ArcSessionManager::RequestEnableImpl() { |
| prefs->SetBoolean(prefs::kArcTermsAccepted, true); |
| } |
| + if (IsPersistentArc()) { |
|
hidehiko
2017/02/23 10:29:16
Maybe merge this into L757?
victorhsieh
2017/02/24 00:44:59
Done.
|
| + DCHECK(IsArcAllowedForProfile(profile_)); |
| + StartArc(); |
| + if (!profile_->GetPrefs()->GetBoolean(prefs::kArcSignedIn)) |
|
hidehiko
2017/02/23 10:29:16
IIUC, background management check is always needed
victorhsieh
2017/02/24 00:44:59
Done.
|
| + StartArcAndroidManagementCheckedInBackground(); |
| + return; |
| + } |
| + |
| // If it is marked that sign in has been successfully done, then directly |
| // start ARC. |
| // For testing, and for Kiosk mode, we also skip ToS negotiation procedure. |
| @@ -751,12 +772,7 @@ void ArcSessionManager::RequestEnableImpl() { |
| // on the same stack), StartCheck() needs to be called *after* StartArc(). |
| // Otherwise, SetArcPlayStoreEnabled() which may be called in |
| // OnBackgroundAndroidManagementChecked() could be ignored. |
| - android_management_checker_ = base::MakeUnique<ArcAndroidManagementChecker>( |
| - profile_, context_->token_service(), context_->account_id(), |
| - true /* retry_on_error */); |
| - android_management_checker_->StartCheck( |
| - base::Bind(&ArcSessionManager::OnBackgroundAndroidManagementChecked, |
| - weak_ptr_factory_.GetWeakPtr())); |
| + StartArcAndroidManagementCheckedInBackground(); |
|
hidehiko
2017/02/23 10:29:16
Maybe: "Check" rather than "Checked"?
victorhsieh
2017/02/24 00:44:59
Done.
|
| return; |
| } |
| @@ -869,6 +885,15 @@ void ArcSessionManager::StartArcAndroidManagementCheck() { |
| weak_ptr_factory_.GetWeakPtr())); |
| } |
| +void ArcSessionManager::StartArcAndroidManagementCheckedInBackground() { |
| + android_management_checker_ = base::MakeUnique<ArcAndroidManagementChecker>( |
|
hidehiko
2017/02/23 10:29:16
Could you add DCHECKs similar to StartArcAndroidMa
victorhsieh
2017/02/24 00:44:59
Reverted this change.
|
| + profile_, context_->token_service(), context_->account_id(), |
| + true /* retry_on_error */); |
| + android_management_checker_->StartCheck( |
| + base::Bind(&ArcSessionManager::OnBackgroundAndroidManagementChecked, |
| + weak_ptr_factory_.GetWeakPtr())); |
| +} |
| + |
| void ArcSessionManager::OnAndroidManagementChecked( |
| policy::AndroidManagementClient::Result result) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |