summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/bookmarks/bookmark_context_menu_controller.cc38
-rw-r--r--chrome/browser/views/bookmark_context_menu_test.cc36
2 files changed, 54 insertions, 20 deletions
diff --git a/chrome/browser/bookmarks/bookmark_context_menu_controller.cc b/chrome/browser/bookmarks/bookmark_context_menu_controller.cc
index 0ce5386..1c6e8b4 100644
--- a/chrome/browser/bookmarks/bookmark_context_menu_controller.cc
+++ b/chrome/browser/bookmarks/bookmark_context_menu_controller.cc
@@ -240,7 +240,6 @@ void BookmarkContextMenuController::BuildMenu() {
} else {
delegate_->AddItem(IDS_BOOKMARK_BAR_EDIT);
}
- delegate_->AddItem(IDS_BOOKMARK_BAR_REMOVE);
if (configuration_ == BOOKMARK_MANAGER_TABLE ||
configuration_ == BOOKMARK_MANAGER_TABLE_OTHER ||
@@ -249,16 +248,13 @@ void BookmarkContextMenuController::BuildMenu() {
delegate_->AddItem(IDS_BOOKMARK_MANAGER_SHOW_IN_FOLDER);
}
- if (configuration_ == BOOKMARK_MANAGER_TABLE ||
- configuration_ == BOOKMARK_MANAGER_TABLE_OTHER ||
- configuration_ == BOOKMARK_MANAGER_TREE ||
- configuration_ == BOOKMARK_MANAGER_ORGANIZE_MENU ||
- configuration_ == BOOKMARK_MANAGER_ORGANIZE_MENU_OTHER) {
- delegate_->AddSeparator();
- delegate_->AddItem(IDS_CUT);
- delegate_->AddItem(IDS_COPY);
- delegate_->AddItem(IDS_PASTE);
- }
+ delegate_->AddSeparator();
+ delegate_->AddItem(IDS_CUT);
+ delegate_->AddItem(IDS_COPY);
+ delegate_->AddItem(IDS_PASTE);
+
+ delegate_->AddSeparator();
+ delegate_->AddItem(IDS_BOOKMARK_BAR_REMOVE);
if (configuration_ == BOOKMARK_MANAGER_ORGANIZE_MENU) {
delegate_->AddSeparator();
@@ -395,7 +391,7 @@ void BookmarkContextMenuController::ExecuteCommand(int id) {
case IDS_CUT:
delegate_->WillRemoveBookmarks(selection_);
- bookmark_utils::CopyToClipboard(model, selection_, false);
+ bookmark_utils::CopyToClipboard(model, selection_, true);
delegate_->DidRemoveBookmarks();
break;
@@ -404,14 +400,14 @@ void BookmarkContextMenuController::ExecuteCommand(int id) {
break;
case IDS_PASTE: {
- // Always paste to parent.
- if (!parent_)
+ const BookmarkNode* paste_target = GetParentForNewNodes();
+ if (!paste_target)
return;
- int index = (selection_.size() == 1) ?
- parent_->IndexOfChild(selection_[0]) : -1;
- if (index != -1)
- index++;
+ int index = -1;
+ if (selection_.size() == 1 && selection_[0]->is_url())
+ index = paste_target->IndexOfChild(selection_[0]) + 1;
+
bookmark_utils::PasteFromClipboard(model, parent_, index);
break;
}
@@ -465,8 +461,10 @@ bool BookmarkContextMenuController::IsCommandEnabled(int id) const {
return selection_.size() > 0 && !is_root_node;
case IDS_PASTE:
- // Always paste to parent.
- return bookmark_utils::CanPasteFromClipboard(parent_);
+ // Paste to selection from the Bookmark Bar, to parent_ everywhere else
+ return (configuration_ == BOOKMARK_BAR && !selection_.empty() &&
+ bookmark_utils::CanPasteFromClipboard(selection_[0])) ||
+ bookmark_utils::CanPasteFromClipboard(parent_);
}
return true;
}
diff --git a/chrome/browser/views/bookmark_context_menu_test.cc b/chrome/browser/views/bookmark_context_menu_test.cc
index b33745b..d4cf790 100644
--- a/chrome/browser/views/bookmark_context_menu_test.cc
+++ b/chrome/browser/views/bookmark_context_menu_test.cc
@@ -300,3 +300,39 @@ TEST_F(BookmarkContextMenuTest, EmptyNodesNullParent) {
EXPECT_FALSE(
controller.IsCommandEnabled(IDS_BOOMARK_BAR_NEW_FOLDER));
}
+
+TEST_F(BookmarkContextMenuTest, CutCopyPasteNode) {
+ std::vector<const BookmarkNode*> nodes;
+ nodes.push_back(model_->GetBookmarkBarNode()->GetChild(0));
+ BookmarkContextMenu* controller = new BookmarkContextMenu(
+ NULL, profile_.get(), NULL, nodes[0]->GetParent(), nodes,
+ BookmarkContextMenuController::BOOKMARK_BAR);
+ EXPECT_TRUE(controller->IsCommandEnabled(IDS_COPY));
+ EXPECT_TRUE(controller->IsCommandEnabled(IDS_CUT));
+
+ // Copy the URL.
+ controller->ExecuteCommand(IDS_COPY);
+
+ controller = new BookmarkContextMenu(
+ NULL, profile_.get(), NULL, nodes[0]->GetParent(), nodes,
+ BookmarkContextMenuController::BOOKMARK_BAR);
+ int old_count = model_->GetBookmarkBarNode()->GetChildCount();
+ controller->ExecuteCommand(IDS_PASTE);
+
+ ASSERT_TRUE(model_->GetBookmarkBarNode()->GetChild(1)->is_url());
+ ASSERT_EQ(old_count + 1, model_->GetBookmarkBarNode()->GetChildCount());
+ ASSERT_EQ(model_->GetBookmarkBarNode()->GetChild(0)->GetURL(),
+ model_->GetBookmarkBarNode()->GetChild(1)->GetURL());
+
+ controller = new BookmarkContextMenu(
+ NULL, profile_.get(), NULL, nodes[0]->GetParent(), nodes,
+ BookmarkContextMenuController::BOOKMARK_BAR);
+ // Cut the URL.
+ controller->ExecuteCommand(IDS_CUT);
+ ASSERT_TRUE(model_->GetBookmarkBarNode()->GetChild(0)->is_url());
+ ASSERT_TRUE(model_->GetBookmarkBarNode()->GetChild(1)->is_folder());
+ ASSERT_EQ(old_count, model_->GetBookmarkBarNode()->GetChildCount());
+
+ delete controller;
+}
+