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

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: typo 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 <vector>
brettw 2012/07/31 21:45:13 Style nit: C++ includes go after C ones.
mitchellwrosen 2012/07/31 21:54:26 Done.
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,
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())
brettw 2012/07/31 21:45:13 Need {} since it's multiple lines.
mitchellwrosen 2012/07/31 21:54:26 Done.
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
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
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
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