Chromium Code Reviews| Index: chrome/renderer/print_web_view_helper.cc |
| diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc |
| index 4c059afc97c281cdbab259efe3b2b736ba9fe905..c82bdc2bf1f28d9b582e7dc71f3e86399cb3834e 100644 |
| --- a/chrome/renderer/print_web_view_helper.cc |
| +++ b/chrome/renderer/print_web_view_helper.cc |
| @@ -116,8 +116,12 @@ void PrintWebViewHelper::PrintFrame(WebFrame* frame, |
| void PrintWebViewHelper::PrintNode(WebNode* node, |
| bool script_initiated, |
| - bool is_preview) { |
| - Print(node->document().frame(), node, script_initiated, is_preview); |
| + bool is_preview, |
| + bool is_print_for_print_preview) { |
| + if (is_print_for_print_preview) |
| + PrintForPrintPreview(node->document().frame(), node); |
| + else |
| + Print(node->document().frame(), node, script_initiated, is_preview); |
| } |
| bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) { |
| @@ -135,7 +139,9 @@ bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) { |
| return handled; |
| } |
| -void PrintWebViewHelper::OnPrintForPrintPreview() { |
| +void PrintWebViewHelper::OnPrintForPrintPreview( |
| + const std::string& job_settings) { |
| +#if defined(OS_MACOSX) |
| if (!render_view()->webview()) |
| return; |
| WebFrame* main_frame = render_view()->webview()->mainFrame(); |
| @@ -151,7 +157,11 @@ void PrintWebViewHelper::OnPrintForPrintPreview() { |
| return; |
| } |
| - PrintNode(&element, false, false); |
| + InitPrintSettings(element.document().frame(), &element, |
| + PrintWebViewHelper::DEFAULT); |
| + UpdatePrintSettings(job_settings); |
| + PrintNode(&element, false, false, true); |
|
Lei Zhang
2011/02/18 05:21:42
Why change PrintNode()? Why not just call PrintFor
kmadhusu
2011/02/21 01:30:26
Fixed.
|
| +#endif |
| } |
| void PrintWebViewHelper::OnPrint(bool is_preview) { |
| @@ -190,7 +200,24 @@ void PrintWebViewHelper::OnPrintNodeUnderContextMenu() { |
| // Make a copy of the node, since we will do a sync call to the browser and |
| // during that time OnContextMenuClosed might reset context_menu_node_. |
| WebNode context_menu_node(render_view()->context_menu_node()); |
| - PrintNode(&context_menu_node, false, false); |
| + PrintNode(&context_menu_node, false, false, false); |
| +} |
| + |
| +void PrintWebViewHelper::PrintForPrintPreview(WebKit::WebFrame* frame, |
| + WebNode* node) { |
| + // If still not finished with earlier print request simply ignore. |
| + if (print_web_view_) |
| + return; |
| + |
| + // Initialize print params with current print settings. |
| + if (!InitPrintSettings(frame, node, PrintWebViewHelper::CURRENT)) { |
| + NOTREACHED(); |
| + DidFinishPrinting(true); // Release all printing resources. |
| + return; // Failed to init print page settings. |
| + } |
| + |
| + // Render Pages for printing. |
| + RenderPagesForPrint(frame, node); |
| } |
| void PrintWebViewHelper::Print(WebKit::WebFrame* frame, |
| @@ -229,7 +256,7 @@ void PrintWebViewHelper::Print(WebKit::WebFrame* frame, |
| is_preview_ = is_preview; |
| // Initialize print settings. |
| - if (!InitPrintSettings(frame, node)) |
| + if (!InitPrintSettings(frame, node, PrintWebViewHelper::DEFAULT)) |
| return; // Failed to init print page settings. |
| int expected_pages_count = 0; |
| @@ -485,9 +512,10 @@ void PrintWebViewHelper::UpdatePrintableSizeInPrintParameters( |
| } |
| bool PrintWebViewHelper::InitPrintSettings(WebFrame* frame, |
| - WebNode* node) { |
| + WebNode* node, |
| + GetSettingsParam setting_type) { |
| ViewMsg_PrintPages_Params settings; |
| - if (GetDefaultPrintSettings(frame, node, &settings.params)) { |
| + if (GetPrintSettings(frame, node, setting_type, &settings.params)) { |
| print_pages_params_.reset(new ViewMsg_PrintPages_Params(settings)); |
| print_pages_params_->pages.clear(); |
| return true; |
| @@ -495,12 +523,32 @@ bool PrintWebViewHelper::InitPrintSettings(WebFrame* frame, |
| return false; |
| } |
| -bool PrintWebViewHelper::GetDefaultPrintSettings( |
| - WebFrame* frame, |
| - WebNode* node, |
| - ViewMsg_Print_Params* params) { |
| - if (!render_view()->Send(new ViewHostMsg_GetDefaultPrintSettings( |
| - render_view()->routing_id(), params))) { |
| +bool PrintWebViewHelper::UpdatePrintSettings(const std::string& job_settings) { |
| + ViewMsg_PrintPages_Params settings; |
| + IPC::SyncMessage* msg = new ViewHostMsg_UpdatePrintSettings( |
| + render_view()->routing_id(), |
| + (*print_pages_params_).params.document_cookie, |
| + job_settings, &settings.params); |
| + if (!render_view()->Send(msg)) { |
| + NOTREACHED(); |
| + return false; |
| + } |
| + print_pages_params_.reset(new ViewMsg_PrintPages_Params(settings)); |
| + return true; |
| +} |
| + |
| +bool PrintWebViewHelper::GetPrintSettings(WebFrame* frame, WebNode* node, |
| + GetSettingsParam setting_type, ViewMsg_Print_Params* params) { |
| + IPC::SyncMessage* msg = NULL; |
| + if (setting_type == CURRENT) { |
| + msg = new ViewHostMsg_GetCurrentPrintSettings(render_view()->routing_id(), |
| + (*print_pages_params_).params.document_cookie, |
| + params); |
| + } else { |
| + msg = new ViewHostMsg_GetDefaultPrintSettings(render_view()->routing_id(), |
| + params); |
| + } |
| + if (!render_view()->Send(msg)) { |
| NOTREACHED(); |
| return false; |
| } |