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

Unified Diff: chrome/browser/sync/test/integration/bookmarks_helper.cc

Issue 474273003: sync: Refactor bookmarks integration tests Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use RunLoop for favicon wait Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/test/integration/bookmarks_helper.cc
diff --git a/chrome/browser/sync/test/integration/bookmarks_helper.cc b/chrome/browser/sync/test/integration/bookmarks_helper.cc
index 2cfb377a2fec72db46e286d3fd4f59ca084ea096..fc07d2a1fae99974631db60f40cd11da66620a2a 100644
--- a/chrome/browser/sync/test/integration/bookmarks_helper.cc
+++ b/chrome/browser/sync/test/integration/bookmarks_helper.cc
@@ -75,13 +75,13 @@ class FaviconChangeObserver : public BookmarkModelObserver {
}
void WaitForGetFavicon() {
wait_for_load_ = true;
- content::RunMessageLoop();
+ run_loop_.Run();
ASSERT_TRUE(node_->is_favicon_loaded());
ASSERT_FALSE(model_->GetFavicon(node_).IsEmpty());
}
void WaitForSetFavicon() {
wait_for_load_ = false;
- content::RunMessageLoop();
+ run_loop_.Run();
}
virtual void BookmarkModelLoaded(BookmarkModel* model,
bool ids_reassigned) OVERRIDE {}
@@ -116,7 +116,7 @@ class FaviconChangeObserver : public BookmarkModelObserver {
const BookmarkNode* node) OVERRIDE {
if (model == model_ && node == node_) {
if (!wait_for_load_ || (wait_for_load_ && node->is_favicon_loaded()))
- base::MessageLoopForUI::current()->Quit();
+ run_loop_.Quit();
}
}
@@ -124,6 +124,7 @@ class FaviconChangeObserver : public BookmarkModelObserver {
BookmarkModel* model_;
const BookmarkNode* node_;
bool wait_for_load_;
+ base::RunLoop run_loop_;
DISALLOW_COPY_AND_ASSIGN(FaviconChangeObserver);
};
@@ -314,24 +315,22 @@ bool NodesMatch(const BookmarkNode* node_a, const BookmarkNode* node_b) {
if (node_a == NULL || node_b == NULL)
return node_a == node_b;
if (node_a->is_folder() != node_b->is_folder()) {
- LOG(ERROR) << "Cannot compare folder with bookmark";
+ VLOG(1) << "Cannot compare folder with bookmark";
return false;
}
if (node_a->GetTitle() != node_b->GetTitle()) {
- LOG(ERROR) << "Title mismatch: " << node_a->GetTitle() << " vs. "
- << node_b->GetTitle();
+ VLOG(1) << "Title mismatch: " << node_a->GetTitle() << " vs. "
+ << node_b->GetTitle();
return false;
}
if (node_a->url() != node_b->url()) {
- LOG(ERROR) << "URL mismatch: " << node_a->url() << " vs. "
- << node_b->url();
+ VLOG(1) << "URL mismatch: " << node_a->url() << " vs. " << node_b->url();
return false;
}
if (node_a->parent()->GetIndexOf(node_a) !=
node_b->parent()->GetIndexOf(node_b)) {
- LOG(ERROR) << "Index mismatch: "
- << node_a->parent()->GetIndexOf(node_a) << " vs. "
- << node_b->parent()->GetIndexOf(node_b);
+ VLOG(1) << "Index mismatch: " << node_a->parent()->GetIndexOf(node_a)
+ << " vs. " << node_b->parent()->GetIndexOf(node_b);
return false;
}
return true;
@@ -347,7 +346,7 @@ bool BookmarkModelsMatch(BookmarkModel* model_a, BookmarkModel* model_b) {
while (iterator_a.has_next()) {
const BookmarkNode* node_a = iterator_a.Next();
if (!iterator_b.has_next()) {
- LOG(ERROR) << "Models do not match.";
+ VLOG(1) << "Models do not match.";
return false;
}
const BookmarkNode* node_b = iterator_b.Next();
@@ -658,7 +657,7 @@ bool AllModelsMatchVerifier() {
for (int i = 0; i < sync_datatype_helper::test()->num_clients(); ++i) {
if (!ModelMatchesVerifier(i)) {
- LOG(ERROR) << "Model " << i << " does not match the verifier.";
+ VLOG(1) << "Model " << i << " does not match the verifier.";
return false;
}
}
@@ -678,48 +677,13 @@ bool AllModelsMatch() {
for (int i = 1; i < sync_datatype_helper::test()->num_clients(); ++i) {
if (!ModelsMatch(0, i)) {
- LOG(ERROR) << "Model " << i << " does not match Model 0.";
+ VLOG(1) << "Model " << i << " does not match Model 0.";
return false;
}
}
return true;
}
-namespace {
-
-// Helper class used in the implementation of AwaitAllModelsMatch.
-class AllModelsMatchChecker : public MultiClientStatusChangeChecker {
- public:
- AllModelsMatchChecker();
- virtual ~AllModelsMatchChecker();
-
- virtual bool IsExitConditionSatisfied() OVERRIDE;
- virtual std::string GetDebugMessage() const OVERRIDE;
-};
-
-AllModelsMatchChecker::AllModelsMatchChecker()
- : MultiClientStatusChangeChecker(
- sync_datatype_helper::test()->GetSyncServices()) {}
-
-AllModelsMatchChecker::~AllModelsMatchChecker() {}
-
-bool AllModelsMatchChecker::IsExitConditionSatisfied() {
- return AllModelsMatch();
-}
-
-std::string AllModelsMatchChecker::GetDebugMessage() const {
- return "Waiting for matching models";
-}
-
-} // namespace
-
-bool AwaitAllModelsMatch() {
- AllModelsMatchChecker checker;
- checker.Wait();
- return !checker.TimedOut();
-}
-
-
bool ContainsDuplicateBookmarks(int profile) {
ui::TreeNodeIterator<const BookmarkNode> iterator(
GetBookmarkModel(profile)->root_node());
@@ -822,4 +786,155 @@ std::string IndexedSubsubfolderName(int i) {
return base::StringPrintf("Subsubfolder Name %d", i);
}
+class BookmarkConditionChecker : public StatusChangeChecker,
+ public BookmarkModelObserver {
+ public:
+ BookmarkConditionChecker(base::Callback<bool()> exit_condition,
+ const std::string& debug_message);
+ virtual ~BookmarkConditionChecker();
+
+ // Implementation of StatusChangeChecker.
+ virtual std::string GetDebugMessage() const OVERRIDE;
+ virtual bool IsExitConditionSatisfied() OVERRIDE;
+
+ // Implementation of BookmarkModelObserver.
+ virtual void BookmarkModelLoaded(BookmarkModel* model,
+ bool ids_reassigned) OVERRIDE;
+ virtual void BookmarkNodeMoved(BookmarkModel* model,
+ const BookmarkNode* old_parent,
+ int old_index,
+ const BookmarkNode* new_parent,
+ int new_index) OVERRIDE;
+ virtual void BookmarkNodeAdded(BookmarkModel* model,
+ const BookmarkNode* parent,
+ int index) OVERRIDE;
+ virtual void BookmarkNodeRemoved(BookmarkModel* model,
+ const BookmarkNode* parent,
+ int old_index,
+ const BookmarkNode* node,
+ const std::set<GURL>& removed_urls) OVERRIDE;
+ virtual void BookmarkNodeChanged(BookmarkModel* model,
+ const BookmarkNode* node) OVERRIDE;
+ virtual void BookmarkNodeFaviconChanged(BookmarkModel* model,
+ const BookmarkNode* node) OVERRIDE;
+ virtual void BookmarkNodeChildrenReordered(BookmarkModel* model,
+ const BookmarkNode* node) OVERRIDE;
+ virtual void BookmarkAllUserNodesRemoved(
+ BookmarkModel* model,
+ const std::set<GURL>& removed_urls) OVERRIDE;
+
+ // Waits until the condition to be met or a timeout occurs.
+ void Wait();
+
+ private:
+ base::Callback<bool()> exit_condition_;
+ std::string debug_message_;
+ bool registered_;
+};
+
+BookmarkConditionChecker::BookmarkConditionChecker(
+ base::Callback<bool()> exit_condition,
+ const std::string& debug_message)
+ : exit_condition_(exit_condition),
+ debug_message_(debug_message),
+ registered_(false) {
+}
+
+BookmarkConditionChecker::~BookmarkConditionChecker() {
+ if (!registered_)
+ return;
+
+ for (int i = 0; i < sync_datatype_helper::test()->num_clients(); ++i) {
+ GetBookmarkModel(i)->RemoveObserver(this);
+ }
+}
+
+std::string BookmarkConditionChecker::GetDebugMessage() const {
+ return debug_message_;
+}
+
+bool BookmarkConditionChecker::IsExitConditionSatisfied() {
+ return exit_condition_.Run();
+}
+
+// Implementation of BookmarkModelObserver.
+void BookmarkConditionChecker::BookmarkModelLoaded(BookmarkModel* model,
+ bool ids_reassigned) {
+ CheckExitCondition();
+}
+
+void BookmarkConditionChecker::BookmarkNodeMoved(BookmarkModel* model,
+ const BookmarkNode* old_parent,
+ int old_index,
+ const BookmarkNode* new_parent,
+ int new_index) {
+ CheckExitCondition();
+}
+
+void BookmarkConditionChecker::BookmarkNodeAdded(BookmarkModel* model,
+ const BookmarkNode* parent,
+ int index) {
+ CheckExitCondition();
+}
+
+void BookmarkConditionChecker::BookmarkNodeRemoved(
+ BookmarkModel* model,
+ const BookmarkNode* parent,
+ int old_index,
+ const BookmarkNode* node,
+ const std::set<GURL>& removed_urls) {
+ CheckExitCondition();
+}
+
+void BookmarkConditionChecker::BookmarkNodeChanged(BookmarkModel* model,
+ const BookmarkNode* node) {
+ CheckExitCondition();
+}
+
+void BookmarkConditionChecker::BookmarkNodeFaviconChanged(
+ BookmarkModel* model,
+ const BookmarkNode* node) {
+ CheckExitCondition();
+}
+
+void BookmarkConditionChecker::BookmarkNodeChildrenReordered(
+ BookmarkModel* model,
+ const BookmarkNode* node) {
+ CheckExitCondition();
+}
+
+void BookmarkConditionChecker::BookmarkAllUserNodesRemoved(
+ BookmarkModel* model,
+ const std::set<GURL>& removed_urls) {
+ CheckExitCondition();
+}
+
+void BookmarkConditionChecker::Wait() {
+ for (int i = 0; i < sync_datatype_helper::test()->num_clients(); ++i) {
+ GetBookmarkModel(i)->AddObserver(this);
+ }
+ registered_ = true;
+
+ if (IsExitConditionSatisfied()) {
+ VLOG(1) << "Finished without wait: " << GetDebugMessage();
+ return;
+ }
+
+ StartBlockingWait();
+}
+
+bool AwaitAllModelsMatch() {
+ BookmarkConditionChecker checker(base::Bind(&AllModelsMatch),
+ "Waiting for models to match");
+ checker.Wait();
+ return !checker.TimedOut();
+}
+
+bool AwaitAllModelsMatchVerifier() {
+ BookmarkConditionChecker checker(base::Bind(&AllModelsMatchVerifier),
+ "Waiting for models to match verifier");
+ checker.Wait();
+ return !checker.TimedOut();
+}
+
} // namespace bookmarks_helper
« no previous file with comments | « chrome/browser/sync/test/integration/bookmarks_helper.h ('k') | chrome/browser/sync/test/integration/status_change_checker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698