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

Side by Side Diff: chrome/browser/chromeos/login/signin/device_id_browsertest.cc

Issue 1394723002: This CL fixes the issue with login using alternative e-mails. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2526
Patch Set: Created 5 years, 2 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
« no previous file with comments | « no previous file | chrome/browser/chromeos/login/test/oobe_base_test.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/files/file_path.h" 6 #include "base/files/file_path.h"
7 #include "base/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 13 matching lines...) Expand all
24 24
25 namespace { 25 namespace {
26 26
27 char kRefreshToken1[] = "refresh_token_1"; 27 char kRefreshToken1[] = "refresh_token_1";
28 char kRefreshToken2[] = "refresh_token_2"; 28 char kRefreshToken2[] = "refresh_token_2";
29 const base::FilePath::CharType kRefreshTokenToDeviceIdMapFile[] = 29 const base::FilePath::CharType kRefreshTokenToDeviceIdMapFile[] =
30 FILE_PATH_LITERAL("refrest_token_to_device_id.json"); 30 FILE_PATH_LITERAL("refrest_token_to_device_id.json");
31 31
32 char kSecondUserEmail[] = "second_user@gmail.com"; 32 char kSecondUserEmail[] = "second_user@gmail.com";
33 char kSecondUserPassword[] = "password"; 33 char kSecondUserPassword[] = "password";
34 char kSecondUserGaiaId[] = "4321";
34 char kSecondUserRefreshToken1[] = "refresh_token_second_user_1"; 35 char kSecondUserRefreshToken1[] = "refresh_token_second_user_1";
35 char kSecondUserRefreshToken2[] = "refresh_token_second_user_2"; 36 char kSecondUserRefreshToken2[] = "refresh_token_second_user_2";
36 37
37 } // namespace 38 } // namespace
38 39
39 namespace chromeos { 40 namespace chromeos {
40 41
41 class DeviceIDTest : public OobeBaseTest, 42 class DeviceIDTest : public OobeBaseTest,
42 public user_manager::RemoveUserDelegate { 43 public user_manager::RemoveUserDelegate {
43 public: 44 public:
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 } 92 }
92 93
93 void WaitForSessionStart() { 94 void WaitForSessionStart() {
94 content::WindowedNotificationObserver( 95 content::WindowedNotificationObserver(
95 chrome::NOTIFICATION_SESSION_STARTED, 96 chrome::NOTIFICATION_SESSION_STARTED,
96 content::NotificationService::AllSources()).Wait(); 97 content::NotificationService::AllSources()).Wait();
97 } 98 }
98 99
99 void SignInOnline(const std::string& user_id, 100 void SignInOnline(const std::string& user_id,
100 const std::string& password, 101 const std::string& password,
101 const std::string& refresh_token) { 102 const std::string& refresh_token,
103 const std::string& gaia_id) {
102 WaitForGaiaPageLoad(); 104 WaitForGaiaPageLoad();
103 105
104 FakeGaia::MergeSessionParams params; 106 FakeGaia::MergeSessionParams params;
105 params.email = user_id; 107 params.email = user_id;
106 params.refresh_token = refresh_token; 108 params.refresh_token = refresh_token;
107 fake_gaia_->UpdateMergeSessionParams(params); 109 fake_gaia_->UpdateMergeSessionParams(params);
110 fake_gaia_->MapEmailToGaiaId(user_id, gaia_id);
108 111
109 GetLoginDisplay()->ShowSigninScreenForCreds(user_id, password); 112 GetLoginDisplay()->ShowSigninScreenForCreds(user_id, password);
110 WaitForSessionStart(); 113 WaitForSessionStart();
111 } 114 }
112 115
113 void SignInOffline(const std::string& user_id, const std::string& password) { 116 void SignInOffline(const std::string& user_id, const std::string& password) {
114 WaitForSigninScreen(); 117 WaitForSigninScreen();
115 118
116 JS().ExecuteAsync( 119 JS().ExecuteAsync(
117 base::StringPrintf("chrome.send('authenticateUser', ['%s', '%s'])", 120 base::StringPrintf("chrome.send('authenticateUser', ['%s', '%s'])",
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 EXPECT_TRUE(base::JSONWriter::Write(dictionary, &json)); 167 EXPECT_TRUE(base::JSONWriter::Write(dictionary, &json));
165 EXPECT_TRUE(base::WriteFile(GetRefreshTokenToDeviceIdMapFilePath(), 168 EXPECT_TRUE(base::WriteFile(GetRefreshTokenToDeviceIdMapFilePath(),
166 json.c_str(), json.length())); 169 json.c_str(), json.length()));
167 } 170 }
168 171
169 base::RunLoop user_removal_loop_; 172 base::RunLoop user_removal_loop_;
170 }; 173 };
171 174
172 // Add the first user and check that device ID is consistent. 175 // Add the first user and check that device ID is consistent.
173 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_PRE_PRE_PRE_PRE_NewUsers) { 176 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_PRE_PRE_PRE_PRE_NewUsers) {
174 SignInOnline(kFakeUserEmail, kFakeUserPassword, kRefreshToken1); 177 SignInOnline(kFakeUserEmail, kFakeUserPassword, kRefreshToken1,
178 kFakeUserGaiaId);
175 CheckDeviceIDIsConsistent(kFakeUserEmail, kRefreshToken1); 179 CheckDeviceIDIsConsistent(kFakeUserEmail, kRefreshToken1);
176 } 180 }
177 181
178 // Authenticate the first user through GAIA and verify that device ID remains 182 // Authenticate the first user through GAIA and verify that device ID remains
179 // the same. 183 // the same.
180 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_PRE_PRE_PRE_NewUsers) { 184 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_PRE_PRE_PRE_NewUsers) {
181 const std::string device_id = GetDeviceId(kFakeUserEmail); 185 const std::string device_id = GetDeviceId(kFakeUserEmail);
182 EXPECT_FALSE(device_id.empty()); 186 EXPECT_FALSE(device_id.empty());
183 EXPECT_EQ(device_id, GetDeviceIdFromGAIA(kRefreshToken1)); 187 EXPECT_EQ(device_id, GetDeviceIdFromGAIA(kRefreshToken1));
184 188
185 SignInOnline(kFakeUserEmail, kFakeUserPassword, kRefreshToken2); 189 SignInOnline(kFakeUserEmail, kFakeUserPassword, kRefreshToken2,
190 kFakeUserGaiaId);
186 CheckDeviceIDIsConsistent(kFakeUserEmail, kRefreshToken2); 191 CheckDeviceIDIsConsistent(kFakeUserEmail, kRefreshToken2);
187 192
188 CHECK_EQ(device_id, GetDeviceId(kFakeUserEmail)); 193 CHECK_EQ(device_id, GetDeviceId(kFakeUserEmail));
189 } 194 }
190 195
191 // Authenticate the first user offline and verify that device ID remains 196 // Authenticate the first user offline and verify that device ID remains
192 // the same. 197 // the same.
193 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_PRE_PRE_NewUsers) { 198 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_PRE_PRE_NewUsers) {
194 const std::string device_id = GetDeviceId(kFakeUserEmail); 199 const std::string device_id = GetDeviceId(kFakeUserEmail);
195 EXPECT_FALSE(device_id.empty()); 200 EXPECT_FALSE(device_id.empty());
196 201
197 SignInOffline(kFakeUserEmail, kFakeUserPassword); 202 SignInOffline(kFakeUserEmail, kFakeUserPassword);
198 CheckDeviceIDIsConsistent(kFakeUserEmail, kRefreshToken2); 203 CheckDeviceIDIsConsistent(kFakeUserEmail, kRefreshToken2);
199 204
200 // Verify that device ID remained the same after offline auth. 205 // Verify that device ID remained the same after offline auth.
201 CHECK_EQ(device_id, GetDeviceId(kFakeUserEmail)); 206 CHECK_EQ(device_id, GetDeviceId(kFakeUserEmail));
202 } 207 }
203 208
204 // Add the second user. 209 // Add the second user.
205 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_PRE_NewUsers) { 210 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_PRE_NewUsers) {
206 WaitForSigninScreen(); 211 WaitForSigninScreen();
207 JS().ExecuteAsync("chrome.send('showAddUser')"); 212 JS().ExecuteAsync("chrome.send('showAddUser')");
208 SignInOnline(kSecondUserEmail, kSecondUserPassword, kSecondUserRefreshToken1); 213 SignInOnline(kSecondUserEmail, kSecondUserPassword, kSecondUserRefreshToken1,
214 kSecondUserGaiaId);
209 CheckDeviceIDIsConsistent(kSecondUserEmail, kSecondUserRefreshToken1); 215 CheckDeviceIDIsConsistent(kSecondUserEmail, kSecondUserRefreshToken1);
210 } 216 }
211 217
212 // Remove the second user. 218 // Remove the second user.
213 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_NewUsers) { 219 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_NewUsers) {
214 WaitForSigninScreen(); 220 WaitForSigninScreen();
215 RemoveUser(kSecondUserEmail); 221 RemoveUser(kSecondUserEmail);
216 } 222 }
217 223
218 // Add the second user back. Verify that device ID has been changed. 224 // Add the second user back. Verify that device ID has been changed.
219 IN_PROC_BROWSER_TEST_F(DeviceIDTest, NewUsers) { 225 IN_PROC_BROWSER_TEST_F(DeviceIDTest, NewUsers) {
220 EXPECT_TRUE(GetDeviceId(kSecondUserEmail).empty()); 226 EXPECT_TRUE(GetDeviceId(kSecondUserEmail).empty());
221 SignInOnline(kSecondUserEmail, kSecondUserPassword, kSecondUserRefreshToken2); 227 SignInOnline(kSecondUserEmail, kSecondUserPassword, kSecondUserRefreshToken2,
228 kSecondUserGaiaId);
222 CheckDeviceIDIsConsistent(kSecondUserEmail, kSecondUserRefreshToken2); 229 CheckDeviceIDIsConsistent(kSecondUserEmail, kSecondUserRefreshToken2);
223 EXPECT_NE(GetDeviceIdFromGAIA(kSecondUserRefreshToken1), 230 EXPECT_NE(GetDeviceIdFromGAIA(kSecondUserRefreshToken1),
224 GetDeviceId(kSecondUserEmail)); 231 GetDeviceId(kSecondUserEmail));
225 } 232 }
226 233
227 // Set up a user that has a device ID stored in preference only. 234 // Set up a user that has a device ID stored in preference only.
228 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_Migration) { 235 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_Migration) {
229 SignInOnline(kFakeUserEmail, kFakeUserPassword, kRefreshToken1); 236 SignInOnline(kFakeUserEmail, kFakeUserPassword, kRefreshToken1,
237 kFakeUserGaiaId);
230 238
231 // Simulate user that has device ID saved only in preferences (pre-M44). 239 // Simulate user that has device ID saved only in preferences (pre-M44).
232 PrefService* prefs = 240 PrefService* prefs =
233 ProfileHelper::Get() 241 ProfileHelper::Get()
234 ->GetProfileByUser(user_manager::UserManager::Get()->GetActiveUser()) 242 ->GetProfileByUser(user_manager::UserManager::Get()->GetActiveUser())
235 ->GetPrefs(); 243 ->GetPrefs();
236 prefs->SetString(prefs::kGoogleServicesSigninScopedDeviceId, 244 prefs->SetString(prefs::kGoogleServicesSigninScopedDeviceId,
237 GetDeviceId(kFakeUserEmail)); 245 GetDeviceId(kFakeUserEmail));
238 246
239 // Can't use SetKnownUserDeviceId here, because it forbids changing a device 247 // Can't use SetKnownUserDeviceId here, because it forbids changing a device
240 // ID. 248 // ID.
241 user_manager::UserManager::Get()->SetKnownUserStringPref( 249 user_manager::UserManager::Get()->SetKnownUserStringPref(
242 kFakeUserEmail, "device_id", std::string()); 250 kFakeUserEmail, "device_id", std::string());
243 } 251 }
244 252
245 // Tests that after the first sign in the device ID has been moved to the Local 253 // Tests that after the first sign in the device ID has been moved to the Local
246 // state. 254 // state.
247 IN_PROC_BROWSER_TEST_F(DeviceIDTest, Migration) { 255 IN_PROC_BROWSER_TEST_F(DeviceIDTest, Migration) {
248 EXPECT_TRUE(GetDeviceId(kFakeUserEmail).empty()); 256 EXPECT_TRUE(GetDeviceId(kFakeUserEmail).empty());
249 SignInOffline(kFakeUserEmail, kFakeUserPassword); 257 SignInOffline(kFakeUserEmail, kFakeUserPassword);
250 CheckDeviceIDIsConsistent(kFakeUserEmail, kRefreshToken1); 258 CheckDeviceIDIsConsistent(kFakeUserEmail, kRefreshToken1);
251 } 259 }
252 260
253 // Set up a user that doesn't have a device ID. 261 // Set up a user that doesn't have a device ID.
254 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_LegacyUsers) { 262 IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_LegacyUsers) {
255 SignInOnline(kFakeUserEmail, kFakeUserPassword, kRefreshToken1); 263 SignInOnline(kFakeUserEmail, kFakeUserPassword, kRefreshToken1,
264 kFakeUserGaiaId);
256 265
257 PrefService* prefs = 266 PrefService* prefs =
258 ProfileHelper::Get() 267 ProfileHelper::Get()
259 ->GetProfileByUser(user_manager::UserManager::Get()->GetActiveUser()) 268 ->GetProfileByUser(user_manager::UserManager::Get()->GetActiveUser())
260 ->GetPrefs(); 269 ->GetPrefs();
261 EXPECT_TRUE( 270 EXPECT_TRUE(
262 prefs->GetString(prefs::kGoogleServicesSigninScopedDeviceId).empty()); 271 prefs->GetString(prefs::kGoogleServicesSigninScopedDeviceId).empty());
263 272
264 // Can't use SetKnownUserDeviceId here, because it forbids changing a device 273 // Can't use SetKnownUserDeviceId here, because it forbids changing a device
265 // ID. 274 // ID.
266 user_manager::UserManager::Get()->SetKnownUserStringPref( 275 user_manager::UserManager::Get()->SetKnownUserStringPref(
267 kFakeUserEmail, "device_id", std::string()); 276 kFakeUserEmail, "device_id", std::string());
268 } 277 }
269 278
270 // Tests that device ID has been generated after the first sign in. 279 // Tests that device ID has been generated after the first sign in.
271 IN_PROC_BROWSER_TEST_F(DeviceIDTest, LegacyUsers) { 280 IN_PROC_BROWSER_TEST_F(DeviceIDTest, LegacyUsers) {
272 EXPECT_TRUE(GetDeviceId(kFakeUserEmail).empty()); 281 EXPECT_TRUE(GetDeviceId(kFakeUserEmail).empty());
273 SignInOffline(kFakeUserEmail, kFakeUserPassword); 282 SignInOffline(kFakeUserEmail, kFakeUserPassword);
274 // Last param |auth_code| is empty, because we don't pass a device ID to GAIA 283 // Last param |auth_code| is empty, because we don't pass a device ID to GAIA
275 // in this case. 284 // in this case.
276 CheckDeviceIDIsConsistent(kFakeUserEmail, std::string()); 285 CheckDeviceIDIsConsistent(kFakeUserEmail, std::string());
277 } 286 }
278 287
279 } // namespace chromeos 288 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/chromeos/login/test/oobe_base_test.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698