diff options
author | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-05 00:13:52 +0000 |
---|---|---|
committer | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-05 00:13:52 +0000 |
commit | 789125a154a972deb76967014e5022f5989be9e1 (patch) | |
tree | 35493bf8f8414294f829fe3210569010b6af119d | |
parent | e05c2bfbe755499514ad252234f83e98e09721b2 (diff) | |
download | chromium_src-789125a154a972deb76967014e5022f5989be9e1.zip chromium_src-789125a154a972deb76967014e5022f5989be9e1.tar.gz chromium_src-789125a154a972deb76967014e5022f5989be9e1.tar.bz2 |
Printing selection from context menu.
BUG=83098
Review URL: https://chromiumcodereview.appspot.com/12177009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@180570 0039d316-1c4b-4281-b951-d872f2087c98
19 files changed, 114 insertions, 79 deletions
diff --git a/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc b/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc index 8e57fba..b231d103 100644 --- a/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc +++ b/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc @@ -68,7 +68,7 @@ IN_PROC_BROWSER_TEST_F(PrintPreviewDialogControllerBrowserTest, // Get the preview tab for initiator tab. printing::PrintViewManager* print_view_manager = printing::PrintViewManager::FromWebContents(initiator_tab); - print_view_manager->PrintPreviewNow(); + print_view_manager->PrintPreviewNow(false); WebContents* preview_tab = tab_controller->GetOrCreatePreviewTab(initiator_tab); @@ -85,7 +85,7 @@ IN_PROC_BROWSER_TEST_F(PrintPreviewDialogControllerBrowserTest, ASSERT_TRUE(observer.tab_destroyed()); // Get the print preview tab for initiator tab. - print_view_manager->PrintPreviewNow(); + print_view_manager->PrintPreviewNow(false); WebContents* new_preview_tab = tab_controller->GetOrCreatePreviewTab(initiator_tab); @@ -113,7 +113,7 @@ IN_PROC_BROWSER_TEST_F(PrintPreviewDialogControllerBrowserTest, // Get the preview tab for initiator tab. printing::PrintViewManager* print_view_manager = printing::PrintViewManager::FromWebContents(initiator_tab); - print_view_manager->PrintPreviewNow(); + print_view_manager->PrintPreviewNow(false); WebContents* preview_tab = tab_controller->GetOrCreatePreviewTab(initiator_tab); @@ -133,7 +133,7 @@ IN_PROC_BROWSER_TEST_F(PrintPreviewDialogControllerBrowserTest, ASSERT_TRUE(tab_destroyed_observer.tab_destroyed()); // Get the print preview tab for initiator tab. - print_view_manager->PrintPreviewNow(); + print_view_manager->PrintPreviewNow(false); WebContents* new_preview_tab = tab_controller->GetOrCreatePreviewTab(initiator_tab); diff --git a/chrome/browser/printing/print_preview_dialog_controller_unittest.cc b/chrome/browser/printing/print_preview_dialog_controller_unittest.cc index f92c6d0..54c7946 100644 --- a/chrome/browser/printing/print_preview_dialog_controller_unittest.cc +++ b/chrome/browser/printing/print_preview_dialog_controller_unittest.cc @@ -47,7 +47,8 @@ TEST_F(PrintPreviewDialogControllerUnitTest, MAYBE_GetOrCreatePreviewTab) { ASSERT_TRUE(tab_controller); // Get the preview tab for initiator tab. - printing::PrintViewManager::FromWebContents(initiator_tab)->PrintPreviewNow(); + printing::PrintViewManager::FromWebContents(initiator_tab)-> + PrintPreviewNow(false); WebContents* preview_tab = tab_controller->GetOrCreatePreviewTab(initiator_tab); @@ -92,7 +93,7 @@ TEST_F(PrintPreviewDialogControllerUnitTest, MAYBE_MultiplePreviewTabs) { // Create preview tab for |tab_contents_1| printing::PrintViewManager::FromWebContents(web_contents_1)-> - PrintPreviewNow(); + PrintPreviewNow(false); WebContents* preview_tab_1 = tab_controller->GetOrCreatePreviewTab(web_contents_1); @@ -101,7 +102,7 @@ TEST_F(PrintPreviewDialogControllerUnitTest, MAYBE_MultiplePreviewTabs) { // Create preview tab for |tab_contents_2| printing::PrintViewManager::FromWebContents(web_contents_2)-> - PrintPreviewNow(); + PrintPreviewNow(false); WebContents* preview_tab_2 = tab_controller->GetOrCreatePreviewTab(web_contents_2); @@ -142,7 +143,8 @@ TEST_F(PrintPreviewDialogControllerUnitTest, MAYBE_ClearInitiatorTabDetails) { ASSERT_TRUE(tab_controller); // Get the preview tab for initiator tab. - printing::PrintViewManager::FromWebContents(initiator_tab)->PrintPreviewNow(); + printing::PrintViewManager::FromWebContents(initiator_tab)-> + PrintPreviewNow(false); WebContents* preview_tab = tab_controller->GetOrCreatePreviewTab(initiator_tab); diff --git a/chrome/browser/printing/print_preview_message_handler.cc b/chrome/browser/printing/print_preview_message_handler.cc index a3960bb..06bdf93 100644 --- a/chrome/browser/printing/print_preview_message_handler.cc +++ b/chrome/browser/printing/print_preview_message_handler.cc @@ -90,18 +90,13 @@ PrintPreviewUI* PrintPreviewMessageHandler::GetPrintPreviewUI() { } void PrintPreviewMessageHandler::OnRequestPrintPreview( - bool source_is_modifiable, - bool webnode_only, - bool source_has_selection) { - if (webnode_only) { + const PrintHostMsg_RequestPrintPreview_Params& params) { + if (params.webnode_only) { printing::PrintViewManager::FromWebContents(web_contents())-> PrintPreviewForWebNode(); } PrintPreviewDialogController::PrintPreview(web_contents()); - PrintPreviewUI::SetSourceIsModifiable(GetPrintPreviewTab(), - source_is_modifiable); - PrintPreviewUI::SetSourceHasSelection(GetPrintPreviewTab(), - source_has_selection); + PrintPreviewUI::SetInitialParams(GetPrintPreviewTab(), params); } void PrintPreviewMessageHandler::OnDidGetPreviewPageCount( diff --git a/chrome/browser/printing/print_preview_message_handler.h b/chrome/browser/printing/print_preview_message_handler.h index f715f44..4bf6d78 100644 --- a/chrome/browser/printing/print_preview_message_handler.h +++ b/chrome/browser/printing/print_preview_message_handler.h @@ -13,6 +13,7 @@ class PrintPreviewUI; struct PrintHostMsg_DidGetPreviewPageCount_Params; struct PrintHostMsg_DidPreviewDocument_Params; struct PrintHostMsg_DidPreviewPage_Params; +struct PrintHostMsg_RequestPrintPreview_Params; namespace content { class WebContents; @@ -47,9 +48,8 @@ class PrintPreviewMessageHandler PrintPreviewUI* GetPrintPreviewUI(); // Message handlers. - void OnRequestPrintPreview(bool source_is_modifiable, - bool webnode_only, - bool source_has_selection); + void OnRequestPrintPreview( + const PrintHostMsg_RequestPrintPreview_Params& params); void OnDidGetDefaultPageLayout( const printing::PageSizeMargins& page_layout_in_points, const gfx::Rect& printable_area_in_points, diff --git a/chrome/browser/printing/print_view_manager.cc b/chrome/browser/printing/print_view_manager.cc index 292a788..2921be3 100644 --- a/chrome/browser/printing/print_view_manager.cc +++ b/chrome/browser/printing/print_view_manager.cc @@ -130,15 +130,17 @@ bool PrintViewManager::PrintToDestination() { return PrintNowInternal(new PrintMsg_PrintPages(routing_id())); } -bool PrintViewManager::PrintPreviewNow() { +bool PrintViewManager::PrintPreviewNow(bool selection_only) { // Users can send print commands all they want and it is beyond // PrintViewManager's control. Just ignore the extra commands. // See http://crbug.com/136842 for example. if (print_preview_state_ != NOT_PREVIEWING) return false; - if (!PrintNowInternal(new PrintMsg_InitiatePrintPreview(routing_id()))) + if (!PrintNowInternal(new PrintMsg_InitiatePrintPreview(routing_id(), + selection_only))) { return false; + } print_preview_state_ = USER_INITIATED_PREVIEW; return true; @@ -342,11 +344,10 @@ void PrintViewManager::OnScriptedPrintPreview(bool source_is_modifiable, scripted_print_preview_rph_ = rph; dialog_controller->PrintPreview(web_contents()); - PrintPreviewUI::SetSourceIsModifiable( - dialog_controller->GetPrintPreviewForContents(web_contents()), - source_is_modifiable); - PrintPreviewUI::SetSourceHasSelection( - dialog_controller->GetPrintPreviewForTab(web_contents()), false); + PrintHostMsg_RequestPrintPreview_Params params; + params.is_modifiable = source_is_modifiable; + PrintPreviewUI::SetInitialParams( + dialog_controller->GetPrintPreviewForContents(web_contents()), params); } void PrintViewManager::OnScriptedPrintPreviewReply(IPC::Message* reply_msg) { diff --git a/chrome/browser/printing/print_view_manager.h b/chrome/browser/printing/print_view_manager.h index 016eb57..301c6ac 100644 --- a/chrome/browser/printing/print_view_manager.h +++ b/chrome/browser/printing/print_view_manager.h @@ -59,7 +59,7 @@ class PrintViewManager : public content::NotificationObserver, // renderer. Since this happens asynchronous, the print preview dialog // creation will not be completed on the return of this function. Returns // false if print preview is impossible at the moment. - bool PrintPreviewNow(); + bool PrintPreviewNow(bool selection_only); // Notify PrintViewManager that print preview is starting in the renderer for // a particular WebNode. diff --git a/chrome/browser/resources/print_preview/native_layer.js b/chrome/browser/resources/print_preview/native_layer.js index ec7990d..2404164 100644 --- a/chrome/browser/resources/print_preview/native_layer.js +++ b/chrome/browser/resources/print_preview/native_layer.js @@ -336,7 +336,7 @@ cr.define('print_preview', function() { initialSettings['previewModifiable'] || false, initialSettings['initiatorTabTitle'] || '', initialSettings['documentHasSelection'] || null, - initialSettings['selectionOnly'] || null, + initialSettings['shouldPrintSelectionOnly'] || null, initialSettings['printerName'] || null, initialSettings['appState'] || null); diff --git a/chrome/browser/tab_contents/render_view_context_menu.cc b/chrome/browser/tab_contents/render_view_context_menu.cc index 3908e2a..848c6bd 100644 --- a/chrome/browser/tab_contents/render_view_context_menu.cc +++ b/chrome/browser/tab_contents/render_view_context_menu.cc @@ -487,8 +487,10 @@ void RenderViewContextMenu::InitMenu() { else if (has_selection) AppendCopyItem(); - if (has_selection) + if (has_selection) { + AppendPrintItem(); AppendSearchProvider(); + } if (!IsDevToolsURL(params_.page_url)) AppendAllExtensionItems(); @@ -532,7 +534,7 @@ void RenderViewContextMenu::AppendPlatformAppItems() { int index = 0; extension_items_.AppendExtensionItems(platform_app->id(), - PrintableSelectionText(), &index); + PrintableSelectionText(), &index); // Add dev tools for unpacked extensions. if (platform_app->location() == extensions::Manifest::LOAD || @@ -805,6 +807,14 @@ void RenderViewContextMenu::AppendCopyItem() { IDS_CONTENT_CONTEXT_COPY); } +void RenderViewContextMenu::AppendPrintItem() { + if (profile_->GetPrefs()->GetBoolean(prefs::kPrintingEnabled) && + (params_.media_type == WebContextMenuData::MediaTypeNone || + params_.media_flags & WebContextMenuData::MediaCanPrint)) { + menu_model_.AddItemWithStringId(IDC_PRINT, IDS_CONTENT_CONTEXT_PRINT); + } +} + void RenderViewContextMenu::AppendSearchProvider() { DCHECK(profile_); @@ -1563,7 +1573,7 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) { if (profile_->GetPrefs()->GetBoolean(prefs::kPrintPreviewDisabled)) { print_view_manager->PrintNow(); } else { - print_view_manager->PrintPreviewNow(); + print_view_manager->PrintPreviewNow(!params_.selection_text.empty()); } } else { rvh->Send(new PrintMsg_PrintNodeUnderContextMenu(rvh->GetRoutingID())); diff --git a/chrome/browser/tab_contents/render_view_context_menu.h b/chrome/browser/tab_contents/render_view_context_menu.h index 438f1884..a44e4b8 100644 --- a/chrome/browser/tab_contents/render_view_context_menu.h +++ b/chrome/browser/tab_contents/render_view_context_menu.h @@ -218,6 +218,7 @@ class RenderViewContextMenu : public ui::SimpleMenuModel::Delegate, void AppendPageItems(); void AppendFrameItems(); void AppendCopyItem(); + void AppendPrintItem(); void AppendEditableItems(); void AppendSearchProvider(); void AppendAllExtensionItems(); diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc index da95740..21b9648 100644 --- a/chrome/browser/ui/browser_commands.cc +++ b/chrome/browser/ui/browser_commands.cc @@ -731,7 +731,7 @@ void Print(Browser* browser) { prefs::kPrintPreviewDisabled)) print_view_manager->PrintNow(); else - print_view_manager->PrintPreviewNow(); + print_view_manager->PrintPreviewNow(false); } bool CanPrint(const Browser* browser) { diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc index e525e54..8b3ab70 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc @@ -774,7 +774,7 @@ void PrintPreviewHandler::SendInitialSettings( initial_settings.SetBoolean(kDocumentHasSelection, print_preview_ui->source_has_selection()); initial_settings.SetBoolean(printing::kSettingShouldPrintSelectionOnly, - false); + print_preview_ui->print_selection_only()); printing::StickySettings* sticky_settings = GetStickySettings(); sticky_settings->RestoreFromPrefs(Profile::FromBrowserContext( preview_web_contents()->GetBrowserContext())->GetPrefs()); diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc index becf933..f9ae6b1 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc @@ -394,23 +394,16 @@ void PrintPreviewUI::SetInitiatorTabTitle( } // static -void PrintPreviewUI::SetSourceIsModifiable(WebContents* print_preview_dialog, - bool source_is_modifiable) { +void PrintPreviewUI::SetInitialParams( + content::WebContents* print_preview_dialog, + const PrintHostMsg_RequestPrintPreview_Params& params) { if (!print_preview_dialog || !print_preview_dialog->GetWebUI()) return; PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>( print_preview_dialog->GetWebUI()->GetController()); - print_preview_ui->source_is_modifiable_ = source_is_modifiable; -} - -// static -void PrintPreviewUI::SetSourceHasSelection(WebContents* print_preview_dialog, - bool source_has_selection) { - if (!print_preview_dialog || !print_preview_dialog->GetWebUI()) - return; - PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>( - print_preview_dialog->GetWebUI()->GetController()); - print_preview_ui->source_has_selection_ = source_has_selection; + print_preview_ui->source_is_modifiable_ = params.is_modifiable; + print_preview_ui->source_has_selection_ = params.has_selection; + print_preview_ui->print_selection_only_ = params.selection_only; } // static diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.h b/chrome/browser/ui/webui/print_preview/print_preview_ui.h index 09e6d41..4cfd242 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_ui.h +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.h @@ -15,6 +15,7 @@ class PrintPreviewDataService; class PrintPreviewHandler; struct PrintHostMsg_DidGetPreviewPageCount_Params; +struct PrintHostMsg_RequestPrintPreview_Params; namespace base { class RefCountedBytes; @@ -60,13 +61,12 @@ class PrintPreviewUI : public ConstrainedWebDialogUI { bool source_has_selection() { return source_has_selection_; } - // Set |source_is_modifiable_| for |print_preview_dialog|'s PrintPreviewUI. - static void SetSourceIsModifiable(content::WebContents* print_preview_dialog, - bool source_is_modifiable); + bool print_selection_only() { return print_selection_only_; } - // Set |source_has_selection_| for |print_preview_dialog|'s PrintPreviewUI. - static void SetSourceHasSelection(content::WebContents* print_preview_dialog, - bool source_has_selection); + // Set initial settings for PrintPreviewUI. + static void SetInitialParams( + content::WebContents* print_preview_dialog, + const PrintHostMsg_RequestPrintPreview_Params& params); // Determines whether to cancel a print preview request based on // |preview_ui_id| and |request_id|. @@ -178,6 +178,9 @@ class PrintPreviewUI : public ConstrainedWebDialogUI { // Indicates whether the source document has selection. bool source_has_selection_; + // Indicates whether only the selection should be printed. + bool print_selection_only_; + // Store the initiator tab title, used for populating the print preview dialog // title. string16 initiator_tab_title_; diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui_unittest.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui_unittest.cc index 1f13219..38e89df 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_ui_unittest.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui_unittest.cc @@ -76,7 +76,7 @@ TEST_F(PrintPreviewUIUnitTest, PrintPreviewData) { printing::PrintViewManager* print_view_manager = printing::PrintViewManager::FromWebContents(initiator_tab); - print_view_manager->PrintPreviewNow(); + print_view_manager->PrintPreviewNow(false); WebContents* preview_dialog = controller->GetOrCreatePreviewDialog(initiator_tab); @@ -131,7 +131,7 @@ TEST_F(PrintPreviewUIUnitTest, PrintPreviewDraftPages) { printing::PrintViewManager* print_view_manager = printing::PrintViewManager::FromWebContents(initiator_tab); - print_view_manager->PrintPreviewNow(); + print_view_manager->PrintPreviewNow(false); WebContents* preview_dialog = controller->GetOrCreatePreviewDialog(initiator_tab); @@ -193,7 +193,7 @@ TEST_F(PrintPreviewUIUnitTest, GetCurrentPrintPreviewStatus) { printing::PrintViewManager* print_view_manager = printing::PrintViewManager::FromWebContents(initiator_tab); - print_view_manager->PrintPreviewNow(); + print_view_manager->PrintPreviewNow(false); WebContents* preview_dialog = controller->GetOrCreatePreviewDialog(initiator_tab); @@ -256,7 +256,7 @@ TEST_F(PrintPreviewUIUnitTest, InitiatorTabGetsFocusOnPrintPreviewDialogClose) { printing::PrintViewManager* print_view_manager = printing::PrintViewManager::FromWebContents(initiator_tab); - print_view_manager->PrintPreviewNow(); + print_view_manager->PrintPreviewNow(false); WebContents* preview_dialog = controller->GetOrCreatePreviewDialog(initiator_tab); diff --git a/chrome/common/print_messages.cc b/chrome/common/print_messages.cc index 8680ade..9d0111f 100644 --- a/chrome/common/print_messages.cc +++ b/chrome/common/print_messages.cc @@ -70,3 +70,14 @@ void PrintMsg_PrintPages_Params::Reset() { params.Reset(); pages = std::vector<int>(); } + +PrintHostMsg_RequestPrintPreview_Params:: + PrintHostMsg_RequestPrintPreview_Params() + : is_modifiable(false), + webnode_only(false), + has_selection(false), + selection_only(false) { +} + +PrintHostMsg_RequestPrintPreview_Params:: + ~PrintHostMsg_RequestPrintPreview_Params() {} diff --git a/chrome/common/print_messages.h b/chrome/common/print_messages.h index 8a79ebc..0b04f71 100644 --- a/chrome/common/print_messages.h +++ b/chrome/common/print_messages.h @@ -62,6 +62,15 @@ struct PrintMsg_PrintPages_Params { std::vector<int> pages; }; +struct PrintHostMsg_RequestPrintPreview_Params { + PrintHostMsg_RequestPrintPreview_Params(); + ~PrintHostMsg_RequestPrintPreview_Params(); + bool is_modifiable; + bool webnode_only; + bool has_selection; + bool selection_only; +}; + #endif // CHROME_COMMON_PRINT_MESSAGES_H_ #define IPC_MESSAGE_START PrintMsgStart @@ -151,6 +160,13 @@ IPC_STRUCT_BEGIN(PrintMsg_PrintPage_Params) IPC_STRUCT_MEMBER(int, page_number) IPC_STRUCT_END() +IPC_STRUCT_TRAITS_BEGIN(PrintHostMsg_RequestPrintPreview_Params) + IPC_STRUCT_TRAITS_MEMBER(is_modifiable) + IPC_STRUCT_TRAITS_MEMBER(webnode_only) + IPC_STRUCT_TRAITS_MEMBER(has_selection) + IPC_STRUCT_TRAITS_MEMBER(selection_only) +IPC_STRUCT_TRAITS_END() + IPC_STRUCT_TRAITS_BEGIN(printing::PageSizeMargins) IPC_STRUCT_TRAITS_MEMBER(content_width) IPC_STRUCT_TRAITS_MEMBER(content_height) @@ -265,7 +281,7 @@ IPC_STRUCT_END() // Messages sent from the browser to the renderer. // Tells the render view to initiate print preview for the entire document. -IPC_MESSAGE_ROUTED0(PrintMsg_InitiatePrintPreview) +IPC_MESSAGE_ROUTED1(PrintMsg_InitiatePrintPreview, bool /* selection_only */) // Tells the render view to initiate printing or print preview for a particular // node, depending on which mode the render view is in. @@ -362,14 +378,8 @@ IPC_MESSAGE_CONTROL2(PrintHostMsg_TempFileForPrintingWritten, #endif // Asks the browser to do print preview. -// |is_modifiable| is set to true when the request is for a web page, and false -// for a PDF. -// |webnode_only| is set to true if the document being printed is a specific -// WebNode, and false if the document is a full WebFrame. -IPC_MESSAGE_ROUTED3(PrintHostMsg_RequestPrintPreview, - bool /* is_modifiable */, - bool /* webnode_only */, - bool /* has_selection */) +IPC_MESSAGE_ROUTED1(PrintHostMsg_RequestPrintPreview, + PrintHostMsg_RequestPrintPreview_Params /* params */) // Notify the browser the number of pages in the print preview document. IPC_MESSAGE_ROUTED1(PrintHostMsg_DidGetPreviewPageCount, diff --git a/chrome/renderer/printing/print_web_view_helper.cc b/chrome/renderer/printing/print_web_view_helper.cc index d9a5cd7..c41839b 100644 --- a/chrome/renderer/printing/print_web_view_helper.cc +++ b/chrome/renderer/printing/print_web_view_helper.cc @@ -1106,12 +1106,14 @@ void PrintWebViewHelper::OnPrintNodeUnderContextMenu() { PrintNode(render_view()->GetContextMenuNode()); } -void PrintWebViewHelper::OnInitiatePrintPreview() { +void PrintWebViewHelper::OnInitiatePrintPreview(bool selection_only) { DCHECK(is_preview_enabled_); WebKit::WebFrame* frame; if (GetPrintFrame(&frame)) { print_preview_context_.InitWithFrame(frame); - RequestPrintPreview(PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME); + RequestPrintPreview(selection_only ? + PRINT_PREVIEW_USER_INITIATED_SELECTION : + PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME); } else { // This should not happen. Let's add a CHECK here to see how often this // gets hit. @@ -1577,22 +1579,27 @@ void PrintWebViewHelper::RequestPrintPreview(PrintPreviewRequestType type) { const bool is_modifiable = print_preview_context_.IsModifiable(); const bool has_selection = print_preview_context_.HasSelection(); old_print_pages_params_.reset(); + PrintHostMsg_RequestPrintPreview_Params params; + params.is_modifiable = is_modifiable; + params.has_selection = has_selection; switch (type) { - case PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME: { - Send(new PrintHostMsg_RequestPrintPreview(routing_id(), is_modifiable, - false, has_selection)); - break; - } - case PRINT_PREVIEW_USER_INITIATED_CONTEXT_NODE: { - Send(new PrintHostMsg_RequestPrintPreview(routing_id(), is_modifiable, - true, has_selection)); - break; - } case PRINT_PREVIEW_SCRIPTED: { IPC::SyncMessage* msg = new PrintHostMsg_ScriptedPrintPreview(routing_id(), is_modifiable); msg->EnableMessagePumping(); Send(msg); + return; + } + case PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME: { + break; + } + case PRINT_PREVIEW_USER_INITIATED_SELECTION: { + DCHECK(has_selection); + params.selection_only = has_selection; + break; + } + case PRINT_PREVIEW_USER_INITIATED_CONTEXT_NODE: { + params.webnode_only = true; break; } default: { @@ -1600,6 +1607,7 @@ void PrintWebViewHelper::RequestPrintPreview(PrintPreviewRequestType type) { return; } } + Send(new PrintHostMsg_RequestPrintPreview(routing_id(), params)); } bool PrintWebViewHelper::CheckForCancel() { diff --git a/chrome/renderer/printing/print_web_view_helper.h b/chrome/renderer/printing/print_web_view_helper.h index 7ba6cc8..f7ae146 100644 --- a/chrome/renderer/printing/print_web_view_helper.h +++ b/chrome/renderer/printing/print_web_view_helper.h @@ -84,6 +84,7 @@ class PrintWebViewHelper enum PrintPreviewRequestType { PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME, + PRINT_PREVIEW_USER_INITIATED_SELECTION, PRINT_PREVIEW_USER_INITIATED_CONTEXT_NODE, PRINT_PREVIEW_SCRIPTED // triggered by window.print(). }; @@ -133,7 +134,7 @@ class PrintWebViewHelper const PrintMsg_Print_Params& params); // Initiate print preview. - void OnInitiatePrintPreview(); + void OnInitiatePrintPreview(bool selection_only); // Start the process of generating a print preview using |settings|. void OnPrintPreview(const base::DictionaryValue& settings); diff --git a/chrome/renderer/printing/print_web_view_helper_browsertest.cc b/chrome/renderer/printing/print_web_view_helper_browsertest.cc index acd929f..5facf4f 100644 --- a/chrome/renderer/printing/print_web_view_helper_browsertest.cc +++ b/chrome/renderer/printing/print_web_view_helper_browsertest.cc @@ -171,7 +171,7 @@ class PrintWebViewHelperTestBase : public ChromeRenderViewTest { void OnPrintPreview(const DictionaryValue& dict) { PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_); - print_web_view_helper->OnInitiatePrintPreview(); + print_web_view_helper->OnInitiatePrintPreview(false); print_web_view_helper->OnPrintPreview(dict); ProcessPendingMessages(); } |