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

Side by Side Diff: chrome/test/live_sync/bookmark_model_verifier.cc

Issue 5149001: Merge 65840 - Provide sync integration tests with a way to set a favicon for ... (Closed) Base URL: svn://svn.chromium.org/chrome/branches/552d/src/
Patch Set: Created 10 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/test/live_sync/bookmark_model_verifier.h" 5 #include "chrome/test/live_sync/bookmark_model_verifier.h"
6 6
7 #include <vector> 7 #include <vector>
8 #include <stack> 8 #include <stack>
9 9
10 #include "app/tree_node_iterator.h" 10 #include "app/tree_node_iterator.h"
11 #include "base/rand_util.h" 11 #include "base/rand_util.h"
12 #include "base/string_number_conversions.h" 12 #include "base/string_number_conversions.h"
13 #include "chrome/browser/bookmarks/bookmark_model.h" 13 #include "chrome/browser/bookmarks/bookmark_model.h"
14 #include "chrome/browser/bookmarks/bookmark_model_observer.h"
14 #include "chrome/browser/bookmarks/bookmark_utils.h" 15 #include "chrome/browser/bookmarks/bookmark_utils.h"
16 #include "chrome/browser/sync/glue/bookmark_change_processor.h"
17 #include "chrome/test/ui_test_utils.h"
15 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
16 19
20 namespace {
21
22 // Helper class used to wait for the favicon of a particular bookmark node in
23 // a particular bookmark model to load.
24 class FaviconLoadObserver : public BookmarkModelObserver {
25 public:
26 FaviconLoadObserver(BookmarkModel* model, const BookmarkNode* node)
27 : model_(model),
28 node_(node) {
29 model->AddObserver(this);
30 }
31 virtual ~FaviconLoadObserver() {
32 model_->RemoveObserver(this);
33 }
34 void WaitForFaviconLoad() { ui_test_utils::RunMessageLoop(); }
35 virtual void Loaded(BookmarkModel* model) {}
36 virtual void BookmarkNodeMoved(BookmarkModel* model,
37 const BookmarkNode* old_parent,
38 int old_index,
39 const BookmarkNode* new_parent,
40 int new_index) {}
41 virtual void BookmarkNodeAdded(BookmarkModel* model,
42 const BookmarkNode* parent,
43 int index) {}
44 virtual void BookmarkNodeRemoved(BookmarkModel* model,
45 const BookmarkNode* parent,
46 int old_index,
47 const BookmarkNode* node) {}
48 virtual void BookmarkNodeChanged(BookmarkModel* model,
49 const BookmarkNode* node) {
50 if (model == model_ && node == node_)
51 model->GetFavIcon(node);
52 }
53 virtual void BookmarkNodeChildrenReordered(BookmarkModel* model,
54 const BookmarkNode* node) {}
55 virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model,
56 const BookmarkNode* node) {
57 if (model == model_ && node == node_)
58 MessageLoopForUI::current()->Quit();
59 }
60
61 private:
62 BookmarkModel* model_;
63 const BookmarkNode* node_;
64 DISALLOW_COPY_AND_ASSIGN(FaviconLoadObserver);
65 };
66
67 }
68
17 // static 69 // static
18 bool BookmarkModelVerifier::NodesMatch(const BookmarkNode* node_a, 70 bool BookmarkModelVerifier::NodesMatch(const BookmarkNode* node_a,
19 const BookmarkNode* node_b) { 71 const BookmarkNode* node_b) {
20 if (node_a == NULL || node_b == NULL) 72 if (node_a == NULL || node_b == NULL)
21 return node_a == node_b; 73 return node_a == node_b;
22 bool ret_val = true; 74 bool ret_val = true;
23 ret_val = ret_val && (node_a->GetTitle() == node_b->GetTitle()); 75 ret_val = ret_val && (node_a->GetTitle() == node_b->GetTitle());
24 ret_val = ret_val && (node_a->is_folder() == node_b->is_folder()); 76 ret_val = ret_val && (node_a->is_folder() == node_b->is_folder());
25 ret_val = ret_val && (node_a->GetURL() == node_b->GetURL()); 77 ret_val = ret_val && (node_a->GetURL() == node_b->GetURL());
26 ret_val = ret_val && (node_a->GetParent()->IndexOfChild(node_a) == 78 ret_val = ret_val && (node_a->GetParent()->IndexOfChild(node_a) ==
27 node_b->GetParent()->IndexOfChild(node_b)); 79 node_b->GetParent()->IndexOfChild(node_b));
28 return ret_val; 80 return ret_val;
29 } 81 }
30 82
31 // static 83 // static
32 bool BookmarkModelVerifier::ModelsMatch(BookmarkModel* model_a, 84 bool BookmarkModelVerifier::ModelsMatch(BookmarkModel* model_a,
33 BookmarkModel* model_b, 85 BookmarkModel* model_b) {
34 bool compare_favicons) {
35 bool ret_val = true; 86 bool ret_val = true;
36 TreeNodeIterator<const BookmarkNode> iterator_a(model_a->root_node()); 87 TreeNodeIterator<const BookmarkNode> iterator_a(model_a->root_node());
37 TreeNodeIterator<const BookmarkNode> iterator_b(model_b->root_node()); 88 TreeNodeIterator<const BookmarkNode> iterator_b(model_b->root_node());
38 while (iterator_a.has_next()) { 89 while (iterator_a.has_next()) {
39 const BookmarkNode* node_a = iterator_a.Next(); 90 const BookmarkNode* node_a = iterator_a.Next();
40 EXPECT_TRUE(iterator_b.has_next()); 91 EXPECT_TRUE(iterator_b.has_next());
41 const BookmarkNode* node_b = iterator_b.Next(); 92 const BookmarkNode* node_b = iterator_b.Next();
42 ret_val = ret_val && NodesMatch(node_a, node_b); 93 ret_val = ret_val && NodesMatch(node_a, node_b);
43 if (compare_favicons) { 94 const SkBitmap& bitmap_a = model_a->GetFavIcon(node_a);
44 const SkBitmap& bitmap_a = model_a->GetFavIcon(node_a); 95 const SkBitmap& bitmap_b = model_b->GetFavIcon(node_b);
45 const SkBitmap& bitmap_b = model_b->GetFavIcon(node_b); 96 ret_val = ret_val && FaviconsMatch(bitmap_a, bitmap_b);
46 ret_val = ret_val && FaviconsMatch(bitmap_a, bitmap_b);
47 }
48 } 97 }
49 ret_val = ret_val && (!iterator_b.has_next()); 98 ret_val = ret_val && (!iterator_b.has_next());
50 return ret_val; 99 return ret_val;
51 } 100 }
52 101
53 bool BookmarkModelVerifier::FaviconsMatch(const SkBitmap& bitmap_a, 102 bool BookmarkModelVerifier::FaviconsMatch(const SkBitmap& bitmap_a,
54 const SkBitmap& bitmap_b) { 103 const SkBitmap& bitmap_b) {
55 if ((bitmap_a.getSize() == (size_t) 0) || 104 if (bitmap_a.getSize() == 0U && bitmap_a.getSize() == 0U)
56 (bitmap_a.getSize() != bitmap_b.getSize()) || 105 return true;
106 if ((bitmap_a.getSize() != bitmap_b.getSize()) ||
57 (bitmap_a.width() != bitmap_b.width()) || 107 (bitmap_a.width() != bitmap_b.width()) ||
58 (bitmap_a.height() != bitmap_b.height())) 108 (bitmap_a.height() != bitmap_b.height()))
59 return false; 109 return false;
60 SkAutoLockPixels bitmap_lock_a(bitmap_a); 110 SkAutoLockPixels bitmap_lock_a(bitmap_a);
61 SkAutoLockPixels bitmap_lock_b(bitmap_b); 111 SkAutoLockPixels bitmap_lock_b(bitmap_b);
62 void* node_pixel_addr_a = bitmap_a.getPixels(); 112 void* node_pixel_addr_a = bitmap_a.getPixels();
63 EXPECT_TRUE(node_pixel_addr_a); 113 EXPECT_TRUE(node_pixel_addr_a);
64 void* node_pixel_addr_b = bitmap_b.getPixels(); 114 void* node_pixel_addr_b = bitmap_b.getPixels();
65 EXPECT_TRUE(node_pixel_addr_b); 115 EXPECT_TRUE(node_pixel_addr_b);
66 return (memcmp(node_pixel_addr_a, 116 return (memcmp(node_pixel_addr_a,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 ASSERT_LT(path.top(), walker->GetChildCount()); 159 ASSERT_LT(path.top(), walker->GetChildCount());
110 walker = walker->GetChild(path.top()); 160 walker = walker->GetChild(path.top());
111 path.pop(); 161 path.pop();
112 } 162 }
113 163
114 ASSERT_TRUE(NodesMatch(foreign_node, walker)); 164 ASSERT_TRUE(NodesMatch(foreign_node, walker));
115 *result = walker; 165 *result = walker;
116 } 166 }
117 167
118 const BookmarkNode* BookmarkModelVerifier::AddGroup(BookmarkModel* model, 168 const BookmarkNode* BookmarkModelVerifier::AddGroup(BookmarkModel* model,
119 const BookmarkNode* parent, int index, const string16& title) { 169 const BookmarkNode* parent,
170 int index,
171 const string16& title) {
120 const BookmarkNode* result = model->AddGroup(parent, index, title); 172 const BookmarkNode* result = model->AddGroup(parent, index, title);
121 EXPECT_TRUE(result); 173 EXPECT_TRUE(result);
122 if (!result) 174 if (!result)
123 return NULL; 175 return NULL;
124 if (use_verifier_model_) { 176 if (use_verifier_model_) {
125 const BookmarkNode* v_parent = NULL; 177 const BookmarkNode* v_parent = NULL;
126 FindNodeInVerifier(model, parent, &v_parent); 178 FindNodeInVerifier(model, parent, &v_parent);
127 const BookmarkNode* v_node = verifier_model_->AddGroup( 179 const BookmarkNode* v_node = verifier_model_->AddGroup(
128 v_parent, index, title); 180 v_parent, index, title);
129 EXPECT_TRUE(v_node); 181 EXPECT_TRUE(v_node);
(...skipping 30 matching lines...) Expand all
160 const BookmarkNode* node, 212 const BookmarkNode* node,
161 const string16& title) { 213 const string16& title) {
162 if (use_verifier_model_) { 214 if (use_verifier_model_) {
163 const BookmarkNode* v_node = NULL; 215 const BookmarkNode* v_node = NULL;
164 FindNodeInVerifier(model, node, &v_node); 216 FindNodeInVerifier(model, node, &v_node);
165 verifier_model_->SetTitle(v_node, title); 217 verifier_model_->SetTitle(v_node, title);
166 } 218 }
167 model->SetTitle(node, title); 219 model->SetTitle(node, title);
168 } 220 }
169 221
222 void BookmarkModelVerifier::SetFavicon(
223 BookmarkModel* model,
224 const BookmarkNode* node,
225 const std::vector<unsigned char>& icon_bytes_vector) {
226 if (use_verifier_model_) {
227 const BookmarkNode* v_node = NULL;
228 FindNodeInVerifier(model, node, &v_node);
229 FaviconLoadObserver v_observer(verifier_model_, v_node);
230 browser_sync::BookmarkChangeProcessor::ApplyBookmarkFavicon(
231 v_node, verifier_model_->profile(), icon_bytes_vector);
232 v_observer.WaitForFaviconLoad();
233 }
234 FaviconLoadObserver observer(model, node);
235 browser_sync::BookmarkChangeProcessor::ApplyBookmarkFavicon(
236 node, model->profile(), icon_bytes_vector);
237 observer.WaitForFaviconLoad();
238 }
239
170 void BookmarkModelVerifier::Move(BookmarkModel* model, 240 void BookmarkModelVerifier::Move(BookmarkModel* model,
171 const BookmarkNode* node, 241 const BookmarkNode* node,
172 const BookmarkNode* new_parent, 242 const BookmarkNode* new_parent,
173 int index) { 243 int index) {
174 if (use_verifier_model_) { 244 if (use_verifier_model_) {
175 const BookmarkNode* v_new_parent = NULL; 245 const BookmarkNode* v_new_parent = NULL;
176 const BookmarkNode* v_node = NULL; 246 const BookmarkNode* v_node = NULL;
177 FindNodeInVerifier(model, new_parent, &v_new_parent); 247 FindNodeInVerifier(model, new_parent, &v_new_parent);
178 FindNodeInVerifier(model, node, &v_node); 248 FindNodeInVerifier(model, node, &v_node);
179 verifier_model_->Move(v_node, v_new_parent, index); 249 verifier_model_->Move(v_node, v_new_parent, index);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 const BookmarkNode* v_node = NULL; 289 const BookmarkNode* v_node = NULL;
220 FindNodeInVerifier(model, node, &v_node); 290 FindNodeInVerifier(model, node, &v_node);
221 bookmark_utils::ApplyEditsWithNoGroupChange( 291 bookmark_utils::ApplyEditsWithNoGroupChange(
222 verifier_model_, v_node->GetParent(), 292 verifier_model_, v_node->GetParent(),
223 BookmarkEditor::EditDetails(v_node), v_node->GetTitle(), new_url); 293 BookmarkEditor::EditDetails(v_node), v_node->GetTitle(), new_url);
224 } 294 }
225 return bookmark_utils::ApplyEditsWithNoGroupChange( 295 return bookmark_utils::ApplyEditsWithNoGroupChange(
226 model, node->GetParent(), BookmarkEditor::EditDetails(node), 296 model, node->GetParent(), BookmarkEditor::EditDetails(node),
227 node->GetTitle(), new_url); 297 node->GetTitle(), new_url);
228 } 298 }
OLDNEW
« no previous file with comments | « chrome/test/live_sync/bookmark_model_verifier.h ('k') | chrome/test/live_sync/live_bookmarks_sync_test.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698