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

Unified Diff: chrome/browser/ui/browser.cc

Issue 10677009: Move command handling and updating off Browser and onto a helper object. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 6 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/browser.h ('k') | chrome/browser/ui/browser_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/browser.cc
===================================================================
--- chrome/browser/ui/browser.cc (revision 144460)
+++ chrome/browser/ui/browser.cc (working copy)
@@ -95,6 +95,7 @@
#include "chrome/browser/ui/app_modal_dialogs/javascript_dialog_creator.h"
#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
+#include "chrome/browser/ui/browser_command_controller.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_content_setting_bubble_model_delegate.h"
#include "chrome/browser/ui/browser_dialogs.h"
@@ -236,24 +237,6 @@
// How long we wait before updating the browser chrome while loading a page.
const int kUIUpdateCoalescingTimeMS = 200;
-// Returns |true| if entry has an internal chrome:// URL, |false| otherwise.
-bool HasInternalURL(const NavigationEntry* entry) {
- if (!entry)
- return false;
-
- // Check the |virtual_url()| first. This catches regular chrome:// URLs
- // including URLs that were rewritten (such as chrome://bookmarks).
- if (entry->GetVirtualURL().SchemeIs(chrome::kChromeUIScheme))
- return true;
-
- // If the |virtual_url()| isn't a chrome:// URL, check if it's actually
- // view-source: of a chrome:// URL.
- if (entry->GetVirtualURL().SchemeIs(chrome::kViewSourceScheme))
- return entry->GetURL().SchemeIs(chrome::kChromeUIScheme);
-
- return false;
-}
-
bool AllowPanels(const std::string& app_name) {
return PanelManager::ShouldUsePanels(
web_app::GetExtensionIdFromApplicationName(app_name));
@@ -316,7 +299,6 @@
window_(NULL),
ALLOW_THIS_IN_INITIALIZER_LIST(
tab_strip_model_(new TabStripModel(this, profile))),
- command_updater_(this),
app_type_(APP_TYPE_HOST),
chrome_updater_factory_(this),
is_attempting_to_close_browser_(false),
@@ -324,9 +306,6 @@
initial_show_state_(ui::SHOW_STATE_DEFAULT),
is_session_restore_(false),
weak_factory_(this),
- block_command_execution_(false),
- last_blocked_command_id_(-1),
- last_blocked_command_disposition_(CURRENT_TAB),
pending_web_app_action_(NONE),
ALLOW_THIS_IN_INITIALIZER_LIST(
content_setting_bubble_model_delegate_(
@@ -342,6 +321,8 @@
new BrowserSyncedWindowDelegate(this))),
bookmark_bar_state_(BookmarkBar::HIDDEN),
device_attached_intent_source_(this, this),
+ ALLOW_THIS_IN_INITIALIZER_LIST(
+ command_controller_(new chrome::BrowserCommandController(this))),
window_has_shown_(false) {
tab_strip_model_->AddObserver(this);
@@ -369,23 +350,12 @@
registrar_.Add(this, chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED,
content::NotificationService::AllSources());
- PrefService* local_state = g_browser_process->local_state();
- if (local_state) {
- local_pref_registrar_.Init(local_state);
- local_pref_registrar_.Add(prefs::kPrintingEnabled, this);
- local_pref_registrar_.Add(prefs::kAllowFileSelectionDialogs, this);
- local_pref_registrar_.Add(prefs::kInManagedMode, this);
- }
-
profile_pref_registrar_.Init(profile_->GetPrefs());
profile_pref_registrar_.Add(prefs::kDevToolsDisabled, this);
- profile_pref_registrar_.Add(prefs::kEditBookmarksEnabled, this);
profile_pref_registrar_.Add(prefs::kShowBookmarkBar, this);
profile_pref_registrar_.Add(prefs::kHomePage, this);
profile_pref_registrar_.Add(prefs::kInstantEnabled, this);
- profile_pref_registrar_.Add(prefs::kIncognitoModeAvailability, this);
- InitCommandState();
BrowserList::AddBrowser(this);
// NOTE: These prefs all need to be explicitly destroyed in the destructor
@@ -393,17 +363,6 @@
encoding_auto_detect_.Init(prefs::kWebKitUsesUniversalDetector,
profile_->GetPrefs(), NULL);
- tab_restore_service_ = TabRestoreServiceFactory::GetForProfile(profile);
- if (tab_restore_service_) {
- tab_restore_service_->AddObserver(this);
- TabRestoreServiceChanged(tab_restore_service_);
- }
-
- ProfileSyncService* service =
- ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_);
- if (service)
- service->AddObserver(this);
-
CreateInstantIfNecessary();
UpdateBookmarkBarState(BOOKMARK_BAR_STATE_CHANGE_INIT);
@@ -413,11 +372,6 @@
}
Browser::~Browser() {
- ProfileSyncService* service =
- ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_);
- if (service)
- service->RemoveObserver(this);
-
// The tab strip should not have any tabs at this point.
if (!browser_shutdown::ShuttingDownWithoutClosingBrowsers())
DCHECK(tab_strip_model_->empty());
@@ -451,10 +405,11 @@
#endif
profile_pref_registrar_.RemoveAll();
- local_pref_registrar_.RemoveAll();
encoding_auto_detect_.Destroy();
+ command_controller_.reset();
+
if (profile_->IsOffTheRecord() &&
!BrowserList::IsOffTheRecordSessionActiveForProfile(profile_)) {
// An incognito profile is no longer needed, this indirectly frees
@@ -466,8 +421,6 @@
// away so they don't try and call back to us.
if (select_file_dialog_.get())
select_file_dialog_->ListenerDestroyed();
-
- TabRestoreServiceDestroyed(tab_restore_service_);
}
// static
@@ -939,16 +892,7 @@
void Browser::WindowFullscreenStateChanged() {
fullscreen_controller_->WindowFullscreenStateChanged();
- 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);
+ command_controller_->FullscreenStateChanged();
UpdateBookmarkBarState(BOOKMARK_BAR_STATE_CHANGE_TOGGLE_FULLSCREEN);
}
@@ -1190,76 +1134,6 @@
final_update);
}
-void Browser::ExecuteCommand(int id) {
- ExecuteCommandWithDisposition(id, CURRENT_TAB);
-}
-
-void Browser::ExecuteCommand(int id, int event_flags) {
- ExecuteCommandWithDisposition(
- id, browser::DispositionFromEventFlags(event_flags));
-}
-
-bool Browser::ExecuteCommandIfEnabled(int id) {
- if (command_updater_.SupportsCommand(id) &&
- command_updater_.IsCommandEnabled(id)) {
- ExecuteCommand(id);
- return true;
- }
- return false;
-}
-
-bool Browser::IsReservedCommandOrKey(int command_id,
- const NativeWebKeyboardEvent& event) {
- // In Apps mode, no keys are reserved.
- if (is_app())
- return false;
-
-#if defined(OS_CHROMEOS)
- // Chrome OS's top row of keys produces F1-10. Make sure that web pages
- // aren't able to block Chrome from performing the standard actions for F1-F4.
- // We should not handle F5-10 here since they are processed by Ash. See also:
- // crbug.com/127333#c8
- ui::KeyboardCode key_code =
- static_cast<ui::KeyboardCode>(event.windowsKeyCode);
- if ((key_code == ui::VKEY_F1 ||
- key_code == ui::VKEY_F2 ||
- key_code == ui::VKEY_F3 ||
- key_code == ui::VKEY_F4) &&
- // Make sure it's a browser shortcut (i.e. not an Ash one like Alt+F4).
- command_id != -1) {
- return true;
- }
-#endif
-
- if (window_->IsFullscreen() && command_id == IDC_FULLSCREEN)
- return true;
- return command_id == IDC_CLOSE_TAB ||
- command_id == IDC_CLOSE_WINDOW ||
- command_id == IDC_NEW_INCOGNITO_WINDOW ||
- command_id == IDC_NEW_TAB ||
- command_id == IDC_NEW_WINDOW ||
- command_id == IDC_RESTORE_TAB ||
- command_id == IDC_SELECT_NEXT_TAB ||
- command_id == IDC_SELECT_PREVIOUS_TAB ||
- command_id == IDC_TABPOSE ||
- command_id == IDC_EXIT ||
- command_id == IDC_SEARCH;
-}
-
-void Browser::SetBlockCommandExecution(bool block) {
- block_command_execution_ = block;
- if (block) {
- last_blocked_command_id_ = -1;
- last_blocked_command_disposition_ = CURRENT_TAB;
- }
-}
-
-int Browser::GetLastBlockedCommand(WindowOpenDisposition* disposition) {
- if (disposition)
- *disposition = last_blocked_command_disposition_;
- return last_blocked_command_id_;
-}
-
void Browser::UpdateUIForNavigationInTab(TabContents* contents,
content::PageTransition transition,
bool user_initiated) {
@@ -1295,256 +1169,6 @@
return OpenURLFromTab(NULL, params);
}
-///////////////////////////////////////////////////////////////////////////////
-// Browser, CommandUpdater::CommandUpdaterDelegate implementation:
-
-void Browser::ExecuteCommandWithDisposition(
- int id, WindowOpenDisposition disposition) {
- // No commands are enabled if there is not yet any selected tab.
- // TODO(pkasting): It seems like we should not need this, because either
- // most/all commands should not have been enabled yet anyway or the ones that
- // are enabled should be global, or safe themselves against having no selected
- // tab. However, Ben says he tried removing this before and got lots of
- // crashes, e.g. from Windows sending WM_COMMANDs at random times during
- // window construction. This probably could use closer examination someday.
- if (!GetActiveTabContents())
- return;
-
- DCHECK(command_updater_.IsCommandEnabled(id)) << "Invalid/disabled command "
- << id;
-
- // If command execution is blocked then just record the command and return.
- if (block_command_execution_) {
- // We actually only allow no more than one blocked command, otherwise some
- // commands maybe lost.
- DCHECK_EQ(last_blocked_command_id_, -1);
- last_blocked_command_id_ = id;
- last_blocked_command_disposition_ = disposition;
- return;
- }
-
- // The order of commands in this switch statement must match the function
- // declaration order in browser.h!
- switch (id) {
- // Navigation commands
- case IDC_BACK: chrome::GoBack(this, disposition);break;
- case IDC_FORWARD:
- chrome::GoForward(this, disposition);
- break;
- case IDC_RELOAD: chrome::Reload(this, disposition);break;
- case IDC_RELOAD_IGNORING_CACHE:
- chrome::ReloadIgnoringCache(this, disposition);
- break;
- case IDC_HOME: chrome::Home(this, disposition); break;
- case IDC_OPEN_CURRENT_URL: chrome::OpenCurrentURL(this); break;
- case IDC_STOP: chrome::Stop(this); break;
-
- // Window management commands
- case IDC_NEW_WINDOW: chrome::NewWindow(this); break;
- case IDC_NEW_INCOGNITO_WINDOW: chrome::NewIncognitoWindow(this); break;
- case IDC_CLOSE_WINDOW: chrome::CloseWindow(this); break;
- case IDC_NEW_TAB: chrome::NewTab(this); break;
- case IDC_CLOSE_TAB: chrome::CloseTab(this); break;
- case IDC_SELECT_NEXT_TAB: chrome::SelectNextTab(this); break;
- case IDC_SELECT_PREVIOUS_TAB: chrome::SelectPreviousTab(this); break;
- case IDC_TABPOSE: chrome::OpenTabpose(this); break;
- case IDC_MOVE_TAB_NEXT: chrome::MoveTabNext(this); break;
- case IDC_MOVE_TAB_PREVIOUS: chrome::MoveTabPrevious(this); break;
- case IDC_SELECT_TAB_0:
- case IDC_SELECT_TAB_1:
- case IDC_SELECT_TAB_2:
- case IDC_SELECT_TAB_3:
- case IDC_SELECT_TAB_4:
- case IDC_SELECT_TAB_5:
- case IDC_SELECT_TAB_6:
- case IDC_SELECT_TAB_7:
- chrome::SelectNumberedTab(this, id - IDC_SELECT_TAB_0);
- break;
- case IDC_SELECT_LAST_TAB: chrome::SelectLastTab(this); break;
- case IDC_DUPLICATE_TAB: chrome::DuplicateTab(this); break;
- case IDC_RESTORE_TAB: RestoreTab(); break;
- case IDC_COPY_URL:
- chrome::WriteCurrentURLToClipboard(this);
- break;
- case IDC_SHOW_AS_TAB:
- chrome::ConvertPopupToTabbedBrowser(this);
- break;
- case IDC_FULLSCREEN: ToggleFullscreenMode(); break;
-#if defined(OS_WIN)
- case IDC_METRO_SNAP_ENABLE: SetMetroSnapMode(true); break;
- case IDC_METRO_SNAP_DISABLE: SetMetroSnapMode(false); break;
-#endif
-#if defined(OS_MACOSX)
- case IDC_PRESENTATION_MODE: TogglePresentationMode(); break;
-#endif
- case IDC_EXIT: chrome::Exit(); break;
-
- // Page-related commands
- case IDC_SAVE_PAGE: chrome::SavePage(this); break;
- case IDC_BOOKMARK_PAGE: chrome::BookmarkCurrentPage(this);break;
- case IDC_PIN_TO_START_SCREEN:
- chrome::PinCurrentPageToStartScreen(this);
- break;
- case IDC_BOOKMARK_ALL_TABS: BookmarkAllTabs(); break;
- case IDC_VIEW_SOURCE: chrome::ViewSelectedSource(this); break;
- case IDC_EMAIL_PAGE_LOCATION: chrome::EmailPageLocation(this); break;
- case IDC_PRINT: chrome::Print(this); break;
- case IDC_ADVANCED_PRINT: chrome::AdvancedPrint(this); break;
- case IDC_CHROME_TO_MOBILE_PAGE:
- chrome::ShowChromeToMobileBubble(this);
- break;
- case IDC_ENCODING_AUTO_DETECT: ToggleEncodingAutoDetect(); break;
- case IDC_ENCODING_UTF8:
- case IDC_ENCODING_UTF16LE:
- case IDC_ENCODING_ISO88591:
- case IDC_ENCODING_WINDOWS1252:
- case IDC_ENCODING_GBK:
- case IDC_ENCODING_GB18030:
- case IDC_ENCODING_BIG5HKSCS:
- case IDC_ENCODING_BIG5:
- case IDC_ENCODING_KOREAN:
- case IDC_ENCODING_SHIFTJIS:
- case IDC_ENCODING_ISO2022JP:
- case IDC_ENCODING_EUCJP:
- case IDC_ENCODING_THAI:
- case IDC_ENCODING_ISO885915:
- case IDC_ENCODING_MACINTOSH:
- case IDC_ENCODING_ISO88592:
- case IDC_ENCODING_WINDOWS1250:
- case IDC_ENCODING_ISO88595:
- case IDC_ENCODING_WINDOWS1251:
- case IDC_ENCODING_KOI8R:
- case IDC_ENCODING_KOI8U:
- case IDC_ENCODING_ISO88597:
- case IDC_ENCODING_WINDOWS1253:
- case IDC_ENCODING_ISO88594:
- case IDC_ENCODING_ISO885913:
- case IDC_ENCODING_WINDOWS1257:
- case IDC_ENCODING_ISO88593:
- case IDC_ENCODING_ISO885910:
- case IDC_ENCODING_ISO885914:
- case IDC_ENCODING_ISO885916:
- case IDC_ENCODING_WINDOWS1254:
- case IDC_ENCODING_ISO88596:
- case IDC_ENCODING_WINDOWS1256:
- case IDC_ENCODING_ISO88598:
- case IDC_ENCODING_ISO88598I:
- case IDC_ENCODING_WINDOWS1255:
- case IDC_ENCODING_WINDOWS1258: OverrideEncoding(id); break;
-
- // Clipboard commands
- case IDC_CUT: chrome::Cut(this); break;
- case IDC_COPY: chrome::Copy(this); break;
- case IDC_PASTE: chrome::Paste(this); break;
-
- // Find-in-page
- case IDC_FIND: chrome::Find(this); break;
- case IDC_FIND_NEXT: chrome::FindNext(this); break;
- case IDC_FIND_PREVIOUS: chrome::FindPrevious(this); break;
-
- // Zoom
- case IDC_ZOOM_PLUS:
- chrome::Zoom(this, content::PAGE_ZOOM_IN);
- break;
- case IDC_ZOOM_NORMAL:
- chrome::Zoom(this, content::PAGE_ZOOM_RESET);
- break;
- case IDC_ZOOM_MINUS:
- chrome::Zoom(this, content::PAGE_ZOOM_OUT);
- break;
-
- // Focus various bits of UI
- case IDC_FOCUS_TOOLBAR: chrome::FocusToolbar(this); break;
- case IDC_FOCUS_LOCATION: chrome::FocusLocationBar(this); break;
- case IDC_FOCUS_SEARCH: chrome::FocusSearch(this); break;
- case IDC_FOCUS_MENU_BAR: chrome::FocusAppMenu(this); break;
- case IDC_FOCUS_BOOKMARKS:
- chrome::FocusBookmarksToolbar(this);
- break;
- case IDC_FOCUS_NEXT_PANE: chrome::FocusNextPane(this); break;
- case IDC_FOCUS_PREVIOUS_PANE: chrome::FocusPreviousPane(this); break;
-
- // Show various bits of UI
- case IDC_OPEN_FILE: OpenFile(); break;
- case IDC_CREATE_SHORTCUTS: OpenCreateShortcutsDialog(); break;
- case IDC_DEV_TOOLS:
- chrome::ToggleDevToolsWindow(this, DEVTOOLS_TOGGLE_ACTION_NONE);
- break;
- case IDC_DEV_TOOLS_CONSOLE:
- chrome::ToggleDevToolsWindow(this, DEVTOOLS_TOGGLE_ACTION_SHOW_CONSOLE);
- break;
- case IDC_DEV_TOOLS_INSPECT:
- chrome::ToggleDevToolsWindow(this, DEVTOOLS_TOGGLE_ACTION_INSPECT);
- break;
- case IDC_TASK_MANAGER:
- chrome::OpenTaskManager(this, false);
- break;
- case IDC_VIEW_BACKGROUND_PAGES:
- chrome::OpenTaskManager(this, true);
- break;
- case IDC_FEEDBACK:
- chrome::OpenFeedbackDialog(this);
- break;
-
- case IDC_SHOW_BOOKMARK_BAR: chrome::ToggleBookmarkBar(this); break;
- case IDC_PROFILING_ENABLED: Profiling::Toggle(); break;
-
- case IDC_SHOW_BOOKMARK_MANAGER: chrome::ShowBookmarkManager(this);break;
- case IDC_SHOW_APP_MENU: chrome::ShowAppMenu(this); break;
- case IDC_SHOW_AVATAR_MENU: chrome::ShowAvatarMenu(this); break;
- case IDC_SHOW_HISTORY: chrome::ShowHistory(this); break;
- case IDC_SHOW_DOWNLOADS: chrome::ShowDownloads(this); break;
- case IDC_MANAGE_EXTENSIONS: chrome::ShowExtensions(this); break;
- case IDC_OPTIONS: chrome::ShowSettings(this); break;
- case IDC_EDIT_SEARCH_ENGINES:
- chrome::ShowSearchEngineSettings(this);
- break;
- case IDC_VIEW_PASSWORDS: chrome::ShowPasswordManager(this);break;
- case IDC_CLEAR_BROWSING_DATA:
- chrome::ShowClearBrowsingDataDialog(this);
- break;
- case IDC_IMPORT_SETTINGS: chrome::ShowImportDialog(this); break;
- case IDC_ABOUT: chrome::ShowAboutChrome(this); break;
- case IDC_UPGRADE_DIALOG:
- chrome::OpenUpdateChromeDialog(this);
- break;
- case IDC_VIEW_INCOMPATIBILITIES:
- chrome::ShowConflicts(this);
- break;
- case IDC_HELP_PAGE_VIA_KEYBOARD:
- chrome::ShowHelp(this, chrome::HELP_SOURCE_KEYBOARD);
- break;
- case IDC_HELP_PAGE_VIA_MENU:
- chrome::ShowHelp(this, chrome::HELP_SOURCE_MENU);
- break;
- case IDC_SHOW_SYNC_SETUP:
- chrome::ShowSyncSetup(this, SyncPromoUI::SOURCE_MENU);
- break;
- case IDC_TOGGLE_SPEECH_INPUT: chrome::ToggleSpeechInput(this); break;
-
- default:
- LOG(WARNING) << "Received Unimplemented Command: " << id;
- break;
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Browser, TabRestoreServiceObserver:
-
-void Browser::TabRestoreServiceChanged(TabRestoreService* service) {
- command_updater_.UpdateCommandEnabled(IDC_RESTORE_TAB,
- !service->entries().empty());
-}
-
-void Browser::TabRestoreServiceDestroyed(TabRestoreService* service) {
- if (!tab_restore_service_)
- return;
-
- DCHECK_EQ(tab_restore_service_, service);
- tab_restore_service_->RemoveObserver(this);
- tab_restore_service_ = NULL;
-}
-
// Centralized method for creating a TabContents, configuring and
// installing all its supporting objects and observers.
TabContents* Browser::TabContentsFactory(
@@ -1716,28 +1340,19 @@
}
bool Browser::CanBookmarkAllTabs() const {
- BookmarkModel* model = profile()->GetBookmarkModel();
- return (model && model->IsLoaded()) &&
- tab_count() > 1 &&
- profile()->GetPrefs()->GetBoolean(prefs::kEditBookmarksEnabled);
+ return chrome::CanBookmarkAllTabs(this);
}
void Browser::BookmarkAllTabs() {
- BookmarkEditor::ShowBookmarkAllTabsDialog(this);
+ chrome::BookmarkAllTabs(this);
}
bool Browser::CanRestoreTab() {
- return command_updater_.IsCommandEnabled(IDC_RESTORE_TAB);
+ return chrome::CanRestoreTab(this);
}
void Browser::RestoreTab() {
- content::RecordAction(UserMetricsAction("RestoreTab"));
- TabRestoreService* service =
- TabRestoreServiceFactory::GetForProfile(profile_);
- if (!service)
- return;
-
- service->RestoreMostRecentEntry(tab_restore_service_delegate());
+ chrome::RestoreTab(this);
}
///////////////////////////////////////////////////////////////////////////////
@@ -1837,10 +1452,11 @@
UpdateSearchState(new_contents);
// Update reload/stop state.
- UpdateReloadStopState(new_contents->web_contents()->IsLoading(), true);
+ command_controller_->LoadingStateChanged(
+ new_contents->web_contents()->IsLoading(), true);
// Update commands to reflect current state.
- UpdateCommandsForTabState();
+ command_controller_->TabStateChanged();
// Reset the status bubble.
StatusBubble* status_bubble = GetStatusBubble();
@@ -2048,7 +1664,7 @@
// actions in the face of slow-to-commit pages.
if (changed_flags & (content::INVALIDATE_TYPE_URL |
content::INVALIDATE_TYPE_LOAD))
- UpdateCommandsForTabState();
+ command_controller_->TabStateChanged();
}
void Browser::AddNewContents(WebContents* source,
@@ -2123,7 +1739,7 @@
WebContents* selected_contents = GetActiveWebContents();
if (source == selected_contents) {
bool is_loading = source->IsLoading();
- UpdateReloadStopState(is_loading, false);
+ command_controller_->LoadingStateChanged(is_loading, false);
if (GetStatusBubble()) {
GetStatusBubble()->SetStatus(
GetActiveTabContents()->core_tab_helper()->GetStatusText());
@@ -2207,7 +1823,7 @@
}
void Browser::ContentsZoomChange(bool zoom_in) {
- ExecuteCommand(zoom_in ? IDC_ZOOM_PLUS : IDC_ZOOM_MINUS);
+ chrome::ExecuteCommand(this, zoom_in ? IDC_ZOOM_PLUS : IDC_ZOOM_MINUS);
}
void Browser::WebContentsFocused(WebContents* contents) {
@@ -2405,7 +2021,7 @@
}
void Browser::ContentRestrictionsChanged(WebContents* source) {
- UpdateCommandsForContentRestrictionState();
+ command_controller_->ContentRestrictionsChanged();
}
void Browser::RendererUnresponsive(WebContents* source) {
@@ -2614,11 +2230,11 @@
}
bool Browser::CanReloadContents(TabContents* source) const {
- return !is_devtools();
+ return chrome::CanReload(this);
}
bool Browser::CanSaveContents(TabContents* source) const {
- return !is_devtools();
+ return chrome::CanSavePage(this);
}
///////////////////////////////////////////////////////////////////////////////
@@ -2639,7 +2255,7 @@
return;
}
tab_strip_model_->SetTabBlocked(index, blocked);
- UpdatePrintingState(tab_contents->web_contents()->GetContentRestrictions());
+ command_controller_->PrintingStateChanged();
if (!blocked && GetActiveTabContents() == tab_contents)
tab_contents->web_contents()->Focus();
}
@@ -2827,9 +2443,7 @@
case chrome::NOTIFICATION_PREF_CHANGED: {
const std::string& pref_name =
*content::Details<std::string>(details).ptr();
- if (pref_name == prefs::kPrintingEnabled) {
- UpdatePrintingState(GetContentRestrictionsForSelectedTab());
- } else if (pref_name == prefs::kInstantEnabled) {
+ if (pref_name == prefs::kInstantEnabled) {
if (browser_shutdown::ShuttingDownWithoutClosingBrowsers() ||
!InstantController::IsEnabled(profile())) {
if (instant()) {
@@ -2840,25 +2454,14 @@
} else {
CreateInstantIfNecessary();
}
- } else if (pref_name == prefs::kIncognitoModeAvailability) {
- UpdateCommandsForIncognitoAvailability();
} else if (pref_name == prefs::kDevToolsDisabled) {
- UpdateCommandsForDevTools();
if (profile_->GetPrefs()->GetBoolean(prefs::kDevToolsDisabled))
content::DevToolsManager::GetInstance()->CloseAllClientHosts();
- } else if (pref_name == prefs::kEditBookmarksEnabled) {
- UpdateCommandsForBookmarkEditing();
} else if (pref_name == prefs::kShowBookmarkBar) {
- UpdateCommandsForBookmarkBar();
UpdateBookmarkBarState(BOOKMARK_BAR_STATE_CHANGE_PREF_CHANGE);
} else if (pref_name == prefs::kHomePage) {
PrefService* pref_service = content::Source<PrefService>(source).ptr();
MarkHomePageAsChanged(pref_service);
- } else if (pref_name == prefs::kAllowFileSelectionDialogs) {
- UpdateSaveAsState(GetContentRestrictionsForSelectedTab());
- UpdateOpenFileState();
- } else if (pref_name == prefs::kInManagedMode) {
- UpdateCommandsForMultipleProfiles();
} else {
NOTREACHED();
}
@@ -2877,12 +2480,10 @@
case content::NOTIFICATION_INTERSTITIAL_ATTACHED:
UpdateBookmarkBarState(BOOKMARK_BAR_STATE_CHANGE_TAB_STATE);
- UpdateCommandsForTabState();
break;
case content::NOTIFICATION_INTERSTITIAL_DETACHED:
UpdateBookmarkBarState(BOOKMARK_BAR_STATE_CHANGE_TAB_STATE);
- UpdateCommandsForTabState();
break;
default:
@@ -2891,20 +2492,6 @@
}
///////////////////////////////////////////////////////////////////////////////
-// Browser, ProfileSyncServiceObserver implementation:
-
-void Browser::OnStateChanged() {
- DCHECK(ProfileSyncServiceFactory::GetInstance()->HasProfileSyncService(
- profile_));
- // For unit tests, we don't have a window.
- if (!window_)
- return;
- const bool show_main_ui = IsShowingMainUI(window_->IsFullscreen());
- command_updater_.UpdateCommandEnabled(IDC_SHOW_SYNC_SETUP,
- show_main_ui && profile_->GetOriginalProfile()->IsSyncAccessible());
-}
-
-///////////////////////////////////////////////////////////////////////////////
// Browser, InstantDelegate implementation:
void Browser::ShowInstant(TabContents* preview_contents) {
@@ -2963,418 +2550,10 @@
///////////////////////////////////////////////////////////////////////////////
// Browser, Command and state updating (private):
-bool Browser::IsShowingMainUI(bool is_fullscreen) {
-#if !defined(OS_MACOSX)
- return is_type_tabbed() && !is_fullscreen;
-#else
- return is_type_tabbed();
-#endif
-}
-
-void Browser::InitCommandState() {
- // All browser commands whose state isn't set automagically some other way
- // (like Back & Forward with initial page load) must have their state
- // initialized here, otherwise they will be forever disabled.
-
- // Navigation commands
- command_updater_.UpdateCommandEnabled(IDC_RELOAD, true);
- command_updater_.UpdateCommandEnabled(IDC_RELOAD_IGNORING_CACHE, true);
-
- // Window management commands
- command_updater_.UpdateCommandEnabled(IDC_CLOSE_WINDOW, true);
- command_updater_.UpdateCommandEnabled(IDC_NEW_TAB, true);
- command_updater_.UpdateCommandEnabled(IDC_CLOSE_TAB, true);
- command_updater_.UpdateCommandEnabled(IDC_DUPLICATE_TAB, true);
- command_updater_.UpdateCommandEnabled(IDC_RESTORE_TAB, false);
- command_updater_.UpdateCommandEnabled(IDC_EXIT, true);
- command_updater_.UpdateCommandEnabled(IDC_DEBUG_FRAME_TOGGLE, true);
-
- // Page-related commands
- command_updater_.UpdateCommandEnabled(IDC_EMAIL_PAGE_LOCATION, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_AUTO_DETECT, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_UTF8, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_UTF16LE, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO88591, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_WINDOWS1252, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_GBK, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_GB18030, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_BIG5HKSCS, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_BIG5, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_THAI, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_KOREAN, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_SHIFTJIS, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO2022JP, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_EUCJP, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO885915, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_MACINTOSH, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO88592, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_WINDOWS1250, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO88595, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_WINDOWS1251, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_KOI8R, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_KOI8U, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO88597, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_WINDOWS1253, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO88594, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO885913, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_WINDOWS1257, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO88593, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO885910, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO885914, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO885916, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_WINDOWS1254, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO88596, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_WINDOWS1256, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO88598, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_ISO88598I, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_WINDOWS1255, true);
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_WINDOWS1258, true);
-
- // Zoom
- command_updater_.UpdateCommandEnabled(IDC_ZOOM_MENU, true);
- command_updater_.UpdateCommandEnabled(IDC_ZOOM_PLUS, true);
- command_updater_.UpdateCommandEnabled(IDC_ZOOM_NORMAL, true);
- command_updater_.UpdateCommandEnabled(IDC_ZOOM_MINUS, true);
-
- // Show various bits of UI
- UpdateOpenFileState();
- command_updater_.UpdateCommandEnabled(IDC_CREATE_SHORTCUTS, false);
- UpdateCommandsForDevTools();
- command_updater_.UpdateCommandEnabled(IDC_TASK_MANAGER,
- chrome::CanOpenTaskManager());
- command_updater_.UpdateCommandEnabled(IDC_SHOW_HISTORY, true);
- command_updater_.UpdateCommandEnabled(IDC_SHOW_DOWNLOADS, true);
- command_updater_.UpdateCommandEnabled(IDC_HELP_PAGE_VIA_KEYBOARD, true);
- command_updater_.UpdateCommandEnabled(IDC_HELP_PAGE_VIA_MENU, true);
- command_updater_.UpdateCommandEnabled(IDC_BOOKMARKS_MENU, true);
-
- command_updater_.UpdateCommandEnabled(
- IDC_SHOW_SYNC_SETUP, profile_->GetOriginalProfile()->IsSyncAccessible());
-
- // Initialize other commands based on the window type.
- bool normal_window = is_type_tabbed();
-
- // Navigation commands
- command_updater_.UpdateCommandEnabled(IDC_HOME, normal_window);
-
- // Window management commands
- // TODO(rohitrao): Disable fullscreen on non-Lion?
- command_updater_.UpdateCommandEnabled(IDC_FULLSCREEN,
- !(is_type_panel() && is_app()));
- command_updater_.UpdateCommandEnabled(IDC_SELECT_NEXT_TAB, normal_window);
- command_updater_.UpdateCommandEnabled(IDC_SELECT_PREVIOUS_TAB,
- normal_window);
- command_updater_.UpdateCommandEnabled(IDC_MOVE_TAB_NEXT, normal_window);
- command_updater_.UpdateCommandEnabled(IDC_MOVE_TAB_PREVIOUS, normal_window);
- command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_0, normal_window);
- command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_1, normal_window);
- command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_2, normal_window);
- command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_3, normal_window);
- command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_4, normal_window);
- command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_5, normal_window);
- command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_6, normal_window);
- command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_7, normal_window);
- command_updater_.UpdateCommandEnabled(IDC_SELECT_LAST_TAB, normal_window);
-#if defined(OS_WIN)
- const bool metro_mode = base::win::IsMetroProcess();
- command_updater_.UpdateCommandEnabled(IDC_METRO_SNAP_ENABLE, metro_mode);
- command_updater_.UpdateCommandEnabled(IDC_METRO_SNAP_DISABLE, metro_mode);
-#endif
-#if defined(OS_MACOSX)
- command_updater_.UpdateCommandEnabled(IDC_TABPOSE, normal_window);
- command_updater_.UpdateCommandEnabled(IDC_PRESENTATION_MODE,
- !(is_type_panel() && is_app()));
-#endif
-
- // Clipboard commands
- command_updater_.UpdateCommandEnabled(IDC_COPY_URL, !is_devtools());
-
- // Find-in-page
- command_updater_.UpdateCommandEnabled(IDC_FIND, !is_devtools());
- command_updater_.UpdateCommandEnabled(IDC_FIND_NEXT, !is_devtools());
- command_updater_.UpdateCommandEnabled(IDC_FIND_PREVIOUS, !is_devtools());
-
- // Show various bits of UI
- command_updater_.UpdateCommandEnabled(IDC_CLEAR_BROWSING_DATA, normal_window);
-
- // The upgrade entry and the view incompatibility entry should always be
- // enabled. Whether they are visible is a separate matter determined on menu
- // show.
- command_updater_.UpdateCommandEnabled(IDC_UPGRADE_DIALOG, true);
- command_updater_.UpdateCommandEnabled(IDC_VIEW_INCOMPATIBILITIES, true);
-
- // View Background Pages entry is always enabled, but is hidden if there are
- // no background pages.
- command_updater_.UpdateCommandEnabled(IDC_VIEW_BACKGROUND_PAGES, true);
-
- // Toggle speech input
- command_updater_.UpdateCommandEnabled(IDC_TOGGLE_SPEECH_INPUT, true);
-
- // Initialize other commands whose state changes based on fullscreen mode.
- UpdateCommandsForFullscreenMode(FULLSCREEN_DISABLED);
-
- UpdateCommandsForContentRestrictionState();
-
- UpdateCommandsForBookmarkEditing();
-
- UpdateCommandsForIncognitoAvailability();
-}
-
-void Browser::UpdateCommandsForIncognitoAvailability() {
- IncognitoModePrefs::Availability incognito_availability =
- IncognitoModePrefs::GetAvailability(profile_->GetPrefs());
- command_updater_.UpdateCommandEnabled(
- IDC_NEW_WINDOW,
- incognito_availability != IncognitoModePrefs::FORCED);
- command_updater_.UpdateCommandEnabled(
- IDC_NEW_INCOGNITO_WINDOW,
- incognito_availability != IncognitoModePrefs::DISABLED);
-
- // Bookmark manager and settings page/subpages are forced to open in normal
- // mode. For this reason we disable these commands when incognito is forced.
- const bool command_enabled =
- incognito_availability != IncognitoModePrefs::FORCED;
- command_updater_.UpdateCommandEnabled(
- IDC_SHOW_BOOKMARK_MANAGER,
- browser_defaults::bookmarks_enabled && command_enabled);
- ExtensionService* extension_service = profile()->GetExtensionService();
- bool enable_extensions =
- extension_service && extension_service->extensions_enabled();
- command_updater_.UpdateCommandEnabled(IDC_MANAGE_EXTENSIONS,
- enable_extensions && command_enabled);
-
- const bool show_main_ui = IsShowingMainUI(window_ && window_->IsFullscreen());
- command_updater_.UpdateCommandEnabled(IDC_IMPORT_SETTINGS,
- show_main_ui && command_enabled);
- command_updater_.UpdateCommandEnabled(IDC_OPTIONS,
- show_main_ui && command_enabled);
-}
-
-void Browser::UpdateCommandsForTabState() {
- TabContents* current_tab_contents = GetActiveTabContents();
- if (!current_tab_contents) // May be NULL during tab restore.
- return;
- WebContents* current_web_contents = current_tab_contents->web_contents();
-
- // Navigation commands
- NavigationController& nc = current_web_contents->GetController();
- command_updater_.UpdateCommandEnabled(IDC_BACK, nc.CanGoBack());
- command_updater_.UpdateCommandEnabled(IDC_FORWARD, nc.CanGoForward());
- command_updater_.UpdateCommandEnabled(
- IDC_RELOAD, CanReloadContents(current_tab_contents));
- command_updater_.UpdateCommandEnabled(
- IDC_RELOAD_IGNORING_CACHE, CanReloadContents(current_tab_contents));
-
- // Window management commands
- command_updater_.UpdateCommandEnabled(IDC_DUPLICATE_TAB,
- !is_app() && CanDuplicateContentsAt(active_index()));
-
- // Page-related commands
- window_->SetStarredState(
- current_tab_contents->bookmark_tab_helper()->is_starred());
- window_->SetZoomIconState(
- current_tab_contents->zoom_controller()->zoom_icon_state());
- window_->SetZoomIconTooltipPercent(
- current_tab_contents->zoom_controller()->zoom_percent());
- command_updater_.UpdateCommandEnabled(IDC_VIEW_SOURCE,
- current_web_contents->GetController().CanViewSource());
- command_updater_.UpdateCommandEnabled(IDC_EMAIL_PAGE_LOCATION,
- toolbar_model_->ShouldDisplayURL() &&
- current_web_contents->GetURL().is_valid());
- if (is_devtools())
- command_updater_.UpdateCommandEnabled(IDC_OPEN_FILE, false);
-
- // Changing the encoding is not possible on Chrome-internal webpages.
- bool is_chrome_internal = HasInternalURL(nc.GetActiveEntry()) ||
- current_web_contents->ShowingInterstitialPage();
- command_updater_.UpdateCommandEnabled(IDC_ENCODING_MENU,
- !is_chrome_internal && current_web_contents->IsSavable());
-
- // Show various bits of UI
- // TODO(pinkerton): Disable app-mode in the model until we implement it
- // on the Mac. Be sure to remove both ifdefs. http://crbug.com/13148
-#if !defined(OS_MACOSX)
- command_updater_.UpdateCommandEnabled(IDC_CREATE_SHORTCUTS,
- web_app::IsValidUrl(current_web_contents->GetURL()));
-#endif
-
- UpdateCommandsForContentRestrictionState();
- UpdateCommandsForBookmarkEditing();
-}
-
-void Browser::UpdateCommandsForContentRestrictionState() {
- int restrictions = GetContentRestrictionsForSelectedTab();
-
- command_updater_.UpdateCommandEnabled(
- IDC_COPY, !(restrictions & content::CONTENT_RESTRICTION_COPY));
- command_updater_.UpdateCommandEnabled(
- IDC_CUT, !(restrictions & content::CONTENT_RESTRICTION_CUT));
- command_updater_.UpdateCommandEnabled(
- IDC_PASTE, !(restrictions & content::CONTENT_RESTRICTION_PASTE));
- UpdateSaveAsState(restrictions);
- UpdatePrintingState(restrictions);
-}
-
-void Browser::UpdateCommandsForDevTools() {
- bool dev_tools_enabled =
- !profile_->GetPrefs()->GetBoolean(prefs::kDevToolsDisabled);
- command_updater_.UpdateCommandEnabled(IDC_DEV_TOOLS,
- dev_tools_enabled);
- command_updater_.UpdateCommandEnabled(IDC_DEV_TOOLS_CONSOLE,
- dev_tools_enabled);
- command_updater_.UpdateCommandEnabled(IDC_DEV_TOOLS_INSPECT,
- dev_tools_enabled);
-}
-
-void Browser::UpdateCommandsForBookmarkEditing() {
- bool enabled =
- profile_->GetPrefs()->GetBoolean(prefs::kEditBookmarksEnabled) &&
- browser_defaults::bookmarks_enabled;
-
- command_updater_.UpdateCommandEnabled(IDC_BOOKMARK_PAGE,
- enabled && is_type_tabbed());
- command_updater_.UpdateCommandEnabled(IDC_BOOKMARK_ALL_TABS,
- enabled && CanBookmarkAllTabs());
- command_updater_.UpdateCommandEnabled(IDC_PIN_TO_START_SCREEN,
- true);
-}
-
-void Browser::UpdateCommandsForBookmarkBar() {
- const bool show_main_ui = IsShowingMainUI(window_ && window_->IsFullscreen());
- command_updater_.UpdateCommandEnabled(IDC_SHOW_BOOKMARK_BAR,
- browser_defaults::bookmarks_enabled &&
- !profile_->GetPrefs()->IsManagedPreference(prefs::kShowBookmarkBar) &&
- show_main_ui);
-}
-
void Browser::MarkHomePageAsChanged(PrefService* pref_service) {
pref_service->SetBoolean(prefs::kHomePageChanged, true);
}
-void Browser::UpdateCommandsForFullscreenMode(FullScreenMode fullscreen_mode) {
- const bool show_main_ui =
- IsShowingMainUI(fullscreen_mode != FULLSCREEN_DISABLED);
- bool main_not_fullscreen = show_main_ui &&
- (fullscreen_mode == FULLSCREEN_DISABLED);
-
- // Navigation commands
- command_updater_.UpdateCommandEnabled(IDC_OPEN_CURRENT_URL, show_main_ui);
-
- // Window management commands
- command_updater_.UpdateCommandEnabled(IDC_SHOW_AS_TAB,
- type_ != TYPE_TABBED && (fullscreen_mode == FULLSCREEN_DISABLED));
-
- // Focus various bits of UI
- command_updater_.UpdateCommandEnabled(IDC_FOCUS_TOOLBAR, show_main_ui);
- command_updater_.UpdateCommandEnabled(IDC_FOCUS_LOCATION, show_main_ui);
- command_updater_.UpdateCommandEnabled(IDC_FOCUS_SEARCH, show_main_ui);
- command_updater_.UpdateCommandEnabled(
- IDC_FOCUS_MENU_BAR, main_not_fullscreen);
- command_updater_.UpdateCommandEnabled(
- IDC_FOCUS_NEXT_PANE, main_not_fullscreen);
- command_updater_.UpdateCommandEnabled(
- IDC_FOCUS_PREVIOUS_PANE, main_not_fullscreen);
- command_updater_.UpdateCommandEnabled(
- IDC_FOCUS_BOOKMARKS, main_not_fullscreen);
-
- // Show various bits of UI
- command_updater_.UpdateCommandEnabled(IDC_DEVELOPER_MENU, show_main_ui);
- command_updater_.UpdateCommandEnabled(IDC_FEEDBACK, show_main_ui);
- command_updater_.UpdateCommandEnabled(IDC_SHOW_SYNC_SETUP,
- show_main_ui && profile_->GetOriginalProfile()->IsSyncAccessible());
-
- // Settings page/subpages are forced to open in normal mode. We disable these
- // commands when incognito is forced.
- const bool options_enabled = show_main_ui &&
- IncognitoModePrefs::GetAvailability(
- profile_->GetPrefs()) != IncognitoModePrefs::FORCED;
- command_updater_.UpdateCommandEnabled(IDC_OPTIONS, options_enabled);
- command_updater_.UpdateCommandEnabled(IDC_IMPORT_SETTINGS, options_enabled);
-
- command_updater_.UpdateCommandEnabled(IDC_EDIT_SEARCH_ENGINES, show_main_ui);
- command_updater_.UpdateCommandEnabled(IDC_VIEW_PASSWORDS, show_main_ui);
- command_updater_.UpdateCommandEnabled(IDC_ABOUT, show_main_ui);
- command_updater_.UpdateCommandEnabled(IDC_SHOW_APP_MENU, show_main_ui);
-#if defined (ENABLE_PROFILING) && !defined(NO_TCMALLOC)
- command_updater_.UpdateCommandEnabled(IDC_PROFILING_ENABLED, show_main_ui);
-#endif
-
- // Disable explicit fullscreen toggling when in metro snap mode.
- command_updater_.UpdateCommandEnabled(
- IDC_FULLSCREEN,
- fullscreen_mode != FULLSCREEN_METRO_SNAP);
-
- UpdateCommandsForBookmarkBar();
- UpdateCommandsForMultipleProfiles();
-}
-
-void Browser::UpdateCommandsForMultipleProfiles() {
- bool show_main_ui = IsShowingMainUI(window_ && window_->IsFullscreen());
- command_updater_.UpdateCommandEnabled(IDC_SHOW_AVATAR_MENU,
- show_main_ui &&
- !profile()->IsOffTheRecord() &&
- ProfileManager::IsMultipleProfilesEnabled());
-}
-
-void Browser::UpdatePrintingState(int content_restrictions) {
- bool print_enabled = true;
- bool advanced_print_enabled = true;
- if (g_browser_process->local_state()) {
- print_enabled =
- g_browser_process->local_state()->GetBoolean(prefs::kPrintingEnabled);
- advanced_print_enabled = print_enabled;
- }
- if (print_enabled) {
- // Do not print when a constrained window is showing. It's confusing.
- TabContents* tab_contents = GetActiveTabContents();
- bool has_constrained_window =
- tab_contents &&
- tab_contents->constrained_window_tab_helper()->
- constrained_window_count();
- if (has_constrained_window ||
- content_restrictions & content::CONTENT_RESTRICTION_PRINT) {
- print_enabled = false;
- advanced_print_enabled = false;
- }
-
- // The exception is print preview,
- // where advanced printing is always enabled.
- printing::PrintPreviewTabController* controller =
- printing::PrintPreviewTabController::GetInstance();
- if (controller && (controller->GetPrintPreviewForTab(tab_contents) ||
- controller->is_creating_print_preview_tab())) {
- advanced_print_enabled = true;
- }
- }
- command_updater_.UpdateCommandEnabled(IDC_PRINT, print_enabled);
- command_updater_.UpdateCommandEnabled(IDC_ADVANCED_PRINT,
- advanced_print_enabled);
-}
-
-void Browser::UpdateSaveAsState(int content_restrictions) {
- bool enabled = !(content_restrictions & content::CONTENT_RESTRICTION_SAVE);
- enabled = enabled && CanSaveContents(GetActiveTabContents());
- PrefService* state = g_browser_process->local_state();
- if (state)
- enabled = enabled && state->GetBoolean(prefs::kAllowFileSelectionDialogs);
-
- command_updater_.UpdateCommandEnabled(IDC_SAVE_PAGE, enabled);
-}
-
-void Browser::UpdateOpenFileState() {
- bool enabled = true;
- PrefService* local_state = g_browser_process->local_state();
- if (local_state)
- enabled = local_state->GetBoolean(prefs::kAllowFileSelectionDialogs);
-
- command_updater_.UpdateCommandEnabled(IDC_OPEN_FILE, enabled);
-}
-
-void Browser::UpdateReloadStopState(bool is_loading, bool force) {
- window_->UpdateReloadStopState(is_loading, force);
- command_updater_.UpdateCommandEnabled(IDC_STOP, is_loading);
-}
-
///////////////////////////////////////////////////////////////////////////////
// Browser, UI update coalescing and handling (private):
@@ -3483,12 +2662,6 @@
if (flags & (content::INVALIDATE_TYPE_TAB |
content::INVALIDATE_TYPE_TITLE)) {
-// TODO(pinkerton): Disable app-mode in the model until we implement it
-// on the Mac. Be sure to remove both ifdefs. http://crbug.com/13148
-#if !defined(OS_MACOSX)
- command_updater_.UpdateCommandEnabled(IDC_CREATE_SHORTCUTS,
- web_app::IsValidUrl(contents->GetURL()));
-#endif
window_->UpdateTitleBar();
}
}
@@ -3771,24 +2944,6 @@
}
}
-int Browser::GetContentRestrictionsForSelectedTab() {
- int content_restrictions = 0;
- WebContents* current_tab = GetActiveWebContents();
- if (current_tab) {
- content_restrictions = current_tab->GetContentRestrictions();
- NavigationEntry* active_entry =
- current_tab->GetController().GetActiveEntry();
- // See comment in UpdateCommandsForTabState about why we call url().
- if (!download_util::IsSavableURL(
- active_entry ? active_entry->GetURL() : GURL())
- || current_tab->ShowingInterstitialPage())
- content_restrictions |= content::CONTENT_RESTRICTION_SAVE;
- if (current_tab->ShowingInterstitialPage())
- content_restrictions |= content::CONTENT_RESTRICTION_PRINT;
- }
- return content_restrictions;
-}
-
void Browser::UpdateBookmarkBarState(BookmarkBarStateChangeReason reason) {
BookmarkBar::State state;
// The bookmark bar is hidden in fullscreen mode, unless on the new tab page.
« no previous file with comments | « chrome/browser/ui/browser.h ('k') | chrome/browser/ui/browser_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698