| 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,
|
| + 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);
|
| }
|
|
|