Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(224)

Side by Side Diff: chrome/browser/bookmarks/bookmark_extension_helpers.cc

Issue 10694062: Refactor chrome.bookmarks API to use JSON schema compiler. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Nits Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <math.h> // For floor() 7 #include <math.h> // For floor()
8 #include <vector>
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,
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
78 bookmark_tree_node->title = UTF16ToUTF8(node->GetTitle());
79 if (!node->date_added().is_null()) {
80 // Javascript Date wants milliseconds since the epoch, ToDoubleT is seconds.
81 bookmark_tree_node->date_added.reset(
82 new double(floor(node->date_added().ToDoubleT() * 1000)));
83 }
84
85 if (recurse && node->is_folder()) {
86 std::vector<linked_ptr<BookmarkTreeNode> > children;
87 for (int i = 0; i < node->child_count(); ++i) {
88 const BookmarkNode* child = node->GetChild(i);
89 if (child->IsVisible() && (!only_folders || child->is_folder())) {
90 linked_ptr<BookmarkTreeNode> child_node(
91 GetBookmarkTreeNode(child, true, only_folders));
92 children.push_back(child_node);
93 }
94 }
95 bookmark_tree_node->children.reset(
96 new std::vector<linked_ptr<BookmarkTreeNode> >(children));
97 }
98 return bookmark_tree_node;
99 }
100
33 base::DictionaryValue* GetNodeDictionary(const BookmarkNode* node, 101 base::DictionaryValue* GetNodeDictionary(const BookmarkNode* node,
34 bool recurse, 102 bool recurse,
35 bool only_folders) { 103 bool only_folders) {
36 base::DictionaryValue* dict = new base::DictionaryValue; 104 base::DictionaryValue* dict = new base::DictionaryValue;
37 dict->SetString(keys::kIdKey, base::Int64ToString(node->id())); 105 dict->SetString(keys::kIdKey, base::Int64ToString(node->id()));
38 106
39 const BookmarkNode* parent = node->parent(); 107 const BookmarkNode* parent = node->parent();
40 if (parent) { 108 if (parent) {
41 dict->SetString(keys::kParentIdKey, base::Int64ToString(parent->id())); 109 dict->SetString(keys::kParentIdKey, base::Int64ToString(parent->id()));
42 dict->SetInteger(keys::kIndexKey, parent->GetIndexOf(node)); 110 dict->SetInteger(keys::kIndexKey, parent->GetIndexOf(node));
(...skipping 23 matching lines...) Expand all
66 if (child->IsVisible() && (!only_folders || child->is_folder())) { 134 if (child->IsVisible() && (!only_folders || child->is_folder())) {
67 DictionaryValue* dict = GetNodeDictionary(child, true, only_folders); 135 DictionaryValue* dict = GetNodeDictionary(child, true, only_folders);
68 children->Append(dict); 136 children->Append(dict);
69 } 137 }
70 } 138 }
71 dict->Set(keys::kChildrenKey, children); 139 dict->Set(keys::kChildrenKey, children);
72 } 140 }
73 return dict; 141 return dict;
74 } 142 }
75 143
144 void AddNode(const BookmarkNode* node,
145 std::vector<linked_ptr<BookmarkTreeNode> >* nodes,
146 bool recurse) {
147 return ::AddNode(node, nodes, recurse, false);
148 }
149
150 void AddNodeFoldersOnly(const BookmarkNode* node,
151 std::vector<linked_ptr<BookmarkTreeNode> >* nodes,
152 bool recurse) {
153 return ::AddNode(node, nodes, recurse, true);
154 }
155
76 void AddNode(const BookmarkNode* node, base::ListValue* list, bool recurse) { 156 void AddNode(const BookmarkNode* node, base::ListValue* list, bool recurse) {
77 return ::AddNode(node, list, recurse, false); 157 return ::AddNode(node, list, recurse, false);
78 } 158 }
79 159
80 void AddNodeFoldersOnly(const BookmarkNode* node, 160 void AddNodeFoldersOnly(const BookmarkNode* node,
81 base::ListValue* list, 161 base::ListValue* list,
82 bool recurse) { 162 bool recurse) {
83 return ::AddNode(node, list, recurse, true); 163 return ::AddNode(node, list, recurse, true);
84 } 164 }
85 165
(...skipping 14 matching lines...) Expand all
100 *error = keys::kFolderNotEmptyError; 180 *error = keys::kFolderNotEmptyError;
101 return false; 181 return false;
102 } 182 }
103 183
104 const BookmarkNode* parent = node->parent(); 184 const BookmarkNode* parent = node->parent();
105 model->Remove(parent, parent->GetIndexOf(node)); 185 model->Remove(parent, parent->GetIndexOf(node));
106 return true; 186 return true;
107 } 187 }
108 188
109 } // namespace bookmark_extension_helpers 189 } // namespace bookmark_extension_helpers
OLDNEW
« no previous file with comments | « chrome/browser/bookmarks/bookmark_extension_helpers.h ('k') | chrome/browser/bookmarks/bookmark_extension_helpers_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698