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

Unified Diff: chrome/browser/chromeos/arc/arc_session_manager.cc

Issue 2732983002: Keep state even if AndroidManagement check returns MANAGED or ERROR. (Closed)
Patch Set: 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 side-by-side diff with in-line comments
Download patch
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 f82e67c428a728954a8bffa79a62274fdc35d1e6..d51587cd547d94bb8806b9bcefde8565b893cf2e 100644
--- a/chrome/browser/chromeos/arc/arc_session_manager.cc
+++ b/chrome/browser/chromeos/arc/arc_session_manager.cc
@@ -588,27 +588,14 @@ void ArcSessionManager::RequestEnableImpl() {
if (prefs->GetBoolean(prefs::kArcSignedIn) ||
IsArcOptInVerificationDisabled() || IsArcKioskMode()) {
StartArc();
-
- // Skip Android management check for testing.
- // We also skip if Android management check for Kiosk mode,
- // because there are no managed human users for Kiosk exist.
- if (IsArcOptInVerificationDisabled() || IsArcKioskMode() ||
- (g_disable_ui_for_testing &&
- !g_enable_check_android_management_for_testing)) {
- return;
- }
-
// Check Android management in parallel.
- // Note: Because the callback may be called in synchronous way (i.e. called
- // on the same stack), StartCheck() needs to be called *after* StartArc().
- // Otherwise, SetArcPlayStoreEnabledForProfile() 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()));
+ // Note: The callback OnBackgroundAndroidManagementChecked() can be called
Yusuke Sato 2017/03/06 22:11:49 nit: 'StartBackgroundAndroidManagementCheck() may
hidehiko 2017/03/07 05:09:59 Done.
+ // synchronously or asynchronously. In the callback, Google Play Store
+ // enabled preference can be set to false if managed, and it triggers
+ // RequestDisable() via ArcPlayStoreEnabledPreferenceHandler.
+ // Thus, StartArc() should be called so that disabling should work even
+ // if synchronous call case.
+ StartBackgroundAndroidManagementCheck();
return;
}
@@ -625,7 +612,7 @@ void ArcSessionManager::RequestEnableImpl() {
support_host_->ui_page() != ArcSupportHost::UIPage::NO_PAGE) {
support_host_->ShowArcLoading();
}
- StartArcAndroidManagementCheck();
+ StartAndroidManagementCheck();
return;
}
@@ -701,7 +688,7 @@ void ArcSessionManager::OnTermsOfServiceNegotiated(bool accepted) {
if (support_host_ &&
support_host_->ui_page() != ArcSupportHost::UIPage::NO_PAGE)
support_host_->ShowArcLoading();
- StartArcAndroidManagementCheck();
+ StartAndroidManagementCheck();
}
bool ArcSessionManager::AreArcAllOptInPreferencesManaged() const {
@@ -712,18 +699,19 @@ bool ArcSessionManager::AreArcAllOptInPreferencesManaged() const {
prefs::kArcLocationServiceEnabled);
}
-void ArcSessionManager::StartArcAndroidManagementCheck() {
+void ArcSessionManager::StartAndroidManagementCheck() {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DCHECK(arc_session_runner_->IsStopped());
DCHECK(state_ == State::SHOWING_TERMS_OF_SERVICE ||
state_ == State::CHECKING_ANDROID_MANAGEMENT ||
(state_ == State::STOPPED &&
profile_->GetPrefs()->GetBoolean(prefs::kArcTermsAccepted)));
+ DCHECK(!android_management_checker_);
SetState(State::CHECKING_ANDROID_MANAGEMENT);
- android_management_checker_.reset(new ArcAndroidManagementChecker(
+ android_management_checker_ = base::MakeUnique<ArcAndroidManagementChecker>(
profile_, context_->token_service(), context_->account_id(),
- false /* retry_on_error */));
+ false /* retry_on_error */);
android_management_checker_->StartCheck(
base::Bind(&ArcSessionManager::OnAndroidManagementChecked,
weak_ptr_factory_.GetWeakPtr()));
@@ -733,6 +721,8 @@ void ArcSessionManager::OnAndroidManagementChecked(
policy::AndroidManagementClient::Result result) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DCHECK_EQ(state_, State::CHECKING_ANDROID_MANAGEMENT);
+ DCHECK(android_management_checker_);
+ android_management_checker_.reset();
switch (result) {
case policy::AndroidManagementClient::Result::UNMANAGED:
@@ -745,7 +735,6 @@ void ArcSessionManager::OnAndroidManagementChecked(
StartArc();
break;
case policy::AndroidManagementClient::Result::MANAGED:
- ShutdownSession();
if (support_host_) {
support_host_->ShowError(
ArcSupportHost::Error::ANDROID_MANAGEMENT_REQUIRED_ERROR, false);
@@ -753,7 +742,6 @@ void ArcSessionManager::OnAndroidManagementChecked(
UpdateOptInCancelUMA(OptInCancelReason::ANDROID_MANAGEMENT_REQUIRED);
break;
case policy::AndroidManagementClient::Result::ERROR:
- ShutdownSession();
if (support_host_) {
support_host_->ShowError(
ArcSupportHost::Error::SERVER_COMMUNICATION_ERROR, false);
@@ -763,9 +751,34 @@ void ArcSessionManager::OnAndroidManagementChecked(
}
}
+void ArcSessionManager::StartBackgroundAndroidManagementCheck() {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ DCHECK_EQ(state_, State::ACTIVE);
+ DCHECK(!android_management_checker_);
+
+ // Skip Android management check for testing.
+ // We also skip if Android management check for Kiosk mode,
+ // because there are no managed human users for Kiosk exist.
+ if (IsArcOptInVerificationDisabled() || IsArcKioskMode() ||
+ (g_disable_ui_for_testing &&
+ !g_enable_check_android_management_for_testing)) {
+ return;
+ }
+
+ 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()));
+}
+
void ArcSessionManager::OnBackgroundAndroidManagementChecked(
policy::AndroidManagementClient::Result result) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ DCHECK(android_management_checker_);
+ android_management_checker_.reset();
+
switch (result) {
case policy::AndroidManagementClient::Result::UNMANAGED:
// Do nothing. ARC should be started already.
@@ -850,7 +863,7 @@ void ArcSessionManager::OnRetryClicked() {
// For second or later boot, either ERROR_WITH_FEEDBACK case or ACTIVE
// case must hit.
support_host_->ShowArcLoading();
- StartArcAndroidManagementCheck();
+ StartAndroidManagementCheck();
}
}

Powered by Google App Engine
This is Rietveld 408576698