Cast: Stop logging kVideoFrameSentToEncoder and rename a couple events.
[chromium-blink-merge.git] / chrome / browser / chromeos / login / auth_sync_observer.cc
blob29e5deede66875fc09812938994571f79770d8c6
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/chromeos/login/auth_sync_observer.h"
7 #include "base/metrics/user_metrics.h"
8 #include "base/metrics/user_metrics_action.h"
9 #include "base/prefs/pref_service.h"
10 #include "chrome/browser/chromeos/login/supervised_user_manager.h"
11 #include "chrome/browser/chromeos/login/user_manager.h"
12 #include "chrome/browser/sync/profile_sync_service.h"
13 #include "chrome/browser/sync/profile_sync_service_factory.h"
14 #include "chrome/common/pref_names.h"
15 #include "content/public/browser/user_metrics.h"
16 #include "google_apis/gaia/gaia_auth_util.h"
18 class Profile;
19 class ProfileSyncService;
21 namespace chromeos {
23 AuthSyncObserver::AuthSyncObserver(Profile* profile)
24 : profile_(profile) {
27 AuthSyncObserver::~AuthSyncObserver() {
30 void AuthSyncObserver::StartObserving() {
31 ProfileSyncService* sync_service =
32 ProfileSyncServiceFactory::GetForProfile(profile_);
33 if (sync_service)
34 sync_service->AddObserver(this);
37 void AuthSyncObserver::Shutdown() {
38 ProfileSyncService* sync_service =
39 ProfileSyncServiceFactory::GetForProfile(profile_);
40 if (sync_service)
41 sync_service->RemoveObserver(this);
44 void AuthSyncObserver::OnStateChanged() {
45 DCHECK(UserManager::Get()->IsLoggedInAsRegularUser() ||
46 UserManager::Get()->IsLoggedInAsLocallyManagedUser());
47 ProfileSyncService* sync_service =
48 ProfileSyncServiceFactory::GetForProfile(profile_);
49 User* user = UserManager::Get()->GetUserByProfile(profile_);
50 GoogleServiceAuthError::State state =
51 sync_service->GetAuthError().state();
52 if (state != GoogleServiceAuthError::NONE &&
53 state != GoogleServiceAuthError::CONNECTION_FAILED &&
54 state != GoogleServiceAuthError::SERVICE_UNAVAILABLE &&
55 state != GoogleServiceAuthError::REQUEST_CANCELED) {
56 // Invalidate OAuth2 refresh token to force Gaia sign-in flow. This is
57 // needed because sign-out/sign-in solution is suggested to the user.
58 // TODO(nkostylev): Remove after crosbug.com/25978 is implemented.
59 LOG(WARNING) << "Invalidate OAuth token because of a sync error: "
60 << sync_service->GetAuthError().ToString();
61 std::string email = user->email();
62 DCHECK(!email.empty());
63 // TODO(nkostyelv): Change observer after active user has changed.
64 User::OAuthTokenStatus old_status = user->oauth_token_status();
65 UserManager::Get()->SaveUserOAuthStatus(email,
66 User::OAUTH2_TOKEN_STATUS_INVALID);
67 if (user->GetType() == User::USER_TYPE_LOCALLY_MANAGED &&
68 old_status != User::OAUTH2_TOKEN_STATUS_INVALID) {
69 // Attempt to restore token from file.
70 UserManager::Get()->GetSupervisedUserManager()->LoadSupervisedUserToken(
71 profile_,
72 base::Bind(&AuthSyncObserver::OnSupervisedTokenLoaded,
73 base::Unretained(this)));
74 content::RecordAction(
75 base::UserMetricsAction("ManagedUsers_Chromeos_Sync_Invalidated"));
77 } else if (state == GoogleServiceAuthError::NONE) {
78 if (user->GetType() == User::USER_TYPE_LOCALLY_MANAGED &&
79 user->oauth_token_status() == User::OAUTH2_TOKEN_STATUS_INVALID) {
80 LOG(ERROR) <<
81 "Got an incorrectly invalidated token case, restoring token status.";
82 UserManager::Get()->SaveUserOAuthStatus(
83 user->email(),
84 User::OAUTH2_TOKEN_STATUS_VALID);
85 content::RecordAction(
86 base::UserMetricsAction("ManagedUsers_Chromeos_Sync_Recovered"));
91 void AuthSyncObserver::OnSupervisedTokenLoaded(const std::string& token) {
92 UserManager::Get()->GetSupervisedUserManager()->ConfigureSyncWithToken(
93 profile_, token);
96 } // namespace chromeos