OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/browser/bookmarks/bookmark_extension_helpers.h" | 5 #include "chrome/browser/bookmarks/bookmark_extension_helpers.h" |
6 | 6 |
7 #include <vector> | |
7 #include <math.h> // For floor() | 8 #include <math.h> // For floor() |
8 | 9 |
9 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
11 #include "base/utf_string_conversions.h" | |
10 #include "base/values.h" | 12 #include "base/values.h" |
11 #include "chrome/browser/bookmarks/bookmark_extension_api_constants.h" | 13 #include "chrome/browser/bookmarks/bookmark_extension_api_constants.h" |
12 #include "chrome/browser/bookmarks/bookmark_model.h" | 14 #include "chrome/browser/bookmarks/bookmark_model.h" |
15 #include "chrome/common/extensions/api/bookmarks.h" | |
16 | |
17 using extensions::api::bookmarks::BookmarkTreeNode; | |
13 | 18 |
14 namespace keys = bookmark_extension_api_constants; | 19 namespace keys = bookmark_extension_api_constants; |
15 | 20 |
16 namespace { | 21 namespace { |
17 | 22 |
18 void AddNode(const BookmarkNode* node, | 23 void AddNode(const BookmarkNode* node, |
24 std::vector<linked_ptr<BookmarkTreeNode> >* nodes, | |
25 bool recurse, | |
26 bool only_folders) { | |
27 if (node->IsVisible()) { | |
28 linked_ptr<BookmarkTreeNode> new_node( | |
29 bookmark_extension_helpers::GetBookmarkTreeNode(node, | |
30 recurse, | |
31 only_folders)); | |
32 nodes->push_back(new_node); | |
33 } | |
34 } | |
35 | |
36 // TODO(mwrosen): Remove this function once chrome.experimental.bookmarkManager | |
37 // is refactored to use the JSON schema compiler. | |
38 void AddNode(const BookmarkNode* node, | |
19 base::ListValue* list, | 39 base::ListValue* list, |
20 bool recurse, | 40 bool recurse, |
21 bool only_folders) { | 41 bool only_folders) { |
22 if (node->IsVisible()) { | 42 if (node->IsVisible()) { |
23 base::DictionaryValue* dict = bookmark_extension_helpers::GetNodeDictionary( | 43 base::DictionaryValue* dict = bookmark_extension_helpers::GetNodeDictionary( |
24 node, recurse, only_folders); | 44 node, recurse, only_folders); |
25 list->Append(dict); | 45 list->Append(dict); |
26 } | 46 } |
27 } | 47 } |
28 | 48 |
29 } // namespace | 49 } // namespace |
30 | 50 |
31 namespace bookmark_extension_helpers { | 51 namespace bookmark_extension_helpers { |
32 | 52 |
53 BookmarkTreeNode* GetBookmarkTreeNode(const BookmarkNode* node, | |
54 bool recurse, | |
Matt Tytel
2012/07/31 17:33:54
nit: indents off.
mitchellwrosen
2012/07/31 21:54:26
Done.
| |
55 bool only_folders) { | |
56 BookmarkTreeNode* bookmark_tree_node = new BookmarkTreeNode; | |
57 | |
58 bookmark_tree_node->id = base::Int64ToString(node->id()); | |
59 | |
60 const BookmarkNode* parent = node->parent(); | |
61 if (parent) { | |
62 bookmark_tree_node->parent_id.reset(new std::string( | |
63 base::Int64ToString(parent->id()))); | |
64 bookmark_tree_node->index.reset(new int(parent->GetIndexOf(node))); | |
65 } | |
66 | |
67 if (!node->is_folder()) { | |
68 bookmark_tree_node->url.reset(new std::string(node->url().spec())); | |
69 } else { | |
70 // Javascript Date wants milliseconds since the epoch, ToDoubleT is seconds. | |
71 base::Time t = node->date_folder_modified(); | |
72 if (!t.is_null()) | |
73 bookmark_tree_node->date_group_modified.reset( | |
74 new double(floor(t.ToDoubleT() * 1000))); | |
75 } | |
76 | |
77 bookmark_tree_node->title = UTF16ToUTF8(node->GetTitle()); | |
78 if (!node->date_added().is_null()) { | |
79 // Javascript Date wants milliseconds since the epoch, ToDoubleT is seconds. | |
80 bookmark_tree_node->date_added.reset( | |
81 new double(floor(node->date_added().ToDoubleT() * 1000))); | |
82 } | |
83 | |
84 if (recurse && node->is_folder()) { | |
85 std::vector<linked_ptr<BookmarkTreeNode> > children; | |
86 for (int i = 0; i < node->child_count(); ++i) { | |
87 const BookmarkNode* child = node->GetChild(i); | |
88 if (child->IsVisible() && (!only_folders || child->is_folder())) { | |
89 linked_ptr<BookmarkTreeNode> child_node( | |
90 GetBookmarkTreeNode(child, true, only_folders)); | |
91 children.push_back(child_node); | |
92 } | |
93 } | |
94 bookmark_tree_node->children.reset( | |
95 new std::vector<linked_ptr<BookmarkTreeNode> >(children)); | |
96 } | |
97 return bookmark_tree_node; | |
98 } | |
99 | |
33 base::DictionaryValue* GetNodeDictionary(const BookmarkNode* node, | 100 base::DictionaryValue* GetNodeDictionary(const BookmarkNode* node, |
34 bool recurse, | 101 bool recurse, |
35 bool only_folders) { | 102 bool only_folders) { |
36 base::DictionaryValue* dict = new base::DictionaryValue; | 103 base::DictionaryValue* dict = new base::DictionaryValue; |
37 dict->SetString(keys::kIdKey, base::Int64ToString(node->id())); | 104 dict->SetString(keys::kIdKey, base::Int64ToString(node->id())); |
38 | 105 |
39 const BookmarkNode* parent = node->parent(); | 106 const BookmarkNode* parent = node->parent(); |
40 if (parent) { | 107 if (parent) { |
41 dict->SetString(keys::kParentIdKey, base::Int64ToString(parent->id())); | 108 dict->SetString(keys::kParentIdKey, base::Int64ToString(parent->id())); |
42 dict->SetInteger(keys::kIndexKey, parent->GetIndexOf(node)); | 109 dict->SetInteger(keys::kIndexKey, parent->GetIndexOf(node)); |
(...skipping 23 matching lines...) Expand all Loading... | |
66 if (child->IsVisible() && (!only_folders || child->is_folder())) { | 133 if (child->IsVisible() && (!only_folders || child->is_folder())) { |
67 DictionaryValue* dict = GetNodeDictionary(child, true, only_folders); | 134 DictionaryValue* dict = GetNodeDictionary(child, true, only_folders); |
68 children->Append(dict); | 135 children->Append(dict); |
69 } | 136 } |
70 } | 137 } |
71 dict->Set(keys::kChildrenKey, children); | 138 dict->Set(keys::kChildrenKey, children); |
72 } | 139 } |
73 return dict; | 140 return dict; |
74 } | 141 } |
75 | 142 |
143 void AddNode(const BookmarkNode* node, | |
144 std::vector<linked_ptr<BookmarkTreeNode> >* nodes, | |
145 bool recurse) { | |
146 return ::AddNode(node, nodes, recurse, false); | |
147 } | |
148 | |
149 void AddNodeFoldersOnly(const BookmarkNode* node, | |
150 std::vector<linked_ptr<BookmarkTreeNode> >* nodes, | |
151 bool recurse) { | |
152 return ::AddNode(node, nodes, recurse, true); | |
153 } | |
154 | |
76 void AddNode(const BookmarkNode* node, base::ListValue* list, bool recurse) { | 155 void AddNode(const BookmarkNode* node, base::ListValue* list, bool recurse) { |
77 return ::AddNode(node, list, recurse, false); | 156 return ::AddNode(node, list, recurse, false); |
78 } | 157 } |
79 | 158 |
80 void AddNodeFoldersOnly(const BookmarkNode* node, | 159 void AddNodeFoldersOnly(const BookmarkNode* node, |
81 base::ListValue* list, | 160 base::ListValue* list, |
82 bool recurse) { | 161 bool recurse) { |
83 return ::AddNode(node, list, recurse, true); | 162 return ::AddNode(node, list, recurse, true); |
84 } | 163 } |
85 | 164 |
(...skipping 14 matching lines...) Expand all Loading... | |
100 *error = keys::kFolderNotEmptyError; | 179 *error = keys::kFolderNotEmptyError; |
101 return false; | 180 return false; |
102 } | 181 } |
103 | 182 |
104 const BookmarkNode* parent = node->parent(); | 183 const BookmarkNode* parent = node->parent(); |
105 model->Remove(parent, parent->GetIndexOf(node)); | 184 model->Remove(parent, parent->GetIndexOf(node)); |
106 return true; | 185 return true; |
107 } | 186 } |
108 | 187 |
109 } // namespace bookmark_extension_helpers | 188 } // namespace bookmark_extension_helpers |
OLD | NEW |