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

Side by Side Diff: chrome/browser/sync/test/integration/bookmarks_helper.cc

Issue 2379433002: [Sync] Refactoring of sync integration test checkers to remove boilerplate await methods. (Closed)
Patch Set: Fixing another ChromeOS test. Created 4 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
OLDNEW
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <set> 10 #include <set>
(...skipping 12 matching lines...) Expand all
23 #include "base/strings/stringprintf.h" 23 #include "base/strings/stringprintf.h"
24 #include "base/strings/utf_string_conversions.h" 24 #include "base/strings/utf_string_conversions.h"
25 #include "base/synchronization/waitable_event.h" 25 #include "base/synchronization/waitable_event.h"
26 #include "base/task/cancelable_task_tracker.h" 26 #include "base/task/cancelable_task_tracker.h"
27 #include "chrome/browser/bookmarks/bookmark_model_factory.h" 27 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
28 #include "chrome/browser/bookmarks/managed_bookmark_service_factory.h" 28 #include "chrome/browser/bookmarks/managed_bookmark_service_factory.h"
29 #include "chrome/browser/favicon/favicon_service_factory.h" 29 #include "chrome/browser/favicon/favicon_service_factory.h"
30 #include "chrome/browser/history/history_service_factory.h" 30 #include "chrome/browser/history/history_service_factory.h"
31 #include "chrome/browser/profiles/profile.h" 31 #include "chrome/browser/profiles/profile.h"
32 #include "chrome/browser/sync/profile_sync_service_factory.h" 32 #include "chrome/browser/sync/profile_sync_service_factory.h"
33 #include "chrome/browser/sync/test/integration/await_match_status_change_checker .h"
34 #include "chrome/browser/sync/test/integration/multi_client_status_change_checke r.h"
35 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" 33 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
36 #include "chrome/browser/sync/test/integration/single_client_status_change_check er.h"
37 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" 34 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
38 #include "chrome/browser/sync/test/integration/sync_test.h" 35 #include "chrome/browser/sync/test/integration/sync_test.h"
39 #include "chrome/common/chrome_paths.h" 36 #include "chrome/common/chrome_paths.h"
40 #include "components/bookmarks/browser/bookmark_client.h" 37 #include "components/bookmarks/browser/bookmark_client.h"
41 #include "components/bookmarks/browser/bookmark_model.h" 38 #include "components/bookmarks/browser/bookmark_model.h"
42 #include "components/bookmarks/browser/bookmark_model_observer.h" 39 #include "components/bookmarks/browser/bookmark_model_observer.h"
43 #include "components/bookmarks/browser/bookmark_utils.h" 40 #include "components/bookmarks/browser/bookmark_utils.h"
44 #include "components/bookmarks/managed/managed_bookmark_service.h" 41 #include "components/bookmarks/managed/managed_bookmark_service.h"
45 #include "components/browser_sync/profile_sync_service.h" 42 #include "components/browser_sync/profile_sync_service.h"
46 #include "components/favicon/core/favicon_service.h" 43 #include "components/favicon/core/favicon_service.h"
(...skipping 22 matching lines...) Expand all
69 bool RunOnDBThread(history::HistoryBackend* backend, 66 bool RunOnDBThread(history::HistoryBackend* backend,
70 history::HistoryDatabase* db) override { 67 history::HistoryDatabase* db) override {
71 content::RunAllPendingInMessageLoop(); 68 content::RunAllPendingInMessageLoop();
72 done_->Signal(); 69 done_->Signal();
73 return true; 70 return true;
74 } 71 }
75 72
76 void DoneRunOnMainThread() override {} 73 void DoneRunOnMainThread() override {}
77 74
78 private: 75 private:
79 ~HistoryEmptyTask() override {}
80
81 base::WaitableEvent* done_; 76 base::WaitableEvent* done_;
82 }; 77 };
83 78
84 // Helper class used to wait for changes to take effect on the favicon of a 79 // Helper class used to wait for changes to take effect on the favicon of a
85 // particular bookmark node in a particular bookmark model. 80 // particular bookmark node in a particular bookmark model.
86 class FaviconChangeObserver : public bookmarks::BookmarkModelObserver { 81 class FaviconChangeObserver : public bookmarks::BookmarkModelObserver {
87 public: 82 public:
88 FaviconChangeObserver(BookmarkModel* model, const BookmarkNode* node) 83 FaviconChangeObserver(BookmarkModel* model, const BookmarkNode* node)
89 : model_(model), 84 : model_(model),
90 node_(node), 85 node_(node),
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 struct FaviconData { 210 struct FaviconData {
216 FaviconData() { 211 FaviconData() {
217 } 212 }
218 213
219 FaviconData(const gfx::Image& favicon_image, 214 FaviconData(const gfx::Image& favicon_image,
220 const GURL& favicon_url) 215 const GURL& favicon_url)
221 : image(favicon_image), 216 : image(favicon_image),
222 icon_url(favicon_url) { 217 icon_url(favicon_url) {
223 } 218 }
224 219
225 ~FaviconData() {
226 }
227
228 gfx::Image image; 220 gfx::Image image;
229 GURL icon_url; 221 GURL icon_url;
230 }; 222 };
231 223
232 // Gets the favicon and icon URL associated with |node| in |model|. 224 // Gets the favicon and icon URL associated with |node| in |model|.
233 FaviconData GetFaviconData(BookmarkModel* model, 225 FaviconData GetFaviconData(BookmarkModel* model,
234 const BookmarkNode* node) { 226 const BookmarkNode* node) {
235 // If a favicon wasn't explicitly set for a particular URL, simply return its 227 // If a favicon wasn't explicitly set for a particular URL, simply return its
236 // blank favicon. 228 // blank favicon.
237 if (!urls_with_favicons_ || 229 if (!urls_with_favicons_ ||
(...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 773
782 for (int i = 1; i < sync_datatype_helper::test()->num_clients(); ++i) { 774 for (int i = 1; i < sync_datatype_helper::test()->num_clients(); ++i) {
783 if (!ModelsMatch(0, i)) { 775 if (!ModelsMatch(0, i)) {
784 LOG(ERROR) << "Model " << i << " does not match Model 0."; 776 LOG(ERROR) << "Model " << i << " does not match Model 0.";
785 return false; 777 return false;
786 } 778 }
787 } 779 }
788 return true; 780 return true;
789 } 781 }
790 782
791 namespace {
792
793 // Helper class used in the implementation of AwaitAllModelsMatch.
794 class AllModelsMatchChecker : public MultiClientStatusChangeChecker {
795 public:
796 AllModelsMatchChecker();
797 ~AllModelsMatchChecker() override;
798
799 bool IsExitConditionSatisfied() override;
800 std::string GetDebugMessage() const override;
801 };
802
803 AllModelsMatchChecker::AllModelsMatchChecker()
804 : MultiClientStatusChangeChecker(
805 sync_datatype_helper::test()->GetSyncServices()) {}
806
807 AllModelsMatchChecker::~AllModelsMatchChecker() {}
808
809 bool AllModelsMatchChecker::IsExitConditionSatisfied() {
810 return AllModelsMatch();
811 }
812
813 std::string AllModelsMatchChecker::GetDebugMessage() const {
814 return "Waiting for matching models";
815 }
816
817 } // namespace
818
819 bool AwaitAllModelsMatch() {
820 AllModelsMatchChecker checker;
821 checker.Wait();
822 return !checker.TimedOut();
823 }
824
825 namespace {
826
827 // TODO(pvalenzuela): Remove this class and instead use
828 // AwaitMatchStatusChangeChecker.
829 class CountBookmarksWithTitlesMatchingChecker
830 : public SingleClientStatusChangeChecker {
831 public:
832 CountBookmarksWithTitlesMatchingChecker(
833 browser_sync::ProfileSyncService* service,
834 int profile_index,
835 const std::string& title,
836 int expected_count)
837 : SingleClientStatusChangeChecker(service),
838 profile_index_(profile_index),
839 title_(title),
840 expected_count_(expected_count) {
841 DCHECK_GE(expected_count, 0) << "expected_count must be non-negative.";
842 }
843
844 bool IsExitConditionSatisfied() override {
845 int actual_count = CountBookmarksWithTitlesMatching(profile_index_, title_);
846 return expected_count_ == actual_count;
847 }
848
849 std::string GetDebugMessage() const override {
850 return "Waiting for bookmark count to match";
851 }
852
853 private:
854 const int profile_index_;
855 const std::string title_;
856 const int expected_count_;
857 };
858
859 } // namespace
860
861 bool AwaitCountBookmarksWithTitlesMatching(int profile,
862 const std::string& title,
863 int expected_count) {
864 browser_sync::ProfileSyncService* service =
865 sync_datatype_helper::test()->GetSyncService(profile);
866 CountBookmarksWithTitlesMatchingChecker checker(service,
867 profile,
868 title,
869 expected_count);
870 checker.Wait();
871 return !checker.TimedOut();
872 }
873
874
875 bool BookmarkCountsByUrlMatch(int profile,
876 const GURL& url,
877 int expected_count) {
878 int actual_count = CountBookmarksWithUrlsMatching(profile, url);
879 if (expected_count != actual_count) {
880 DVLOG(1) << base::StringPrintf("Expected %d URL(s), but there were %d.",
881 expected_count,
882 actual_count);
883 return false;
884 }
885 return true;
886 }
887
888 bool AwaitCountBookmarksWithUrlsMatching(int profile,
889 const GURL& url,
890 int expected_count) {
891 AwaitMatchStatusChangeChecker checker(base::Bind(BookmarkCountsByUrlMatch,
892 profile,
893 base::ConstRef(url),
894 expected_count),
895 "Bookmark URL counts match.");
896 checker.Wait();
897 return !checker.TimedOut();
898 }
899
900 bool ContainsDuplicateBookmarks(int profile) { 783 bool ContainsDuplicateBookmarks(int profile) {
901 ui::TreeNodeIterator<const BookmarkNode> iterator( 784 ui::TreeNodeIterator<const BookmarkNode> iterator(
902 GetBookmarkModel(profile)->root_node()); 785 GetBookmarkModel(profile)->root_node());
903 while (iterator.has_next()) { 786 while (iterator.has_next()) {
904 const BookmarkNode* node = iterator.Next(); 787 const BookmarkNode* node = iterator.Next();
905 if (node->is_folder()) 788 if (node->is_folder())
906 continue; 789 continue;
907 std::vector<const BookmarkNode*> nodes; 790 std::vector<const BookmarkNode*> nodes;
908 GetBookmarkModel(profile)->GetNodesByURL(node->url(), &nodes); 791 GetBookmarkModel(profile)->GetNodesByURL(node->url(), &nodes);
909 EXPECT_GE(nodes.size(), 1U); 792 EXPECT_GE(nodes.size(), 1U);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1004 887
1005 std::string IndexedSubfolderName(int i) { 888 std::string IndexedSubfolderName(int i) {
1006 return base::StringPrintf("Subfolder Name %d", i); 889 return base::StringPrintf("Subfolder Name %d", i);
1007 } 890 }
1008 891
1009 std::string IndexedSubsubfolderName(int i) { 892 std::string IndexedSubsubfolderName(int i) {
1010 return base::StringPrintf("Subsubfolder Name %d", i); 893 return base::StringPrintf("Subsubfolder Name %d", i);
1011 } 894 }
1012 895
1013 } // namespace bookmarks_helper 896 } // namespace bookmarks_helper
897
898 BookmarksMatchChecker::BookmarksMatchChecker()
899 : MultiClientStatusChangeChecker(
900 sync_datatype_helper::test()->GetSyncServices()) {}
901
902 bool BookmarksMatchChecker::IsExitConditionSatisfied() {
903 return bookmarks_helper::AllModelsMatch();
904 }
905
906 std::string BookmarksMatchChecker::GetDebugMessage() const {
907 return "Waiting for matching models";
908 }
909
910 BookmarksTitleChecker::BookmarksTitleChecker(int profile_index,
911 const std::string& title,
912 int expected_count)
913 : SingleClientStatusChangeChecker(
914 sync_datatype_helper::test()->GetSyncService(profile_index)),
915 profile_index_(profile_index),
916 title_(title),
917 expected_count_(expected_count) {
918 DCHECK_GE(expected_count, 0) << "expected_count must be non-negative.";
919 }
920
921 bool BookmarksTitleChecker::IsExitConditionSatisfied() {
922 int actual_count = bookmarks_helper::CountBookmarksWithTitlesMatching(
923 profile_index_, title_);
924 return expected_count_ == actual_count;
925 }
926
927 std::string BookmarksTitleChecker::GetDebugMessage() const {
928 return "Waiting for bookmark count to match";
929 }
930
931 namespace {
932
933 bool BookmarkCountsByUrlMatch(int profile,
934 const GURL& url,
935 int expected_count) {
936 int actual_count =
937 bookmarks_helper::CountBookmarksWithUrlsMatching(profile, url);
938 if (expected_count != actual_count) {
939 DVLOG(1) << base::StringPrintf("Expected %d URL(s), but there were %d.",
940 expected_count, actual_count);
941 return false;
942 }
943 return true;
944 }
945
946 } // namespace
947
948 BookmarksUrlChecker::BookmarksUrlChecker(int profile,
949 const GURL& url,
950 int expected_count)
951 : AwaitMatchStatusChangeChecker(base::Bind(BookmarkCountsByUrlMatch,
952 profile,
953 base::ConstRef(url),
954 expected_count),
955 "Bookmark URL counts match.") {}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698