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

Side by Side Diff: chrome/browser/ui/toolbar/wrench_menu_model.h

Issue 1417423003: chrome: Rename WrenchMenuModel to AppMenuModel. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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
OLDNEW
(Empty)
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_TOOLBAR_WRENCH_MENU_MODEL_H_
6 #define CHROME_BROWSER_UI_TOOLBAR_WRENCH_MENU_MODEL_H_
7
8 #include "base/files/file_path.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/time/time.h"
11 #include "base/timer/elapsed_timer.h"
12 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
13 #include "content/public/browser/host_zoom_map.h"
14 #include "content/public/browser/notification_observer.h"
15 #include "content/public/browser/notification_registrar.h"
16 #include "ui/base/accelerators/accelerator.h"
17 #include "ui/base/models/button_menu_item_model.h"
18 #include "ui/base/models/simple_menu_model.h"
19
20 class BookmarkSubMenuModel;
21 class Browser;
22 class RecentTabsSubMenuModel;
23
24 namespace {
25 class MockWrenchMenuModel;
26 } // namespace
27
28 enum WrenchMenuAction {
29 MENU_ACTION_NEW_TAB = 0,
30 MENU_ACTION_NEW_WINDOW,
31 MENU_ACTION_NEW_INCOGNITO_WINDOW,
32 MENU_ACTION_SHOW_BOOKMARK_BAR,
33 MENU_ACTION_SHOW_BOOKMARK_MANAGER,
34 MENU_ACTION_IMPORT_SETTINGS,
35 MENU_ACTION_BOOKMARK_PAGE,
36 MENU_ACTION_BOOKMARK_ALL_TABS,
37 MENU_ACTION_PIN_TO_START_SCREEN,
38 MENU_ACTION_RESTORE_TAB,
39 MENU_ACTION_WIN_DESKTOP_RESTART,
40 MENU_ACTION_WIN8_METRO_RESTART,
41 MENU_ACTION_WIN_CHROMEOS_RESTART,
42 MENU_ACTION_DISTILL_PAGE,
43 MENU_ACTION_SAVE_PAGE,
44 MENU_ACTION_FIND,
45 MENU_ACTION_PRINT,
46 MENU_ACTION_CUT,
47 MENU_ACTION_COPY,
48 MENU_ACTION_PASTE,
49 MENU_ACTION_CREATE_HOSTED_APP,
50 MENU_ACTION_CREATE_SHORTCUTS,
51 MENU_ACTION_MANAGE_EXTENSIONS,
52 MENU_ACTION_TASK_MANAGER,
53 MENU_ACTION_CLEAR_BROWSING_DATA,
54 MENU_ACTION_VIEW_SOURCE,
55 MENU_ACTION_DEV_TOOLS,
56 MENU_ACTION_DEV_TOOLS_CONSOLE,
57 MENU_ACTION_DEV_TOOLS_DEVICES,
58 MENU_ACTION_PROFILING_ENABLED,
59 MENU_ACTION_ZOOM_MINUS,
60 MENU_ACTION_ZOOM_PLUS,
61 MENU_ACTION_FULLSCREEN,
62 MENU_ACTION_SHOW_HISTORY,
63 MENU_ACTION_SHOW_DOWNLOADS,
64 MENU_ACTION_SHOW_SYNC_SETUP,
65 MENU_ACTION_OPTIONS,
66 MENU_ACTION_ABOUT,
67 MENU_ACTION_HELP_PAGE_VIA_MENU,
68 MENU_ACTION_FEEDBACK,
69 MENU_ACTION_TOGGLE_REQUEST_TABLET_SITE,
70 MENU_ACTION_EXIT,
71 MENU_ACTION_RECENT_TAB,
72 MENU_ACTION_BOOKMARK_OPEN,
73 LIMIT_MENU_ACTION
74 };
75
76 // A menu model that builds the contents of an encoding menu.
77 class EncodingMenuModel : public ui::SimpleMenuModel,
78 public ui::SimpleMenuModel::Delegate {
79 public:
80 explicit EncodingMenuModel(Browser* browser);
81 ~EncodingMenuModel() override;
82
83 // Overridden from ui::SimpleMenuModel::Delegate:
84 bool IsCommandIdChecked(int command_id) const override;
85 bool IsCommandIdEnabled(int command_id) const override;
86 bool GetAcceleratorForCommandId(int command_id,
87 ui::Accelerator* accelerator) override;
88 void ExecuteCommand(int command_id, int event_flags) override;
89
90 private:
91 void Build();
92
93 Browser* browser_; // weak
94
95 DISALLOW_COPY_AND_ASSIGN(EncodingMenuModel);
96 };
97
98 // A menu model that builds the contents of the zoom menu.
99 class ZoomMenuModel : public ui::SimpleMenuModel {
100 public:
101 explicit ZoomMenuModel(ui::SimpleMenuModel::Delegate* delegate);
102 ~ZoomMenuModel() override;
103
104 private:
105 void Build();
106
107 DISALLOW_COPY_AND_ASSIGN(ZoomMenuModel);
108 };
109
110 class ToolsMenuModel : public ui::SimpleMenuModel {
111 public:
112 ToolsMenuModel(ui::SimpleMenuModel::Delegate* delegate, Browser* browser);
113 ~ToolsMenuModel() override;
114
115 private:
116 void Build(Browser* browser);
117
118 scoped_ptr<EncodingMenuModel> encoding_menu_model_;
119
120 DISALLOW_COPY_AND_ASSIGN(ToolsMenuModel);
121 };
122
123 // A menu model that builds the contents of the wrench menu.
124 class WrenchMenuModel : public ui::SimpleMenuModel,
125 public ui::SimpleMenuModel::Delegate,
126 public ui::ButtonMenuItemModel::Delegate,
127 public TabStripModelObserver,
128 public content::NotificationObserver {
129 public:
130 // Range of command IDs to use for the items in the recent tabs submenu.
131 static const int kMinRecentTabsCommandId = 1001;
132 static const int kMaxRecentTabsCommandId = 1200;
133
134 WrenchMenuModel(ui::AcceleratorProvider* provider, Browser* browser);
135 ~WrenchMenuModel() override;
136
137 // Overridden for ButtonMenuItemModel::Delegate:
138 bool DoesCommandIdDismissMenu(int command_id) const override;
139
140 // Overridden for both ButtonMenuItemModel::Delegate and SimpleMenuModel:
141 bool IsItemForCommandIdDynamic(int command_id) const override;
142 base::string16 GetLabelForCommandId(int command_id) const override;
143 bool GetIconForCommandId(int command_id, gfx::Image* icon) const override;
144 void ExecuteCommand(int command_id, int event_flags) override;
145 bool IsCommandIdChecked(int command_id) const override;
146 bool IsCommandIdEnabled(int command_id) const override;
147 bool IsCommandIdVisible(int command_id) const override;
148 bool GetAcceleratorForCommandId(int command_id,
149 ui::Accelerator* accelerator) override;
150
151 // Overridden from TabStripModelObserver:
152 void ActiveTabChanged(content::WebContents* old_contents,
153 content::WebContents* new_contents,
154 int index,
155 int reason) override;
156 void TabReplacedAt(TabStripModel* tab_strip_model,
157 content::WebContents* old_contents,
158 content::WebContents* new_contents,
159 int index) override;
160
161 // Overridden from content::NotificationObserver:
162 void Observe(int type,
163 const content::NotificationSource& source,
164 const content::NotificationDetails& details) override;
165
166 // Getters.
167 Browser* browser() const { return browser_; }
168
169 BookmarkSubMenuModel* bookmark_sub_menu_model() const {
170 return bookmark_sub_menu_model_.get();
171 }
172
173 // Calculates |zoom_label_| in response to a zoom change.
174 void UpdateZoomControls();
175
176 private:
177 class HelpMenuModel;
178 // Testing constructor used for mocking.
179 friend class ::MockWrenchMenuModel;
180
181 WrenchMenuModel();
182
183 void Build();
184
185 // Adds actionable global error menu items to the menu.
186 // Examples: Extension permissions and sign in errors.
187 // Returns a boolean indicating whether any menu items were added.
188 bool AddGlobalErrorMenuItems();
189
190 // Appends everything needed for the clipboard menu: a menu break, the
191 // clipboard menu content and the finalizing menu break.
192 void CreateCutCopyPasteMenu();
193
194 // Add a menu item for the browser action icons.
195 void CreateActionToolbarOverflowMenu();
196
197 // Appends everything needed for the zoom menu: a menu break, then the zoom
198 // menu content and then another menu break.
199 void CreateZoomMenu();
200
201 void OnZoomLevelChanged(const content::HostZoomMap::ZoomLevelChange& change);
202
203 bool ShouldShowNewIncognitoWindowMenuItem();
204
205 // Called when a command is selected.
206 // Logs UMA metrics about which command was chosen and how long the user
207 // took to select the command.
208 void LogMenuMetrics(int command_id);
209
210 // Helper function to record the menu action in a UMA histogram.
211 void LogMenuAction(int action_id);
212
213 // Time menu has been open. Used by LogMenuMetrics() to record the time
214 // to action when the user selects a menu item.
215 base::ElapsedTimer timer_;
216
217 // Whether a UMA menu action has been recorded since the menu is open.
218 // Only the first time to action is recorded since some commands
219 // (zoom controls) don't dimiss the menu.
220 bool uma_action_recorded_;
221
222 // Models for the special menu items with buttons.
223 scoped_ptr<ui::ButtonMenuItemModel> edit_menu_item_model_;
224 scoped_ptr<ui::ButtonMenuItemModel> zoom_menu_item_model_;
225
226 // Label of the zoom label in the zoom menu item.
227 base::string16 zoom_label_;
228
229 #if defined(GOOGLE_CHROME_BUILD)
230 // Help menu.
231 scoped_ptr<HelpMenuModel> help_menu_model_;
232 #endif
233
234 // Tools menu.
235 scoped_ptr<ToolsMenuModel> tools_menu_model_;
236
237 // Bookmark submenu.
238 scoped_ptr<BookmarkSubMenuModel> bookmark_sub_menu_model_;
239
240 // Recent Tabs submenu.
241 scoped_ptr<RecentTabsSubMenuModel> recent_tabs_sub_menu_model_;
242
243 ui::AcceleratorProvider* provider_; // weak
244
245 Browser* browser_; // weak
246
247 scoped_ptr<content::HostZoomMap::Subscription> browser_zoom_subscription_;
248 content::NotificationRegistrar registrar_;
249
250 DISALLOW_COPY_AND_ASSIGN(WrenchMenuModel);
251 };
252
253 #endif // CHROME_BROWSER_UI_TOOLBAR_WRENCH_MENU_MODEL_H_
OLDNEW
« no previous file with comments | « chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc ('k') | chrome/browser/ui/toolbar/wrench_menu_model.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698