OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/extensions/extension_bookmark_helpers.h" | |
6 | |
7 #include "base/string_number_conversions.h" | |
8 #include "base/values.h" | |
9 #include "chrome/browser/bookmarks/bookmark_model.h" | |
10 #include "chrome/browser/extensions/extension_bookmarks_module_constants.h" | |
11 | |
12 namespace keys = extension_bookmarks_module_constants; | |
13 | |
14 namespace { | |
15 | |
16 void AddNode(const BookmarkNode* node, | |
17 base::ListValue* list, | |
18 bool recurse, | |
19 bool only_folders) { | |
20 if (node->IsVisible()) { | |
21 base::DictionaryValue* dict = extension_bookmark_helpers::GetNodeDictionary( | |
22 node, recurse, only_folders); | |
23 list->Append(dict); | |
24 } | |
25 } | |
26 | |
27 } // namespace | |
28 | |
29 namespace extension_bookmark_helpers { | |
30 | |
31 base::DictionaryValue* GetNodeDictionary(const BookmarkNode* node, | |
32 bool recurse, | |
33 bool only_folders) { | |
34 base::DictionaryValue* dict = new base::DictionaryValue; | |
35 dict->SetString(keys::kIdKey, base::Int64ToString(node->id())); | |
36 | |
37 const BookmarkNode* parent = node->parent(); | |
38 if (parent) { | |
39 dict->SetString(keys::kParentIdKey, base::Int64ToString(parent->id())); | |
40 dict->SetInteger(keys::kIndexKey, parent->GetIndexOf(node)); | |
41 } | |
42 | |
43 if (!node->is_folder()) { | |
44 dict->SetString(keys::kUrlKey, node->url().spec()); | |
45 } else { | |
46 // Javascript Date wants milliseconds since the epoch, ToDoubleT is seconds. | |
47 base::Time t = node->date_folder_modified(); | |
48 if (!t.is_null()) | |
49 dict->SetDouble(keys::kDateFolderModifiedKey, | |
50 floor(t.ToDoubleT() * 1000)); | |
51 } | |
52 | |
53 dict->SetString(keys::kTitleKey, node->GetTitle()); | |
54 if (!node->date_added().is_null()) { | |
55 // Javascript Date wants milliseconds since the epoch, ToDoubleT is seconds. | |
56 dict->SetDouble(keys::kDateAddedKey, | |
57 floor(node->date_added().ToDoubleT() * 1000)); | |
58 } | |
59 | |
60 if (recurse && node->is_folder()) { | |
61 base::ListValue* children = new base::ListValue; | |
62 for (int i = 0; i < node->child_count(); ++i) { | |
63 const BookmarkNode* child = node->GetChild(i); | |
64 if (child->IsVisible() && (!only_folders || child->is_folder())) { | |
65 DictionaryValue* dict = GetNodeDictionary(child, true, only_folders); | |
66 children->Append(dict); | |
67 } | |
68 } | |
69 dict->Set(keys::kChildrenKey, children); | |
70 } | |
71 return dict; | |
72 } | |
73 | |
74 void AddNode(const BookmarkNode* node, base::ListValue* list, bool recurse) { | |
75 return ::AddNode(node, list, recurse, false); | |
76 } | |
77 | |
78 void AddNodeFoldersOnly(const BookmarkNode* node, | |
79 base::ListValue* list, | |
80 bool recurse) { | |
81 return ::AddNode(node, list, recurse, true); | |
82 } | |
83 | |
84 bool RemoveNode(BookmarkModel* model, | |
85 int64 id, | |
86 bool recursive, | |
87 std::string* error) { | |
88 const BookmarkNode* node = model->GetNodeByID(id); | |
89 if (!node) { | |
90 *error = keys::kNoNodeError; | |
91 return false; | |
92 } | |
93 if (model->is_permanent_node(node)) { | |
94 *error = keys::kModifySpecialError; | |
95 return false; | |
96 } | |
97 if (node->is_folder() && !node->empty() && !recursive) { | |
98 *error = keys::kFolderNotEmptyError; | |
99 return false; | |
100 } | |
101 | |
102 const BookmarkNode* parent = node->parent(); | |
103 model->Remove(parent, parent->GetIndexOf(node)); | |
104 return true; | |
105 } | |
106 | |
107 } // namespace extension_bookmark_helpers | |
OLD | NEW |