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

Side by Side Diff: android_webview/browser/renderer_host/print_manager.cc

Issue 54963005: Upstream printing changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 7 years 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 unified diff | Download patch
« no previous file with comments | « android_webview/browser/renderer_host/print_manager.h ('k') | android_webview/common/DEPS » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "android_webview/browser/renderer_host/print_manager.h"
6
7 #include "android_webview/browser/aw_browser_context.h"
8 #include "android_webview/common/print_messages.h"
9 #include "android_webview/common/render_view_messages.h"
10 #include "base/android/scoped_java_ref.h"
11 #include "base/callback.h"
12 #include "base/file_util.h"
13 #include "base/logging.h"
14 #include "content/public/browser/browser_thread.h"
15 #include "printing/print_settings.h"
16
17 using content::BrowserThread;
18 using printing::PrintSettings;
19
20 namespace android_webview {
21
22 PrintManager::PrintManager(content::WebContents* contents,
23 PrintSettings* settings,
24 int fd,
25 PrintManagerDelegate* delegate)
26 : content::WebContentsObserver(contents),
27 settings_(settings),
28 fd_(fd),
29 delegate_(delegate),
30 number_pages_(0),
31 cookie_(1),
32 printing_(false) {
33 DCHECK(delegate_);
34 }
35
36 PrintManager::~PrintManager() {}
37
38 bool PrintManager::OnMessageReceived(const IPC::Message& message) {
39 bool handled = true;
40 IPC_BEGIN_MESSAGE_MAP(PrintManager, message)
41 IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetPrintedPagesCount,
42 OnDidGetPrintedPagesCount)
43 IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetDocumentCookie,
44 OnDidGetDocumentCookie)
45 IPC_MESSAGE_HANDLER(PrintHostMsg_PrintingFailed, OnPrintingFailed)
46 IPC_MESSAGE_HANDLER_DELAY_REPLY(PrintHostMsg_GetDefaultPrintSettings,
47 OnGetDefaultPrintSettings)
48 IPC_MESSAGE_HANDLER(PrintHostMsg_AllocateTempFileForPrinting,
49 OnAllocateTempFileForPrinting)
50 IPC_MESSAGE_HANDLER(PrintHostMsg_TempFileForPrintingWritten,
51 OnTempFileForPrintingWritten)
52 IPC_MESSAGE_UNHANDLED(handled = false)
53 IPC_END_MESSAGE_MAP()
54
55 return handled ? true : WebContentsObserver::OnMessageReceived(message);
56 }
57
58 void PrintManager::OnAllocateTempFileForPrinting(
59 base::FileDescriptor* temp_file_fd,
60 int* sequence_number) {
61 // we don't really use the sequence number.
62 *sequence_number = 0;
63 temp_file_fd->fd = fd_;
64 temp_file_fd->auto_close = false;
65 }
66
67 void PrintManager::OnTempFileForPrintingWritten(int sequence_number) {
68 delegate_->DidExportPdf(true);
69 }
70
71 void PrintManager::OnDidGetPrintedPagesCount(int cookie,
72 int number_pages) {
73 DCHECK_GT(cookie, 0);
74 DCHECK_GT(number_pages, 0);
75 number_pages_ = number_pages;
76 }
77
78 void PrintManager::OnDidGetDocumentCookie(int cookie) {
79 cookie_ = cookie;
80 }
81
82 void PrintManager::OnGetDefaultPrintSettings(IPC::Message* reply_msg) {
83 // Unlike the printing_message_filter, we do process this in ui thread
84 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
85 OnGetDefaultPrintSettingsReply(reply_msg);
86 }
87
88 void RenderParamsFromPrintSettings(const printing::PrintSettings& settings,
89 PrintMsg_Print_Params* params) {
90 params->page_size = settings.page_setup_device_units().physical_size();
91 params->content_size.SetSize(
92 settings.page_setup_device_units().content_area().width(),
93 settings.page_setup_device_units().content_area().height());
94 params->printable_area.SetRect(
95 settings.page_setup_device_units().printable_area().x(),
96 settings.page_setup_device_units().printable_area().y(),
97 settings.page_setup_device_units().printable_area().width(),
98 settings.page_setup_device_units().printable_area().height());
99 params->margin_top = settings.page_setup_device_units().content_area().y();
100 params->margin_left = settings.page_setup_device_units().content_area().x();
101 params->dpi = settings.dpi();
102 // Currently hardcoded at 1.25. See PrintSettings' constructor.
103 params->min_shrink = settings.min_shrink();
104 // Currently hardcoded at 2.0. See PrintSettings' constructor.
105 params->max_shrink = settings.max_shrink();
106 // Currently hardcoded at 72dpi. See PrintSettings' constructor.
107 params->desired_dpi = settings.desired_dpi();
108 // Always use an invalid cookie.
109 params->document_cookie = 0;
110 params->selection_only = settings.selection_only();
111 params->supports_alpha_blend = settings.supports_alpha_blend();
112 params->should_print_backgrounds = settings.should_print_backgrounds();
113 params->display_header_footer = settings.display_header_footer();
114 params->title = settings.title();
115 params->url = settings.url();
116 }
117
118 void PrintManager::OnGetDefaultPrintSettingsReply(IPC::Message* reply_msg) {
119 PrintMsg_Print_Params params;
120 RenderParamsFromPrintSettings(*settings_, &params);
121 params.document_cookie = cookie_;
122 PrintHostMsg_GetDefaultPrintSettings::WriteReplyParams(reply_msg, params);
123 Send(reply_msg);
124 }
125
126 void PrintManager::OnPrintingFailed(int cookie) {
127 if (cookie != cookie_) {
128 NOTREACHED();
129 return;
130 }
131 delegate_->DidExportPdf(false);
132 }
133
134 bool PrintManager::PrintNow() {
135 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
136 if (printing_)
137 return false;
138
139 printing_ = true;
140 return Send(new PrintMsg_PrintPages(routing_id()));
141 }
142
143 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/browser/renderer_host/print_manager.h ('k') | android_webview/common/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698