| Index: chrome/browser/ui/browser_command_controller.cc
|
| diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc
|
| index 16d4f41bebdb622578dfeb53d31d82fa48971bf4..27ed93c582719d479a100e8b721d1bcf63fc1a84 100644
|
| --- a/chrome/browser/ui/browser_command_controller.cc
|
| +++ b/chrome/browser/ui/browser_command_controller.cc
|
| @@ -60,6 +60,18 @@ using content::WebContents;
|
|
|
| namespace {
|
|
|
| +enum WindowState {
|
| + // Not in fullscreen mode.
|
| + WINDOW_STATE_NOT_FULLSCREEN,
|
| +
|
| + // Fullscreen mode, occupying the whole screen.
|
| + WINDOW_STATE_FULLSCREEN,
|
| +
|
| + // Fullscreen mode for metro snap, occupying the full height and 20% of
|
| + // the screen width.
|
| + WINDOW_STATE_METRO_SNAP,
|
| +};
|
| +
|
| // Returns |true| if entry has an internal chrome:// URL, |false| otherwise.
|
| bool HasInternalURL(const NavigationEntry* entry) {
|
| if (!entry)
|
| @@ -197,6 +209,12 @@ BrowserCommandController::BrowserCommandController(
|
| prefs::kPrintingEnabled,
|
| base::Bind(&BrowserCommandController::UpdatePrintingState,
|
| base::Unretained(this)));
|
| +#if !defined(OS_MACOSX)
|
| + profile_pref_registrar_.Add(
|
| + prefs::kFullscreenAllowed,
|
| + base::Bind(&BrowserCommandController::UpdateCommandsForFullscreenMode,
|
| + base::Unretained(this)));
|
| +#endif
|
| pref_signin_allowed_.Init(
|
| prefs::kSigninAllowed,
|
| profile()->GetOriginalProfile()->GetPrefs(),
|
| @@ -286,16 +304,7 @@ void BrowserCommandController::ContentRestrictionsChanged() {
|
| }
|
|
|
| void BrowserCommandController::FullscreenStateChanged() {
|
| - FullScreenMode fullscreen_mode = FULLSCREEN_DISABLED;
|
| - if (window()->IsFullscreen()) {
|
| -#if defined(OS_WIN)
|
| - fullscreen_mode = window()->IsInMetroSnapMode() ? FULLSCREEN_METRO_SNAP :
|
| - FULLSCREEN_NORMAL;
|
| -#else
|
| - fullscreen_mode = FULLSCREEN_NORMAL;
|
| -#endif
|
| - }
|
| - UpdateCommandsForFullscreenMode(fullscreen_mode);
|
| + UpdateCommandsForFullscreenMode();
|
| }
|
|
|
| void BrowserCommandController::PrintingStateChanged() {
|
| @@ -936,7 +945,7 @@ void BrowserCommandController::InitCommandState() {
|
| command_updater_.UpdateCommandEnabled(IDC_TOGGLE_SPEECH_INPUT, true);
|
|
|
| // Initialize other commands whose state changes based on fullscreen mode.
|
| - UpdateCommandsForFullscreenMode(FULLSCREEN_DISABLED);
|
| + UpdateCommandsForFullscreenMode();
|
|
|
| UpdateCommandsForContentRestrictionState();
|
|
|
| @@ -1087,11 +1096,18 @@ void BrowserCommandController::UpdateCommandsForFileSelectionDialogs() {
|
| UpdateOpenFileState(&command_updater_);
|
| }
|
|
|
| -void BrowserCommandController::UpdateCommandsForFullscreenMode(
|
| - FullScreenMode fullscreen_mode) {
|
| +void BrowserCommandController::UpdateCommandsForFullscreenMode() {
|
| + WindowState window_state = WINDOW_STATE_NOT_FULLSCREEN;
|
| + if (window() && window()->IsFullscreen()) {
|
| + window_state = WINDOW_STATE_FULLSCREEN;
|
| +#if defined(OS_WIN)
|
| + if (window()->IsInMetroSnapMode())
|
| + window_state = WINDOW_STATE_METRO_SNAP;
|
| +#endif
|
| + }
|
| bool show_main_ui = IsShowingMainUI();
|
| - bool main_not_fullscreen = show_main_ui &&
|
| - (fullscreen_mode == FULLSCREEN_DISABLED);
|
| + bool main_not_fullscreen =
|
| + show_main_ui && window_state == WINDOW_STATE_NOT_FULLSCREEN;
|
|
|
| // Navigation commands
|
| command_updater_.UpdateCommandEnabled(IDC_OPEN_CURRENT_URL, show_main_ui);
|
| @@ -1099,7 +1115,8 @@ void BrowserCommandController::UpdateCommandsForFullscreenMode(
|
| // Window management commands
|
| command_updater_.UpdateCommandEnabled(
|
| IDC_SHOW_AS_TAB,
|
| - !browser_->is_type_tabbed() && fullscreen_mode == FULLSCREEN_DISABLED);
|
| + !browser_->is_type_tabbed() &&
|
| + window_state == WINDOW_STATE_NOT_FULLSCREEN);
|
|
|
| // Focus various bits of UI
|
| command_updater_.UpdateCommandEnabled(IDC_FOCUS_TOOLBAR, show_main_ui);
|
| @@ -1138,13 +1155,19 @@ void BrowserCommandController::UpdateCommandsForFullscreenMode(
|
| #endif
|
|
|
| // Disable explicit fullscreen toggling when in metro snap mode.
|
| - bool fullscreen_enabled = fullscreen_mode != FULLSCREEN_METRO_SNAP;
|
| + bool fullscreen_enabled = window_state != WINDOW_STATE_METRO_SNAP;
|
| #if defined(OS_MACOSX)
|
| // The Mac implementation doesn't support switching to fullscreen while
|
| // a tab modal dialog is displayed.
|
| int tab_index = chrome::IndexOfFirstBlockedTab(browser_->tab_strip_model());
|
| bool has_blocked_tab = tab_index != browser_->tab_strip_model()->count();
|
| fullscreen_enabled &= !has_blocked_tab;
|
| +#else
|
| + if (window_state == WINDOW_STATE_NOT_FULLSCREEN &&
|
| + !profile()->GetPrefs()->GetBoolean(prefs::kFullscreenAllowed)) {
|
| + // Disable toggling into fullscreen mode if disallowed by pref.
|
| + fullscreen_enabled = false;
|
| + }
|
| #endif
|
|
|
| command_updater_.UpdateCommandEnabled(IDC_FULLSCREEN, fullscreen_enabled);
|
|
|