Commit 0996e9bc authored by kmadhusu@chromium.org's avatar kmadhusu@chromium.org

PrintPreview: Make ctrl-shift-p start the native print flow.

+ Added PrintPreviewUITest.AdvancedPrintCommandEnabled

BUG=93819
TEST=Open a tab. Press ctrl+shift+p to start native print workflow.

Review URL: http://codereview.chromium.org/7721001

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98450 0039d316-1c4b-4281-b951-d872f2087c98
parent 7e52ea6b
...@@ -69,6 +69,7 @@ ...@@ -69,6 +69,7 @@
#define IDC_SAVE_PAGE 35004 #define IDC_SAVE_PAGE 35004
#define IDC_ENCODING_MENU 35005 #define IDC_ENCODING_MENU 35005
#define IDC_EMAIL_PAGE_LOCATION 35006 #define IDC_EMAIL_PAGE_LOCATION 35006
#define IDC_ADVANCED_PRINT 35007
// When adding a new encoding to this list, be sure to append it to the // When adding a new encoding to this list, be sure to append it to the
// EncodingMenuController::kValidEncodingIds array in // EncodingMenuController::kValidEncodingIds array in
......
...@@ -33,6 +33,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US ...@@ -33,6 +33,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
// pick those up in the WM_APPCOMMAND message. // pick those up in the WM_APPCOMMAND message.
IDR_MAINFRAME ACCELERATORS IDR_MAINFRAME ACCELERATORS
BEGIN BEGIN
"P", IDC_ADVANCED_PRINT, VIRTKEY, CONTROL, SHIFT
VK_LEFT, IDC_BACK, VIRTKEY, ALT VK_LEFT, IDC_BACK, VIRTKEY, ALT
VK_BACK, IDC_BACK, VIRTKEY VK_BACK, IDC_BACK, VIRTKEY
"D", IDC_BOOKMARK_PAGE, VIRTKEY, CONTROL "D", IDC_BOOKMARK_PAGE, VIRTKEY, CONTROL
......
...@@ -6015,8 +6015,8 @@ Keep your key file in a safe place. You will need it to create new versions of y ...@@ -6015,8 +6015,8 @@ Keep your key file in a safe place. You will need it to create new versions of y
<message name="IDS_PRINT_PREVIEW_PAGE_LABEL_PLURAL" desc="Label shown in the print preview summary."> <message name="IDS_PRINT_PREVIEW_PAGE_LABEL_PLURAL" desc="Label shown in the print preview summary.">
pages pages
</message> </message>
<message name="IDS_PRINT_PREVIEW_SYSTEM_DIALOG_OPTION" desc="Option allowing the user to access advanced printer settings using the native print system dialog instead of printing through the print preview mechanism."> <message name="IDS_PRINT_PREVIEW_SYSTEM_DIALOG_OPTION" desc="Option allowing the user to access advanced printer settings using the native print system dialog instead of printing through the print preview mechanism. Shortcut key is not translated">
Advanced… Print using system dialog… <ph name="SHORTCUT_KEY">$1<ex>(Shift+Ctrl+P)</ex></ph>
</message> </message>
<message name="IDS_PRINT_PREVIEW_PAGE_RANGE_INSTRUCTION" desc="Instruction shown when the user enters an invalid page range."> <message name="IDS_PRINT_PREVIEW_PAGE_RANGE_INSTRUCTION" desc="Instruction shown when the user enters an invalid page range.">
Invalid page range, use <ph name="EXAMPLE_PAGE_RANGE">$1<ex>e.g. 1-5, 8, 11-13</ex></ph> Invalid page range, use <ph name="EXAMPLE_PAGE_RANGE">$1<ex>e.g. 1-5, 8, 11-13</ex></ph>
......
// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -81,6 +81,7 @@ const KeyboardShortcutData* GetBrowserKeyboardShortcutTable( ...@@ -81,6 +81,7 @@ const KeyboardShortcutData* GetBrowserKeyboardShortcutTable(
{false, false, false, false, kVK_Delete, 0, IDC_BACK}, {false, false, false, false, kVK_Delete, 0, IDC_BACK},
{false, true, false, false, kVK_Delete, 0, IDC_FORWARD}, {false, true, false, false, kVK_Delete, 0, IDC_FORWARD},
{true, true, false, false, 0, 'c', IDC_DEV_TOOLS_INSPECT}, {true, true, false, false, 0, 'c', IDC_DEV_TOOLS_INSPECT},
{true, true, false, false, 0, 'p', IDC_ADVANCED_PRINT},
}; };
*num_entries = arraysize(keyboard_shortcuts); *num_entries = arraysize(keyboard_shortcuts);
......
...@@ -88,6 +88,26 @@ bool PrintViewManager::PrintForSystemDialogNow() { ...@@ -88,6 +88,26 @@ bool PrintViewManager::PrintForSystemDialogNow() {
return PrintNowInternal(new PrintMsg_PrintForSystemDialog(routing_id())); return PrintNowInternal(new PrintMsg_PrintForSystemDialog(routing_id()));
} }
bool PrintViewManager::AdvancedPrintNow() {
printing::PrintPreviewTabController* tab_controller =
printing::PrintPreviewTabController::GetInstance();
if (!tab_controller)
return false;
TabContents* print_preview_tab =
tab_controller->GetPrintPreviewForTab(tab_contents());
if (print_preview_tab) {
// Preview tab exist for current tab or current tab is preview tab.
if (!print_preview_tab->web_ui())
return false;
PrintPreviewUI* print_preview_ui =
static_cast<PrintPreviewUI*>(print_preview_tab->web_ui());
print_preview_ui->OnShowSystemDialog();
return true;
} else {
return PrintNow();
}
}
bool PrintViewManager::PrintPreviewNow() { bool PrintViewManager::PrintPreviewNow() {
return PrintNowInternal(new PrintMsg_InitiatePrintPreview(routing_id())); return PrintNowInternal(new PrintMsg_InitiatePrintPreview(routing_id()));
} }
......
...@@ -46,6 +46,11 @@ class PrintViewManager : public NotificationObserver, ...@@ -46,6 +46,11 @@ class PrintViewManager : public NotificationObserver,
// dialog from print preview. // dialog from print preview.
bool PrintForSystemDialogNow(); bool PrintForSystemDialogNow();
// Same as PrintNow(), but for the case where a user press "ctrl+shift+p" to
// show the native system dialog. This can happen from both initiator tab and
// preview tab.
bool AdvancedPrintNow();
// Initiate print preview of the current document by first notifying the // Initiate print preview of the current document by first notifying the
// renderer. Since this happens asynchronous, the print preview tab creation // renderer. Since this happens asynchronous, the print preview tab creation
// will not be completed on the return of this function. Returns false if // will not be completed on the return of this function. Returns false if
......
...@@ -61,6 +61,7 @@ ...@@ -61,6 +61,7 @@
#include "chrome/browser/prefs/incognito_mode_prefs.h" #include "chrome/browser/prefs/incognito_mode_prefs.h"
#include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/printing/cloud_print/cloud_print_setup_flow.h" #include "chrome/browser/printing/cloud_print/cloud_print_setup_flow.h"
#include "chrome/browser/printing/print_preview_tab_controller.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sessions/restore_tab_helper.h" #include "chrome/browser/sessions/restore_tab_helper.h"
#include "chrome/browser/sessions/session_service.h" #include "chrome/browser/sessions/session_service.h"
...@@ -1794,6 +1795,10 @@ void Browser::Print() { ...@@ -1794,6 +1795,10 @@ void Browser::Print() {
GetSelectedTabContentsWrapper()->print_view_manager()->PrintNow(); GetSelectedTabContentsWrapper()->print_view_manager()->PrintNow();
} }
void Browser::AdvancedPrint() {
GetSelectedTabContentsWrapper()->print_view_manager()->AdvancedPrintNow();
}
void Browser::ToggleEncodingAutoDetect() { void Browser::ToggleEncodingAutoDetect() {
UserMetrics::RecordAction(UserMetricsAction("AutoDetectChange")); UserMetrics::RecordAction(UserMetricsAction("AutoDetectChange"));
encoding_auto_detect_.SetValue(!encoding_auto_detect_.GetValue()); encoding_auto_detect_.SetValue(!encoding_auto_detect_.GetValue());
...@@ -2588,6 +2593,7 @@ void Browser::ExecuteCommandWithDisposition( ...@@ -2588,6 +2593,7 @@ void Browser::ExecuteCommandWithDisposition(
case IDC_VIEW_SOURCE: ViewSelectedSource(); break; case IDC_VIEW_SOURCE: ViewSelectedSource(); break;
case IDC_EMAIL_PAGE_LOCATION: EmailPageLocation(); break; case IDC_EMAIL_PAGE_LOCATION: EmailPageLocation(); break;
case IDC_PRINT: Print(); break; case IDC_PRINT: Print(); break;
case IDC_ADVANCED_PRINT: AdvancedPrint(); break;
case IDC_ENCODING_AUTO_DETECT: ToggleEncodingAutoDetect(); break; case IDC_ENCODING_AUTO_DETECT: ToggleEncodingAutoDetect(); break;
case IDC_ENCODING_UTF8: case IDC_ENCODING_UTF8:
case IDC_ENCODING_UTF16LE: case IDC_ENCODING_UTF16LE:
...@@ -4377,13 +4383,20 @@ void Browser::UpdateCommandsForContentRestrictionState() { ...@@ -4377,13 +4383,20 @@ void Browser::UpdateCommandsForContentRestrictionState() {
void Browser::UpdatePrintingState(int content_restrictions) { void Browser::UpdatePrintingState(int content_restrictions) {
bool enabled = true; bool enabled = true;
bool selected_tab_is_preview_tab = false;
if (content_restrictions & CONTENT_RESTRICTION_PRINT) { if (content_restrictions & CONTENT_RESTRICTION_PRINT) {
enabled = false; enabled = false;
selected_tab_is_preview_tab =
printing::PrintPreviewTabController::IsPrintPreviewTab(
GetSelectedTabContents());
} else if (g_browser_process->local_state()) { } else if (g_browser_process->local_state()) {
enabled = g_browser_process->local_state()-> enabled = g_browser_process->local_state()->
GetBoolean(prefs::kPrintingEnabled); GetBoolean(prefs::kPrintingEnabled);
} }
command_updater_.UpdateCommandEnabled(IDC_PRINT, enabled); command_updater_.UpdateCommandEnabled(IDC_PRINT, enabled);
command_updater_.UpdateCommandEnabled(IDC_ADVANCED_PRINT,
selected_tab_is_preview_tab ? true :
enabled);
} }
void Browser::UpdateReloadStopState(bool is_loading, bool force) { void Browser::UpdateReloadStopState(bool is_loading, bool force) {
......
...@@ -531,6 +531,7 @@ class Browser : public TabHandlerDelegate, ...@@ -531,6 +531,7 @@ class Browser : public TabHandlerDelegate,
// TODO(port): port these, and re-merge the two function declaration lists. // TODO(port): port these, and re-merge the two function declaration lists.
// Page-related commands. // Page-related commands.
void Print(); void Print();
void AdvancedPrint();
void EmailPageLocation(); void EmailPageLocation();
void ToggleEncodingAutoDetect(); void ToggleEncodingAutoDetect();
void OverrideEncoding(int encoding_id); void OverrideEncoding(int encoding_id);
......
...@@ -154,6 +154,8 @@ const struct AcceleratorMapping { ...@@ -154,6 +154,8 @@ const struct AcceleratorMapping {
{ GDK_o, IDC_OPEN_FILE, GDK_CONTROL_MASK }, { GDK_o, IDC_OPEN_FILE, GDK_CONTROL_MASK },
{ GDK_f, IDC_FIND, GDK_CONTROL_MASK }, { GDK_f, IDC_FIND, GDK_CONTROL_MASK },
{ GDK_p, IDC_PRINT, GDK_CONTROL_MASK }, { GDK_p, IDC_PRINT, GDK_CONTROL_MASK },
{ GDK_p, IDC_ADVANCED_PRINT,
GdkModifierType(GDK_CONTROL_MASK | GDK_SHIFT_MASK) },
{ GDK_b, IDC_SHOW_BOOKMARK_BAR, { GDK_b, IDC_SHOW_BOOKMARK_BAR,
GdkModifierType(GDK_CONTROL_MASK | GDK_SHIFT_MASK) }, GdkModifierType(GDK_CONTROL_MASK | GDK_SHIFT_MASK) },
{ GDK_o, IDC_SHOW_BOOKMARK_MANAGER, { GDK_o, IDC_SHOW_BOOKMARK_MANAGER,
......
...@@ -95,6 +95,7 @@ const AcceleratorMapping kAcceleratorMap[] = { ...@@ -95,6 +95,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
{ ui::VKEY_N, false, true, false, IDC_NEW_WINDOW }, { ui::VKEY_N, false, true, false, IDC_NEW_WINDOW },
{ ui::VKEY_O, false, true, false, IDC_OPEN_FILE }, { ui::VKEY_O, false, true, false, IDC_OPEN_FILE },
{ ui::VKEY_P, false, true, false, IDC_PRINT}, { ui::VKEY_P, false, true, false, IDC_PRINT},
{ ui::VKEY_P, true, true, false, IDC_ADVANCED_PRINT},
{ ui::VKEY_R, false, true, false, IDC_RELOAD }, { ui::VKEY_R, false, true, false, IDC_RELOAD },
{ ui::VKEY_R, true, true, false, IDC_RELOAD_IGNORING_CACHE }, { ui::VKEY_R, true, true, false, IDC_RELOAD_IGNORING_CACHE },
#if !defined(OS_CHROMEOS) #if !defined(OS_CHROMEOS)
......
...@@ -23,6 +23,19 @@ ...@@ -23,6 +23,19 @@
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h" #include "ui/base/resource/resource_bundle.h"
namespace{
#if defined(OS_MACOSX)
// U+0028 U+21E7 U+2318 U+0050 U+0029 in UTF8
const char kAdvancedPrintShortcut[] = "\x28\xE2\x8C\x98\xE2\x87\xA7\x50\x29";
#elif defined(OS_WIN)
const char kAdvancedPrintShortcut[] = "(Ctrl+Shift+P)";
#else
const char kAdvancedPrintShortcut[] = "(Shift+Ctrl+P)";
#endif
}; // namespace
PrintPreviewDataSource::PrintPreviewDataSource() PrintPreviewDataSource::PrintPreviewDataSource()
: ChromeWebUIDataSource(chrome::kChromeUIPrintHost) { : ChromeWebUIDataSource(chrome::kChromeUIPrintHost) {
...@@ -77,8 +90,11 @@ PrintPreviewDataSource::PrintPreviewDataSource() ...@@ -77,8 +90,11 @@ PrintPreviewDataSource::PrintPreviewDataSource()
IDS_PRINT_PREVIEW_PAGE_LABEL_SINGULAR); IDS_PRINT_PREVIEW_PAGE_LABEL_SINGULAR);
AddLocalizedString("printPreviewPageLabelPlural", AddLocalizedString("printPreviewPageLabelPlural",
IDS_PRINT_PREVIEW_PAGE_LABEL_PLURAL); IDS_PRINT_PREVIEW_PAGE_LABEL_PLURAL);
AddLocalizedString("systemDialogOption", const string16 shortcut_text(UTF8ToUTF16(kAdvancedPrintShortcut));
IDS_PRINT_PREVIEW_SYSTEM_DIALOG_OPTION); AddString("systemDialogOption", l10n_util::GetStringFUTF16(
IDS_PRINT_PREVIEW_SYSTEM_DIALOG_OPTION,
shortcut_text));
AddLocalizedString("pageRangeInstruction", AddLocalizedString("pageRangeInstruction",
IDS_PRINT_PREVIEW_PAGE_RANGE_INSTRUCTION); IDS_PRINT_PREVIEW_PAGE_RANGE_INSTRUCTION);
AddLocalizedString("copiesInstruction", IDS_PRINT_PREVIEW_COPIES_INSTRUCTION); AddLocalizedString("copiesInstruction", IDS_PRINT_PREVIEW_COPIES_INSTRUCTION);
......
...@@ -895,6 +895,10 @@ void PrintPreviewHandler::OnPrintPreviewFailed() { ...@@ -895,6 +895,10 @@ void PrintPreviewHandler::OnPrintPreviewFailed() {
ReportUserActionHistogram(PREVIEW_FAILED); ReportUserActionHistogram(PREVIEW_FAILED);
} }
void PrintPreviewHandler::ShowSystemDialog() {
HandleShowSystemDialog(NULL);
}
void PrintPreviewHandler::FileSelected(const FilePath& path, void PrintPreviewHandler::FileSelected(const FilePath& path,
int index, void* params) { int index, void* params) {
PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
......
...@@ -58,6 +58,10 @@ class PrintPreviewHandler : public WebUIMessageHandler, ...@@ -58,6 +58,10 @@ class PrintPreviewHandler : public WebUIMessageHandler,
// Called when print preview failed. // Called when print preview failed.
void OnPrintPreviewFailed(); void OnPrintPreviewFailed();
// Called when the user press ctrl+shift+p to display the native system
// dialog.
void ShowSystemDialog();
private: private:
friend class PrintSystemTaskProxy; friend class PrintSystemTaskProxy;
......
...@@ -146,6 +146,10 @@ void PrintPreviewUI::OnPrintPreviewRequest(int request_id) { ...@@ -146,6 +146,10 @@ void PrintPreviewUI::OnPrintPreviewRequest(int request_id) {
g_print_preview_request_id_map.Get().Set(preview_ui_addr_str_, request_id); g_print_preview_request_id_map.Get().Set(preview_ui_addr_str_, request_id);
} }
void PrintPreviewUI::OnShowSystemDialog() {
CallJavascriptFunction("onSystemDialogLinkClicked");
}
void PrintPreviewUI::OnDidGetPreviewPageCount( void PrintPreviewUI::OnDidGetPreviewPageCount(
const PrintHostMsg_DidGetPreviewPageCount_Params& params) { const PrintHostMsg_DidGetPreviewPageCount_Params& params) {
DCHECK_GT(params.page_count, 0); DCHECK_GT(params.page_count, 0);
......
...@@ -58,6 +58,9 @@ class PrintPreviewUI : public ChromeWebUI { ...@@ -58,6 +58,9 @@ class PrintPreviewUI : public ChromeWebUI {
// Notifies the Web UI of a print preview request with |request_id|. // Notifies the Web UI of a print preview request with |request_id|.
void OnPrintPreviewRequest(int request_id); void OnPrintPreviewRequest(int request_id);
// Notifies the Web UI to show the system dialog.
void OnShowSystemDialog();
// Notifies the Web UI about the page count of the request preview. // Notifies the Web UI about the page count of the request preview.
void OnDidGetPreviewPageCount( void OnDidGetPreviewPageCount(
const PrintHostMsg_DidGetPreviewPageCount_Params& params); const PrintHostMsg_DidGetPreviewPageCount_Params& params);
......
...@@ -72,4 +72,41 @@ TEST_F(PrintPreviewUITest, PrintCommandDisabled) { ...@@ -72,4 +72,41 @@ TEST_F(PrintPreviewUITest, PrintCommandDisabled) {
ASSERT_FALSE(enabled); ASSERT_FALSE(enabled);
} }
TEST_F(PrintPreviewUITest, AdvancedPrintCommandEnabled) {
scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
ASSERT_TRUE(browser.get());
// Go to the about:blank page.
NavigateToURL(GURL(chrome::kAboutBlankURL));
// Make sure there is 1 tab and print is enabled. Create print preview tab.
int tab_count;
ASSERT_TRUE(browser->GetTabCount(&tab_count));
ASSERT_EQ(1, tab_count);
bool enabled;
ASSERT_TRUE(browser->IsMenuCommandEnabled(IDC_PRINT, &enabled));
ASSERT_TRUE(enabled);
// Make sure advanced print command (Ctrl+Shift+p) is enabled.
enabled = false;
ASSERT_TRUE(browser->IsMenuCommandEnabled(IDC_ADVANCED_PRINT, &enabled));
ASSERT_TRUE(enabled);
ASSERT_TRUE(browser->RunCommand(IDC_PRINT));
// Make sure there are 2 tabs and print is disabled.
ASSERT_TRUE(browser->GetTabCount(&tab_count));
ASSERT_EQ(2, tab_count);
scoped_refptr<TabProxy> tab = browser->GetActiveTab();
ASSERT_TRUE(tab.get());
AssertIsPrintPage(tab);
ASSERT_TRUE(browser->IsMenuCommandEnabled(IDC_PRINT, &enabled));
ASSERT_FALSE(enabled);
// Make sure advanced print command (Ctrl+Shift+p) is enabled on preview tab.
enabled = false;
ASSERT_TRUE(browser->IsMenuCommandEnabled(IDC_ADVANCED_PRINT, &enabled));
ASSERT_TRUE(enabled);
}
} // namespace } // namespace
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment