| OLD | NEW |
| 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 "base/rand_util.h" | 10 #include "base/rand_util.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 DISALLOW_COPY_AND_ASSIGN(FaviconLoadObserver); | 64 DISALLOW_COPY_AND_ASSIGN(FaviconLoadObserver); |
| 65 }; | 65 }; |
| 66 | 66 |
| 67 } | 67 } |
| 68 | 68 |
| 69 // static | 69 // static |
| 70 bool BookmarkModelVerifier::NodesMatch(const BookmarkNode* node_a, | 70 bool BookmarkModelVerifier::NodesMatch(const BookmarkNode* node_a, |
| 71 const BookmarkNode* node_b) { | 71 const BookmarkNode* node_b) { |
| 72 if (node_a == NULL || node_b == NULL) | 72 if (node_a == NULL || node_b == NULL) |
| 73 return node_a == node_b; | 73 return node_a == node_b; |
| 74 bool ret_val = true; | 74 if (node_a->is_folder() != node_b->is_folder()) { |
| 75 ret_val = ret_val && (node_a->GetTitle() == node_b->GetTitle()); | 75 LOG(ERROR) << "Cannot compare folder with bookmark"; |
| 76 ret_val = ret_val && (node_a->is_folder() == node_b->is_folder()); | 76 return false; |
| 77 ret_val = ret_val && (node_a->GetURL() == node_b->GetURL()); | 77 } |
| 78 ret_val = ret_val && (node_a->GetParent()->IndexOfChild(node_a) == | 78 if (node_a->GetTitle() != node_b->GetTitle()) { |
| 79 node_b->GetParent()->IndexOfChild(node_b)); | 79 LOG(ERROR) << "Title mismatch: " << node_a->GetTitle() << " vs. " |
| 80 return ret_val; | 80 << node_b->GetTitle(); |
| 81 return false; |
| 82 } |
| 83 if (node_a->GetURL() != node_b->GetURL()) { |
| 84 LOG(ERROR) << "URL mismatch: " << node_a->GetURL() << " vs. " |
| 85 << node_b->GetURL(); |
| 86 return false; |
| 87 } |
| 88 if (node_a->GetParent()->IndexOfChild(node_a) != |
| 89 node_b->GetParent()->IndexOfChild(node_b)) { |
| 90 LOG(ERROR) << "Index mismatch: " |
| 91 << node_a->GetParent()->IndexOfChild(node_a) << " vs. " |
| 92 << node_b->GetParent()->IndexOfChild(node_b); |
| 93 return false; |
| 94 } |
| 95 return true; |
| 81 } | 96 } |
| 82 | 97 |
| 83 // static | 98 // static |
| 84 bool BookmarkModelVerifier::ModelsMatch(BookmarkModel* model_a, | 99 bool BookmarkModelVerifier::ModelsMatch(BookmarkModel* model_a, |
| 85 BookmarkModel* model_b) { | 100 BookmarkModel* model_b) { |
| 86 bool ret_val = true; | 101 bool ret_val = true; |
| 87 ui::TreeNodeIterator<const BookmarkNode> iterator_a(model_a->root_node()); | 102 ui::TreeNodeIterator<const BookmarkNode> iterator_a(model_a->root_node()); |
| 88 ui::TreeNodeIterator<const BookmarkNode> iterator_b(model_b->root_node()); | 103 ui::TreeNodeIterator<const BookmarkNode> iterator_b(model_b->root_node()); |
| 89 while (iterator_a.has_next()) { | 104 while (iterator_a.has_next()) { |
| 90 const BookmarkNode* node_a = iterator_a.Next(); | 105 const BookmarkNode* node_a = iterator_a.Next(); |
| 91 EXPECT_TRUE(iterator_b.has_next()); | 106 EXPECT_TRUE(iterator_b.has_next()); |
| 92 const BookmarkNode* node_b = iterator_b.Next(); | 107 const BookmarkNode* node_b = iterator_b.Next(); |
| 93 ret_val = ret_val && NodesMatch(node_a, node_b); | 108 ret_val = ret_val && NodesMatch(node_a, node_b); |
| 94 const SkBitmap& bitmap_a = model_a->GetFavIcon(node_a); | 109 const SkBitmap& bitmap_a = model_a->GetFavIcon(node_a); |
| 95 const SkBitmap& bitmap_b = model_b->GetFavIcon(node_b); | 110 const SkBitmap& bitmap_b = model_b->GetFavIcon(node_b); |
| 96 ret_val = ret_val && FaviconsMatch(bitmap_a, bitmap_b); | 111 ret_val = ret_val && FaviconsMatch(bitmap_a, bitmap_b); |
| 97 } | 112 } |
| 98 ret_val = ret_val && (!iterator_b.has_next()); | 113 ret_val = ret_val && (!iterator_b.has_next()); |
| 99 return ret_val; | 114 return ret_val; |
| 100 } | 115 } |
| 101 | 116 |
| 102 bool BookmarkModelVerifier::FaviconsMatch(const SkBitmap& bitmap_a, | 117 bool BookmarkModelVerifier::FaviconsMatch(const SkBitmap& bitmap_a, |
| 103 const SkBitmap& bitmap_b) { | 118 const SkBitmap& bitmap_b) { |
| 104 if (bitmap_a.getSize() == 0U && bitmap_a.getSize() == 0U) | 119 if (bitmap_a.getSize() == 0U && bitmap_a.getSize() == 0U) |
| 105 return true; | 120 return true; |
| 106 if ((bitmap_a.getSize() != bitmap_b.getSize()) || | 121 if ((bitmap_a.getSize() != bitmap_b.getSize()) || |
| 107 (bitmap_a.width() != bitmap_b.width()) || | 122 (bitmap_a.width() != bitmap_b.width()) || |
| 108 (bitmap_a.height() != bitmap_b.height())) | 123 (bitmap_a.height() != bitmap_b.height())) { |
| 124 LOG(ERROR) << "Favicon size mismatch: " << bitmap_a.getSize() << " (" |
| 125 << bitmap_a.width() << "x" << bitmap_a.height() << ") vs. " |
| 126 << bitmap_b.getSize() << " (" << bitmap_b.width() << "x" |
| 127 << bitmap_b.height() << ")"; |
| 109 return false; | 128 return false; |
| 129 } |
| 110 SkAutoLockPixels bitmap_lock_a(bitmap_a); | 130 SkAutoLockPixels bitmap_lock_a(bitmap_a); |
| 111 SkAutoLockPixels bitmap_lock_b(bitmap_b); | 131 SkAutoLockPixels bitmap_lock_b(bitmap_b); |
| 112 void* node_pixel_addr_a = bitmap_a.getPixels(); | 132 void* node_pixel_addr_a = bitmap_a.getPixels(); |
| 113 EXPECT_TRUE(node_pixel_addr_a); | 133 EXPECT_TRUE(node_pixel_addr_a); |
| 114 void* node_pixel_addr_b = bitmap_b.getPixels(); | 134 void* node_pixel_addr_b = bitmap_b.getPixels(); |
| 115 EXPECT_TRUE(node_pixel_addr_b); | 135 EXPECT_TRUE(node_pixel_addr_b); |
| 116 return (memcmp(node_pixel_addr_a, | 136 if (memcmp(node_pixel_addr_a, node_pixel_addr_b, bitmap_a.getSize()) != 0) { |
| 117 node_pixel_addr_b, | 137 LOG(ERROR) << "Favicon bitmap mismatch"; |
| 118 bitmap_a.getSize()) == 0); | 138 return false; |
| 139 } else { |
| 140 return true; |
| 141 } |
| 119 } | 142 } |
| 120 | 143 |
| 121 bool BookmarkModelVerifier::ContainsDuplicateBookmarks(BookmarkModel* model) { | 144 bool BookmarkModelVerifier::ContainsDuplicateBookmarks(BookmarkModel* model) { |
| 122 ui::TreeNodeIterator<const BookmarkNode> iterator(model->root_node()); | 145 ui::TreeNodeIterator<const BookmarkNode> iterator(model->root_node()); |
| 123 while (iterator.has_next()) { | 146 while (iterator.has_next()) { |
| 124 const BookmarkNode* node = iterator.Next(); | 147 const BookmarkNode* node = iterator.Next(); |
| 125 if (node->type() != BookmarkNode::URL) | 148 if (node->type() != BookmarkNode::URL) |
| 126 continue; | 149 continue; |
| 127 std::vector<const BookmarkNode*> nodes; | 150 std::vector<const BookmarkNode*> nodes; |
| 128 model->GetNodesByURL(node->GetURL(), &nodes); | 151 model->GetNodesByURL(node->GetURL(), &nodes); |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 const BookmarkNode* v_node = NULL; | 329 const BookmarkNode* v_node = NULL; |
| 307 FindNodeInVerifier(model, node, &v_node); | 330 FindNodeInVerifier(model, node, &v_node); |
| 308 bookmark_utils::ApplyEditsWithNoGroupChange( | 331 bookmark_utils::ApplyEditsWithNoGroupChange( |
| 309 verifier_model_, v_node->GetParent(), | 332 verifier_model_, v_node->GetParent(), |
| 310 BookmarkEditor::EditDetails(v_node), v_node->GetTitle(), new_url); | 333 BookmarkEditor::EditDetails(v_node), v_node->GetTitle(), new_url); |
| 311 } | 334 } |
| 312 return bookmark_utils::ApplyEditsWithNoGroupChange( | 335 return bookmark_utils::ApplyEditsWithNoGroupChange( |
| 313 model, node->GetParent(), BookmarkEditor::EditDetails(node), | 336 model, node->GetParent(), BookmarkEditor::EditDetails(node), |
| 314 node->GetTitle(), new_url); | 337 node->GetTitle(), new_url); |
| 315 } | 338 } |
| OLD | NEW |