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

Side by Side Diff: chrome/browser/ui/avatar_button_error_controller.cc

Issue 2179283002: Refactored signin/sync error controllers for the avatar button (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Uninitialized ptr Created 4 years, 4 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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.
4
5 #include "chrome/browser/ui/avatar_button_error_controller.h"
6
7 #include "chrome/browser/profiles/profiles_state.h"
8 #include "chrome/browser/sync/profile_sync_service_factory.h"
9 #include "components/browser_sync/browser/profile_sync_service.h"
10 #include "components/signin/core/browser/signin_error_controller.h"
11 #include "components/signin/core/common/profile_management_switches.h"
12
13 AvatarButtonErrorController::AvatarButtonErrorController(
14 AvatarButtonErrorControllerDelegate* delegate,
15 Profile* profile)
16 : delegate_(delegate),
17 avatar_signin_error_controller_(profile, this),
18 avatar_sync_error_controller_(profile, this),
19 has_signin_error_(avatar_signin_error_controller_.HasSigninError()),
20 has_sync_error_(avatar_sync_error_controller_.HasSyncError()) {}
21
22 AvatarButtonErrorController::~AvatarButtonErrorController() {}
23
24 void AvatarButtonErrorController::UpdateSigninError(bool has_signin_error) {
25 bool had_error = HasAvatarError();
26 has_signin_error_ = has_signin_error;
27 if (had_error != HasAvatarError())
28 delegate_->OnAvatarErrorChanged();
29 }
30
31 void AvatarButtonErrorController::UpdateSyncError(bool has_sync_error) {
32 bool had_error = HasAvatarError();
33 has_sync_error_ = has_sync_error;
34 if (had_error != HasAvatarError())
35 delegate_->OnAvatarErrorChanged();
36 }
37
38 AvatarButtonErrorController::SigninErrorObserver::SigninErrorObserver(
39 Profile* profile,
40 AvatarButtonErrorController* avatar_button_error_controller)
41 : profile_(profile),
42 avatar_button_error_controller_(avatar_button_error_controller) {
43 SigninErrorController* signin_error_controller =
44 profiles::GetSigninErrorController(profile_);
45 if (signin_error_controller)
46 signin_error_controller->AddObserver(this);
47 }
48
49 AvatarButtonErrorController::SigninErrorObserver::~SigninErrorObserver() {
50 SigninErrorController* signin_error_controller =
51 profiles::GetSigninErrorController(profile_);
52 if (signin_error_controller)
53 signin_error_controller->RemoveObserver(this);
54 }
55
56 void AvatarButtonErrorController::SigninErrorObserver::OnErrorChanged() {
57 avatar_button_error_controller_->UpdateSigninError(HasSigninError());
58 }
59
60 bool AvatarButtonErrorController::SigninErrorObserver::HasSigninError() {
61 const SigninErrorController* signin_error_controller =
62 profiles::GetSigninErrorController(profile_);
63 return signin_error_controller && signin_error_controller->HasError();
64 }
65
66 AvatarButtonErrorController::SyncErrorObserver::SyncErrorObserver(
67 Profile* profile,
68 AvatarButtonErrorController* avatar_button_error_controller)
69 : profile_(profile),
70 avatar_button_error_controller_(avatar_button_error_controller) {
71 SyncErrorController* sync_error_controller = GetSyncErrorControllerIfNeeded();
72 if (sync_error_controller)
73 sync_error_controller->AddObserver(this);
74 }
75
76 AvatarButtonErrorController::SyncErrorObserver::~SyncErrorObserver() {
77 SyncErrorController* sync_error_controller = GetSyncErrorControllerIfNeeded();
78 if (sync_error_controller)
79 sync_error_controller->RemoveObserver(this);
80 }
81
82 void AvatarButtonErrorController::SyncErrorObserver::OnErrorChanged() {
83 avatar_button_error_controller_->UpdateSyncError(HasSyncError());
84 }
85
86 bool AvatarButtonErrorController::SyncErrorObserver::HasSyncError() {
87 ProfileSyncService* sync_service =
88 ProfileSyncServiceFactory::GetForProfile(profile_);
89 if (switches::IsMaterialDesignUserMenu() && sync_service) {
90 SyncErrorController* sync_error_controller =
91 sync_service->sync_error_controller();
92 ProfileSyncService::Status status;
93 sync_service->QueryDetailedSyncStatus(&status);
94 return sync_service->HasUnrecoverableError() ||
95 status.sync_protocol_error.action == syncer::UPGRADE_CLIENT ||
96 (sync_error_controller && sync_error_controller->HasError());
97 }
98 return false;
99 }
100
101 SyncErrorController* AvatarButtonErrorController::SyncErrorObserver::
102 GetSyncErrorControllerIfNeeded() {
103 if (!switches::IsMaterialDesignUserMenu())
104 return nullptr;
105 ProfileSyncService* sync_service =
106 ProfileSyncServiceFactory::GetForProfile(profile_);
107 return sync_service ? sync_service->sync_error_controller() : nullptr;
108 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/avatar_button_error_controller.h ('k') | chrome/browser/ui/avatar_button_error_controller_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698