No longer register app window placement preference keys on
[chromium-blink-merge.git] / chrome / browser / ui / browser_command_controller.h
blobf3cb34202179468ee9a2702096a537968f83ac5a
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.
5 #ifndef CHROME_BROWSER_UI_BROWSER_COMMAND_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_BROWSER_COMMAND_CONTROLLER_H_
8 #include <vector>
10 #include "base/prefs/pref_change_registrar.h"
11 #include "base/prefs/pref_member.h"
12 #include "chrome/browser/command_updater.h"
13 #include "chrome/browser/command_updater_delegate.h"
14 #include "chrome/browser/sessions/tab_restore_service_observer.h"
15 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
16 #include "ui/base/window_open_disposition.h"
18 class Browser;
19 class BrowserWindow;
20 class Profile;
22 namespace content {
23 struct NativeWebKeyboardEvent;
26 namespace chrome {
28 class BrowserCommandController : public CommandUpdaterDelegate,
29 public TabStripModelObserver,
30 public TabRestoreServiceObserver {
31 public:
32 explicit BrowserCommandController(Browser* browser);
33 virtual ~BrowserCommandController();
35 CommandUpdater* command_updater() { return &command_updater_; }
36 bool block_command_execution() const { return block_command_execution_; }
38 // Returns true if |command_id| is a reserved command whose keyboard shortcuts
39 // should not be sent to the renderer or |event| was triggered by a key that
40 // we never want to send to the renderer.
41 bool IsReservedCommandOrKey(int command_id,
42 const content::NativeWebKeyboardEvent& event);
44 // Sets if command execution shall be blocked. If |block| is true then
45 // following calls to ExecuteCommand() or ExecuteCommandWithDisposition()
46 // method will not execute the command, and the last blocked command will be
47 // recorded for retrieval.
48 void SetBlockCommandExecution(bool block);
50 // Gets the last blocked command after calling SetBlockCommandExecution(true).
51 // Returns the command id or -1 if there is no command blocked. The
52 // disposition type of the command will be stored in |*disposition| if it's
53 // not NULL.
54 int GetLastBlockedCommand(WindowOpenDisposition* disposition);
56 // Notifies the controller that state has changed in one of the following
57 // areas and it should update command states.
58 void TabStateChanged();
59 void ZoomStateChanged();
60 void ContentRestrictionsChanged();
61 void FullscreenStateChanged();
62 void PrintingStateChanged();
63 void LoadingStateChanged(bool is_loading, bool force);
65 // Shared state updating: these functions are static and public to share with
66 // outside code.
68 // Updates the open-file state.
69 static void UpdateOpenFileState(CommandUpdater* command_updater);
71 // Update commands whose state depends on incognito mode availability and that
72 // only depend on the profile.
73 static void UpdateSharedCommandsForIncognitoAvailability(
74 CommandUpdater* command_updater,
75 Profile* profile);
77 private:
78 class InterstitialObserver;
80 // Overridden from CommandUpdaterDelegate:
81 virtual void ExecuteCommandWithDisposition(
82 int id,
83 WindowOpenDisposition disposition) OVERRIDE;
85 // Overridden from TabStripModelObserver:
86 virtual void TabInsertedAt(content::WebContents* contents,
87 int index,
88 bool foreground) OVERRIDE;
89 virtual void TabDetachedAt(content::WebContents* contents,
90 int index) OVERRIDE;
91 virtual void TabReplacedAt(TabStripModel* tab_strip_model,
92 content::WebContents* old_contents,
93 content::WebContents* new_contents,
94 int index) OVERRIDE;
95 virtual void TabBlockedStateChanged(content::WebContents* contents,
96 int index) OVERRIDE;
98 // Overridden from TabRestoreServiceObserver:
99 virtual void TabRestoreServiceChanged(TabRestoreService* service) OVERRIDE;
100 virtual void TabRestoreServiceDestroyed(TabRestoreService* service) OVERRIDE;
101 virtual void TabRestoreServiceLoaded(TabRestoreService* service) OVERRIDE;
103 // Returns true if the regular Chrome UI (not the fullscreen one and
104 // not the single-tab one) is shown. Used for updating window command states
105 // only. Consider using SupportsWindowFeature if you need the mentioned
106 // functionality anywhere else.
107 bool IsShowingMainUI();
109 // Initialize state for all browser commands.
110 void InitCommandState();
112 // Update commands whose state depends on incognito mode availability.
113 void UpdateCommandsForIncognitoAvailability();
115 // Update commands whose state depends on the tab's state.
116 void UpdateCommandsForTabState();
118 // Update Zoom commands based on zoom state.
119 void UpdateCommandsForZoomState();
121 // Updates commands when the content's restrictions change.
122 void UpdateCommandsForContentRestrictionState();
124 // Updates commands for enabling developer tools.
125 void UpdateCommandsForDevTools();
127 // Updates commands for bookmark editing.
128 void UpdateCommandsForBookmarkEditing();
130 // Updates commands that affect the bookmark bar.
131 void UpdateCommandsForBookmarkBar();
133 // Updates commands that affect file selection dialogs in aggregate,
134 // namely the save-page-as state and the open-file state.
135 void UpdateCommandsForFileSelectionDialogs();
137 // Update commands whose state depends on the type of fullscreen mode the
138 // window is in.
139 void UpdateCommandsForFullscreenMode();
141 // Updates the printing command state.
142 void UpdatePrintingState();
144 // Updates the SHOW_SYNC_SETUP menu entry.
145 void OnSigninAllowedPrefChange();
147 // Updates the save-page-as command state.
148 void UpdateSaveAsState();
150 // Updates the show-sync command state.
151 void UpdateShowSyncState(bool show_main_ui);
153 // Ask the Reload/Stop button to change its icon, and update the Stop command
154 // state. |is_loading| is true if the current WebContents is loading.
155 // |force| is true if the button should change its icon immediately.
156 void UpdateReloadStopState(bool is_loading, bool force);
158 // Updates commands for find.
159 void UpdateCommandsForFind();
161 void UpdateTabRestoreCommandState();
163 // Add/remove observers for interstitial attachment/detachment from
164 // |contents|.
165 void AddInterstitialObservers(content::WebContents* contents);
166 void RemoveInterstitialObservers(content::WebContents* contents);
168 inline BrowserWindow* window();
169 inline Profile* profile();
171 Browser* browser_;
173 // The CommandUpdater that manages the browser window commands.
174 CommandUpdater command_updater_;
176 // Indicates if command execution is blocked.
177 bool block_command_execution_;
179 // Stores the last blocked command id when |block_command_execution_| is true.
180 int last_blocked_command_id_;
182 // Stores the disposition type of the last blocked command.
183 WindowOpenDisposition last_blocked_command_disposition_;
185 std::vector<InterstitialObserver*> interstitial_observers_;
187 PrefChangeRegistrar profile_pref_registrar_;
188 PrefChangeRegistrar local_pref_registrar_;
189 BooleanPrefMember pref_signin_allowed_;
191 DISALLOW_COPY_AND_ASSIGN(BrowserCommandController);
194 } // namespace chrome
196 #endif // CHROME_BROWSER_UI_BROWSER_COMMAND_CONTROLLER_H_