diff options
author | bartfab <bartfab@chromium.org> | 2015-04-21 10:11:39 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-21 17:11:59 +0000 |
commit | fa8233aa24f47afdac436ad7340ef14a31263413 (patch) | |
tree | e8b373256a0e593c89bf596151e6541874f5accd /chrome/browser/supervised_user | |
parent | 7664f9bd49f03f7b5cedf332ede848421dc2df1d (diff) | |
download | chromium_src-fa8233aa24f47afdac436ad7340ef14a31263413.zip chromium_src-fa8233aa24f47afdac436ad7340ef14a31263413.tar.gz chromium_src-fa8233aa24f47afdac436ad7340ef14a31263413.tar.bz2 |
Correct ChildAccountService child flag retrieval
This CL fixes two bugs in ChildAccountService's child flag retrieval:
* When flag fetching is disabled by command-line flag, causing all
accounts to be marked as non-child, the flag status should be set
to "known," not "unknown."
* When the flag is retrieved from the cloud, it should be stored
before notifying callbacks waiting for the retrieval to finish.
This CL is a prerequisite for the test in crbug.com/477145.
BUG=477145
TEST=Tested as part of the new browser test in follow-up CL
Review URL: https://codereview.chromium.org/1051273009
Cr-Commit-Position: refs/heads/master@{#326058}
Diffstat (limited to 'chrome/browser/supervised_user')
-rw-r--r-- | chrome/browser/supervised_user/child_accounts/child_account_service.cc | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/chrome/browser/supervised_user/child_accounts/child_account_service.cc b/chrome/browser/supervised_user/child_accounts/child_account_service.cc index cbc080f..ab5868f 100644 --- a/chrome/browser/supervised_user/child_accounts/child_account_service.cc +++ b/chrome/browser/supervised_user/child_accounts/child_account_service.cc @@ -103,15 +103,19 @@ void ChildAccountService::RegisterProfilePrefs( void ChildAccountService::SetIsChildAccount(bool is_child_account) { PropagateChildStatusToUser(is_child_account); - if (profile_->IsChild() == is_child_account) - return; - - if (is_child_account) { - profile_->GetPrefs()->SetString(prefs::kSupervisedUserId, - supervised_users::kChildAccountSUID); - } else { - profile_->GetPrefs()->ClearPref(prefs::kSupervisedUserId); + if (profile_->IsChild() != is_child_account) { + if (is_child_account) { + profile_->GetPrefs()->SetString(prefs::kSupervisedUserId, + supervised_users::kChildAccountSUID); + } else { + profile_->GetPrefs()->ClearPref(prefs::kSupervisedUserId); + } } + profile_->GetPrefs()->SetBoolean(prefs::kChildAccountStatusKnown, true); + + for (const auto& callback : status_received_callback_list_) + callback.Run(); + status_received_callback_list_.clear(); } void ChildAccountService::Init() { @@ -321,16 +325,6 @@ void ChildAccountService::OnFlagsFetched( std::find(flags.begin(), flags.end(), kIsChildAccountServiceFlagName) != flags.end(); - bool status_was_known = profile_->GetPrefs()->GetBoolean( - prefs::kChildAccountStatusKnown); - profile_->GetPrefs()->SetBoolean(prefs::kChildAccountStatusKnown, true); - - if (!status_was_known) { - for (auto& callback : status_received_callback_list_) - callback.Run(); - status_received_callback_list_.clear(); - } - SetIsChildAccount(is_child_account); ScheduleNextStatusFlagUpdate( |