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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_CONTEXT_MENU_H_ 6 #define CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_CONTEXT_MENU_H_ 7 8 #include "ash/shelf/shelf_alignment_menu.h" 9 #include "ash/shelf/shelf_item_types.h" 10 #include "base/basictypes.h" 11 #include "base/gtest_prod_util.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "ui/base/models/simple_menu_model.h" 14 15 class ChromeLauncherController; 16 17 namespace ash { 18 class ShelfItemDelegate; 19 } 20 21 namespace aura { 22 class Window; 23 } 24 25 namespace extensions { 26 class ContextMenuMatcher; 27 } 28 29 // Context menu shown for a launcher item. 30 class LauncherContextMenu : public ui::SimpleMenuModel, 31 public ui::SimpleMenuModel::Delegate { 32 public: 33 // |item| is NULL if the context menu is for the launcher (the user right 34 // |clicked on an area with no icons). 35 LauncherContextMenu(ChromeLauncherController* controller, 36 const ash::ShelfItem* item, 37 aura::Window* root_window); 38 39 // Creates a menu used by item created by ShelfWindowWatcher. 40 LauncherContextMenu(ChromeLauncherController* controller, 41 ash::ShelfItemDelegate* item_delegate, 42 ash::ShelfItem* item, 43 aura::Window* root_window); 44 45 // Creates a menu used as a desktop context menu on |root_window|. 46 LauncherContextMenu(ChromeLauncherController* controller, 47 aura::Window* root_window); 48 virtual ~LauncherContextMenu(); 49 50 void Init(); 51 52 // ID of the item we're showing the context menu for. 53 ash::ShelfID id() const { return item_.id; } 54 55 // ui::SimpleMenuModel::Delegate overrides: 56 virtual bool IsItemForCommandIdDynamic(int command_id) const OVERRIDE; 57 virtual base::string16 GetLabelForCommandId(int command_id) const OVERRIDE; 58 virtual bool IsCommandIdChecked(int command_id) const OVERRIDE; 59 virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE; 60 virtual bool IsCommandIdVisible(int command_id) const OVERRIDE; 61 virtual bool GetAcceleratorForCommandId( 62 int command_id, 63 ui::Accelerator* accelerator) OVERRIDE; 64 virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE; 65 66 private: 67 FRIEND_TEST_ALL_PREFIXES( 68 LauncherContextMenuTest, 69 NewIncognitoWindowMenuIsDisabledWhenIncognitoModeOff); 70 FRIEND_TEST_ALL_PREFIXES( 71 LauncherContextMenuTest, 72 NewWindowMenuIsDisabledWhenIncognitoModeForced); 73 FRIEND_TEST_ALL_PREFIXES( 74 LauncherContextMenuTest, 75 AutoHideOptionInMaximizedMode); 76 77 enum MenuItem { 78 MENU_OPEN_NEW, 79 MENU_CLOSE, 80 MENU_PIN, 81 MENU_INSTALL, 82 LAUNCH_TYPE_PINNED_TAB, 83 LAUNCH_TYPE_REGULAR_TAB, 84 LAUNCH_TYPE_FULLSCREEN, 85 LAUNCH_TYPE_WINDOW, 86 MENU_AUTO_HIDE, 87 MENU_NEW_WINDOW, 88 MENU_NEW_INCOGNITO_WINDOW, 89 MENU_ALIGNMENT_MENU, 90 #if defined(OS_CHROMEOS) 91 MENU_CHANGE_WALLPAPER, 92 #endif 93 }; 94 95 // Does |item_| represent a valid item? See description of constructor for 96 // details on why it may not be valid. 97 bool is_valid_item() const { return item_.id != 0; } 98 99 ChromeLauncherController* controller_; 100 101 ash::ShelfItem item_; 102 103 ash::ShelfAlignmentMenu shelf_alignment_menu_; 104 105 scoped_ptr<extensions::ContextMenuMatcher> extension_items_; 106 107 aura::Window* root_window_; 108 109 // Not owned. 110 ash::ShelfItemDelegate* item_delegate_; 111 112 DISALLOW_COPY_AND_ASSIGN(LauncherContextMenu); 113 }; 114 115 #endif // CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_CONTEXT_MENU_H_ 116