Index: components/signin/core/browser/about_signin_internals.cc |
diff --git a/components/signin/core/browser/about_signin_internals.cc b/components/signin/core/browser/about_signin_internals.cc |
index 47a28550cd640c0a9561b45cbd8af776625067cb..a693d5e8004d0fe75ea7daf6f71c7ad3b09e61ad 100644 |
--- a/components/signin/core/browser/about_signin_internals.cc |
+++ b/components/signin/core/browser/about_signin_internals.cc |
@@ -13,6 +13,7 @@ |
#include "base/strings/stringprintf.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/trace_event/trace_event.h" |
+#include "components/signin/core/browser/account_tracker_service.h" |
#include "components/signin/core/browser/profile_oauth2_token_service.h" |
#include "components/signin/core/browser/signin_client.h" |
#include "components/signin/core/browser/signin_internals_util.h" |
@@ -67,8 +68,12 @@ void AddCookieEntry(base::ListValue* accounts_list, |
std::string SigninStatusFieldToLabel(UntimedSigninStatusField field) { |
switch (field) { |
+ case ACCOUNT_ID: |
+ return "Account Id"; |
+ case GAIA_ID: |
+ return "Gaia Id"; |
case USERNAME: |
- return "User Id"; |
+ return "Username"; |
case UNTIMED_FIELDS_END: |
NOTREACHED(); |
return std::string(); |
@@ -80,18 +85,14 @@ std::string SigninStatusFieldToLabel(UntimedSigninStatusField field) { |
#if !defined (OS_CHROMEOS) |
std::string SigninStatusFieldToLabel(TimedSigninStatusField field) { |
switch (field) { |
- case SIGNIN_TYPE: |
- return "Type"; |
case AUTHENTICATION_RESULT_RECEIVED: |
- return "Last Authentication Result Received"; |
+ return "Gaia Authentication Result"; |
case REFRESH_TOKEN_RECEIVED: |
- return "Last RefreshToken Received"; |
- case GET_USER_INFO_STATUS: |
- return "Last OnGetUserInfo Received"; |
- case UBER_TOKEN_STATUS: |
- return "Last OnUberToken Received"; |
- case MERGE_SESSION_STATUS: |
- return "Last OnMergeSession Received"; |
+ return "RefreshToken Received"; |
+ case SIGNIN_STARTED: |
+ return "SigninManager Started"; |
+ case SIGNIN_COMPLETED: |
+ return "SigninManager Completed"; |
case TIMED_FIELDS_END: |
NOTREACHED(); |
return "Error"; |
@@ -101,12 +102,41 @@ std::string SigninStatusFieldToLabel(TimedSigninStatusField field) { |
} |
#endif // !defined (OS_CHROMEOS) |
+void SetPref(PrefService* prefs, |
+ TimedSigninStatusField field, |
+ const std::string& time, |
+ const std::string& value) { |
+ std::string value_pref = SigninStatusFieldToString(field) + ".value"; |
+ std::string time_pref = SigninStatusFieldToString(field) + ".time"; |
+ prefs->SetString(value_pref, value); |
+ prefs->SetString(time_pref, time); |
+} |
+ |
+void GetPref(PrefService* prefs, |
+ TimedSigninStatusField field, |
+ std::string* time, |
+ std::string* value) { |
+ std::string value_pref = SigninStatusFieldToString(field) + ".value"; |
+ std::string time_pref = SigninStatusFieldToString(field) + ".time"; |
+ *value = prefs->GetString(value_pref); |
+ *time = prefs->GetString(time_pref); |
+} |
+ |
+void ClearPref(PrefService* prefs, TimedSigninStatusField field) { |
+ std::string value_pref = SigninStatusFieldToString(field) + ".value"; |
+ std::string time_pref = SigninStatusFieldToString(field) + ".time"; |
+ prefs->ClearPref(value_pref); |
+ prefs->ClearPref(time_pref); |
+} |
+ |
} // anonymous namespace |
AboutSigninInternals::AboutSigninInternals( |
ProfileOAuth2TokenService* token_service, |
+ AccountTrackerService* account_tracker, |
SigninManagerBase* signin_manager) |
: token_service_(token_service), |
+ account_tracker_(account_tracker), |
signin_manager_(signin_manager), |
client_(NULL) {} |
@@ -123,22 +153,6 @@ void AboutSigninInternals::RemoveSigninObserver( |
} |
void AboutSigninInternals::NotifySigninValueChanged( |
- const UntimedSigninStatusField& field, |
- const std::string& value) { |
- unsigned int field_index = field - UNTIMED_FIELDS_BEGIN; |
- DCHECK(field_index >= 0 && |
- field_index < signin_status_.untimed_signin_fields.size()); |
- |
- signin_status_.untimed_signin_fields[field_index] = value; |
- |
- // Also persist these values in the prefs. |
- const std::string pref_path = SigninStatusFieldToString(field); |
- client_->GetPrefs()->SetString(pref_path.c_str(), value); |
- |
- NotifyObservers(); |
-} |
- |
-void AboutSigninInternals::NotifySigninValueChanged( |
const TimedSigninStatusField& field, |
const std::string& value) { |
unsigned int field_index = field - TIMED_FIELDS_BEGIN; |
@@ -153,46 +167,31 @@ void AboutSigninInternals::NotifySigninValueChanged( |
signin_status_.timed_signin_fields[field_index] = timed_value; |
// Also persist these values in the prefs. |
- const std::string value_pref = SigninStatusFieldToString(field) + ".value"; |
- const std::string time_pref = SigninStatusFieldToString(field) + ".time"; |
- client_->GetPrefs()->SetString(value_pref.c_str(), value); |
- client_->GetPrefs()->SetString(time_pref.c_str(), time_as_str); |
+ SetPref(client_->GetPrefs(), field, value, time_as_str); |
+ |
+ // If the user is restarting a sign in process, clear the fields that are |
+ // to come. |
+ if (field == AUTHENTICATION_RESULT_RECEIVED) { |
+ ClearPref(client_->GetPrefs(), REFRESH_TOKEN_RECEIVED); |
+ ClearPref(client_->GetPrefs(), SIGNIN_STARTED); |
+ ClearPref(client_->GetPrefs(), SIGNIN_COMPLETED); |
+ } |
NotifyObservers(); |
} |
void AboutSigninInternals::RefreshSigninPrefs() { |
- // Since the AboutSigninInternals has a dependency on the SigninManager |
- // (as seen in the AboutSigninInternalsFactory) the SigninManager can have |
- // the AuthenticatedUsername set before AboutSigninInternals can observe it. |
- // For that scenario, read the AuthenticatedUsername if it exists. |
- if (signin_manager_->IsAuthenticated()) { |
- signin_status_.untimed_signin_fields[USERNAME] = |
- signin_manager_->GetAuthenticatedUsername(); |
- } |
- |
// Return if no client exists. Can occur in unit tests. |
if (!client_) |
return; |
PrefService* pref_service = client_->GetPrefs(); |
- for (int i = UNTIMED_FIELDS_BEGIN; i < UNTIMED_FIELDS_END; ++i) { |
- const std::string pref_path = |
- SigninStatusFieldToString(static_cast<UntimedSigninStatusField>(i)); |
- |
- signin_status_.untimed_signin_fields[i - UNTIMED_FIELDS_BEGIN] = |
- pref_service->GetString(pref_path.c_str()); |
- } |
for (int i = TIMED_FIELDS_BEGIN; i < TIMED_FIELDS_END; ++i) { |
- const std::string value_pref = |
- SigninStatusFieldToString(static_cast<TimedSigninStatusField>(i)) + |
- ".value"; |
- const std::string time_pref = |
- SigninStatusFieldToString(static_cast<TimedSigninStatusField>(i)) + |
- ".time"; |
- |
- TimedSigninStatusValue value(pref_service->GetString(value_pref.c_str()), |
- pref_service->GetString(time_pref.c_str())); |
+ std::string time_str; |
+ std::string value_str; |
+ GetPref(pref_service, static_cast<TimedSigninStatusField>(i), |
+ &time_str, &value_str); |
+ TimedSigninStatusValue value(value_str, time_str); |
signin_status_.timed_signin_fields[i - TIMED_FIELDS_BEGIN] = value; |
} |
@@ -241,7 +240,8 @@ void AboutSigninInternals::NotifyObservers() { |
"422460 AboutSigninInternals::NotifyObservers 0.5")); |
scoped_ptr<base::DictionaryValue> signin_status_value = |
- signin_status_.ToValue(product_version); |
+ signin_status_.ToValue(account_tracker_, signin_manager_, |
+ product_version); |
// TODO(robliao): Remove ScopedTracker below once https://crbug.com/422460 is |
// fixed. |
@@ -255,7 +255,8 @@ void AboutSigninInternals::NotifyObservers() { |
} |
scoped_ptr<base::DictionaryValue> AboutSigninInternals::GetSigninStatus() { |
- return signin_status_.ToValue(client_->GetProductVersion()).Pass(); |
+ return signin_status_.ToValue(account_tracker_, signin_manager_, |
+ client_->GetProductVersion()).Pass(); |
} |
void AboutSigninInternals::OnAccessTokenRequested( |
@@ -356,11 +357,27 @@ void AboutSigninInternals::OnListAccountsFailure( |
VLOG(1) << "AboutSigninInternals::OnListAccountsFailure:" << error.ToString(); |
} |
+void AboutSigninInternals::GoogleSigninFailed( |
+ const GoogleServiceAuthError& error) { |
+ NotifyObservers(); |
+} |
+ |
+void AboutSigninInternals::GoogleSigninSucceeded(const std::string& account_id, |
+ const std::string& username, |
+ const std::string& password) { |
+ NotifyObservers(); |
+} |
+ |
+void AboutSigninInternals::GoogleSignedOut(const std::string& account_id, |
+ const std::string& username) { |
+ NotifyObservers(); |
+} |
+ |
void AboutSigninInternals::OnListAccountsComplete( |
std::vector<std::pair<std::string, bool> >& gaia_accounts) { |
- base::DictionaryValue signin_status; |
+ base::DictionaryValue cookie_status; |
base::ListValue* cookie_info = new base::ListValue(); |
- signin_status.Set("cookie_info", cookie_info); |
+ cookie_status.Set("cookie_info", cookie_info); |
for (size_t i = 0; i < gaia_accounts.size(); ++i) { |
AddCookieEntry(cookie_info, |
@@ -374,7 +391,7 @@ void AboutSigninInternals::OnListAccountsComplete( |
// Update the observers that the cookie's accounts are updated. |
FOR_EACH_OBSERVER(AboutSigninInternals::Observer, |
signin_observers_, |
- OnCookieAccountsFetched(&signin_status)); |
+ OnCookieAccountsFetched(&cookie_status)); |
} |
AboutSigninInternals::TokenInfo::TokenInfo( |
@@ -437,8 +454,7 @@ base::DictionaryValue* AboutSigninInternals::TokenInfo::ToValue() const { |
} |
AboutSigninInternals::SigninStatus::SigninStatus() |
- : untimed_signin_fields(UNTIMED_FIELDS_COUNT), |
- timed_signin_fields(TIMED_FIELDS_COUNT) {} |
+ : timed_signin_fields(TIMED_FIELDS_COUNT) {} |
AboutSigninInternals::SigninStatus::~SigninStatus() { |
for (TokenInfoMap::iterator it = token_info_map.begin(); |
@@ -461,7 +477,9 @@ AboutSigninInternals::TokenInfo* AboutSigninInternals::SigninStatus::FindToken( |
} |
scoped_ptr<base::DictionaryValue> AboutSigninInternals::SigninStatus::ToValue( |
- std::string product_version) { |
+ AccountTrackerService* account_tracker, |
+ SigninManagerBase* signin_manager, |
+ const std::string& product_version) { |
// TODO(robliao): Remove ScopedTracker below once https://crbug.com/422460 is |
// fixed. |
tracked_objects::ScopedTracker tracking_profile1( |
@@ -474,20 +492,17 @@ scoped_ptr<base::DictionaryValue> AboutSigninInternals::SigninStatus::ToValue( |
// A summary of signin related info first. |
base::ListValue* basic_info = AddSection(signin_info, "Basic Information"); |
- const std::string signin_status_string = |
- untimed_signin_fields[USERNAME - UNTIMED_FIELDS_BEGIN].empty() |
- ? "Not Signed In" |
- : "Signed In"; |
AddSectionEntry(basic_info, "Chrome Version", product_version); |
- AddSectionEntry(basic_info, "Signin Status", signin_status_string); |
- AddSectionEntry(basic_info, "Webview Based Signin Enabled?", |
- switches::IsEnableWebviewBasedSignin() == true ? "True" : "False"); |
- AddSectionEntry(basic_info, "New Avatar Menu Enabled?", |
- switches::IsNewAvatarMenu() == true ? "True" : "False"); |
- AddSectionEntry(basic_info, "New Profile Management Enabled?", |
- switches::IsNewProfileManagement() == true ? "True" : "False"); |
- AddSectionEntry(basic_info, "Account Consistency Enabled?", |
- switches::IsEnableAccountConsistency() == true ? "True" : "False"); |
+ AddSectionEntry(basic_info, "Webview Based Signin?", |
+ switches::IsEnableWebviewBasedSignin() == true ? "On" : "Off"); |
+ AddSectionEntry(basic_info, "New Avatar Menu?", |
+ switches::IsNewAvatarMenu() == true ? "On" : "Off"); |
+ AddSectionEntry(basic_info, "New Profile Management?", |
+ switches::IsNewProfileManagement() == true ? "On" : "Off"); |
+ AddSectionEntry(basic_info, "Account Consistency?", |
+ switches::IsEnableAccountConsistency() == true ? "On" : "Off"); |
+ AddSectionEntry(basic_info, "Signin Status", |
+ signin_manager->IsAuthenticated() ? "Signed In" : "Not Signed In"); |
// TODO(robliao): Remove ScopedTracker below once https://crbug.com/422460 is |
// fixed. |
@@ -495,12 +510,21 @@ scoped_ptr<base::DictionaryValue> AboutSigninInternals::SigninStatus::ToValue( |
FROM_HERE_WITH_EXPLICIT_FUNCTION( |
"422460 AboutSigninInternals::SigninStatus::ToValue2")); |
- // Only add username. SID and LSID have moved to tokens section. |
- const std::string field = |
- SigninStatusFieldToLabel(static_cast<UntimedSigninStatusField>(USERNAME)); |
- AddSectionEntry(basic_info, |
- field, |
- untimed_signin_fields[USERNAME - UNTIMED_FIELDS_BEGIN]); |
+ if (signin_manager->IsAuthenticated()) { |
+ std::string account_id = signin_manager->GetAuthenticatedAccountId(); |
+ AddSectionEntry(basic_info, |
+ SigninStatusFieldToLabel( |
+ static_cast<UntimedSigninStatusField>(ACCOUNT_ID)), |
+ account_id); |
+ AddSectionEntry(basic_info, |
+ SigninStatusFieldToLabel( |
+ static_cast<UntimedSigninStatusField>(GAIA_ID)), |
+ account_tracker->GetAccountInfo(account_id).gaia); |
+ AddSectionEntry(basic_info, |
+ SigninStatusFieldToLabel( |
+ static_cast<UntimedSigninStatusField>(USERNAME)), |
+ signin_manager->GetAuthenticatedUsername()); |
+ } |
#if !defined(OS_CHROMEOS) |
// TODO(robliao): Remove ScopedTracker below once https://crbug.com/422460 is |