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