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

Side by Side Diff: chrome/renderer/printing/print_web_view_helper.h

Issue 11953010: Cleanup of PrepareFrameAndViewForPrint code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/renderer/printing/print_web_view_helper.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_RENDERER_PRINTING_PRINT_WEB_VIEW_HELPER_H_ 5 #ifndef CHROME_RENDERER_PRINTING_PRINT_WEB_VIEW_HELPER_H_
6 #define CHROME_RENDERER_PRINTING_PRINT_WEB_VIEW_HELPER_H_ 6 #define CHROME_RENDERER_PRINTING_PRINT_WEB_VIEW_HELPER_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/gtest_prod_util.h" 10 #include "base/gtest_prod_util.h"
(...skipping 19 matching lines...) Expand all
30 } 30 }
31 31
32 namespace WebKit { 32 namespace WebKit {
33 class WebFrame; 33 class WebFrame;
34 class WebView; 34 class WebView;
35 } 35 }
36 36
37 namespace printing { 37 namespace printing {
38 38
39 struct PageSizeMargins; 39 struct PageSizeMargins;
40 40 class PrepareFrameAndViewForPrint;
41 // Class that calls the Begin and End print functions on the frame and changes
42 // the size of the view temporarily to support full page printing..
43 // Do not serve any events in the time between construction and destruction of
44 // this class because it will cause flicker.
45 class PrepareFrameAndViewForPrint {
46 public:
47 // Prints |frame|. If |node| is not NULL, then only that node will be
48 // printed.
49 PrepareFrameAndViewForPrint(const PrintMsg_Print_Params& print_params,
50 WebKit::WebFrame* frame,
51 const WebKit::WebNode& node);
52 ~PrepareFrameAndViewForPrint();
53
54 void UpdatePrintParams(const PrintMsg_Print_Params& print_params);
55
56 int GetExpectedPageCount() const {
57 return expected_pages_count_;
58 }
59
60 bool ShouldUseBrowserOverlays() const {
61 return use_browser_overlays_;
62 }
63
64 gfx::Size GetPrintCanvasSize() const;
65
66 void FinishPrinting();
67
68 private:
69 void StartPrinting(const WebKit::WebPrintParams& webkit_print_params);
70
71 WebKit::WebFrame* frame_;
72 WebKit::WebNode node_to_print_;
73 WebKit::WebView* web_view_;
74 WebKit::WebPrintParams web_print_params_;
75 gfx::Size prev_view_size_;
76 gfx::Size prev_scroll_offset_;
77 int expected_pages_count_;
78 bool use_browser_overlays_;
79 bool finished_;
80 bool should_print_backgrounds_;
81
82 DISALLOW_COPY_AND_ASSIGN(PrepareFrameAndViewForPrint);
83 };
84 41
85 // PrintWebViewHelper handles most of the printing grunt work for RenderView. 42 // PrintWebViewHelper handles most of the printing grunt work for RenderView.
86 // We plan on making print asynchronous and that will require copying the DOM 43 // We plan on making print asynchronous and that will require copying the DOM
87 // of the document and creating a new WebView with the contents. 44 // of the document and creating a new WebView with the contents.
88 class PrintWebViewHelper 45 class PrintWebViewHelper
89 : public content::RenderViewObserver, 46 : public content::RenderViewObserver,
90 public content::RenderViewObserverTracker<PrintWebViewHelper>, 47 public content::RenderViewObserverTracker<PrintWebViewHelper>,
91 public WebKit::WebViewClient, 48 public WebKit::WebViewClient,
92 public WebKit::WebFrameClient { 49 public WebKit::WebFrameClient {
93 public: 50 public:
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 176
220 // Notification when printing is done - signal tear-down/free resources. 177 // Notification when printing is done - signal tear-down/free resources.
221 void DidFinishPrinting(PrintingResult result); 178 void DidFinishPrinting(PrintingResult result);
222 179
223 // Print Settings ----------------------------------------------------------- 180 // Print Settings -----------------------------------------------------------
224 181
225 // Initialize print page settings with default settings. 182 // Initialize print page settings with default settings.
226 // Used only for native printing workflow. 183 // Used only for native printing workflow.
227 bool InitPrintSettings(bool fit_to_paper_size); 184 bool InitPrintSettings(bool fit_to_paper_size);
228 185
229 // Initialize print page settings with default settings and prepare the frame 186 // Calculate number of pages in source document.
230 // for print. A new PrepareFrameAndViewForPrint is created to fulfill the 187 bool CalculateNumberOfPages(WebKit::WebFrame* frame,
231 // request and is filled into the |prepare| argument. 188 const WebKit::WebNode& node,
232 // Used only for native printing workflow. 189 int* number_of_pages);
233 bool InitPrintSettingsAndPrepareFrame(
234 WebKit::WebFrame* frame,
235 const WebKit::WebNode& node,
236 scoped_ptr<PrepareFrameAndViewForPrint>* prepare);
237 190
238 // Update the current print settings with new |passed_job_settings|. 191 // Update the current print settings with new |passed_job_settings|.
239 // |passed_job_settings| dictionary contains print job details such as printer 192 // |passed_job_settings| dictionary contains print job details such as printer
240 // name, number of copies, page range, etc. 193 // name, number of copies, page range, etc.
241 bool UpdatePrintSettings(WebKit::WebFrame* frame, 194 bool UpdatePrintSettings(WebKit::WebFrame* frame,
242 const WebKit::WebNode& node, 195 const WebKit::WebNode& node,
243 const base::DictionaryValue& passed_job_settings); 196 const base::DictionaryValue& passed_job_settings);
244 197
245 // Get final print settings from the user. 198 // Get final print settings from the user.
246 // Return false if the user cancels or on error. 199 // Return false if the user cancels or on error.
247 bool GetPrintSettingsFromUser(WebKit::WebFrame* frame, 200 bool GetPrintSettingsFromUser(WebKit::WebFrame* frame,
248 const WebKit::WebNode& node, 201 const WebKit::WebNode& node,
249 int expected_pages_count, 202 int expected_pages_count);
250 bool use_browser_overlays);
251 203
252 // Page Printing / Rendering ------------------------------------------------ 204 // Page Printing / Rendering ------------------------------------------------
253 205
254 // Prints all the pages listed in |print_pages_params_|. 206 // Prints all the pages listed in |print_pages_params_|.
255 // It will implicitly revert the document to display CSS media type. 207 // It will implicitly revert the document to display CSS media type.
256 bool PrintPages(WebKit::WebFrame* frame, const WebKit::WebNode& node); 208 bool PrintPages(WebKit::WebFrame* frame, const WebKit::WebNode& node);
209 bool PrintPagesNative(WebKit::WebFrame* frame,
210 const WebKit::WebNode& node,
211 int page_count,
212 const gfx::Size& canvas_size);
257 213
258 // Prints the page listed in |params|. 214 // Prints the page listed in |params|.
259 #if defined(USE_X11) 215 #if defined(USE_X11)
260 void PrintPageInternal(const PrintMsg_PrintPage_Params& params, 216 void PrintPageInternal(const PrintMsg_PrintPage_Params& params,
261 const gfx::Size& canvas_size, 217 const gfx::Size& canvas_size,
262 WebKit::WebFrame* frame, 218 WebKit::WebFrame* frame,
263 Metafile* metafile); 219 Metafile* metafile);
264 #else 220 #else
265 void PrintPageInternal(const PrintMsg_PrintPage_Params& params, 221 void PrintPageInternal(const PrintMsg_PrintPage_Params& params,
266 const gfx::Size& canvas_size, 222 const gfx::Size& canvas_size,
267 WebKit::WebFrame* frame); 223 WebKit::WebFrame* frame);
268 #endif 224 #endif
269 225
270 // Render the frame for printing. 226 // Render the frame for printing.
271 bool RenderPagesForPrint(WebKit::WebFrame* frame, 227 bool RenderPagesForPrint(WebKit::WebFrame* frame,
272 const WebKit::WebNode& node); 228 const WebKit::WebNode& node);
273 229
274 // Platform specific helper function for rendering page(s) to |metafile|. 230 // Platform specific helper function for rendering page(s) to |metafile|.
275 #if defined(OS_WIN) 231 #if defined(OS_WIN)
276 void RenderPage(const PrintMsg_Print_Params& params, 232 void RenderPage(const PrintMsg_Print_Params& params,
277 int page_number, 233 int page_number,
278 WebKit::WebFrame* frame, 234 WebKit::WebFrame* frame,
279 bool is_preview, 235 bool is_preview,
280 Metafile* metafile, 236 Metafile* metafile,
281 double* scale_factor, 237 double* scale_factor,
282 gfx::Size* page_size_in_dpi, 238 gfx::Size* page_size_in_dpi,
283 gfx::Rect* content_area_in_dpi); 239 gfx::Rect* content_area_in_dpi);
284 #elif defined(OS_MACOSX) 240 #elif defined(OS_MACOSX)
285 void RenderPage(const PrintMsg_Print_Params& params, int page_number, 241 void RenderPage(const PrintMsg_Print_Params& params,
286 WebKit::WebFrame* frame, bool is_preview, 242 int page_number,
287 Metafile* metafile, gfx::Size* page_size, 243 WebKit::WebFrame* frame,
244 bool is_preview,
245 Metafile* metafile,
246 gfx::Size* page_size,
288 gfx::Rect* content_rect); 247 gfx::Rect* content_rect);
289 #elif defined(OS_POSIX)
290 bool RenderPages(const PrintMsg_PrintPages_Params& params,
291 WebKit::WebFrame* frame, const WebKit::WebNode& node,
292 std::vector<int>* printed_pages,
293 Metafile* metafile);
294 #endif // defined(OS_WIN) 248 #endif // defined(OS_WIN)
295 249
296 // Renders page contents from |frame| to |content_area| of |canvas|. 250 // Renders page contents from |frame| to |content_area| of |canvas|.
297 // |page_number| is zero-based. 251 // |page_number| is zero-based.
298 // When method is called, canvas should be setup to draw to |canvas_area| 252 // When method is called, canvas should be setup to draw to |canvas_area|
299 // with |scale_factor|. 253 // with |scale_factor|.
300 static float RenderPageContent(WebKit::WebFrame* frame, 254 static float RenderPageContent(WebKit::WebFrame* frame,
301 int page_number, 255 int page_number,
302 const gfx::Rect& canvas_area, 256 const gfx::Rect& canvas_area,
303 const gfx::Rect& content_area, 257 const gfx::Rect& content_area,
304 double scale_factor, 258 double scale_factor,
305 WebKit::WebCanvas* canvas); 259 WebKit::WebCanvas* canvas);
306 260
307 // Helper methods ----------------------------------------------------------- 261 // Helper methods -----------------------------------------------------------
308 262
309 bool CopyAndPrint(WebKit::WebFrame* web_frame); 263 bool CopyAndPrint(WebKit::WebFrame* web_frame);
310 264
311 bool CopyMetafileDataToSharedMem(Metafile* metafile, 265 bool CopyMetafileDataToSharedMem(Metafile* metafile,
312 base::SharedMemoryHandle* shared_mem_handle); 266 base::SharedMemoryHandle* shared_mem_handle);
313 267
314 // Helper method to get page layout in points and fit to page if needed. 268 // Helper method to get page layout in points and fit to page if needed.
315 static void ComputePageLayoutInPointsForCss( 269 static void ComputePageLayoutInPointsForCss(
316 WebKit::WebFrame* frame, 270 WebKit::WebFrame* frame,
317 int page_index, 271 int page_index,
318 const PrintMsg_Print_Params& default_params, 272 const PrintMsg_Print_Params& default_params,
319 bool ignore_css_margins, 273 bool ignore_css_margins,
320 double* scale_factor, 274 double* scale_factor,
321 PageSizeMargins* page_layout_in_points); 275 PageSizeMargins* page_layout_in_points);
322 276
323 // Prepare the frame and view for print and then call this function to honor
324 // the CSS page layout information.
325 static void UpdateFrameAndViewFromCssPageLayout(
326 WebKit::WebFrame* frame,
327 const WebKit::WebNode& node,
328 PrepareFrameAndViewForPrint* prepare,
329 const PrintMsg_Print_Params& params,
330 bool ignore_css_margins);
331
332 // Given the |device| and |canvas| to draw on, prints the appropriate headers 277 // Given the |device| and |canvas| to draw on, prints the appropriate headers
333 // and footers using strings from |header_footer_info| on to the canvas. 278 // and footers using strings from |header_footer_info| on to the canvas.
334 static void PrintHeaderAndFooter( 279 static void PrintHeaderAndFooter(
335 WebKit::WebCanvas* canvas, 280 WebKit::WebCanvas* canvas,
336 int page_number, 281 int page_number,
337 int total_pages, 282 int total_pages,
338 float webkit_scale_factor, 283 float webkit_scale_factor,
339 const PageSizeMargins& page_layout_in_points, 284 const PageSizeMargins& page_layout_in_points,
340 const base::DictionaryValue& header_footer_info, 285 const base::DictionaryValue& header_footer_info,
341 const PrintMsg_Print_Params& params); 286 const PrintMsg_Print_Params& params);
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 }; 446 };
502 447
503 bool print_node_in_progress_; 448 bool print_node_in_progress_;
504 PrintPreviewContext print_preview_context_; 449 PrintPreviewContext print_preview_context_;
505 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelper); 450 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelper);
506 }; 451 };
507 452
508 } // namespace printing 453 } // namespace printing
509 454
510 #endif // CHROME_RENDERER_PRINTING_PRINT_WEB_VIEW_HELPER_H_ 455 #endif // CHROME_RENDERER_PRINTING_PRINT_WEB_VIEW_HELPER_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/renderer/printing/print_web_view_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698