OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |