| 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/test/integration/bookmarks_helper.h" | 5 #include "chrome/browser/sync/test/integration/bookmarks_helper.h" |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
| 10 #include "base/rand_util.h" | 10 #include "base/rand_util.h" |
| 11 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
| 12 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
| 13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
| 14 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
| 15 #include "base/synchronization/waitable_event.h" | 15 #include "base/synchronization/waitable_event.h" |
| 16 #include "chrome/browser/bookmarks/bookmark_model.h" | 16 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 17 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 17 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| 18 #include "chrome/browser/bookmarks/bookmark_model_observer.h" | 18 #include "chrome/browser/bookmarks/bookmark_model_observer.h" |
| 19 #include "chrome/browser/bookmarks/bookmark_utils.h" |
| 19 #include "chrome/browser/favicon/favicon_service_factory.h" | 20 #include "chrome/browser/favicon/favicon_service_factory.h" |
| 20 #include "chrome/browser/favicon/favicon_util.h" | 21 #include "chrome/browser/favicon/favicon_util.h" |
| 21 #include "chrome/browser/history/history_db_task.h" | 22 #include "chrome/browser/history/history_db_task.h" |
| 22 #include "chrome/browser/history/history_service_factory.h" | 23 #include "chrome/browser/history/history_service_factory.h" |
| 23 #include "chrome/browser/history/history_types.h" | 24 #include "chrome/browser/history/history_types.h" |
| 24 #include "chrome/browser/profiles/profile.h" | 25 #include "chrome/browser/profiles/profile.h" |
| 25 #include "chrome/browser/sync/glue/bookmark_change_processor.h" | 26 #include "chrome/browser/sync/glue/bookmark_change_processor.h" |
| 26 #include "chrome/browser/sync/test/integration/multi_client_status_change_checke
r.h" | 27 #include "chrome/browser/sync/test/integration/multi_client_status_change_checke
r.h" |
| 27 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" | 28 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" |
| 28 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" | 29 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" |
| (...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 const std::wstring& title, | 415 const std::wstring& title, |
| 415 const GURL& url) { | 416 const GURL& url) { |
| 416 return AddURL(profile, GetBookmarkBarNode(profile), index, title, url); | 417 return AddURL(profile, GetBookmarkBarNode(profile), index, title, url); |
| 417 } | 418 } |
| 418 | 419 |
| 419 const BookmarkNode* AddURL(int profile, | 420 const BookmarkNode* AddURL(int profile, |
| 420 const BookmarkNode* parent, | 421 const BookmarkNode* parent, |
| 421 int index, | 422 int index, |
| 422 const std::wstring& title, | 423 const std::wstring& title, |
| 423 const GURL& url) { | 424 const GURL& url) { |
| 424 if (GetBookmarkModel(profile)->GetNodeByID(parent->id()) != parent) { | 425 BookmarkModel* model = GetBookmarkModel(profile); |
| 426 if (GetBookmarkNodeByID(model, parent->id()) != parent) { |
| 425 LOG(ERROR) << "Node " << parent->GetTitle() << " does not belong to " | 427 LOG(ERROR) << "Node " << parent->GetTitle() << " does not belong to " |
| 426 << "Profile " << profile; | 428 << "Profile " << profile; |
| 427 return NULL; | 429 return NULL; |
| 428 } | 430 } |
| 429 const BookmarkNode* result = GetBookmarkModel(profile)-> | 431 const BookmarkNode* result = |
| 430 AddURL(parent, index, base::WideToUTF16(title), url); | 432 model->AddURL(parent, index, base::WideToUTF16(title), url); |
| 431 if (!result) { | 433 if (!result) { |
| 432 LOG(ERROR) << "Could not add bookmark " << title << " to Profile " | 434 LOG(ERROR) << "Could not add bookmark " << title << " to Profile " |
| 433 << profile; | 435 << profile; |
| 434 return NULL; | 436 return NULL; |
| 435 } | 437 } |
| 436 if (test()->use_verifier()) { | 438 if (test()->use_verifier()) { |
| 437 const BookmarkNode* v_parent = NULL; | 439 const BookmarkNode* v_parent = NULL; |
| 438 FindNodeInVerifier(GetBookmarkModel(profile), parent, &v_parent); | 440 FindNodeInVerifier(model, parent, &v_parent); |
| 439 const BookmarkNode* v_node = GetVerifierBookmarkModel()-> | 441 const BookmarkNode* v_node = GetVerifierBookmarkModel()->AddURL( |
| 440 AddURL(v_parent, index, base::WideToUTF16(title), url); | 442 v_parent, index, base::WideToUTF16(title), url); |
| 441 if (!v_node) { | 443 if (!v_node) { |
| 442 LOG(ERROR) << "Could not add bookmark " << title << " to the verifier"; | 444 LOG(ERROR) << "Could not add bookmark " << title << " to the verifier"; |
| 443 return NULL; | 445 return NULL; |
| 444 } | 446 } |
| 445 EXPECT_TRUE(NodesMatch(v_node, result)); | 447 EXPECT_TRUE(NodesMatch(v_node, result)); |
| 446 } | 448 } |
| 447 return result; | 449 return result; |
| 448 } | 450 } |
| 449 | 451 |
| 450 const BookmarkNode* AddFolder(int profile, | 452 const BookmarkNode* AddFolder(int profile, |
| 451 const std::wstring& title) { | 453 const std::wstring& title) { |
| 452 return AddFolder(profile, GetBookmarkBarNode(profile), 0, title); | 454 return AddFolder(profile, GetBookmarkBarNode(profile), 0, title); |
| 453 } | 455 } |
| 454 | 456 |
| 455 const BookmarkNode* AddFolder(int profile, | 457 const BookmarkNode* AddFolder(int profile, |
| 456 int index, | 458 int index, |
| 457 const std::wstring& title) { | 459 const std::wstring& title) { |
| 458 return AddFolder(profile, GetBookmarkBarNode(profile), index, title); | 460 return AddFolder(profile, GetBookmarkBarNode(profile), index, title); |
| 459 } | 461 } |
| 460 | 462 |
| 461 const BookmarkNode* AddFolder(int profile, | 463 const BookmarkNode* AddFolder(int profile, |
| 462 const BookmarkNode* parent, | 464 const BookmarkNode* parent, |
| 463 int index, | 465 int index, |
| 464 const std::wstring& title) { | 466 const std::wstring& title) { |
| 465 if (GetBookmarkModel(profile)->GetNodeByID(parent->id()) != parent) { | 467 BookmarkModel* model = GetBookmarkModel(profile); |
| 468 if (GetBookmarkNodeByID(model, parent->id()) != parent) { |
| 466 LOG(ERROR) << "Node " << parent->GetTitle() << " does not belong to " | 469 LOG(ERROR) << "Node " << parent->GetTitle() << " does not belong to " |
| 467 << "Profile " << profile; | 470 << "Profile " << profile; |
| 468 return NULL; | 471 return NULL; |
| 469 } | 472 } |
| 470 const BookmarkNode* result = GetBookmarkModel(profile)->AddFolder( | 473 const BookmarkNode* result = |
| 471 parent, index, base::WideToUTF16(title)); | 474 model->AddFolder(parent, index, base::WideToUTF16(title)); |
| 472 EXPECT_TRUE(result); | 475 EXPECT_TRUE(result); |
| 473 if (!result) { | 476 if (!result) { |
| 474 LOG(ERROR) << "Could not add folder " << title << " to Profile " | 477 LOG(ERROR) << "Could not add folder " << title << " to Profile " |
| 475 << profile; | 478 << profile; |
| 476 return NULL; | 479 return NULL; |
| 477 } | 480 } |
| 478 if (test()->use_verifier()) { | 481 if (test()->use_verifier()) { |
| 479 const BookmarkNode* v_parent = NULL; | 482 const BookmarkNode* v_parent = NULL; |
| 480 FindNodeInVerifier(GetBookmarkModel(profile), parent, &v_parent); | 483 FindNodeInVerifier(model, parent, &v_parent); |
| 481 const BookmarkNode* v_node = GetVerifierBookmarkModel()->AddFolder( | 484 const BookmarkNode* v_node = GetVerifierBookmarkModel()->AddFolder( |
| 482 v_parent, index, base::WideToUTF16(title)); | 485 v_parent, index, base::WideToUTF16(title)); |
| 483 if (!v_node) { | 486 if (!v_node) { |
| 484 LOG(ERROR) << "Could not add folder " << title << " to the verifier"; | 487 LOG(ERROR) << "Could not add folder " << title << " to the verifier"; |
| 485 return NULL; | 488 return NULL; |
| 486 } | 489 } |
| 487 EXPECT_TRUE(NodesMatch(v_node, result)); | 490 EXPECT_TRUE(NodesMatch(v_node, result)); |
| 488 } | 491 } |
| 489 return result; | 492 return result; |
| 490 } | 493 } |
| 491 | 494 |
| 492 void SetTitle(int profile, | 495 void SetTitle(int profile, |
| 493 const BookmarkNode* node, | 496 const BookmarkNode* node, |
| 494 const std::wstring& new_title) { | 497 const std::wstring& new_title) { |
| 495 ASSERT_EQ(GetBookmarkModel(profile)->GetNodeByID(node->id()), node) | 498 BookmarkModel* model = GetBookmarkModel(profile); |
| 499 ASSERT_EQ(GetBookmarkNodeByID(model, node->id()), node) |
| 496 << "Node " << node->GetTitle() << " does not belong to " | 500 << "Node " << node->GetTitle() << " does not belong to " |
| 497 << "Profile " << profile; | 501 << "Profile " << profile; |
| 498 if (test()->use_verifier()) { | 502 if (test()->use_verifier()) { |
| 499 const BookmarkNode* v_node = NULL; | 503 const BookmarkNode* v_node = NULL; |
| 500 FindNodeInVerifier(GetBookmarkModel(profile), node, &v_node); | 504 FindNodeInVerifier(model, node, &v_node); |
| 501 GetVerifierBookmarkModel()->SetTitle(v_node, base::WideToUTF16(new_title)); | 505 GetVerifierBookmarkModel()->SetTitle(v_node, base::WideToUTF16(new_title)); |
| 502 } | 506 } |
| 503 GetBookmarkModel(profile)->SetTitle(node, base::WideToUTF16(new_title)); | 507 model->SetTitle(node, base::WideToUTF16(new_title)); |
| 504 } | 508 } |
| 505 | 509 |
| 506 void SetFavicon(int profile, | 510 void SetFavicon(int profile, |
| 507 const BookmarkNode* node, | 511 const BookmarkNode* node, |
| 508 const GURL& icon_url, | 512 const GURL& icon_url, |
| 509 const gfx::Image& image, | 513 const gfx::Image& image, |
| 510 FaviconSource favicon_source) { | 514 FaviconSource favicon_source) { |
| 511 ASSERT_EQ(GetBookmarkModel(profile)->GetNodeByID(node->id()), node) | 515 BookmarkModel* model = GetBookmarkModel(profile); |
| 516 ASSERT_EQ(GetBookmarkNodeByID(model, node->id()), node) |
| 512 << "Node " << node->GetTitle() << " does not belong to " | 517 << "Node " << node->GetTitle() << " does not belong to " |
| 513 << "Profile " << profile; | 518 << "Profile " << profile; |
| 514 ASSERT_EQ(BookmarkNode::URL, node->type()) | 519 ASSERT_EQ(BookmarkNode::URL, node->type()) << "Node " << node->GetTitle() |
| 515 << "Node " << node->GetTitle() << " must be a url."; | 520 << " must be a url."; |
| 516 if (urls_with_favicons_ == NULL) | 521 if (urls_with_favicons_ == NULL) |
| 517 urls_with_favicons_ = new std::set<GURL>(); | 522 urls_with_favicons_ = new std::set<GURL>(); |
| 518 urls_with_favicons_->insert(node->url()); | 523 urls_with_favicons_->insert(node->url()); |
| 519 if (test()->use_verifier()) { | 524 if (test()->use_verifier()) { |
| 520 const BookmarkNode* v_node = NULL; | 525 const BookmarkNode* v_node = NULL; |
| 521 FindNodeInVerifier(GetBookmarkModel(profile), node, &v_node); | 526 FindNodeInVerifier(model, node, &v_node); |
| 522 SetFaviconImpl(test()->verifier(), v_node, icon_url, image, favicon_source); | 527 SetFaviconImpl(test()->verifier(), v_node, icon_url, image, favicon_source); |
| 523 } | 528 } |
| 524 SetFaviconImpl(test()->GetProfile(profile), node, icon_url, image, | 529 SetFaviconImpl(test()->GetProfile(profile), node, icon_url, image, |
| 525 favicon_source); | 530 favicon_source); |
| 526 } | 531 } |
| 527 | 532 |
| 528 const BookmarkNode* SetURL(int profile, | 533 const BookmarkNode* SetURL(int profile, |
| 529 const BookmarkNode* node, | 534 const BookmarkNode* node, |
| 530 const GURL& new_url) { | 535 const GURL& new_url) { |
| 531 if (GetBookmarkModel(profile)->GetNodeByID(node->id()) != node) { | 536 BookmarkModel* model = GetBookmarkModel(profile); |
| 537 if (GetBookmarkNodeByID(model, node->id()) != node) { |
| 532 LOG(ERROR) << "Node " << node->GetTitle() << " does not belong to " | 538 LOG(ERROR) << "Node " << node->GetTitle() << " does not belong to " |
| 533 << "Profile " << profile; | 539 << "Profile " << profile; |
| 534 return NULL; | 540 return NULL; |
| 535 } | 541 } |
| 536 if (test()->use_verifier()) { | 542 if (test()->use_verifier()) { |
| 537 const BookmarkNode* v_node = NULL; | 543 const BookmarkNode* v_node = NULL; |
| 538 FindNodeInVerifier(GetBookmarkModel(profile), node, &v_node); | 544 FindNodeInVerifier(model, node, &v_node); |
| 539 if (v_node->is_url()) | 545 if (v_node->is_url()) |
| 540 GetVerifierBookmarkModel()->SetURL(v_node, new_url); | 546 GetVerifierBookmarkModel()->SetURL(v_node, new_url); |
| 541 } | 547 } |
| 542 if (node->is_url()) | 548 if (node->is_url()) |
| 543 GetBookmarkModel(profile)->SetURL(node, new_url); | 549 model->SetURL(node, new_url); |
| 544 return node; | 550 return node; |
| 545 } | 551 } |
| 546 | 552 |
| 547 void Move(int profile, | 553 void Move(int profile, |
| 548 const BookmarkNode* node, | 554 const BookmarkNode* node, |
| 549 const BookmarkNode* new_parent, | 555 const BookmarkNode* new_parent, |
| 550 int index) { | 556 int index) { |
| 551 ASSERT_EQ(GetBookmarkModel(profile)->GetNodeByID(node->id()), node) | 557 BookmarkModel* model = GetBookmarkModel(profile); |
| 558 ASSERT_EQ(GetBookmarkNodeByID(model, node->id()), node) |
| 552 << "Node " << node->GetTitle() << " does not belong to " | 559 << "Node " << node->GetTitle() << " does not belong to " |
| 553 << "Profile " << profile; | 560 << "Profile " << profile; |
| 554 if (test()->use_verifier()) { | 561 if (test()->use_verifier()) { |
| 555 const BookmarkNode* v_new_parent = NULL; | 562 const BookmarkNode* v_new_parent = NULL; |
| 556 const BookmarkNode* v_node = NULL; | 563 const BookmarkNode* v_node = NULL; |
| 557 FindNodeInVerifier(GetBookmarkModel(profile), new_parent, &v_new_parent); | 564 FindNodeInVerifier(model, new_parent, &v_new_parent); |
| 558 FindNodeInVerifier(GetBookmarkModel(profile), node, &v_node); | 565 FindNodeInVerifier(model, node, &v_node); |
| 559 GetVerifierBookmarkModel()->Move(v_node, v_new_parent, index); | 566 GetVerifierBookmarkModel()->Move(v_node, v_new_parent, index); |
| 560 } | 567 } |
| 561 GetBookmarkModel(profile)->Move(node, new_parent, index); | 568 model->Move(node, new_parent, index); |
| 562 } | 569 } |
| 563 | 570 |
| 564 void Remove(int profile, | 571 void Remove(int profile, const BookmarkNode* parent, int index) { |
| 565 const BookmarkNode* parent, | 572 BookmarkModel* model = GetBookmarkModel(profile); |
| 566 int index) { | 573 ASSERT_EQ(GetBookmarkNodeByID(model, parent->id()), parent) |
| 567 ASSERT_EQ(GetBookmarkModel(profile)->GetNodeByID(parent->id()), parent) | |
| 568 << "Node " << parent->GetTitle() << " does not belong to " | 574 << "Node " << parent->GetTitle() << " does not belong to " |
| 569 << "Profile " << profile; | 575 << "Profile " << profile; |
| 570 if (test()->use_verifier()) { | 576 if (test()->use_verifier()) { |
| 571 const BookmarkNode* v_parent = NULL; | 577 const BookmarkNode* v_parent = NULL; |
| 572 FindNodeInVerifier(GetBookmarkModel(profile), parent, &v_parent); | 578 FindNodeInVerifier(model, parent, &v_parent); |
| 573 ASSERT_TRUE(NodesMatch(parent->GetChild(index), v_parent->GetChild(index))); | 579 ASSERT_TRUE(NodesMatch(parent->GetChild(index), v_parent->GetChild(index))); |
| 574 GetVerifierBookmarkModel()->Remove(v_parent, index); | 580 GetVerifierBookmarkModel()->Remove(v_parent, index); |
| 575 } | 581 } |
| 576 GetBookmarkModel(profile)->Remove(parent, index); | 582 model->Remove(parent, index); |
| 577 } | 583 } |
| 578 | 584 |
| 579 void RemoveAll(int profile) { | 585 void RemoveAll(int profile) { |
| 580 if (test()->use_verifier()) { | 586 if (test()->use_verifier()) { |
| 581 const BookmarkNode* root_node = GetVerifierBookmarkModel()->root_node(); | 587 const BookmarkNode* root_node = GetVerifierBookmarkModel()->root_node(); |
| 582 for (int i = 0; i < root_node->child_count(); ++i) { | 588 for (int i = 0; i < root_node->child_count(); ++i) { |
| 583 const BookmarkNode* permanent_node = root_node->GetChild(i); | 589 const BookmarkNode* permanent_node = root_node->GetChild(i); |
| 584 for (int j = permanent_node->child_count() - 1; j >= 0; --j) { | 590 for (int j = permanent_node->child_count() - 1; j >= 0; --j) { |
| 585 GetVerifierBookmarkModel()->Remove(permanent_node, j); | 591 GetVerifierBookmarkModel()->Remove(permanent_node, j); |
| 586 } | 592 } |
| 587 } | 593 } |
| 588 } | 594 } |
| 589 GetBookmarkModel(profile)->RemoveAll(); | 595 GetBookmarkModel(profile)->RemoveAll(); |
| 590 } | 596 } |
| 591 | 597 |
| 592 void SortChildren(int profile, const BookmarkNode* parent) { | 598 void SortChildren(int profile, const BookmarkNode* parent) { |
| 593 ASSERT_EQ(GetBookmarkModel(profile)->GetNodeByID(parent->id()), parent) | 599 BookmarkModel* model = GetBookmarkModel(profile); |
| 600 ASSERT_EQ(GetBookmarkNodeByID(model, parent->id()), parent) |
| 594 << "Node " << parent->GetTitle() << " does not belong to " | 601 << "Node " << parent->GetTitle() << " does not belong to " |
| 595 << "Profile " << profile; | 602 << "Profile " << profile; |
| 596 if (test()->use_verifier()) { | 603 if (test()->use_verifier()) { |
| 597 const BookmarkNode* v_parent = NULL; | 604 const BookmarkNode* v_parent = NULL; |
| 598 FindNodeInVerifier(GetBookmarkModel(profile), parent, &v_parent); | 605 FindNodeInVerifier(model, parent, &v_parent); |
| 599 GetVerifierBookmarkModel()->SortChildren(v_parent); | 606 GetVerifierBookmarkModel()->SortChildren(v_parent); |
| 600 } | 607 } |
| 601 GetBookmarkModel(profile)->SortChildren(parent); | 608 model->SortChildren(parent); |
| 602 } | 609 } |
| 603 | 610 |
| 604 void ReverseChildOrder(int profile, const BookmarkNode* parent) { | 611 void ReverseChildOrder(int profile, const BookmarkNode* parent) { |
| 605 ASSERT_EQ(GetBookmarkModel(profile)->GetNodeByID(parent->id()), parent) | 612 ASSERT_EQ(GetBookmarkNodeByID(GetBookmarkModel(profile), parent->id()), |
| 613 parent) |
| 606 << "Node " << parent->GetTitle() << " does not belong to " | 614 << "Node " << parent->GetTitle() << " does not belong to " |
| 607 << "Profile " << profile; | 615 << "Profile " << profile; |
| 608 int child_count = parent->child_count(); | 616 int child_count = parent->child_count(); |
| 609 if (child_count <= 0) | 617 if (child_count <= 0) |
| 610 return; | 618 return; |
| 611 for (int index = 0; index < child_count; ++index) { | 619 for (int index = 0; index < child_count; ++index) { |
| 612 Move(profile, parent->GetChild(index), parent, child_count - index); | 620 Move(profile, parent->GetChild(index), parent, child_count - index); |
| 613 } | 621 } |
| 614 } | 622 } |
| 615 | 623 |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 793 | 801 |
| 794 std::wstring IndexedSubfolderName(int i) { | 802 std::wstring IndexedSubfolderName(int i) { |
| 795 return base::StringPrintf(L"Subfolder Name %d", i); | 803 return base::StringPrintf(L"Subfolder Name %d", i); |
| 796 } | 804 } |
| 797 | 805 |
| 798 std::wstring IndexedSubsubfolderName(int i) { | 806 std::wstring IndexedSubsubfolderName(int i) { |
| 799 return base::StringPrintf(L"Subsubfolder Name %d", i); | 807 return base::StringPrintf(L"Subsubfolder Name %d", i); |
| 800 } | 808 } |
| 801 | 809 |
| 802 } // namespace bookmarks_helper | 810 } // namespace bookmarks_helper |
| OLD | NEW |