OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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/extensions/extension_bookmarks_module.h" | 5 #include "chrome/browser/bookmarks/bookmark_extension_api.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/file_path.h" | 8 #include "base/file_path.h" |
9 #include "base/i18n/file_util_icu.h" | 9 #include "base/i18n/file_util_icu.h" |
10 #include "base/i18n/time_formatting.h" | 10 #include "base/i18n/time_formatting.h" |
11 #include "base/json/json_writer.h" | 11 #include "base/json/json_writer.h" |
12 #include "base/path_service.h" | 12 #include "base/path_service.h" |
13 #include "base/sha1.h" | 13 #include "base/sha1.h" |
14 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
15 #include "base/string16.h" | 15 #include "base/string16.h" |
16 #include "base/string_number_conversions.h" | 16 #include "base/string_number_conversions.h" |
17 #include "base/string_util.h" | 17 #include "base/string_util.h" |
18 #include "base/time.h" | 18 #include "base/time.h" |
19 #include "base/utf_string_conversions.h" | 19 #include "base/utf_string_conversions.h" |
20 #include "chrome/browser/bookmarks/bookmark_codec.h" | 20 #include "chrome/browser/bookmarks/bookmark_codec.h" |
| 21 #include "chrome/browser/bookmarks/bookmark_extension_api_constants.h" |
| 22 #include "chrome/browser/bookmarks/bookmark_extension_helpers.h" |
21 #include "chrome/browser/bookmarks/bookmark_html_writer.h" | 23 #include "chrome/browser/bookmarks/bookmark_html_writer.h" |
22 #include "chrome/browser/bookmarks/bookmark_model.h" | 24 #include "chrome/browser/bookmarks/bookmark_model.h" |
23 #include "chrome/browser/bookmarks/bookmark_utils.h" | 25 #include "chrome/browser/bookmarks/bookmark_utils.h" |
24 #include "chrome/browser/extensions/extension_bookmark_helpers.h" | |
25 #include "chrome/browser/extensions/extension_bookmarks_module_constants.h" | |
26 #include "chrome/browser/extensions/extension_event_router.h" | 26 #include "chrome/browser/extensions/extension_event_router.h" |
27 #include "chrome/browser/extensions/extension_function_dispatcher.h" | 27 #include "chrome/browser/extensions/extension_function_dispatcher.h" |
28 #include "chrome/browser/extensions/extensions_quota_service.h" | 28 #include "chrome/browser/extensions/extensions_quota_service.h" |
29 #include "chrome/browser/importer/importer_data_types.h" | 29 #include "chrome/browser/importer/importer_data_types.h" |
30 #include "chrome/browser/importer/importer_host.h" | 30 #include "chrome/browser/importer/importer_host.h" |
31 #include "chrome/browser/prefs/pref_service.h" | 31 #include "chrome/browser/prefs/pref_service.h" |
32 #include "chrome/browser/profiles/profile.h" | 32 #include "chrome/browser/profiles/profile.h" |
33 #include "chrome/browser/ui/browser_list.h" | 33 #include "chrome/browser/ui/browser_list.h" |
34 #include "chrome/common/chrome_notification_types.h" | 34 #include "chrome/common/chrome_notification_types.h" |
35 #include "chrome/common/chrome_paths.h" | 35 #include "chrome/common/chrome_paths.h" |
36 #include "chrome/common/pref_names.h" | 36 #include "chrome/common/pref_names.h" |
37 #include "content/public/browser/notification_service.h" | 37 #include "content/public/browser/notification_service.h" |
38 #include "grit/generated_resources.h" | 38 #include "grit/generated_resources.h" |
39 #include "ui/base/l10n/l10n_util.h" | 39 #include "ui/base/l10n/l10n_util.h" |
40 | 40 |
41 namespace keys = extension_bookmarks_module_constants; | 41 namespace keys = bookmark_extension_api_constants; |
42 | 42 |
43 using base::TimeDelta; | 43 using base::TimeDelta; |
44 typedef QuotaLimitHeuristic::Bucket Bucket; | 44 typedef QuotaLimitHeuristic::Bucket Bucket; |
45 typedef QuotaLimitHeuristic::Config Config; | 45 typedef QuotaLimitHeuristic::Config Config; |
46 typedef QuotaLimitHeuristic::BucketList BucketList; | 46 typedef QuotaLimitHeuristic::BucketList BucketList; |
47 typedef ExtensionsQuotaService::TimedLimit TimedLimit; | 47 typedef ExtensionsQuotaService::TimedLimit TimedLimit; |
48 typedef ExtensionsQuotaService::SustainedLimit SustainedLimit; | 48 typedef ExtensionsQuotaService::SustainedLimit SustainedLimit; |
49 typedef QuotaLimitHeuristic::BucketMapper BucketMapper; | 49 typedef QuotaLimitHeuristic::BucketMapper BucketMapper; |
50 | 50 |
51 namespace { | 51 namespace { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 DCHECK(type == chrome::NOTIFICATION_BOOKMARK_MODEL_LOADED); | 118 DCHECK(type == chrome::NOTIFICATION_BOOKMARK_MODEL_LOADED); |
119 Profile* source_profile = content::Source<Profile>(source).ptr(); | 119 Profile* source_profile = content::Source<Profile>(source).ptr(); |
120 if (!source_profile || !source_profile->IsSameProfile(profile())) | 120 if (!source_profile || !source_profile->IsSameProfile(profile())) |
121 return; | 121 return; |
122 | 122 |
123 DCHECK(profile()->GetBookmarkModel()->IsLoaded()); | 123 DCHECK(profile()->GetBookmarkModel()->IsLoaded()); |
124 Run(); | 124 Run(); |
125 Release(); // Balanced in Run(). | 125 Release(); // Balanced in Run(). |
126 } | 126 } |
127 | 127 |
128 ExtensionBookmarkEventRouter::ExtensionBookmarkEventRouter( | 128 BookmarkExtensionEventRouter::BookmarkExtensionEventRouter( |
129 BookmarkModel* model) : model_(model) { | 129 BookmarkModel* model) : model_(model) { |
130 } | 130 } |
131 | 131 |
132 ExtensionBookmarkEventRouter::~ExtensionBookmarkEventRouter() { | 132 BookmarkExtensionEventRouter::~BookmarkExtensionEventRouter() { |
133 if (model_) { | 133 if (model_) { |
134 model_->RemoveObserver(this); | 134 model_->RemoveObserver(this); |
135 } | 135 } |
136 } | 136 } |
137 | 137 |
138 void ExtensionBookmarkEventRouter::Init() { | 138 void BookmarkExtensionEventRouter::Init() { |
139 model_->AddObserver(this); | 139 model_->AddObserver(this); |
140 } | 140 } |
141 | 141 |
142 void ExtensionBookmarkEventRouter::DispatchEvent(Profile *profile, | 142 void BookmarkExtensionEventRouter::DispatchEvent(Profile *profile, |
143 const char* event_name, | 143 const char* event_name, |
144 const std::string& json_args) { | 144 const std::string& json_args) { |
145 if (profile->GetExtensionEventRouter()) { | 145 if (profile->GetExtensionEventRouter()) { |
146 profile->GetExtensionEventRouter()->DispatchEventToRenderers( | 146 profile->GetExtensionEventRouter()->DispatchEventToRenderers( |
147 event_name, json_args, NULL, GURL()); | 147 event_name, json_args, NULL, GURL()); |
148 } | 148 } |
149 } | 149 } |
150 | 150 |
151 void ExtensionBookmarkEventRouter::Loaded(BookmarkModel* model, | 151 void BookmarkExtensionEventRouter::Loaded(BookmarkModel* model, |
152 bool ids_reassigned) { | 152 bool ids_reassigned) { |
153 // TODO(erikkay): Perhaps we should send this event down to the extension | 153 // TODO(erikkay): Perhaps we should send this event down to the extension |
154 // so they know when it's safe to use the API? | 154 // so they know when it's safe to use the API? |
155 } | 155 } |
156 | 156 |
157 void ExtensionBookmarkEventRouter::BookmarkModelBeingDeleted( | 157 void BookmarkExtensionEventRouter::BookmarkModelBeingDeleted( |
158 BookmarkModel* model) { | 158 BookmarkModel* model) { |
159 model_ = NULL; | 159 model_ = NULL; |
160 } | 160 } |
161 | 161 |
162 void ExtensionBookmarkEventRouter::BookmarkNodeMoved( | 162 void BookmarkExtensionEventRouter::BookmarkNodeMoved( |
163 BookmarkModel* model, | 163 BookmarkModel* model, |
164 const BookmarkNode* old_parent, | 164 const BookmarkNode* old_parent, |
165 int old_index, | 165 int old_index, |
166 const BookmarkNode* new_parent, | 166 const BookmarkNode* new_parent, |
167 int new_index) { | 167 int new_index) { |
168 ListValue args; | 168 ListValue args; |
169 const BookmarkNode* node = new_parent->GetChild(new_index); | 169 const BookmarkNode* node = new_parent->GetChild(new_index); |
170 args.Append(new StringValue(base::Int64ToString(node->id()))); | 170 args.Append(new StringValue(base::Int64ToString(node->id()))); |
171 DictionaryValue* object_args = new DictionaryValue(); | 171 DictionaryValue* object_args = new DictionaryValue(); |
172 object_args->SetString(keys::kParentIdKey, | 172 object_args->SetString(keys::kParentIdKey, |
173 base::Int64ToString(new_parent->id())); | 173 base::Int64ToString(new_parent->id())); |
174 object_args->SetInteger(keys::kIndexKey, new_index); | 174 object_args->SetInteger(keys::kIndexKey, new_index); |
175 object_args->SetString(keys::kOldParentIdKey, | 175 object_args->SetString(keys::kOldParentIdKey, |
176 base::Int64ToString(old_parent->id())); | 176 base::Int64ToString(old_parent->id())); |
177 object_args->SetInteger(keys::kOldIndexKey, old_index); | 177 object_args->SetInteger(keys::kOldIndexKey, old_index); |
178 args.Append(object_args); | 178 args.Append(object_args); |
179 | 179 |
180 std::string json_args; | 180 std::string json_args; |
181 base::JSONWriter::Write(&args, false, &json_args); | 181 base::JSONWriter::Write(&args, false, &json_args); |
182 DispatchEvent(model->profile(), keys::kOnBookmarkMoved, json_args); | 182 DispatchEvent(model->profile(), keys::kOnBookmarkMoved, json_args); |
183 } | 183 } |
184 | 184 |
185 void ExtensionBookmarkEventRouter::BookmarkNodeAdded(BookmarkModel* model, | 185 void BookmarkExtensionEventRouter::BookmarkNodeAdded(BookmarkModel* model, |
186 const BookmarkNode* parent, | 186 const BookmarkNode* parent, |
187 int index) { | 187 int index) { |
188 ListValue args; | 188 ListValue args; |
189 const BookmarkNode* node = parent->GetChild(index); | 189 const BookmarkNode* node = parent->GetChild(index); |
190 args.Append(new StringValue(base::Int64ToString(node->id()))); | 190 args.Append(new StringValue(base::Int64ToString(node->id()))); |
191 DictionaryValue* obj = | 191 DictionaryValue* obj = |
192 extension_bookmark_helpers::GetNodeDictionary(node, false, false); | 192 bookmark_extension_helpers::GetNodeDictionary(node, false, false); |
193 args.Append(obj); | 193 args.Append(obj); |
194 | 194 |
195 std::string json_args; | 195 std::string json_args; |
196 base::JSONWriter::Write(&args, false, &json_args); | 196 base::JSONWriter::Write(&args, false, &json_args); |
197 DispatchEvent(model->profile(), keys::kOnBookmarkCreated, json_args); | 197 DispatchEvent(model->profile(), keys::kOnBookmarkCreated, json_args); |
198 } | 198 } |
199 | 199 |
200 void ExtensionBookmarkEventRouter::BookmarkNodeRemoved( | 200 void BookmarkExtensionEventRouter::BookmarkNodeRemoved( |
201 BookmarkModel* model, | 201 BookmarkModel* model, |
202 const BookmarkNode* parent, | 202 const BookmarkNode* parent, |
203 int index, | 203 int index, |
204 const BookmarkNode* node) { | 204 const BookmarkNode* node) { |
205 ListValue args; | 205 ListValue args; |
206 args.Append(new StringValue(base::Int64ToString(node->id()))); | 206 args.Append(new StringValue(base::Int64ToString(node->id()))); |
207 DictionaryValue* object_args = new DictionaryValue(); | 207 DictionaryValue* object_args = new DictionaryValue(); |
208 object_args->SetString(keys::kParentIdKey, | 208 object_args->SetString(keys::kParentIdKey, |
209 base::Int64ToString(parent->id())); | 209 base::Int64ToString(parent->id())); |
210 object_args->SetInteger(keys::kIndexKey, index); | 210 object_args->SetInteger(keys::kIndexKey, index); |
211 args.Append(object_args); | 211 args.Append(object_args); |
212 | 212 |
213 std::string json_args; | 213 std::string json_args; |
214 base::JSONWriter::Write(&args, false, &json_args); | 214 base::JSONWriter::Write(&args, false, &json_args); |
215 DispatchEvent(model->profile(), keys::kOnBookmarkRemoved, json_args); | 215 DispatchEvent(model->profile(), keys::kOnBookmarkRemoved, json_args); |
216 } | 216 } |
217 | 217 |
218 void ExtensionBookmarkEventRouter::BookmarkNodeChanged( | 218 void BookmarkExtensionEventRouter::BookmarkNodeChanged( |
219 BookmarkModel* model, const BookmarkNode* node) { | 219 BookmarkModel* model, const BookmarkNode* node) { |
220 ListValue args; | 220 ListValue args; |
221 args.Append(new StringValue(base::Int64ToString(node->id()))); | 221 args.Append(new StringValue(base::Int64ToString(node->id()))); |
222 | 222 |
223 // TODO(erikkay) The only three things that BookmarkModel sends this | 223 // TODO(erikkay) The only three things that BookmarkModel sends this |
224 // notification for are title, url and favicon. Since we're currently | 224 // notification for are title, url and favicon. Since we're currently |
225 // ignoring favicon and since the notification doesn't say which one anyway, | 225 // ignoring favicon and since the notification doesn't say which one anyway, |
226 // for now we only include title and url. The ideal thing would be to change | 226 // for now we only include title and url. The ideal thing would be to change |
227 // BookmarkModel to indicate what changed. | 227 // BookmarkModel to indicate what changed. |
228 DictionaryValue* object_args = new DictionaryValue(); | 228 DictionaryValue* object_args = new DictionaryValue(); |
229 object_args->SetString(keys::kTitleKey, node->GetTitle()); | 229 object_args->SetString(keys::kTitleKey, node->GetTitle()); |
230 if (node->is_url()) | 230 if (node->is_url()) |
231 object_args->SetString(keys::kUrlKey, node->url().spec()); | 231 object_args->SetString(keys::kUrlKey, node->url().spec()); |
232 args.Append(object_args); | 232 args.Append(object_args); |
233 | 233 |
234 std::string json_args; | 234 std::string json_args; |
235 base::JSONWriter::Write(&args, false, &json_args); | 235 base::JSONWriter::Write(&args, false, &json_args); |
236 DispatchEvent(model->profile(), keys::kOnBookmarkChanged, json_args); | 236 DispatchEvent(model->profile(), keys::kOnBookmarkChanged, json_args); |
237 } | 237 } |
238 | 238 |
239 void ExtensionBookmarkEventRouter::BookmarkNodeFaviconChanged( | 239 void BookmarkExtensionEventRouter::BookmarkNodeFaviconChanged( |
240 BookmarkModel* model, const BookmarkNode* node) { | 240 BookmarkModel* model, const BookmarkNode* node) { |
241 // TODO(erikkay) anything we should do here? | 241 // TODO(erikkay) anything we should do here? |
242 } | 242 } |
243 | 243 |
244 void ExtensionBookmarkEventRouter::BookmarkNodeChildrenReordered( | 244 void BookmarkExtensionEventRouter::BookmarkNodeChildrenReordered( |
245 BookmarkModel* model, const BookmarkNode* node) { | 245 BookmarkModel* model, const BookmarkNode* node) { |
246 ListValue args; | 246 ListValue args; |
247 args.Append(new StringValue(base::Int64ToString(node->id()))); | 247 args.Append(new StringValue(base::Int64ToString(node->id()))); |
248 int childCount = node->child_count(); | 248 int childCount = node->child_count(); |
249 ListValue* children = new ListValue(); | 249 ListValue* children = new ListValue(); |
250 for (int i = 0; i < childCount; ++i) { | 250 for (int i = 0; i < childCount; ++i) { |
251 const BookmarkNode* child = node->GetChild(i); | 251 const BookmarkNode* child = node->GetChild(i); |
252 Value* child_id = new StringValue(base::Int64ToString(child->id())); | 252 Value* child_id = new StringValue(base::Int64ToString(child->id())); |
253 children->Append(child_id); | 253 children->Append(child_id); |
254 } | 254 } |
255 DictionaryValue* reorder_info = new DictionaryValue(); | 255 DictionaryValue* reorder_info = new DictionaryValue(); |
256 reorder_info->Set(keys::kChildIdsKey, children); | 256 reorder_info->Set(keys::kChildIdsKey, children); |
257 args.Append(reorder_info); | 257 args.Append(reorder_info); |
258 | 258 |
259 std::string json_args; | 259 std::string json_args; |
260 base::JSONWriter::Write(&args, false, &json_args); | 260 base::JSONWriter::Write(&args, false, &json_args); |
261 DispatchEvent(model->profile(), | 261 DispatchEvent(model->profile(), |
262 keys::kOnBookmarkChildrenReordered, | 262 keys::kOnBookmarkChildrenReordered, |
263 json_args); | 263 json_args); |
264 } | 264 } |
265 | 265 |
266 void ExtensionBookmarkEventRouter:: | 266 void BookmarkExtensionEventRouter:: |
267 BookmarkImportBeginning(BookmarkModel* model) { | 267 BookmarkImportBeginning(BookmarkModel* model) { |
268 ListValue args; | 268 ListValue args; |
269 std::string json_args; | 269 std::string json_args; |
270 base::JSONWriter::Write(&args, false, &json_args); | 270 base::JSONWriter::Write(&args, false, &json_args); |
271 DispatchEvent(model->profile(), | 271 DispatchEvent(model->profile(), |
272 keys::kOnBookmarkImportBegan, | 272 keys::kOnBookmarkImportBegan, |
273 json_args); | 273 json_args); |
274 } | 274 } |
275 | 275 |
276 void ExtensionBookmarkEventRouter::BookmarkImportEnding(BookmarkModel* model) { | 276 void BookmarkExtensionEventRouter::BookmarkImportEnding(BookmarkModel* model) { |
277 ListValue args; | 277 ListValue args; |
278 std::string json_args; | 278 std::string json_args; |
279 base::JSONWriter::Write(&args, false, &json_args); | 279 base::JSONWriter::Write(&args, false, &json_args); |
280 DispatchEvent(model->profile(), | 280 DispatchEvent(model->profile(), |
281 keys::kOnBookmarkImportEnded, | 281 keys::kOnBookmarkImportEnded, |
282 json_args); | 282 json_args); |
283 } | 283 } |
284 | 284 |
285 bool GetBookmarksFunction::RunImpl() { | 285 bool GetBookmarksFunction::RunImpl() { |
286 BookmarkModel* model = profile()->GetBookmarkModel(); | 286 BookmarkModel* model = profile()->GetBookmarkModel(); |
287 scoped_ptr<ListValue> json(new ListValue()); | 287 scoped_ptr<ListValue> json(new ListValue()); |
288 Value* arg0; | 288 Value* arg0; |
289 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &arg0)); | 289 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &arg0)); |
290 if (arg0->IsType(Value::TYPE_LIST)) { | 290 if (arg0->IsType(Value::TYPE_LIST)) { |
291 const ListValue* ids = static_cast<const ListValue*>(arg0); | 291 const ListValue* ids = static_cast<const ListValue*>(arg0); |
292 size_t count = ids->GetSize(); | 292 size_t count = ids->GetSize(); |
293 EXTENSION_FUNCTION_VALIDATE(count > 0); | 293 EXTENSION_FUNCTION_VALIDATE(count > 0); |
294 for (size_t i = 0; i < count; ++i) { | 294 for (size_t i = 0; i < count; ++i) { |
295 int64 id; | 295 int64 id; |
296 std::string id_string; | 296 std::string id_string; |
297 EXTENSION_FUNCTION_VALIDATE(ids->GetString(i, &id_string)); | 297 EXTENSION_FUNCTION_VALIDATE(ids->GetString(i, &id_string)); |
298 if (!GetBookmarkIdAsInt64(id_string, &id)) | 298 if (!GetBookmarkIdAsInt64(id_string, &id)) |
299 return false; | 299 return false; |
300 const BookmarkNode* node = model->GetNodeByID(id); | 300 const BookmarkNode* node = model->GetNodeByID(id); |
301 if (!node) { | 301 if (!node) { |
302 error_ = keys::kNoNodeError; | 302 error_ = keys::kNoNodeError; |
303 return false; | 303 return false; |
304 } else { | 304 } else { |
305 extension_bookmark_helpers::AddNode(node, json.get(), false); | 305 bookmark_extension_helpers::AddNode(node, json.get(), false); |
306 } | 306 } |
307 } | 307 } |
308 } else { | 308 } else { |
309 int64 id; | 309 int64 id; |
310 std::string id_string; | 310 std::string id_string; |
311 EXTENSION_FUNCTION_VALIDATE(arg0->GetAsString(&id_string)); | 311 EXTENSION_FUNCTION_VALIDATE(arg0->GetAsString(&id_string)); |
312 if (!GetBookmarkIdAsInt64(id_string, &id)) | 312 if (!GetBookmarkIdAsInt64(id_string, &id)) |
313 return false; | 313 return false; |
314 const BookmarkNode* node = model->GetNodeByID(id); | 314 const BookmarkNode* node = model->GetNodeByID(id); |
315 if (!node) { | 315 if (!node) { |
316 error_ = keys::kNoNodeError; | 316 error_ = keys::kNoNodeError; |
317 return false; | 317 return false; |
318 } | 318 } |
319 extension_bookmark_helpers::AddNode(node, json.get(), false); | 319 bookmark_extension_helpers::AddNode(node, json.get(), false); |
320 } | 320 } |
321 | 321 |
322 result_.reset(json.release()); | 322 result_.reset(json.release()); |
323 return true; | 323 return true; |
324 } | 324 } |
325 | 325 |
326 bool GetBookmarkChildrenFunction::RunImpl() { | 326 bool GetBookmarkChildrenFunction::RunImpl() { |
327 BookmarkModel* model = profile()->GetBookmarkModel(); | 327 BookmarkModel* model = profile()->GetBookmarkModel(); |
328 int64 id; | 328 int64 id; |
329 std::string id_string; | 329 std::string id_string; |
330 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &id_string)); | 330 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &id_string)); |
331 if (!GetBookmarkIdAsInt64(id_string, &id)) | 331 if (!GetBookmarkIdAsInt64(id_string, &id)) |
332 return false; | 332 return false; |
333 scoped_ptr<ListValue> json(new ListValue()); | 333 scoped_ptr<ListValue> json(new ListValue()); |
334 const BookmarkNode* node = model->GetNodeByID(id); | 334 const BookmarkNode* node = model->GetNodeByID(id); |
335 if (!node) { | 335 if (!node) { |
336 error_ = keys::kNoNodeError; | 336 error_ = keys::kNoNodeError; |
337 return false; | 337 return false; |
338 } | 338 } |
339 int child_count = node->child_count(); | 339 int child_count = node->child_count(); |
340 for (int i = 0; i < child_count; ++i) { | 340 for (int i = 0; i < child_count; ++i) { |
341 const BookmarkNode* child = node->GetChild(i); | 341 const BookmarkNode* child = node->GetChild(i); |
342 extension_bookmark_helpers::AddNode(child, json.get(), false); | 342 bookmark_extension_helpers::AddNode(child, json.get(), false); |
343 } | 343 } |
344 | 344 |
345 result_.reset(json.release()); | 345 result_.reset(json.release()); |
346 return true; | 346 return true; |
347 } | 347 } |
348 | 348 |
349 bool GetBookmarkRecentFunction::RunImpl() { | 349 bool GetBookmarkRecentFunction::RunImpl() { |
350 int number_of_items; | 350 int number_of_items; |
351 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &number_of_items)); | 351 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &number_of_items)); |
352 if (number_of_items < 1) | 352 if (number_of_items < 1) |
353 return false; | 353 return false; |
354 | 354 |
355 BookmarkModel* model = profile()->GetBookmarkModel(); | 355 BookmarkModel* model = profile()->GetBookmarkModel(); |
356 ListValue* json = new ListValue(); | 356 ListValue* json = new ListValue(); |
357 std::vector<const BookmarkNode*> nodes; | 357 std::vector<const BookmarkNode*> nodes; |
358 bookmark_utils::GetMostRecentlyAddedEntries(model, number_of_items, &nodes); | 358 bookmark_utils::GetMostRecentlyAddedEntries(model, number_of_items, &nodes); |
359 std::vector<const BookmarkNode*>::iterator i = nodes.begin(); | 359 std::vector<const BookmarkNode*>::iterator i = nodes.begin(); |
360 for (; i != nodes.end(); ++i) { | 360 for (; i != nodes.end(); ++i) { |
361 const BookmarkNode* node = *i; | 361 const BookmarkNode* node = *i; |
362 extension_bookmark_helpers::AddNode(node, json, false); | 362 bookmark_extension_helpers::AddNode(node, json, false); |
363 } | 363 } |
364 result_.reset(json); | 364 result_.reset(json); |
365 return true; | 365 return true; |
366 } | 366 } |
367 | 367 |
368 bool GetBookmarkTreeFunction::RunImpl() { | 368 bool GetBookmarkTreeFunction::RunImpl() { |
369 BookmarkModel* model = profile()->GetBookmarkModel(); | 369 BookmarkModel* model = profile()->GetBookmarkModel(); |
370 scoped_ptr<ListValue> json(new ListValue()); | 370 scoped_ptr<ListValue> json(new ListValue()); |
371 const BookmarkNode* node = model->root_node(); | 371 const BookmarkNode* node = model->root_node(); |
372 extension_bookmark_helpers::AddNode(node, json.get(), true); | 372 bookmark_extension_helpers::AddNode(node, json.get(), true); |
373 result_.reset(json.release()); | 373 result_.reset(json.release()); |
374 return true; | 374 return true; |
375 } | 375 } |
376 | 376 |
377 bool GetBookmarkSubTreeFunction::RunImpl() { | 377 bool GetBookmarkSubTreeFunction::RunImpl() { |
378 BookmarkModel* model = profile()->GetBookmarkModel(); | 378 BookmarkModel* model = profile()->GetBookmarkModel(); |
379 scoped_ptr<ListValue> json(new ListValue()); | 379 scoped_ptr<ListValue> json(new ListValue()); |
380 Value* arg0; | 380 Value* arg0; |
381 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &arg0)); | 381 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &arg0)); |
382 int64 id; | 382 int64 id; |
383 std::string id_string; | 383 std::string id_string; |
384 EXTENSION_FUNCTION_VALIDATE(arg0->GetAsString(&id_string)); | 384 EXTENSION_FUNCTION_VALIDATE(arg0->GetAsString(&id_string)); |
385 if (!GetBookmarkIdAsInt64(id_string, &id)) | 385 if (!GetBookmarkIdAsInt64(id_string, &id)) |
386 return false; | 386 return false; |
387 const BookmarkNode* node = model->GetNodeByID(id); | 387 const BookmarkNode* node = model->GetNodeByID(id); |
388 if (!node) { | 388 if (!node) { |
389 error_ = keys::kNoNodeError; | 389 error_ = keys::kNoNodeError; |
390 return false; | 390 return false; |
391 } | 391 } |
392 extension_bookmark_helpers::AddNode(node, json.get(), true); | 392 bookmark_extension_helpers::AddNode(node, json.get(), true); |
393 result_.reset(json.release()); | 393 result_.reset(json.release()); |
394 return true; | 394 return true; |
395 } | 395 } |
396 | 396 |
397 bool SearchBookmarksFunction::RunImpl() { | 397 bool SearchBookmarksFunction::RunImpl() { |
398 string16 query; | 398 string16 query; |
399 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &query)); | 399 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &query)); |
400 | 400 |
401 BookmarkModel* model = profile()->GetBookmarkModel(); | 401 BookmarkModel* model = profile()->GetBookmarkModel(); |
402 ListValue* json = new ListValue(); | 402 ListValue* json = new ListValue(); |
403 std::string lang = profile()->GetPrefs()->GetString(prefs::kAcceptLanguages); | 403 std::string lang = profile()->GetPrefs()->GetString(prefs::kAcceptLanguages); |
404 std::vector<const BookmarkNode*> nodes; | 404 std::vector<const BookmarkNode*> nodes; |
405 bookmark_utils::GetBookmarksContainingText(model, query, | 405 bookmark_utils::GetBookmarksContainingText(model, query, |
406 std::numeric_limits<int>::max(), | 406 std::numeric_limits<int>::max(), |
407 lang, &nodes); | 407 lang, &nodes); |
408 std::vector<const BookmarkNode*>::iterator i = nodes.begin(); | 408 std::vector<const BookmarkNode*>::iterator i = nodes.begin(); |
409 for (; i != nodes.end(); ++i) { | 409 for (; i != nodes.end(); ++i) { |
410 const BookmarkNode* node = *i; | 410 const BookmarkNode* node = *i; |
411 extension_bookmark_helpers::AddNode(node, json, false); | 411 bookmark_extension_helpers::AddNode(node, json, false); |
412 } | 412 } |
413 | 413 |
414 result_.reset(json); | 414 result_.reset(json); |
415 return true; | 415 return true; |
416 } | 416 } |
417 | 417 |
418 // static | 418 // static |
419 bool RemoveBookmarkFunction::ExtractIds(const ListValue* args, | 419 bool RemoveBookmarkFunction::ExtractIds(const ListValue* args, |
420 std::list<int64>* ids, | 420 std::list<int64>* ids, |
421 bool* invalid_id) { | 421 bool* invalid_id) { |
(...skipping 19 matching lines...) Expand all Loading... |
441 return false; | 441 return false; |
442 } | 442 } |
443 bool recursive = false; | 443 bool recursive = false; |
444 if (name() == RemoveTreeBookmarkFunction::function_name()) | 444 if (name() == RemoveTreeBookmarkFunction::function_name()) |
445 recursive = true; | 445 recursive = true; |
446 | 446 |
447 BookmarkModel* model = profile()->GetBookmarkModel(); | 447 BookmarkModel* model = profile()->GetBookmarkModel(); |
448 size_t count = ids.size(); | 448 size_t count = ids.size(); |
449 EXTENSION_FUNCTION_VALIDATE(count > 0); | 449 EXTENSION_FUNCTION_VALIDATE(count > 0); |
450 for (std::list<int64>::iterator it = ids.begin(); it != ids.end(); ++it) { | 450 for (std::list<int64>::iterator it = ids.begin(); it != ids.end(); ++it) { |
451 if (!extension_bookmark_helpers::RemoveNode(model, *it, recursive, &error_)) | 451 if (!bookmark_extension_helpers::RemoveNode(model, *it, recursive, &error_)) |
452 return false; | 452 return false; |
453 } | 453 } |
454 return true; | 454 return true; |
455 } | 455 } |
456 | 456 |
457 bool CreateBookmarkFunction::RunImpl() { | 457 bool CreateBookmarkFunction::RunImpl() { |
458 if (!EditBookmarksEnabled()) | 458 if (!EditBookmarksEnabled()) |
459 return false; | 459 return false; |
460 DictionaryValue* json; | 460 DictionaryValue* json; |
461 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &json)); | 461 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &json)); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
509 node = model->AddURL(parent, index, title, url); | 509 node = model->AddURL(parent, index, title, url); |
510 else | 510 else |
511 node = model->AddFolder(parent, index, title); | 511 node = model->AddFolder(parent, index, title); |
512 DCHECK(node); | 512 DCHECK(node); |
513 if (!node) { | 513 if (!node) { |
514 error_ = keys::kNoNodeError; | 514 error_ = keys::kNoNodeError; |
515 return false; | 515 return false; |
516 } | 516 } |
517 | 517 |
518 DictionaryValue* ret = | 518 DictionaryValue* ret = |
519 extension_bookmark_helpers::GetNodeDictionary(node, false, false); | 519 bookmark_extension_helpers::GetNodeDictionary(node, false, false); |
520 result_.reset(ret); | 520 result_.reset(ret); |
521 | 521 |
522 return true; | 522 return true; |
523 } | 523 } |
524 | 524 |
525 // static | 525 // static |
526 bool MoveBookmarkFunction::ExtractIds(const ListValue* args, | 526 bool MoveBookmarkFunction::ExtractIds(const ListValue* args, |
527 std::list<int64>* ids, | 527 std::list<int64>* ids, |
528 bool* invalid_id) { | 528 bool* invalid_id) { |
529 // For now, Move accepts ID parameters in the same way as an Update. | 529 // For now, Move accepts ID parameters in the same way as an Update. |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
588 error_ = keys::kInvalidIndexError; | 588 error_ = keys::kInvalidIndexError; |
589 return false; | 589 return false; |
590 } | 590 } |
591 } else { | 591 } else { |
592 index = parent->child_count(); | 592 index = parent->child_count(); |
593 } | 593 } |
594 | 594 |
595 model->Move(node, parent, index); | 595 model->Move(node, parent, index); |
596 | 596 |
597 DictionaryValue* ret = | 597 DictionaryValue* ret = |
598 extension_bookmark_helpers::GetNodeDictionary(node, false, false); | 598 bookmark_extension_helpers::GetNodeDictionary(node, false, false); |
599 result_.reset(ret); | 599 result_.reset(ret); |
600 | 600 |
601 return true; | 601 return true; |
602 } | 602 } |
603 | 603 |
604 // static | 604 // static |
605 bool UpdateBookmarkFunction::ExtractIds(const ListValue* args, | 605 bool UpdateBookmarkFunction::ExtractIds(const ListValue* args, |
606 std::list<int64>* ids, | 606 std::list<int64>* ids, |
607 bool* invalid_id) { | 607 bool* invalid_id) { |
608 // For now, Update accepts ID parameters in the same way as an Remove. | 608 // For now, Update accepts ID parameters in the same way as an Remove. |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
646 if (model->is_permanent_node(node)) { | 646 if (model->is_permanent_node(node)) { |
647 error_ = keys::kModifySpecialError; | 647 error_ = keys::kModifySpecialError; |
648 return false; | 648 return false; |
649 } | 649 } |
650 if (has_title) | 650 if (has_title) |
651 model->SetTitle(node, title); | 651 model->SetTitle(node, title); |
652 if (!url.is_empty()) | 652 if (!url.is_empty()) |
653 model->SetURL(node, url); | 653 model->SetURL(node, url); |
654 | 654 |
655 DictionaryValue* ret = | 655 DictionaryValue* ret = |
656 extension_bookmark_helpers::GetNodeDictionary(node, false, false); | 656 bookmark_extension_helpers::GetNodeDictionary(node, false, false); |
657 result_.reset(ret); | 657 result_.reset(ret); |
658 | 658 |
659 return true; | 659 return true; |
660 } | 660 } |
661 | 661 |
662 // Mapper superclass for BookmarkFunctions. | 662 // Mapper superclass for BookmarkFunctions. |
663 template <typename BucketIdType> | 663 template <typename BucketIdType> |
664 class BookmarkBucketMapper : public BucketMapper { | 664 class BookmarkBucketMapper : public BucketMapper { |
665 public: | 665 public: |
666 virtual ~BookmarkBucketMapper() { STLDeleteValues(&buckets_); } | 666 virtual ~BookmarkBucketMapper() { STLDeleteValues(&buckets_); } |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
934 SelectFile(SelectFileDialog::SELECT_SAVEAS_FILE); | 934 SelectFile(SelectFileDialog::SELECT_SAVEAS_FILE); |
935 return true; | 935 return true; |
936 } | 936 } |
937 | 937 |
938 void ExportBookmarksFunction::FileSelected(const FilePath& path, | 938 void ExportBookmarksFunction::FileSelected(const FilePath& path, |
939 int index, | 939 int index, |
940 void* params) { | 940 void* params) { |
941 bookmark_html_writer::WriteBookmarks(profile(), path, NULL); | 941 bookmark_html_writer::WriteBookmarks(profile(), path, NULL); |
942 Release(); // Balanced in BookmarksIOFunction::SelectFile() | 942 Release(); // Balanced in BookmarksIOFunction::SelectFile() |
943 } | 943 } |
OLD | NEW |