Chromium Code Reviews| Index: chrome/browser/bookmarks/bookmark_extension_helpers.cc |
| diff --git a/chrome/browser/bookmarks/bookmark_extension_helpers.cc b/chrome/browser/bookmarks/bookmark_extension_helpers.cc |
| index fea02db1143bc2d052bdb5cce97058a4fec5edaf..843f121e991293b1b8437c474f58d237b353844c 100644 |
| --- a/chrome/browser/bookmarks/bookmark_extension_helpers.cc |
| +++ b/chrome/browser/bookmarks/bookmark_extension_helpers.cc |
| @@ -4,18 +4,38 @@ |
| #include "chrome/browser/bookmarks/bookmark_extension_helpers.h" |
| +#include <vector> |
| #include <math.h> // For floor() |
| #include "base/string_number_conversions.h" |
| +#include "base/utf_string_conversions.h" |
| #include "base/values.h" |
| #include "chrome/browser/bookmarks/bookmark_extension_api_constants.h" |
| #include "chrome/browser/bookmarks/bookmark_model.h" |
| +#include "chrome/common/extensions/api/bookmarks.h" |
| + |
| +using extensions::api::bookmarks::BookmarkTreeNode; |
| namespace keys = bookmark_extension_api_constants; |
| namespace { |
| void AddNode(const BookmarkNode* node, |
| + std::vector<linked_ptr<BookmarkTreeNode> >* nodes, |
| + bool recurse, |
| + bool only_folders) { |
| + if (node->IsVisible()) { |
| + linked_ptr<BookmarkTreeNode> new_node( |
| + bookmark_extension_helpers::GetBookmarkTreeNode(node, |
| + recurse, |
| + only_folders)); |
| + nodes->push_back(new_node); |
| + } |
| +} |
| + |
| +// TODO(mwrosen): Remove this function once chrome.experimental.bookmarkManager |
| +// is refactored to use the JSON schema compiler. |
| +void AddNode(const BookmarkNode* node, |
| base::ListValue* list, |
| bool recurse, |
| bool only_folders) { |
| @@ -30,6 +50,53 @@ void AddNode(const BookmarkNode* node, |
| namespace bookmark_extension_helpers { |
| +BookmarkTreeNode* GetBookmarkTreeNode(const BookmarkNode* node, |
| + bool recurse, |
|
Matt Tytel
2012/07/31 17:33:54
nit: indents off.
mitchellwrosen
2012/07/31 21:54:26
Done.
|
| + bool only_folders) { |
| + BookmarkTreeNode* bookmark_tree_node = new BookmarkTreeNode; |
| + |
| + bookmark_tree_node->id = base::Int64ToString(node->id()); |
| + |
| + const BookmarkNode* parent = node->parent(); |
| + if (parent) { |
| + bookmark_tree_node->parent_id.reset(new std::string( |
| + base::Int64ToString(parent->id()))); |
| + bookmark_tree_node->index.reset(new int(parent->GetIndexOf(node))); |
| + } |
| + |
| + if (!node->is_folder()) { |
| + bookmark_tree_node->url.reset(new std::string(node->url().spec())); |
| + } else { |
| + // Javascript Date wants milliseconds since the epoch, ToDoubleT is seconds. |
| + base::Time t = node->date_folder_modified(); |
| + if (!t.is_null()) |
| + bookmark_tree_node->date_group_modified.reset( |
| + new double(floor(t.ToDoubleT() * 1000))); |
| + } |
| + |
| + bookmark_tree_node->title = UTF16ToUTF8(node->GetTitle()); |
| + if (!node->date_added().is_null()) { |
| + // Javascript Date wants milliseconds since the epoch, ToDoubleT is seconds. |
| + bookmark_tree_node->date_added.reset( |
| + new double(floor(node->date_added().ToDoubleT() * 1000))); |
| + } |
| + |
| + if (recurse && node->is_folder()) { |
| + std::vector<linked_ptr<BookmarkTreeNode> > children; |
| + for (int i = 0; i < node->child_count(); ++i) { |
| + const BookmarkNode* child = node->GetChild(i); |
| + if (child->IsVisible() && (!only_folders || child->is_folder())) { |
| + linked_ptr<BookmarkTreeNode> child_node( |
| + GetBookmarkTreeNode(child, true, only_folders)); |
| + children.push_back(child_node); |
| + } |
| + } |
| + bookmark_tree_node->children.reset( |
| + new std::vector<linked_ptr<BookmarkTreeNode> >(children)); |
| + } |
| + return bookmark_tree_node; |
| +} |
| + |
| base::DictionaryValue* GetNodeDictionary(const BookmarkNode* node, |
| bool recurse, |
| bool only_folders) { |
| @@ -73,6 +140,18 @@ base::DictionaryValue* GetNodeDictionary(const BookmarkNode* node, |
| return dict; |
| } |
| +void AddNode(const BookmarkNode* node, |
| + std::vector<linked_ptr<BookmarkTreeNode> >* nodes, |
| + bool recurse) { |
| + return ::AddNode(node, nodes, recurse, false); |
| +} |
| + |
| +void AddNodeFoldersOnly(const BookmarkNode* node, |
| + std::vector<linked_ptr<BookmarkTreeNode> >* nodes, |
| + bool recurse) { |
| + return ::AddNode(node, nodes, recurse, true); |
| +} |
| + |
| void AddNode(const BookmarkNode* node, base::ListValue* list, bool recurse) { |
| return ::AddNode(node, list, recurse, false); |
| } |