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

Unified Diff: chrome/browser/ui/browser_commands.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_commands.h ('k') | chrome/browser/ui/browser_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/browser_commands.cc
===================================================================
--- chrome/browser/ui/browser_commands.cc (revision 144460)
+++ chrome/browser/ui/browser_commands.cc (working copy)
@@ -7,25 +7,32 @@
#include "base/command_line.h"
#include "base/metrics/histogram.h"
#include "base/utf_string_conversions.h"
+#include "chrome/browser/bookmarks/bookmark_editor.h"
#include "chrome/browser/bookmarks/bookmark_model.h"
#include "chrome/browser/bookmarks/bookmark_utils.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_page_zoom.h"
#include "chrome/browser/debugger/devtools_window.h"
+#include "chrome/browser/download/download_util.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/favicon/favicon_tab_helper.h"
#include "chrome/browser/lifetime/application_lifetime.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/prefs/incognito_mode_prefs.h"
#include "chrome/browser/prefs/pref_service.h"
+#include "chrome/browser/printing/print_preview_tab_controller.h"
#include "chrome/browser/printing/print_view_manager.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sessions/session_service_factory.h"
#include "chrome/browser/sessions/tab_restore_service_factory.h"
#include "chrome/browser/sessions/tab_restore_service.h"
+#include "chrome/browser/sessions/tab_restore_service_delegate.h"
#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_command_controller.h"
#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/browser_tab_restore_service_delegate.h"
#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/constrained_window_tab_helper.h"
#include "chrome/browser/ui/find_bar/find_bar_controller.h"
#include "chrome/browser/ui/find_bar/find_tab_helper.h"
#include "chrome/browser/ui/omnibox/location_bar.h"
@@ -34,9 +41,11 @@
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/webui/feedback_ui.h"
#include "chrome/browser/ui/webui/ntp/app_launcher_handler.h"
+#include "chrome/browser/web_applications/web_app.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/net/url_util.h"
#include "chrome/common/pref_names.h"
+#include "content/public/common/content_restriction.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/page_navigator.h"
@@ -123,8 +132,81 @@
web_contents->GetController().Reload(true);
}
+bool HasConstrainedWindow(const Browser* browser) {
+ TabContents* tab_contents = browser->GetActiveTabContents();
+ return tab_contents && tab_contents->constrained_window_tab_helper()->
+ constrained_window_count();
+}
+
+bool PrintPreviewShowing(const Browser* browser) {
+ TabContents* contents = browser->GetActiveTabContents();
+ printing::PrintPreviewTabController* controller =
+ printing::PrintPreviewTabController::GetInstance();
+ return controller && (controller->GetPrintPreviewForTab(contents) ||
+ controller->is_creating_print_preview_tab());
+}
+
} // namespace
+bool IsCommandEnabled(Browser* browser, int command) {
+ return browser->command_controller()->command_updater()->IsCommandEnabled(
+ command);
+}
+
+bool SupportsCommand(Browser* browser, int command) {
+ return browser->command_controller()->command_updater()->SupportsCommand(
+ command);
+}
+
+bool ExecuteCommand(Browser* browser, int command) {
+ return browser->command_controller()->command_updater()->ExecuteCommand(
+ command);
+}
+
+bool ExecuteCommandWithDisposition(Browser* browser,
+ int command,
+ WindowOpenDisposition disposition) {
+ return browser->command_controller()->command_updater()->
+ ExecuteCommandWithDisposition(command, disposition);
+}
+
+void UpdateCommandEnabled(Browser* browser, int command, bool enabled) {
+ browser->command_controller()->command_updater()->UpdateCommandEnabled(
+ command, enabled);
+}
+
+void AddCommandObserver(Browser* browser,
+ int command,
+ CommandObserver* observer) {
+ browser->command_controller()->command_updater()->AddCommandObserver(
+ command, observer);
+}
+
+void RemoveCommandObserver(Browser* browser,
+ int command,
+ CommandObserver* observer) {
+ browser->command_controller()->command_updater()->RemoveCommandObserver(
+ command, observer);
+}
+
+int GetContentRestrictions(const Browser* browser) {
+ int content_restrictions = 0;
+ WebContents* current_tab = browser->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 NewEmptyWindow(Profile* profile) {
bool incognito = profile->IsOffTheRecord();
PrefService* prefs = profile->GetPrefs();
@@ -175,7 +257,7 @@
browser->window()->Show();
}
-bool CanGoBack(Browser* browser) {
+bool CanGoBack(const Browser* browser) {
return browser->GetActiveWebContents()->GetController().CanGoBack();
}
@@ -194,7 +276,7 @@
}
}
-bool CanGoForward(Browser* browser) {
+bool CanGoForward(const Browser* browser) {
return browser->GetActiveWebContents()->GetController().CanGoForward();
}
@@ -227,6 +309,10 @@
ReloadInternal(browser, disposition, true);
}
+bool CanReload(const Browser* browser) {
+ return !browser->is_devtools();
+}
+
void Home(Browser* browser, WindowOpenDisposition disposition) {
content::RecordAction(UserMetricsAction("Home"));
browser->OpenURL(OpenURLParams(
@@ -315,6 +401,20 @@
browser->tab_strip_model()->CloseSelectedTabs();
}
+void RestoreTab(Browser* browser) {
+ content::RecordAction(UserMetricsAction("RestoreTab"));
+ TabRestoreService* service =
+ TabRestoreServiceFactory::GetForProfile(browser->profile());
+ if (service)
+ service->RestoreMostRecentEntry(browser->tab_restore_service_delegate());
+}
+
+bool CanRestoreTab(const Browser* browser) {
+ TabRestoreService* service =
+ TabRestoreServiceFactory::GetForProfile(browser->profile());
+ return service && !service->entries().empty();
+}
+
void SelectNextTab(Browser* browser) {
content::RecordAction(UserMetricsAction("SelectNextTab"));
browser->tab_strip_model()->SelectNextTab();
@@ -366,6 +466,11 @@
browser->DuplicateContentsAt(browser->active_index());
}
+bool CanDuplicateTab(const Browser* browser) {
+ WebContents* contents = browser->GetActiveWebContents();
+ return contents && contents->GetController().GetLastCommittedEntry();
+}
+
void WriteCurrentURLToClipboard(Browser* browser) {
// TODO(ericu): There isn't currently a metric for this. Should there be?
// We don't appear to track the action when it comes from the
@@ -422,6 +527,22 @@
}
}
+bool CanBookmarkCurrentPage(const Browser* browser) {
+ BookmarkModel* model = browser->profile()->GetBookmarkModel();
+ return browser_defaults::bookmarks_enabled &&
+ browser->profile()->GetPrefs()->GetBoolean(
+ prefs::kEditBookmarksEnabled) &&
+ model && model->IsLoaded() && browser->is_type_tabbed();
+}
+
+void BookmarkAllTabs(Browser* browser) {
+ BookmarkEditor::ShowBookmarkAllTabsDialog(browser);
+}
+
+bool CanBookmarkAllTabs(const Browser* browser) {
+ return browser->tab_count() > 1 && CanBookmarkCurrentPage(browser);
+}
+
#if !defined(OS_WIN)
void PinCurrentPageToStartScreen(Browser* browser) {
}
@@ -435,6 +556,17 @@
current_tab->OnSavePage();
}
+bool CanSavePage(const Browser* browser) {
+ // LocalState can be NULL in tests.
+ if (g_browser_process->local_state() &&
+ !g_browser_process->local_state()->GetBoolean(
+ prefs::kAllowFileSelectionDialogs)) {
+ return false;
+ }
+ return !browser->is_devtools() &&
+ !(GetContentRestrictions(browser) & content::CONTENT_RESTRICTION_SAVE);
+}
+
void ShowFindBar(Browser* browser) {
browser->GetFindBarController()->Show();
}
@@ -473,10 +605,33 @@
}
}
+bool CanPrint(const Browser* browser) {
+ // LocalState can be NULL in tests.
+ if (g_browser_process->local_state() &&
+ !g_browser_process->local_state()->GetBoolean(prefs::kPrintingEnabled)) {
+ return false;
+ }
+
+ // Do not print when a constrained window is showing. It's confusing.
+ return !(HasConstrainedWindow(browser) ||
+ GetContentRestrictions(browser) & content::CONTENT_RESTRICTION_PRINT);
+}
+
void AdvancedPrint(Browser* browser) {
browser->GetActiveTabContents()->print_view_manager()->AdvancedPrintNow();
}
+bool CanAdvancedPrint(const Browser* browser) {
+ // LocalState can be NULL in tests.
+ if (g_browser_process->local_state() &&
+ !g_browser_process->local_state()->GetBoolean(prefs::kPrintingEnabled)) {
+ return false;
+ }
+
+ // It is always possible to advanced print when print preview is visible.
+ return PrintPreviewShowing(browser) || CanPrint(browser);
+}
+
void EmailPageLocation(Browser* browser) {
content::RecordAction(UserMetricsAction("EmailPageLocation"));
WebContents* wc = browser->GetActiveWebContents();
@@ -490,6 +645,11 @@
platform_util::OpenExternal(GURL(mailto));
}
+bool CanEmailPageLocation(const Browser* browser) {
+ return browser->toolbar_model()->ShouldDisplayURL() &&
+ browser->GetActiveWebContents()->GetURL().is_valid();
+}
+
void Cut(Browser* browser) {
content::RecordAction(UserMetricsAction("Cut"));
browser->window()->Cut();
@@ -756,4 +916,12 @@
ViewSource(browser, browser->GetActiveTabContents());
}
+bool CanViewSource(const Browser* browser) {
+ return browser->GetActiveWebContents()->GetController().CanViewSource();
+}
+
+bool CanCreateApplicationShortcuts(const Browser* browser) {
+ return web_app::IsValidUrl(browser->GetActiveWebContents()->GetURL());
+}
+
} // namespace chrome
« no previous file with comments | « chrome/browser/ui/browser_commands.h ('k') | chrome/browser/ui/browser_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698