172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/compiler_specific.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/app/chrome_command_ids.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/bookmarks/bookmark_editor.h" 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/bookmarks/bookmark_folder_editor_controller.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/bookmarks/bookmark_model.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/bookmarks/bookmark_utils.h" 1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/metrics/user_metrics.h" 14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/prefs/pref_service.h" 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/profiles/profile.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser.h" 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/browser_list.h" 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/common/pref_names.h" 19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/page_navigator.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochBookmarkContextMenuControllerViews::BookmarkContextMenuControllerViews( 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen gfx::NativeWindow parent_window, 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen BookmarkContextMenuControllerViewsDelegate* delegate, 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Profile* profile, 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PageNavigator* navigator, 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BookmarkNode* parent, 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::vector<const BookmarkNode*>& selection) 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : parent_window_(parent_window), 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_(delegate), 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_(profile), 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch navigator_(navigator), 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch parent_(parent), 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch selection_(selection), 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model_(profile->GetBookmarkModel()) { 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(profile_); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(model_->IsLoaded()); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model_->AddObserver(this); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochBookmarkContextMenuControllerViews::~BookmarkContextMenuControllerViews() { 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (model_) 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model_->RemoveObserver(this); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BookmarkContextMenuControllerViews::BuildMenu() { 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (selection_.size() == 1 && selection_[0]->is_url()) { 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL, 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_BOOMARK_BAR_OPEN_IN_NEW_TAB); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW, 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_BOOMARK_BAR_OPEN_IN_NEW_WINDOW); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO, 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_BOOMARK_BAR_OPEN_INCOGNITO); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL, 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_BOOMARK_BAR_OPEN_ALL); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW, 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_BOOMARK_BAR_OPEN_ALL_NEW_WINDOW); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO, 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_BOOMARK_BAR_OPEN_ALL_INCOGNITO); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddSeparator(); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (selection_.size() == 1 && selection_[0]->is_folder()) { 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_RENAME_FOLDER, 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_BOOKMARK_BAR_RENAME_FOLDER); 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_EDIT, 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_BOOKMARK_BAR_EDIT); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddSeparator(); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_CUT, IDS_CUT); 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_COPY, IDS_COPY); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_PASTE, IDS_PASTE); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddSeparator(); 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_REMOVE, 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_BOOKMARK_BAR_REMOVE); 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddSeparator(); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK, 834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch IDS_BOOMARK_BAR_ADD_NEW_BOOKMARK); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_NEW_FOLDER, 854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch IDS_BOOMARK_BAR_NEW_FOLDER); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddSeparator(); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddItemWithStringId(IDC_BOOKMARK_MANAGER, IDS_BOOKMARK_MANAGER); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->AddCheckboxItem(IDC_BOOKMARK_BAR_ALWAYS_SHOW, 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_BOOMARK_BAR_ALWAYS_SHOW); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 92201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid BookmarkContextMenuControllerViews::ExecuteCommand(int id) { 944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch BookmarkModel* model = RemoveModelObserver(); 954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (id) { 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_OPEN_ALL: 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO: 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW: { 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WindowOpenDisposition initial_disposition; 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (id == IDC_BOOKMARK_BAR_OPEN_ALL) { 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch initial_disposition = NEW_FOREGROUND_TAB; 1034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch UserMetrics::RecordAction( 1044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch UserMetricsAction("BookmarkBar_ContextMenu_OpenAll"), 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (id == IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW) { 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch initial_disposition = NEW_WINDOW; 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserMetrics::RecordAction( 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserMetricsAction("BookmarkBar_ContextMenu_OpenAllInNewWindow"), 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_); 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch initial_disposition = OFF_THE_RECORD; 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserMetrics::RecordAction( 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserMetricsAction("BookmarkBar_ContextMenu_OpenAllIncognito"), 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_); 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bookmark_utils::OpenAll(parent_window_, profile_, navigator_, selection_, 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch initial_disposition); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_RENAME_FOLDER: 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_EDIT: 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserMetrics::RecordAction( 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserMetricsAction("BookmarkBar_ContextMenu_Edit"), profile_); 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (selection_.size() != 1) { 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (selection_[0]->is_url()) { 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarkEditor::Show(parent_window_, profile_, parent_, 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarkEditor::EditDetails(selection_[0]), 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarkEditor::SHOW_TREE); 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarkFolderEditorController::Show(profile_, parent_window_, 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch selection_[0], -1, 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarkFolderEditorController::EXISTING_BOOKMARK); 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_REMOVE: { 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserMetrics::RecordAction( 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UserMetricsAction("BookmarkBar_ContextMenu_Remove"), profile_); 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->WillRemoveBookmarks(selection_); 1484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch for (size_t i = 0; i < selection_.size(); ++i) { 149513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch model->Remove(selection_[i]->parent(), 1504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch selection_[i]->parent()->GetIndexOf(selection_[i])); 151513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->DidRemoveBookmarks(); 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen selection_.clear(); 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK: { 15821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen UserMetrics::RecordAction( 15921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen UserMetricsAction("BookmarkBar_ContextMenu_Add"), profile_); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // TODO: this should honor the index from GetParentForNewNodes. 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarkEditor::Show( 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch parent_window_, profile_, 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bookmark_utils::GetParentForNewNodes(parent_, selection_, NULL), 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarkEditor::EditDetails(), BookmarkEditor::SHOW_TREE); 1664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch break; 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch case IDC_BOOKMARK_BAR_NEW_FOLDER: { 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserMetrics::RecordAction( 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserMetricsAction("BookmarkBar_ContextMenu_NewFolder"), 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_); 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int index; 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BookmarkNode* parent = 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bookmark_utils::GetParentForNewNodes(parent_, selection_, &index); 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarkFolderEditorController::Show(profile_, parent_window_, parent, 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch index, BookmarkFolderEditorController::NEW_BOOKMARK); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case IDC_BOOKMARK_BAR_ALWAYS_SHOW: 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bookmark_utils::ToggleWhenVisible(profile_); 18372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 18472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch case IDC_BOOKMARK_MANAGER: 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserMetrics::RecordAction(UserMetricsAction("ShowBookmarkManager"), 1874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch profile_); 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { 1894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch Browser* browser = BrowserList::GetLastActiveWithProfile(profile_); 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (browser) 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser->OpenBookmarkManager(); 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch else 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 1964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_CUT: 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->WillRemoveBookmarks(selection_); 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bookmark_utils::CopyToClipboard(model, selection_, true); 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->DidRemoveBookmarks(); 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_COPY: 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bookmark_utils::CopyToClipboard(model, selection_, false); 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_PASTE: { 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int index; 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BookmarkNode* paste_target = 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bookmark_utils::GetParentForNewNodes(parent_, selection_, &index); 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!paste_target) 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 213513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bookmark_utils::PasteFromClipboard(model, paste_target, index); 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 216513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 217513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 218513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch default: 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 220513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool BookmarkContextMenuControllerViews::IsItemChecked(int id) const { 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(id == IDC_BOOKMARK_BAR_ALWAYS_SHOW); 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar); 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 227513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 228513209b27ff55e2841eac0e4120199c23acce758Ben Murdochbool BookmarkContextMenuControllerViews::IsCommandEnabled(int id) const { 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_root_node = 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (selection_.size() == 1 && 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch selection_[0]->parent() == model_->root_node()); 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool can_edit = 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_->GetPrefs()->GetBoolean(prefs::kEditBookmarksEnabled); 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (id) { 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_OPEN_INCOGNITO: 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return !profile_->IsOffTheRecord() && 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_->GetPrefs()->GetBoolean(prefs::kIncognitoEnabled); 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO: 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return HasURLs() && !profile_->IsOffTheRecord() && 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_->GetPrefs()->GetBoolean(prefs::kIncognitoEnabled); 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_OPEN_ALL: 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW: 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return HasURLs(); 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_RENAME_FOLDER: 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_EDIT: 249513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return selection_.size() == 1 && !is_root_node && can_edit; 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_REMOVE: 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return !selection_.empty() && !is_root_node && can_edit; 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_NEW_FOLDER: 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK: 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return can_edit && bookmark_utils::GetParentForNewNodes( 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch parent_, selection_, NULL) != NULL; 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_BOOKMARK_BAR_ALWAYS_SHOW: 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return !profile_->GetPrefs()->IsManagedPreference( 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs::kEnableBookmarkBar); 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_COPY: 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_CUT: 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return !selection_.empty() && !is_root_node && 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (id == IDC_COPY || can_edit); 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_PASTE: 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Paste to selection from the Bookmark Bar, to parent_ everywhere else 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return can_edit && 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ((!selection_.empty() && 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bookmark_utils::CanPasteFromClipboard(selection_[0])) || 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bookmark_utils::CanPasteFromClipboard(parent_)); 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 2754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return true; 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 27872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid BookmarkContextMenuControllerViews::BookmarkModelChanged() { 27972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delegate_->CloseMenu(); 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochBookmarkModel* BookmarkContextMenuControllerViews::RemoveModelObserver() { 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarkModel* model = model_; 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model_->RemoveObserver(this); 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model_ = NULL; 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return model; 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool BookmarkContextMenuControllerViews::HasURLs() const { 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < selection_.size(); ++i) { 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (bookmark_utils::NodeHasURLs(selection_[i])) 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch