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

Side by Side Diff: chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.cc

Issue 308273002: Made the bookmarks extension APIs aware of managed bookmarks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 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 | Annotate | Revision Log
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/extensions/api/bookmark_manager_private/bookmark_manage r_private_api.h" 5 #include "chrome/browser/extensions/api/bookmark_manager_private/bookmark_manage r_private_api.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/memory/linked_ptr.h" 10 #include "base/memory/linked_ptr.h"
11 #include "base/prefs/pref_service.h" 11 #include "base/prefs/pref_service.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "chrome/browser/bookmarks/bookmark_model_factory.h" 15 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
16 #include "chrome/browser/bookmarks/bookmark_stats.h" 16 #include "chrome/browser/bookmarks/bookmark_stats.h"
17 #include "chrome/browser/bookmarks/chrome_bookmark_client.h"
17 #include "chrome/browser/extensions/api/bookmarks/bookmark_api_constants.h" 18 #include "chrome/browser/extensions/api/bookmarks/bookmark_api_constants.h"
18 #include "chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.h" 19 #include "chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.h"
19 #include "chrome/browser/extensions/extension_web_ui.h" 20 #include "chrome/browser/extensions/extension_web_ui.h"
20 #include "chrome/browser/profiles/profile.h" 21 #include "chrome/browser/profiles/profile.h"
21 #include "chrome/browser/ui/bookmarks/bookmark_drag_drop.h" 22 #include "chrome/browser/ui/bookmarks/bookmark_drag_drop.h"
22 #include "chrome/browser/undo/bookmark_undo_service.h" 23 #include "chrome/browser/undo/bookmark_undo_service.h"
23 #include "chrome/browser/undo/bookmark_undo_service_factory.h" 24 #include "chrome/browser/undo/bookmark_undo_service_factory.h"
24 #include "chrome/common/extensions/api/bookmark_manager_private.h" 25 #include "chrome/common/extensions/api/bookmark_manager_private.h"
25 #include "chrome/common/pref_names.h" 26 #include "chrome/common/pref_names.h"
26 #include "components/bookmarks/browser/bookmark_model.h" 27 #include "components/bookmarks/browser/bookmark_model.h"
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 return &bookmark_drag_data_; 345 return &bookmark_drag_data_;
345 return NULL; 346 return NULL;
346 } 347 }
347 348
348 void BookmarkManagerPrivateDragEventRouter::ClearBookmarkNodeData() { 349 void BookmarkManagerPrivateDragEventRouter::ClearBookmarkNodeData() {
349 bookmark_drag_data_.Clear(); 350 bookmark_drag_data_.Clear();
350 } 351 }
351 352
352 bool ClipboardBookmarkManagerFunction::CopyOrCut(bool cut, 353 bool ClipboardBookmarkManagerFunction::CopyOrCut(bool cut,
353 const std::vector<std::string>& id_list) { 354 const std::vector<std::string>& id_list) {
354 BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile()); 355 ChromeBookmarkClient* client = GetChromeBookmarkClient();
355 std::vector<const BookmarkNode*> nodes; 356 std::vector<const BookmarkNode*> nodes;
356 EXTENSION_FUNCTION_VALIDATE(GetNodesFromVector(model, id_list, &nodes)); 357 EXTENSION_FUNCTION_VALIDATE(
357 bookmark_utils::CopyToClipboard(model, nodes, cut); 358 GetNodesFromVector(client->model(), id_list, &nodes));
359 if (cut && client->HasDescendantsOfManagedNode(nodes)) {
360 error_ = bookmark_keys::kModifyManagedError;
361 return false;
362 }
363 bookmark_utils::CopyToClipboard(client->model(), nodes, cut);
358 return true; 364 return true;
359 } 365 }
360 366
361 bool BookmarkManagerPrivateCopyFunction::RunOnReady() { 367 bool BookmarkManagerPrivateCopyFunction::RunOnReady() {
362 scoped_ptr<Copy::Params> params(Copy::Params::Create(*args_)); 368 scoped_ptr<Copy::Params> params(Copy::Params::Create(*args_));
363 EXTENSION_FUNCTION_VALIDATE(params); 369 EXTENSION_FUNCTION_VALIDATE(params);
364 return CopyOrCut(false, params->id_list); 370 return CopyOrCut(false, params->id_list);
365 } 371 }
366 372
367 bool BookmarkManagerPrivateCutFunction::RunOnReady() { 373 bool BookmarkManagerPrivateCutFunction::RunOnReady() {
368 if (!EditBookmarksEnabled()) 374 if (!EditBookmarksEnabled())
369 return false; 375 return false;
370 376
371 scoped_ptr<Cut::Params> params(Cut::Params::Create(*args_)); 377 scoped_ptr<Cut::Params> params(Cut::Params::Create(*args_));
372 EXTENSION_FUNCTION_VALIDATE(params); 378 EXTENSION_FUNCTION_VALIDATE(params);
373 return CopyOrCut(true, params->id_list); 379 return CopyOrCut(true, params->id_list);
374 } 380 }
375 381
376 bool BookmarkManagerPrivatePasteFunction::RunOnReady() { 382 bool BookmarkManagerPrivatePasteFunction::RunOnReady() {
377 if (!EditBookmarksEnabled()) 383 if (!EditBookmarksEnabled())
378 return false; 384 return false;
379 385
380 scoped_ptr<Paste::Params> params(Paste::Params::Create(*args_)); 386 scoped_ptr<Paste::Params> params(Paste::Params::Create(*args_));
381 EXTENSION_FUNCTION_VALIDATE(params); 387 EXTENSION_FUNCTION_VALIDATE(params);
382 BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile()); 388 BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile());
383 const BookmarkNode* parent_node = GetNodeFromString(model, params->parent_id); 389 const BookmarkNode* parent_node = GetNodeFromString(model, params->parent_id);
384 if (!parent_node) { 390 if (!CanBeModified(parent_node))
385 error_ = bookmark_keys::kNoParentError;
386 return false; 391 return false;
387 }
388 bool can_paste = bookmark_utils::CanPasteFromClipboard(parent_node); 392 bool can_paste = bookmark_utils::CanPasteFromClipboard(parent_node);
389 if (!can_paste) 393 if (!can_paste)
390 return false; 394 return false;
391 395
392 // We want to use the highest index of the selected nodes as a destination. 396 // We want to use the highest index of the selected nodes as a destination.
393 std::vector<const BookmarkNode*> nodes; 397 std::vector<const BookmarkNode*> nodes;
394 // No need to test return value, if we got an empty list, we insert at end. 398 // No need to test return value, if we got an empty list, we insert at end.
395 if (params->selected_id_list) 399 if (params->selected_id_list)
396 GetNodesFromVector(model, *params->selected_id_list, &nodes); 400 GetNodesFromVector(model, *params->selected_id_list, &nodes);
397 int highest_index = -1; // -1 means insert at end of list. 401 int highest_index = -1; // -1 means insert at end of list.
398 for (size_t i = 0; i < nodes.size(); ++i) { 402 for (size_t i = 0; i < nodes.size(); ++i) {
399 // + 1 so that we insert after the selection. 403 // + 1 so that we insert after the selection.
400 int index = parent_node->GetIndexOf(nodes[i]) + 1; 404 int index = parent_node->GetIndexOf(nodes[i]) + 1;
401 if (index > highest_index) 405 if (index > highest_index)
402 highest_index = index; 406 highest_index = index;
403 } 407 }
404 408
405 bookmark_utils::PasteFromClipboard(model, parent_node, highest_index); 409 bookmark_utils::PasteFromClipboard(model, parent_node, highest_index);
406 return true; 410 return true;
407 } 411 }
408 412
409 bool BookmarkManagerPrivateCanPasteFunction::RunOnReady() { 413 bool BookmarkManagerPrivateCanPasteFunction::RunOnReady() {
410 if (!EditBookmarksEnabled()) 414 if (!EditBookmarksEnabled())
411 return false; 415 return false;
412 416
413 scoped_ptr<CanPaste::Params> params(CanPaste::Params::Create(*args_)); 417 scoped_ptr<CanPaste::Params> params(CanPaste::Params::Create(*args_));
414 EXTENSION_FUNCTION_VALIDATE(params); 418 EXTENSION_FUNCTION_VALIDATE(params);
415 419
416 BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile()); 420 ChromeBookmarkClient* client = GetChromeBookmarkClient();
417 const BookmarkNode* parent_node = GetNodeFromString(model, params->parent_id); 421 const BookmarkNode* parent_node =
422 GetNodeFromString(client->model(), params->parent_id);
418 if (!parent_node) { 423 if (!parent_node) {
419 error_ = bookmark_keys::kNoParentError; 424 error_ = bookmark_keys::kNoParentError;
420 return false; 425 return false;
421 } 426 }
422 bool can_paste = bookmark_utils::CanPasteFromClipboard(parent_node); 427 bool can_paste = bookmark_utils::CanPasteFromClipboard(parent_node) &&
428 !client->IsDescendantOfManagedNode(parent_node);
423 SetResult(new base::FundamentalValue(can_paste)); 429 SetResult(new base::FundamentalValue(can_paste));
424 return true; 430 return true;
425 } 431 }
426 432
427 bool BookmarkManagerPrivateSortChildrenFunction::RunOnReady() { 433 bool BookmarkManagerPrivateSortChildrenFunction::RunOnReady() {
428 if (!EditBookmarksEnabled()) 434 if (!EditBookmarksEnabled())
429 return false; 435 return false;
430 436
431 scoped_ptr<SortChildren::Params> params(SortChildren::Params::Create(*args_)); 437 scoped_ptr<SortChildren::Params> params(SortChildren::Params::Create(*args_));
432 EXTENSION_FUNCTION_VALIDATE(params); 438 EXTENSION_FUNCTION_VALIDATE(params);
433 439
434 BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile()); 440 BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile());
435 const BookmarkNode* parent_node = GetNodeFromString(model, params->parent_id); 441 const BookmarkNode* parent_node = GetNodeFromString(model, params->parent_id);
436 if (!parent_node) { 442 if (!CanBeModified(parent_node))
437 error_ = bookmark_keys::kNoParentError;
438 return false; 443 return false;
439 }
440 model->SortChildren(parent_node); 444 model->SortChildren(parent_node);
441 return true; 445 return true;
442 } 446 }
443 447
444 bool BookmarkManagerPrivateGetStringsFunction::RunAsync() { 448 bool BookmarkManagerPrivateGetStringsFunction::RunAsync() {
445 base::DictionaryValue* localized_strings = new base::DictionaryValue(); 449 base::DictionaryValue* localized_strings = new base::DictionaryValue();
446 450
447 localized_strings->SetString("title", 451 localized_strings->SetString("title",
448 l10n_util::GetStringUTF16(IDS_BOOKMARK_MANAGER_TITLE)); 452 l10n_util::GetStringUTF16(IDS_BOOKMARK_MANAGER_TITLE));
449 localized_strings->SetString("search_button", 453 localized_strings->SetString("search_button",
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 bool BookmarkManagerPrivateDropFunction::RunOnReady() { 561 bool BookmarkManagerPrivateDropFunction::RunOnReady() {
558 if (!EditBookmarksEnabled()) 562 if (!EditBookmarksEnabled())
559 return false; 563 return false;
560 564
561 scoped_ptr<Drop::Params> params(Drop::Params::Create(*args_)); 565 scoped_ptr<Drop::Params> params(Drop::Params::Create(*args_));
562 EXTENSION_FUNCTION_VALIDATE(params); 566 EXTENSION_FUNCTION_VALIDATE(params);
563 567
564 BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile()); 568 BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile());
565 569
566 const BookmarkNode* drop_parent = GetNodeFromString(model, params->parent_id); 570 const BookmarkNode* drop_parent = GetNodeFromString(model, params->parent_id);
567 if (!drop_parent) { 571 if (!CanBeModified(drop_parent))
568 error_ = bookmark_keys::kNoParentError;
569 return false; 572 return false;
570 }
571 573
572 int drop_index; 574 int drop_index;
573 if (params->index) 575 if (params->index)
574 drop_index = *params->index; 576 drop_index = *params->index;
575 else 577 else
576 drop_index = drop_parent->child_count(); 578 drop_index = drop_parent->child_count();
577 579
578 WebContents* web_contents = 580 WebContents* web_contents =
579 WebContents::FromRenderViewHost(render_view_host_); 581 WebContents::FromRenderViewHost(render_view_host_);
580 if (GetViewType(web_contents) == VIEW_TYPE_TAB_CONTENTS) { 582 if (GetViewType(web_contents) == VIEW_TYPE_TAB_CONTENTS) {
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 bool BookmarkManagerPrivateCanOpenNewWindowsFunction::RunOnReady() { 725 bool BookmarkManagerPrivateCanOpenNewWindowsFunction::RunOnReady() {
724 bool can_open_new_windows = true; 726 bool can_open_new_windows = true;
725 SetResult(new base::FundamentalValue(can_open_new_windows)); 727 SetResult(new base::FundamentalValue(can_open_new_windows));
726 return true; 728 return true;
727 } 729 }
728 730
729 bool BookmarkManagerPrivateRemoveTreesFunction::RunOnReady() { 731 bool BookmarkManagerPrivateRemoveTreesFunction::RunOnReady() {
730 scoped_ptr<RemoveTrees::Params> params(RemoveTrees::Params::Create(*args_)); 732 scoped_ptr<RemoveTrees::Params> params(RemoveTrees::Params::Create(*args_));
731 EXTENSION_FUNCTION_VALIDATE(params); 733 EXTENSION_FUNCTION_VALIDATE(params);
732 734
733 BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile()); 735 ChromeBookmarkClient* client = GetChromeBookmarkClient();
734 #if !defined(OS_ANDROID) 736 #if !defined(OS_ANDROID)
735 bookmarks::ScopedGroupBookmarkActions group_deletes(model); 737 bookmarks::ScopedGroupBookmarkActions group_deletes(client->model());
736 #endif 738 #endif
737 int64 id; 739 int64 id;
738 for (size_t i = 0; i < params->id_list.size(); ++i) { 740 for (size_t i = 0; i < params->id_list.size(); ++i) {
739 if (!GetBookmarkIdAsInt64(params->id_list[i], &id)) 741 if (!GetBookmarkIdAsInt64(params->id_list[i], &id))
740 return false; 742 return false;
741 if (!bookmark_api_helpers::RemoveNode(model, id, true, &error_)) 743 if (!bookmark_api_helpers::RemoveNode(client, id, true, &error_))
742 return false; 744 return false;
743 } 745 }
744 746
745 return true; 747 return true;
746 } 748 }
747 749
748 bool BookmarkManagerPrivateUndoFunction::RunOnReady() { 750 bool BookmarkManagerPrivateUndoFunction::RunOnReady() {
749 #if !defined(OS_ANDROID) 751 #if !defined(OS_ANDROID)
750 BookmarkUndoServiceFactory::GetForProfile(GetProfile())->undo_manager()-> 752 BookmarkUndoServiceFactory::GetForProfile(GetProfile())->undo_manager()->
751 Undo(); 753 Undo();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
787 result.enabled = undo_manager->redo_count() > 0; 789 result.enabled = undo_manager->redo_count() > 0;
788 result.label = base::UTF16ToUTF8(undo_manager->GetRedoLabel()); 790 result.label = base::UTF16ToUTF8(undo_manager->GetRedoLabel());
789 791
790 results_ = RedoInfo::Results::Create(result); 792 results_ = RedoInfo::Results::Create(result);
791 #endif // !defined(OS_ANDROID) 793 #endif // !defined(OS_ANDROID)
792 794
793 return true; 795 return true;
794 } 796 }
795 797
796 } // namespace extensions 798 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698