15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_context_menu_controller.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/command_line.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/bookmarks/chrome_bookmark_client.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/bookmarks/chrome_bookmark_client_factory.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/incognito_mode_prefs.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/bookmarks/bookmark_editor.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_utils.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/chrome_pages.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/undo/bookmark_undo_service.h" 22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/undo/bookmark_undo_service_factory.h" 23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h" 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/bookmarks/browser/bookmark_client.h" 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_model.h" 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_utils.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/page_navigator.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UserMetricsAction; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::PageNavigator; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BookmarkContextMenuController::BookmarkContextMenuController( 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::NativeWindow parent_window, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuControllerDelegate* delegate, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PageNavigator* navigator, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* parent, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<const BookmarkNode*>& selection) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : parent_window_(parent_window), 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_(delegate), 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_(browser), 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_(profile), 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigator_(navigator), 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent_(parent), 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_(selection), 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_(BookmarkModelFactory::GetForProfile(profile)) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(profile_); 53b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) DCHECK(model_->loaded()); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.reset(new ui::SimpleMenuModel(this)); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddObserver(this); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BuildMenu(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BookmarkContextMenuController::~BookmarkContextMenuController() { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (model_) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->RemoveObserver(this); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BookmarkContextMenuController::BuildMenu() { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (selection_.size() == 1 && selection_[0]->is_url()) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_OPEN_ALL, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_BOOKMARK_BAR_OPEN_IN_NEW_TAB); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_BOOKMARK_BAR_OPEN_IN_NEW_WINDOW); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_BOOKMARK_BAR_OPEN_INCOGNITO); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_OPEN_ALL, IDS_BOOKMARK_BAR_OPEN_ALL); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_BOOKMARK_BAR_OPEN_ALL_INCOGNITO); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSeparator(); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (selection_.size() == 1 && selection_[0]->is_folder()) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_RENAME_FOLDER, IDS_BOOKMARK_BAR_RENAME_FOLDER); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_EDIT, IDS_BOOKMARK_BAR_EDIT); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSeparator(); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_CUT, IDS_CUT); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_COPY, IDS_COPY); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_PASTE, IDS_PASTE); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSeparator(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_REMOVE, IDS_BOOKMARK_BAR_REMOVE); 95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) switches::kEnableBookmarkUndo)) { 97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_UNDO, IDS_BOOKMARK_BAR_UNDO); 98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_REDO, IDS_BOOKMARK_BAR_REDO); 99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSeparator(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK, IDS_BOOKMARK_BAR_ADD_NEW_BOOKMARK); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_BOOKMARK_BAR_NEW_FOLDER, IDS_BOOKMARK_BAR_NEW_FOLDER); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSeparator(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItem(IDC_BOOKMARK_MANAGER, IDS_BOOKMARK_MANAGER); 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Use the native host desktop type in tests. 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (chrome::IsAppsShortcutEnabled( 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile_, 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser_ ? browser_->host_desktop_type() 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : chrome::HOST_DESKTOP_TYPE_NATIVE)) { 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddCheckboxItem(IDC_BOOKMARK_BAR_SHOW_APPS_SHORTCUT, 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_BOOKMARK_BAR_SHOW_APPS_SHORTCUT); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AddCheckboxItem(IDC_BOOKMARK_BAR_SHOW_MANAGED_BOOKMARKS, 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IDS_BOOKMARK_BAR_SHOW_MANAGED_BOOKMARKS_DEFAULT_NAME); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCheckboxItem(IDC_BOOKMARK_BAR_ALWAYS_SHOW, IDS_SHOW_BOOKMARK_BAR); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BookmarkContextMenuController::AddItem(int id, int localization_id) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_->AddItemWithStringId(id, localization_id); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BookmarkContextMenuController::AddSeparator() { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BookmarkContextMenuController::AddCheckboxItem(int id, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int localization_id) { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_->AddCheckItemWithStringId(id, localization_id); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void BookmarkContextMenuController::ExecuteCommand(int id, int event_flags) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->WillExecuteCommand(id, selection_); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (id) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_OPEN_ALL: 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO: 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW: { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition initial_disposition; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (id == IDC_BOOKMARK_BAR_OPEN_ALL) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initial_disposition = NEW_BACKGROUND_TAB; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("BookmarkBar_ContextMenu_OpenAll")); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (id == IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW) { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initial_disposition = NEW_WINDOW; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("BookmarkBar_ContextMenu_OpenAllInNewWindow")); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initial_disposition = OFF_THE_RECORD; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("BookmarkBar_ContextMenu_OpenAllIncognito")); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::OpenAll(parent_window_, navigator_, selection_, 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) initial_disposition, profile_); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_RENAME_FOLDER: 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_EDIT: 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("BookmarkBar_ContextMenu_Edit")); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (selection_.size() != 1) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkEditor::Show( 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent_window_, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkEditor::EditDetails::EditNode(selection_[0]), 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_[0]->is_url() ? BookmarkEditor::SHOW_TREE : 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkEditor::NO_TREE); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 178a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case IDC_BOOKMARK_BAR_UNDO: { 179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) content::RecordAction( 180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) UserMetricsAction("BookmarkBar_ContextMenu_Undo")); 181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) BookmarkUndoServiceFactory::GetForProfile(profile_)->undo_manager()-> 182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Undo(); 183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) break; 184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case IDC_BOOKMARK_BAR_REDO: { 187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) content::RecordAction( 188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) UserMetricsAction("BookmarkBar_ContextMenu_Redo")); 189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) BookmarkUndoServiceFactory::GetForProfile(profile_)->undo_manager()-> 190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Redo(); 191a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) break; 192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 193a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_REMOVE: { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("BookmarkBar_ContextMenu_Remove")); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < selection_.size(); ++i) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index = selection_[i]->parent()->GetIndexOf(selection_[i]); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (index > -1) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->Remove(selection_[i]->parent(), index); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_.clear(); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK: { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("BookmarkBar_ContextMenu_Add")); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* parent = 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmarks::GetParentForNewNodes(parent_, selection_, &index); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url; 215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::GetURLAndTitleToBookmark( 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_->tab_strip_model()->GetActiveWebContents(), 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &url, &title); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkEditor::Show(parent_window_, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkEditor::EditDetails::AddNodeInFolder( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent, index, url, title), 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkEditor::SHOW_TREE); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_NEW_FOLDER: { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("BookmarkBar_ContextMenu_NewFolder")); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* parent = 233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmarks::GetParentForNewNodes(parent_, selection_, &index); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkEditor::Show( 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent_window_, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkEditor::EditDetails::AddFolder(parent, index), 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkEditor::SHOW_TREE); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_ALWAYS_SHOW: 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::ToggleBookmarkBarWhenVisible(profile_); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case IDC_BOOKMARK_BAR_SHOW_APPS_SHORTCUT: { 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* prefs = profile_->GetPrefs(); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs->SetBoolean( 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarks::prefs::kShowAppsShortcutInBookmarkBar, 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci !prefs->GetBoolean(bookmarks::prefs::kShowAppsShortcutInBookmarkBar)); 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case IDC_BOOKMARK_BAR_SHOW_MANAGED_BOOKMARKS: { 255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PrefService* prefs = profile_->GetPrefs(); 256f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs->SetBoolean( 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarks::prefs::kShowManagedBookmarksInBookmarkBar, 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci !prefs->GetBoolean( 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarks::prefs::kShowManagedBookmarksInBookmarkBar)); 260f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) break; 261f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 262f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_MANAGER: { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction(UserMetricsAction("ShowBookmarkManager")); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (selection_.size() != 1) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowBookmarkManager(browser_); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (selection_[0]->is_folder()) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowBookmarkManagerForNode(browser_, selection_[0]->id()); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (parent_) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowBookmarkManagerForNode(browser_, parent_->id()); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowBookmarkManager(browser_); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CUT: 277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmarks::CopyToClipboard(model_, selection_, true); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_COPY: 281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmarks::CopyToClipboard(model_, selection_, false); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_PASTE: { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* paste_target = 287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmarks::GetParentForNewNodes(parent_, selection_, &index); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!paste_target) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmarks::PasteFromClipboard(model_, paste_target, index); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->DidExecuteCommand(id); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool BookmarkContextMenuController::IsItemForCommandIdDynamic(int command_id) 3045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const { 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return command_id == IDC_BOOKMARK_BAR_UNDO || 306f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_id == IDC_BOOKMARK_BAR_REDO || 307f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_id == IDC_BOOKMARK_BAR_SHOW_MANAGED_BOOKMARKS; 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BookmarkContextMenuController::GetLabelForCommandId( 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int command_id) const { 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (command_id == IDC_BOOKMARK_BAR_UNDO) { 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return BookmarkUndoServiceFactory::GetForProfile(profile_)-> 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) undo_manager()->GetUndoLabel(); 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (command_id == IDC_BOOKMARK_BAR_REDO) { 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return BookmarkUndoServiceFactory::GetForProfile(profile_)-> 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) undo_manager()->GetRedoLabel(); 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 320f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (command_id == IDC_BOOKMARK_BAR_SHOW_MANAGED_BOOKMARKS) { 321f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ChromeBookmarkClient* client = 322f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ChromeBookmarkClientFactory::GetForProfile(profile_); 323f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return l10n_util::GetStringFUTF16(IDS_BOOKMARK_BAR_SHOW_MANAGED_BOOKMARKS, 324f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) client->managed_node()->GetTitle()); 325f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NOTREACHED(); 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base::string16(); 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BookmarkContextMenuController::IsCommandIdChecked(int command_id) const { 332eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PrefService* prefs = profile_->GetPrefs(); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_id == IDC_BOOKMARK_BAR_ALWAYS_SHOW) 3341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return prefs->GetBoolean(bookmarks::prefs::kShowBookmarkBar); 335f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (command_id == IDC_BOOKMARK_BAR_SHOW_MANAGED_BOOKMARKS) 3361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return prefs->GetBoolean( 3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarks::prefs::kShowManagedBookmarksInBookmarkBar); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(IDC_BOOKMARK_BAR_SHOW_APPS_SHORTCUT, command_id); 3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return prefs->GetBoolean(bookmarks::prefs::kShowAppsShortcutInBookmarkBar); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BookmarkContextMenuController::IsCommandIdEnabled(int command_id) const { 344eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PrefService* prefs = profile_->GetPrefs(); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_root_node = selection_.size() == 1 && 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_[0]->parent() == model_->root_node(); 3481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool can_edit = prefs->GetBoolean(bookmarks::prefs::kEditBookmarksEnabled) && 349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmarks::CanAllBeEditedByUser(model_->client(), selection_); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::Availability incognito_avail = 351eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IncognitoModePrefs::GetAvailability(prefs); 35246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (command_id) { 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_OPEN_INCOGNITO: 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !profile_->IsOffTheRecord() && 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) incognito_avail != IncognitoModePrefs::DISABLED; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO: 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return chrome::HasBookmarkURLsAllowedInIncognitoMode(selection_, profile_) 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) && 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !profile_->IsOffTheRecord() && 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) incognito_avail != IncognitoModePrefs::DISABLED; 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_OPEN_ALL: 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return chrome::HasBookmarkURLs(selection_); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW: 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return chrome::HasBookmarkURLs(selection_) && 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) incognito_avail != IncognitoModePrefs::FORCED; 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_RENAME_FOLDER: 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_EDIT: 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return selection_.size() == 1 && !is_root_node && can_edit; 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 374a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case IDC_BOOKMARK_BAR_UNDO: 375a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return can_edit && 376a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) BookmarkUndoServiceFactory::GetForProfile(profile_)-> 377a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) undo_manager()->undo_count() > 0; 378a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 379a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case IDC_BOOKMARK_BAR_REDO: 380a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return can_edit && 381a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) BookmarkUndoServiceFactory::GetForProfile(profile_)-> 382a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) undo_manager()->redo_count() > 0; 383a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_REMOVE: 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !selection_.empty() && !is_root_node && can_edit; 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_NEW_FOLDER: 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK: 38946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return can_edit && model_->client()->CanBeEditedByUser(parent_) && 390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmarks::GetParentForNewNodes(parent_, selection_, NULL) != NULL; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BOOKMARK_BAR_ALWAYS_SHOW: 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return !prefs->IsManagedPreference(bookmarks::prefs::kShowBookmarkBar); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case IDC_BOOKMARK_BAR_SHOW_APPS_SHORTCUT: 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return !prefs->IsManagedPreference( 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarks::prefs::kShowAppsShortcutInBookmarkBar); 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_COPY: 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CUT: 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !selection_.empty() && !is_root_node && 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (command_id == IDC_COPY || can_edit); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_PASTE: 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Paste to selection from the Bookmark Bar, to parent_ everywhere else 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return can_edit && 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((!selection_.empty() && 408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmarks::CanPasteFromClipboard(model_, selection_[0])) || 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmarks::CanPasteFromClipboard(model_, parent_)); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 414f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool BookmarkContextMenuController::IsCommandIdVisible(int command_id) const { 415f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (command_id == IDC_BOOKMARK_BAR_SHOW_MANAGED_BOOKMARKS) { 416f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The option to hide the Managed Bookmarks folder is only available if 417f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // there are any managed bookmarks configured at all. 418f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ChromeBookmarkClient* client = 419f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ChromeBookmarkClientFactory::GetForProfile(profile_); 420f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return !client->managed_node()->empty(); 421f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 422f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 423f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 424f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 425f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BookmarkContextMenuController::GetAcceleratorForCommandId( 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int command_id, 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator* accelerator) { 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BookmarkContextMenuController::BookmarkModelChanged() { 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->CloseMenu(); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 436