Index: chrome/browser/bookmarks/bookmark_utils.cc |
diff --git a/chrome/browser/bookmarks/bookmark_utils.cc b/chrome/browser/bookmarks/bookmark_utils.cc |
index 22563c98475d89331bc75348ec549ab1e08e0fec..0eec58a3ecaf98a3847340390ea9f5d9c9a29534 100644 |
--- a/chrome/browser/bookmarks/bookmark_utils.cc |
+++ b/chrome/browser/bookmarks/bookmark_utils.cc |
@@ -469,11 +469,18 @@ string16 GetNameForURL(const GURL& url) { |
} |
} |
+// This is used with a tree iterator to skip subtrees which are not visible. |
+static bool PruneInvisibleFolders(const BookmarkNode* node) { |
+ return !node->IsVisible(); |
+} |
+ |
std::vector<const BookmarkNode*> GetMostRecentlyModifiedFolders( |
BookmarkModel* model, |
size_t max_count) { |
std::vector<const BookmarkNode*> nodes; |
- ui::TreeNodeIterator<const BookmarkNode> iterator(model->root_node()); |
+ ui::TreeNodeIterator<const BookmarkNode> |
+ iterator(model->root_node(), PruneInvisibleFolders); |
+ |
while (iterator.has_next()) { |
const BookmarkNode* parent = iterator.Next(); |
if (parent->is_folder() && parent->date_folder_modified() > base::Time()) { |
@@ -494,21 +501,19 @@ std::vector<const BookmarkNode*> GetMostRecentlyModifiedFolders( |
} |
if (nodes.size() < max_count) { |
- // Add the bookmark bar and other nodes if there is space. |
- if (find(nodes.begin(), nodes.end(), model->bookmark_bar_node()) == |
- nodes.end()) { |
- nodes.push_back(model->bookmark_bar_node()); |
- } |
- |
- if (nodes.size() < max_count && |
- find(nodes.begin(), nodes.end(), model->other_node()) == nodes.end()) { |
- nodes.push_back(model->other_node()); |
- } |
- |
- if (nodes.size() < max_count && model->synced_node()->IsVisible() && |
- find(nodes.begin(), nodes.end(), |
- model->synced_node()) == nodes.end()) { |
- nodes.push_back(model->synced_node()); |
+ // Add the permanent nodes if there is space. The permanent nodes are the |
+ // only children of the root_node. |
+ const BookmarkNode* root_node = model->root_node(); |
+ |
+ for (int i = 0; i < root_node->child_count(); ++i) { |
+ const BookmarkNode* node = root_node->GetChild(i); |
+ if (node->IsVisible() && |
+ find(nodes.begin(), nodes.end(), node) == nodes.end()) { |
+ nodes.push_back(node); |
+ |
+ if (nodes.size() == max_count) |
+ break; |
+ } |
} |
} |
return nodes; |