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