Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4254)

Unified Diff: chrome/renderer/print_web_view_helper.cc

Issue 6533006: Print Preview: Hook up the print button to initiate printing without displaying a print dialog. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: '' Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698