Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/file_util.h" | 6 #include "base/file_util.h" |
| 7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
| 8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/test/test_timeouts.h" | |
| 11 #include "chrome/browser/browsing_data/browsing_data_remover.h" | |
| 10 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
| 11 #include "chrome/browser/sync/profile_sync_service.h" | 13 #include "chrome/browser/sync/profile_sync_service.h" |
| 12 #include "chrome/browser/sync/test/integration/bookmarks_helper.h" | 14 #include "chrome/browser/sync/test/integration/bookmarks_helper.h" |
| 13 #include "chrome/browser/sync/test/integration/preferences_helper.h" | 15 #include "chrome/browser/sync/test/integration/preferences_helper.h" |
| 14 #include "chrome/browser/sync/test/integration/sync_integration_test_util.h" | 16 #include "chrome/browser/sync/test/integration/sync_integration_test_util.h" |
| 15 #include "chrome/browser/sync/test/integration/sync_test.h" | 17 #include "chrome/browser/sync/test/integration/sync_test.h" |
| 16 #include "chrome/common/chrome_switches.h" | 18 #include "chrome/common/chrome_switches.h" |
| 17 #include "chrome/common/pref_names.h" | 19 #include "chrome/common/pref_names.h" |
| 18 #include "components/bookmarks/browser/bookmark_model.h" | 20 #include "components/bookmarks/browser/bookmark_model.h" |
| 19 #include "sync/internal_api/public/util/sync_db_util.h" | 21 #include "sync/internal_api/public/util/sync_db_util.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 65 } | 67 } |
| 66 | 68 |
| 67 private: | 69 private: |
| 68 void CheckDbCallback(base::Time* time_out, base::Time time_in) { | 70 void CheckDbCallback(base::Time* time_out, base::Time time_in) { |
| 69 *time_out = syncer::ProtoTimeToTime(syncer::TimeToProtoTime(time_in)); | 71 *time_out = syncer::ProtoTimeToTime(syncer::TimeToProtoTime(time_in)); |
| 70 } | 72 } |
| 71 | 73 |
| 72 DISALLOW_COPY_AND_ASSIGN(SingleClientBackupRollbackTest); | 74 DISALLOW_COPY_AND_ASSIGN(SingleClientBackupRollbackTest); |
| 73 }; | 75 }; |
| 74 | 76 |
| 75 class SyncBackendStoppedChecker { | 77 // Waits until the ProfileSyncService's backend is in IDLE mode. |
| 78 class SyncBackendStoppedChecker : public ProfileSyncServiceBase::Observer { | |
| 76 public: | 79 public: |
| 77 explicit SyncBackendStoppedChecker(ProfileSyncService* service, | 80 explicit SyncBackendStoppedChecker(ProfileSyncService* service) |
| 78 base::TimeDelta timeout) | |
| 79 : pss_(service), | 81 : pss_(service), |
| 80 timeout_(timeout) {} | 82 timeout_(TestTimeouts::action_max_timeout()), |
| 83 done_(false) {} | |
| 84 | |
| 85 virtual void OnStateChanged() OVERRIDE { | |
| 86 if (ProfileSyncService::IDLE == pss_->backend_mode()) { | |
| 87 done_ = true; | |
| 88 run_loop_.Quit(); | |
| 89 } | |
| 90 } | |
| 81 | 91 |
| 82 bool Wait() { | 92 bool Wait() { |
| 83 expiration_ = base::TimeTicks::Now() + timeout_; | 93 pss_->AddObserver(this); |
| 94 if (ProfileSyncService::IDLE == pss_->backend_mode()) | |
| 95 return true; | |
| 84 base::MessageLoop::current()->PostDelayedTask( | 96 base::MessageLoop::current()->PostDelayedTask( |
| 85 FROM_HERE, | 97 FROM_HERE, |
| 86 base::Bind(&SyncBackendStoppedChecker::PeriodicCheck, | 98 run_loop_.QuitClosure(), |
| 87 base::Unretained(this)), | 99 timeout_); |
| 88 base::TimeDelta::FromSeconds(1)); | 100 run_loop_.Run(); |
| 89 base::MessageLoop::current()->Run(); | 101 pss_->RemoveObserver(this); |
| 90 return ProfileSyncService::IDLE == pss_->backend_mode(); | 102 return done_; |
| 91 } | 103 } |
| 92 | 104 |
| 93 private: | 105 private: |
| 94 void PeriodicCheck() { | 106 |
| 95 if (ProfileSyncService::IDLE == pss_->backend_mode() || | 107 ProfileSyncService* const pss_; |
| 96 base::TimeTicks::Now() > expiration_) { | 108 const base::TimeDelta timeout_; |
| 97 base::MessageLoop::current()->Quit(); | 109 base::RunLoop run_loop_; |
| 98 } else { | 110 bool done_; |
| 99 base::MessageLoop::current()->PostDelayedTask( | 111 }; |
| 100 FROM_HERE, | 112 |
| 101 base::Bind(&SyncBackendStoppedChecker::PeriodicCheck, | 113 // Waits until a rollback finishes. |
| 102 base::Unretained(this)), | 114 class SyncRollbackChecker : public ProfileSyncServiceBase::Observer, |
| 103 base::TimeDelta::FromSeconds(1)); | 115 public BrowsingDataRemover::Observer { |
| 116 public: | |
| 117 explicit SyncRollbackChecker(ProfileSyncService* service) | |
| 118 : pss_(service), | |
| 119 timeout_(TestTimeouts::action_max_timeout()), | |
| 120 rollback_started_(false), | |
| 121 clear_done_(false) {} | |
| 122 | |
| 123 // ProfileSyncServiceBase::Observer implementation. | |
| 124 virtual void OnStateChanged() OVERRIDE { | |
| 125 if (ProfileSyncService::ROLLBACK == pss_->backend_mode()) { | |
| 126 rollback_started_ = true; | |
| 127 if (clear_done_) | |
| 128 run_loop_.Quit(); | |
| 104 } | 129 } |
| 105 } | 130 } |
| 106 | 131 |
| 107 ProfileSyncService* pss_; | 132 // BrowsingDataRemoverObserver::Observer implementation. |
| 108 base::TimeDelta timeout_; | 133 virtual void OnBrowsingDataRemoverDone() OVERRIDE { |
| 109 base::TimeTicks expiration_; | 134 clear_done_ = true; |
| 135 if (rollback_started_) { | |
| 136 run_loop_.Quit(); | |
| 137 } | |
| 138 } | |
| 139 | |
| 140 bool Wait() { | |
| 141 pss_->AddObserver(this); | |
| 142 pss_->SetBrowsingDataRemoverObserverForTesting(this); | |
| 143 base::MessageLoop::current()->PostDelayedTask( | |
| 144 FROM_HERE, | |
| 145 run_loop_.QuitClosure(), | |
| 146 timeout_); | |
| 147 run_loop_.Run(); | |
| 148 pss_->RemoveObserver(this); | |
| 149 return rollback_started_ && clear_done_; | |
| 150 } | |
| 151 | |
| 152 ProfileSyncService* const pss_; | |
| 153 const base::TimeDelta timeout_; | |
| 154 base::RunLoop run_loop_; | |
| 155 bool rollback_started_; | |
| 156 bool clear_done_; | |
| 110 }; | 157 }; |
| 111 | 158 |
| 112 #if defined(ENABLE_PRE_SYNC_BACKUP) | 159 #if defined(ENABLE_PRE_SYNC_BACKUP) |
| 113 #define MAYBE_TestBackup TestBackup | 160 #define MAYBE_TestBackup TestBackup |
| 114 #else | 161 #else |
| 115 #define MAYBE_TestBackup DISABLED_TestBackup | 162 #define MAYBE_TestBackup DISABLED_TestBackup |
| 116 #endif | 163 #endif |
| 117 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, | 164 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, |
| 118 MAYBE_TestBackup) { | 165 MAYBE_TestBackup) { |
| 119 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; | 166 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 185 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); | 232 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); |
| 186 ASSERT_TRUE(ModelMatchesVerifier(0)); | 233 ASSERT_TRUE(ModelMatchesVerifier(0)); |
| 187 | 234 |
| 188 // Let server to return rollback command on next sync request. | 235 // Let server to return rollback command on next sync request. |
| 189 GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); | 236 GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); |
| 190 | 237 |
| 191 // Make another change to trigger downloading of rollback command. | 238 // Make another change to trigger downloading of rollback command. |
| 192 Remove(0, tier1_b, 0); | 239 Remove(0, tier1_b, 0); |
| 193 | 240 |
| 194 // Wait for rollback to finish and sync backend is completely shut down. | 241 // Wait for rollback to finish and sync backend is completely shut down. |
| 195 SyncBackendStoppedChecker checker(GetSyncService(0), | 242 SyncRollbackChecker rollback_checker(GetSyncService(0)); |
| 196 base::TimeDelta::FromSeconds(5)); | 243 ASSERT_TRUE(rollback_checker.Wait()); |
| 197 ASSERT_TRUE(checker.Wait()); | 244 SyncBackendStoppedChecker shutdown_checker(GetSyncService(0)); |
| 245 ASSERT_TRUE(shutdown_checker.Wait()); | |
| 198 | 246 |
| 199 // Verify bookmarks are restored. | 247 // Verify bookmarks are restored. |
| 200 ASSERT_EQ(1, tier1_a->child_count()); | 248 ASSERT_EQ(1, tier1_a->child_count()); |
| 201 const BookmarkNode* url1 = tier1_a->GetChild(0); | 249 const BookmarkNode* url1 = tier1_a->GetChild(0); |
| 202 ASSERT_EQ(GURL("http://mail.google.com"), url1->url()); | 250 ASSERT_EQ(GURL("http://mail.google.com"), url1->url()); |
| 203 | 251 |
| 204 ASSERT_EQ(1, tier1_b->child_count()); | 252 ASSERT_EQ(1, tier1_b->child_count()); |
| 205 const BookmarkNode* url2 = tier1_b->GetChild(0); | 253 const BookmarkNode* url2 = tier1_b->GetChild(0); |
| 206 ASSERT_EQ(GURL("http://www.nhl.com"), url2->url()); | 254 ASSERT_EQ(GURL("http://www.nhl.com"), url2->url()); |
| 207 | |
| 208 // Backup DB should be deleted after rollback is done. | |
| 209 ASSERT_FALSE(base::PathExists( | |
| 210 GetProfile(0)->GetPath().Append(FILE_PATH_LITERAL("Sync Data Backup")))); | |
| 211 } | 255 } |
| 212 | 256 |
| 213 #if defined(ENABLE_PRE_SYNC_BACKUP) | 257 #if defined(ENABLE_PRE_SYNC_BACKUP) |
| 214 #define MAYBE_TestRollbackDisabled TestRollbackDisabled | 258 #define MAYBE_TestRollbackDisabled TestRollbackDisabled |
| 215 #else | 259 #else |
| 216 #define MAYBE_TestRollbackDisabled DISABLED_TestRollbackDisabled | 260 #define MAYBE_TestRollbackDisabled DISABLED_TestRollbackDisabled |
| 217 #endif | 261 #endif |
| 218 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, | 262 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, |
| 219 MAYBE_TestRollbackDisabled) { | 263 MAYBE_TestRollbackDisabled) { |
| 220 DisableRollback(); | 264 DisableRollback(); |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 241 GURL("http://www.yahoo.com"))); | 285 GURL("http://www.yahoo.com"))); |
| 242 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); | 286 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); |
| 243 ASSERT_TRUE(ModelMatchesVerifier(0)); | 287 ASSERT_TRUE(ModelMatchesVerifier(0)); |
| 244 | 288 |
| 245 // Let server to return rollback command on next sync request. | 289 // Let server to return rollback command on next sync request. |
| 246 GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); | 290 GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); |
| 247 | 291 |
| 248 // Make another change to trigger downloading of rollback command. | 292 // Make another change to trigger downloading of rollback command. |
| 249 Remove(0, GetOtherNode(0), 0); | 293 Remove(0, GetOtherNode(0), 0); |
| 250 | 294 |
| 251 // Wait for rollback to finish and sync backend is completely shut down. | 295 // Wait for sync backend is completely shut down. |
| 252 SyncBackendStoppedChecker checker(GetSyncService(0), | 296 SyncBackendStoppedChecker shutdown_checker(GetSyncService(0)); |
| 253 base::TimeDelta::FromSeconds(5)); | 297 ASSERT_TRUE(shutdown_checker.Wait()); |
| 254 ASSERT_TRUE(checker.Wait()); | |
| 255 | 298 |
| 256 // With rollback disabled, bookmarks in backup DB should not be restored. | 299 // With rollback disabled, bookmarks in backup DB should not be restored. |
| 257 // Only bookmark added during sync is present. | 300 // Only bookmark added during sync is present. |
| 258 ASSERT_EQ(1, GetOtherNode(0)->child_count()); | 301 ASSERT_EQ(1, GetOtherNode(0)->child_count()); |
| 259 ASSERT_EQ(GURL("http://www.yahoo.com"), | 302 ASSERT_EQ(GURL("http://www.yahoo.com"), |
| 260 GetOtherNode(0)->GetChild(0)->url()); | 303 GetOtherNode(0)->GetChild(0)->url()); |
| 261 | |
| 262 // Backup DB should be deleted after. | |
| 263 ASSERT_FALSE(base::PathExists( | |
| 264 GetProfile(0)->GetPath().Append(FILE_PATH_LITERAL("Sync Data Backup")))); | |
| 265 } | 304 } |
| 266 | 305 |
| 267 #if defined(ENABLE_PRE_SYNC_BACKUP) | 306 #if defined(ENABLE_PRE_SYNC_BACKUP) |
| 268 #define MAYBE_TestSyncDisabled TestSyncDisabled | 307 #define MAYBE_TestSyncDisabled TestSyncDisabled |
| 269 #else | 308 #else |
| 270 #define MAYBE_TestSyncDisabled DISABLED_TestSyncDisabled | 309 #define MAYBE_TestSyncDisabled DISABLED_TestSyncDisabled |
| 271 #endif | 310 #endif |
| 272 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, | 311 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, |
| 273 MAYBE_TestSyncDisabled) { | 312 MAYBE_TestSyncDisabled) { |
| 274 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; | 313 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 293 GURL("http://www.yahoo.com"))); | 332 GURL("http://www.yahoo.com"))); |
| 294 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); | 333 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); |
| 295 ASSERT_TRUE(ModelMatchesVerifier(0)); | 334 ASSERT_TRUE(ModelMatchesVerifier(0)); |
| 296 | 335 |
| 297 // Let server to return birthday error on next sync request. | 336 // Let server to return birthday error on next sync request. |
| 298 GetFakeServer()->TriggerError(sync_pb::SyncEnums::NOT_MY_BIRTHDAY); | 337 GetFakeServer()->TriggerError(sync_pb::SyncEnums::NOT_MY_BIRTHDAY); |
| 299 | 338 |
| 300 // Make another change to trigger downloading of rollback command. | 339 // Make another change to trigger downloading of rollback command. |
| 301 Remove(0, GetOtherNode(0), 0); | 340 Remove(0, GetOtherNode(0), 0); |
| 302 | 341 |
| 303 // Wait for rollback to finish and sync backend is completely shut down. | 342 // Wait sync backend is completely shut down. |
| 304 SyncBackendStoppedChecker checker(GetSyncService(0), | 343 SyncBackendStoppedChecker shutdown_checker(GetSyncService(0)); |
| 305 base::TimeDelta::FromSeconds(5)); | 344 ASSERT_TRUE(shutdown_checker.Wait()); |
| 306 ASSERT_TRUE(checker.Wait()); | |
| 307 | 345 |
| 308 // Shouldn't restore bookmarks with sign-out only. | 346 // Shouldn't restore bookmarks with sign-out only. |
| 309 ASSERT_EQ(1, GetOtherNode(0)->child_count()); | 347 ASSERT_EQ(1, GetOtherNode(0)->child_count()); |
| 310 ASSERT_EQ(GURL("http://www.yahoo.com"), | 348 ASSERT_EQ(GURL("http://www.yahoo.com"), |
| 311 GetOtherNode(0)->GetChild(0)->url()); | 349 GetOtherNode(0)->GetChild(0)->url()); |
| 312 | |
| 313 // Backup DB should be deleted after. | |
| 314 ASSERT_FALSE(base::PathExists( | |
| 315 GetProfile(0)->GetPath().Append(FILE_PATH_LITERAL("Sync Data Backup")))); | |
| 316 } | 350 } |
| 317 | 351 |
| 318 #if defined(ENABLE_PRE_SYNC_BACKUP) | 352 #if defined(ENABLE_PRE_SYNC_BACKUP) |
| 319 #define MAYBE_RollbackNoBackup RollbackNoBackup | 353 #define MAYBE_RollbackNoBackup RollbackNoBackup |
| 320 #else | 354 #else |
| 321 #define MAYBE_RollbackNoBackup DISABLED_RollbackNoBackup | 355 #define MAYBE_RollbackNoBackup DISABLED_RollbackNoBackup |
| 322 #endif | 356 #endif |
| 323 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, | 357 IN_PROC_BROWSER_TEST_F(SingleClientBackupRollbackTest, |
| 324 MAYBE_RollbackNoBackup) { | 358 MAYBE_RollbackNoBackup) { |
| 325 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; | 359 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 343 base::DeleteFile( | 377 base::DeleteFile( |
| 344 GetProfile(0)->GetPath().Append(FILE_PATH_LITERAL("Sync Data Backup")), | 378 GetProfile(0)->GetPath().Append(FILE_PATH_LITERAL("Sync Data Backup")), |
| 345 true); | 379 true); |
| 346 | 380 |
| 347 // Let server to return rollback command on next sync request. | 381 // Let server to return rollback command on next sync request. |
| 348 GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); | 382 GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); |
| 349 | 383 |
| 350 // Make another change to trigger downloading of rollback command. | 384 // Make another change to trigger downloading of rollback command. |
| 351 Remove(0, GetOtherNode(0), 0); | 385 Remove(0, GetOtherNode(0), 0); |
| 352 | 386 |
| 353 // Wait for backend to completely shut down. | 387 // Wait for rollback to finish and sync backend is completely shut down. |
| 354 SyncBackendStoppedChecker checker(GetSyncService(0), | 388 SyncRollbackChecker rollback_checker(GetSyncService(0)); |
| 355 base::TimeDelta::FromSeconds(15)); | 389 ASSERT_TRUE(rollback_checker.Wait()); |
| 390 SyncBackendStoppedChecker checker(GetSyncService(0)); | |
| 356 ASSERT_TRUE(checker.Wait()); | 391 ASSERT_TRUE(checker.Wait()); |
| 357 | 392 |
| 358 // Without backup DB, bookmarks remain at the state when sync stops. | 393 // Without backup DB, bookmarks remain at the state when sync stops. |
| 359 ASSERT_EQ(1, GetOtherNode(0)->child_count()); | 394 ASSERT_EQ(1, GetOtherNode(0)->child_count()); |
| 360 ASSERT_EQ(GURL("http://www.nhl.com"), | 395 ASSERT_EQ(GURL("http://www.nhl.com"), |
| 361 GetOtherNode(0)->GetChild(0)->url()); | 396 GetOtherNode(0)->GetChild(0)->url()); |
| 362 } | 397 } |
| 363 | 398 |
| 364 #if defined(ENABLE_PRE_SYNC_BACKUP) | 399 #if defined(ENABLE_PRE_SYNC_BACKUP) |
| 365 #define MAYBE_DontChangeBookmarkOrdering DontChangeBookmarkOrdering | 400 #define MAYBE_DontChangeBookmarkOrdering DontChangeBookmarkOrdering |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 386 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); | 421 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); |
| 387 ASSERT_TRUE(ModelMatchesVerifier(0)); | 422 ASSERT_TRUE(ModelMatchesVerifier(0)); |
| 388 | 423 |
| 389 // Let server to return rollback command on next sync request. | 424 // Let server to return rollback command on next sync request. |
| 390 GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); | 425 GetFakeServer()->TriggerError(sync_pb::SyncEnums::USER_ROLLBACK); |
| 391 | 426 |
| 392 // Make another change to trigger downloading of rollback command. | 427 // Make another change to trigger downloading of rollback command. |
| 393 Remove(0, sub_folder, 0); | 428 Remove(0, sub_folder, 0); |
| 394 | 429 |
| 395 // Wait for rollback to finish and sync backend is completely shut down. | 430 // Wait for rollback to finish and sync backend is completely shut down. |
| 396 SyncBackendStoppedChecker checker(GetSyncService(0), | 431 SyncRollbackChecker rollback_checker(GetSyncService(0)); |
|
haitaol1
2014/08/21 20:50:32
You always check rollback and backend shutdown bac
Nicolas Zea
2014/08/21 20:52:32
Some of these tests don't require rollback (i.e. t
| |
| 397 base::TimeDelta::FromSeconds(5)); | 432 ASSERT_TRUE(rollback_checker.Wait()); |
| 398 ASSERT_TRUE(checker.Wait()); | 433 SyncBackendStoppedChecker shutdown_checker(GetSyncService(0)); |
| 434 ASSERT_TRUE(shutdown_checker.Wait()); | |
| 399 | 435 |
| 400 // Verify bookmarks are unchanged. | 436 // Verify bookmarks are unchanged. |
| 401 ASSERT_EQ(3, sub_folder->child_count()); | 437 ASSERT_EQ(3, sub_folder->child_count()); |
| 402 ASSERT_EQ(GURL(kUrl1), sub_folder->GetChild(0)->url()); | 438 ASSERT_EQ(GURL(kUrl1), sub_folder->GetChild(0)->url()); |
| 403 ASSERT_EQ(GURL(kUrl2), sub_folder->GetChild(1)->url()); | 439 ASSERT_EQ(GURL(kUrl2), sub_folder->GetChild(1)->url()); |
| 404 ASSERT_EQ(GURL(kUrl3), sub_folder->GetChild(2)->url()); | 440 ASSERT_EQ(GURL(kUrl3), sub_folder->GetChild(2)->url()); |
| 405 } | 441 } |
| OLD | NEW |