summaryrefslogtreecommitdiffstats
path: root/chrome/browser/supervised_user
diff options
context:
space:
mode:
authorbartfab <bartfab@chromium.org>2015-04-21 10:11:39 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-21 17:11:59 +0000
commitfa8233aa24f47afdac436ad7340ef14a31263413 (patch)
treee8b373256a0e593c89bf596151e6541874f5accd /chrome/browser/supervised_user
parent7664f9bd49f03f7b5cedf332ede848421dc2df1d (diff)
downloadchromium_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.cc30
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(