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 5ca14e6ec35946995cad714b7eae8e6bb7c5a55b..01830bc77699e14011ca9bf787086e8836aed81b 100644 |
--- a/chrome/renderer/print_web_view_helper.cc |
+++ b/chrome/renderer/print_web_view_helper.cc |
@@ -139,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) |
Lei Zhang
2011/02/24 03:49:32
Why make this Mac only?
kmadhusu
2011/03/01 01:55:50
As of now, I am implementing only the MAC preview
|
if (!render_view()->webview()) |
return; |
WebFrame* main_frame = render_view()->webview()->mainFrame(); |
@@ -155,7 +157,11 @@ void PrintWebViewHelper::OnPrintForPrintPreview() { |
return; |
} |
- PrintNode(&element, false, false); |
+ InitPrintSettings(element.document().frame(), &element, |
+ PrintWebViewHelper::DEFAULT); |
+ UpdatePrintSettings(job_settings); |
+ PrintForPrintPreview(element.document().frame(), &element); |
+#endif |
} |
void PrintWebViewHelper::OnPrint(bool is_preview) { |
@@ -197,6 +203,23 @@ void PrintWebViewHelper::OnPrintNodeUnderContextMenu() { |
PrintNode(&context_menu_node, 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, |
WebNode* node, |
bool script_initiated, |
@@ -233,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; |
@@ -489,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; |
@@ -499,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; |
} |