OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/sync/sync_global_error.h" | 5 #include "chrome/browser/sync/sync_global_error.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
9 #include "chrome/app/chrome_command_ids.h" | 9 #include "chrome/app/chrome_command_ids.h" |
10 #include "chrome/browser/signin/signin_manager.h" | 10 #include "chrome/browser/signin/signin_manager.h" |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 .WillRepeatedly(Return(is_signed_in)); | 106 .WillRepeatedly(Return(is_signed_in)); |
107 | 107 |
108 GoogleServiceAuthError auth_error(error_state); | 108 GoogleServiceAuthError auth_error(error_state); |
109 EXPECT_CALL(*service, GetAuthError()).WillRepeatedly(ReturnRef(auth_error)); | 109 EXPECT_CALL(*service, GetAuthError()).WillRepeatedly(ReturnRef(auth_error)); |
110 | 110 |
111 error->OnStateChanged(); | 111 error->OnStateChanged(); |
112 | 112 |
113 // If there is an error then a wrench button badge, menu item, and bubble view | 113 // If there is an error then a wrench button badge, menu item, and bubble view |
114 // should be shown. | 114 // should be shown. |
115 EXPECT_EQ(error->HasBadge(), is_error); | 115 EXPECT_EQ(error->HasBadge(), is_error); |
116 EXPECT_EQ(error->HasMenuItem() || error->HasBadge(), is_error); | 116 EXPECT_EQ(error->HasMenuItem() || error->HasCustomizedSyncMenuItem(), |
| 117 is_error); |
117 EXPECT_EQ(error->HasBubbleView(), is_error); | 118 EXPECT_EQ(error->HasBubbleView(), is_error); |
118 | 119 |
119 // If there is an error then labels should not be empty. | 120 // If there is an error then labels should not be empty. |
120 EXPECT_NE(error->MenuItemCommandID(), 0); | 121 EXPECT_NE(error->MenuItemCommandID(), 0); |
121 EXPECT_NE(error->MenuItemLabel().empty(), is_error); | 122 EXPECT_NE(error->MenuItemLabel().empty(), is_error); |
122 EXPECT_NE(error->GetBubbleViewAcceptButtonLabel().empty(), is_error); | 123 EXPECT_NE(error->GetBubbleViewAcceptButtonLabel().empty(), is_error); |
123 | 124 |
124 // We never have a cancel button. | 125 // We never have a cancel button. |
125 EXPECT_TRUE(error->GetBubbleViewCancelButtonLabel().empty()); | 126 EXPECT_TRUE(error->GetBubbleViewCancelButtonLabel().empty()); |
126 // We always return a hardcoded title. | 127 // We always return a hardcoded title. |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 .WillRepeatedly(Return(false)); | 175 .WillRepeatedly(Return(false)); |
175 | 176 |
176 EXPECT_CALL(service, IsPassphraseRequired()) | 177 EXPECT_CALL(service, IsPassphraseRequired()) |
177 .WillRepeatedly(Return(true)); | 178 .WillRepeatedly(Return(true)); |
178 EXPECT_CALL(service, IsPassphraseRequiredForDecryption()) | 179 EXPECT_CALL(service, IsPassphraseRequiredForDecryption()) |
179 .WillRepeatedly(Return(true)); | 180 .WillRepeatedly(Return(true)); |
180 VerifySyncGlobalErrorResult( | 181 VerifySyncGlobalErrorResult( |
181 &service, login_ui_service, browser(), &error, | 182 &service, login_ui_service, browser(), &error, |
182 GoogleServiceAuthError::NONE, true, true); | 183 GoogleServiceAuthError::NONE, true, true); |
183 } | 184 } |
| 185 |
| 186 // Test that SyncGlobalError shows an error for conditions that can be resolved |
| 187 // by the user and suppresses errors for conditions that cannot be resolved by |
| 188 // the user. |
| 189 TEST_F(SyncGlobalErrorTest, AuthStateGlobalError) { |
| 190 scoped_ptr<Profile> profile( |
| 191 ProfileSyncServiceMock::MakeSignedInTestingProfile()); |
| 192 NiceMock<ProfileSyncServiceMock> service(profile.get()); |
| 193 SigninManager* signin = SigninManagerFactory::GetForProfile(profile.get()); |
| 194 FakeLoginUIService* login_ui_service = static_cast<FakeLoginUIService*>( |
| 195 LoginUIServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| 196 profile.get(), BuildMockLoginUIService)); |
| 197 FakeLoginUI login_ui; |
| 198 login_ui_service->SetLoginUI(&login_ui); |
| 199 SyncGlobalError error(&service, signin); |
| 200 |
| 201 browser_sync::SyncBackendHost::Status status; |
| 202 EXPECT_CALL(service, QueryDetailedSyncStatus(_)) |
| 203 .WillRepeatedly(Return(false)); |
| 204 |
| 205 struct { |
| 206 GoogleServiceAuthError::State error_state; |
| 207 bool is_error; |
| 208 } table[] = { |
| 209 { GoogleServiceAuthError::NONE, false }, |
| 210 { GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS, true }, |
| 211 { GoogleServiceAuthError::USER_NOT_SIGNED_UP, true }, |
| 212 { GoogleServiceAuthError::CONNECTION_FAILED, false }, |
| 213 { GoogleServiceAuthError::CAPTCHA_REQUIRED, true }, |
| 214 { GoogleServiceAuthError::ACCOUNT_DELETED, true }, |
| 215 { GoogleServiceAuthError::ACCOUNT_DISABLED, true }, |
| 216 { GoogleServiceAuthError::SERVICE_UNAVAILABLE, true }, |
| 217 { GoogleServiceAuthError::TWO_FACTOR, true }, |
| 218 { GoogleServiceAuthError::REQUEST_CANCELED, true }, |
| 219 { GoogleServiceAuthError::HOSTED_NOT_ALLOWED, true }, |
| 220 }; |
| 221 |
| 222 for (size_t i = 0; i < sizeof(table)/sizeof(*table); ++i) { |
| 223 VerifySyncGlobalErrorResult(&service, login_ui_service, browser(), &error, |
| 224 table[i].error_state, true, table[i].is_error); |
| 225 VerifySyncGlobalErrorResult(&service, login_ui_service, browser(), &error, |
| 226 table[i].error_state, false, false); |
| 227 } |
| 228 } |
OLD | NEW |