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. |