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

Unified Diff: chrome/renderer/print_web_view_helper.h

Issue 7365003: Print Preview: Make preview generation event driven to eliminate synchronous messages. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: clang fix Created 9 years, 5 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
« no previous file with comments | « chrome/renderer/mock_render_thread.cc ('k') | chrome/renderer/print_web_view_helper.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/print_web_view_helper.h
===================================================================
--- chrome/renderer/print_web_view_helper.h (revision 92822)
+++ chrome/renderer/print_web_view_helper.h (working copy)
@@ -6,6 +6,8 @@
#define CHROME_RENDERER_PRINT_WEB_VIEW_HELPER_H_
#pragma once
+#include <vector>
+
#include "base/memory/scoped_ptr.h"
#include "base/shared_memory.h"
#include "base/time.h"
@@ -34,8 +36,7 @@
// printed.
PrepareFrameAndViewForPrint(const PrintMsg_Print_Params& print_params,
WebKit::WebFrame* frame,
- WebKit::WebNode* node,
- WebKit::WebView* web_view);
+ WebKit::WebNode* node);
~PrepareFrameAndViewForPrint();
int GetExpectedPageCount() const {
@@ -108,9 +109,22 @@
// Initiate print preview.
void OnInitiatePrintPreview();
- // Generate a print preview using |settings|.
+ // Start the process of generating a print preview using |settings|.
void OnPrintPreview(const base::DictionaryValue& settings);
+ // Initialize the print preview document.
+ bool CreatePreviewDocument();
+ // Continue generating the print preview.
+ void OnContinuePreview();
+ // Renders a print preview page. |page_number| is 0-based.
+ void RenderPreviewPage(int page_number);
+ // Finalize the print preview document.
+ bool FinalizePreviewDocument();
+
+ // Abort the preview to put |print_preview_context_| into the 'UNINITIALIZED'
+ // state.
+ void OnAbortPreview();
+
// Print / preview the node under the context menu.
void OnPrintNodeUnderContextMenu();
@@ -124,14 +138,11 @@
void Print(WebKit::WebFrame* frame, WebKit::WebNode* node);
- void PrintPreview(WebKit::WebFrame* frame,
- WebKit::WebNode* node,
- const base::DictionaryValue& settings);
-
enum PrintingResult {
OK,
FAIL_PRINT,
FAIL_PREVIEW,
+ ABORT_PREVIEW,
};
// Notification when printing is done - signal tear-down/free resources.
@@ -187,16 +198,6 @@
// Render the frame for printing.
bool RenderPagesForPrint(WebKit::WebFrame* frame, WebKit::WebNode* node);
- // Render the frame for preview.
- bool RenderPagesForPreview(WebKit::WebFrame* frame, WebKit::WebNode* node);
-
- // Renders all the pages listed in |params| for preview.
- // On success, Send PrintHostMsg_PagesReadyForPreview message with a
- // valid metafile data handle.
- bool CreatePreviewDocument(const PrintMsg_PrintPages_Params& params,
- WebKit::WebFrame* frame,
- WebKit::WebNode* node);
-
// Platform specific helper function for rendering page(s) to |metafile|.
#if defined(OS_WIN)
void RenderPage(const PrintMsg_Print_Params& params, float* scale_factor,
@@ -208,11 +209,8 @@
WebKit::WebFrame* frame, printing::Metafile* metafile);
#elif defined(OS_POSIX)
bool RenderPages(const PrintMsg_PrintPages_Params& params,
- WebKit::WebFrame* frame,
- WebKit::WebNode* node,
- int* page_count,
- printing::Metafile* metafile,
- bool is_preview);
+ WebKit::WebFrame* frame, WebKit::WebNode* node,
+ int* page_count, printing::Metafile* metafile);
#endif // defined(OS_WIN)
// Helper methods -----------------------------------------------------------
@@ -233,21 +231,14 @@
double* margin_bottom_in_points,
double* margin_left_in_points);
- bool IsModifiable(WebKit::WebFrame* frame, WebKit::WebNode* node);
-
void UpdatePrintableSizeInPrintParameters(WebKit::WebFrame* frame,
WebKit::WebNode* node,
PrintMsg_Print_Params* params);
bool GetPrintFrame(WebKit::WebFrame** frame);
- // This reports the current time - |start_time| as the time to render
- // a page and returns the current time.
- base::TimeTicks ReportPreviewPageRenderTime(base::TimeTicks start_time);
- void ReportTotalPreviewGenerationTime(int selected_pages_length,
- int total_pages,
- base::TimeDelta render_time,
- base::TimeDelta total_time);
+ // This reports the current time - |start_time| as the time to render a page.
+ void ReportPreviewPageRenderTime(base::TimeTicks start_time);
// Script Initiated Printing ------------------------------------------------
@@ -267,20 +258,12 @@
void RequestPrintPreview();
- // Called every time print preview renders a page. Notify the browser of the
- // event and check if print preview should be cancelled. Returns false if
- // print preview has been cancelled. |page_number| is 0-based, or negative to
- // indicate its a cancel check only.
- bool PreviewPageRendered(int page_number);
+ // Notify the browser a print preview page has been rendered.
+ // |page_number| is 0-based.
+ void PreviewPageRendered(int page_number);
WebKit::WebView* print_web_view_;
- // The frame to print for script initiated print preview.
- WebKit::WebFrame* script_initiated_preview_frame_;
-
- // The node under the context menu to print preview.
- scoped_ptr<WebKit::WebNode> context_menu_preview_node_;
-
scoped_ptr<PrintMsg_PrintPages_Params> print_pages_params_;
bool is_preview_;
@@ -292,9 +275,92 @@
// the failure came from the browser in the first place.
bool notify_browser_of_print_failure_;
- int preview_page_count_;
scoped_ptr<PrintMsg_PrintPages_Params> old_print_pages_params_;
+ // Keeps track of the state of print preview between messages.
+ class PrintPreviewContext {
+ public:
+ PrintPreviewContext();
+ ~PrintPreviewContext();
+
+ // Initializes the print preview context. Need to be called to set
+ // the |web_frame| / |web_node| to generate the print preview for.
+ void InitWithFrame(WebKit::WebFrame* web_frame);
+ void InitWithNode(const WebKit::WebNode& web_node);
+
+ // Does bookkeeping at the beginning of print preview.
+ void OnPrintPreview();
+
+ // Create the print preview document. |pages| is empty to print all pages.
+ bool CreatePreviewDocument(const PrintMsg_Print_Params& params,
+ const std::vector<int>& pages);
+
+ // Called after a page gets rendered. |page_time| is how long the
+ // rendering took.
+ void RenderedPreviewPage(const base::TimeDelta& page_time);
+
+ // Finalizes the print preview document.
+ void FinalizePreviewDocument();
+
+ // Cleanup after print preview finishes.
+ void Finished();
+
+ // Abort the print preview.
+ void Abort();
+
+ // Helper functions
+ int GetNextPageNumber();
+ bool IsReadyToRender() const;
+ bool IsBusy() const;
+ bool IsModifiable() const;
+
+ // Getters
+ WebKit::WebFrame* frame() const;
+ WebKit::WebNode* node() const;
+ int total_page_count() const;
+ printing::Metafile* metafile() const;
+ const PrintMsg_Print_Params& print_params() const;
+ const gfx::Size& GetPrintCanvasSize() const;
+
+ private:
+ enum State {
+ UNINITIALIZED, // Not ready to render.
+ INITIALIZED, // Ready to render.
+ RENDERING, // Rendering.
+ DONE // Finished rendering.
+ };
+
+ // Reset some of the internal rendering context.
+ void ClearContext();
+
+ // Specifies what to render for print preview.
+ WebKit::WebFrame* frame_;
+ scoped_ptr<WebKit::WebNode> node_;
+
+ scoped_ptr<PrepareFrameAndViewForPrint> prep_frame_view_;
+ scoped_ptr<printing::Metafile> metafile_;
+ scoped_ptr<PrintMsg_Print_Params> print_params_;
+
+ // Total page count in the renderer.
+ int total_page_count_;
+
+ // Number of pages to render.
+ int actual_page_count_;
+
+ // The current page to render.
+ int current_page_number_;
+
+ // Array to keep track of which pages have been printed.
+ std::vector<bool> rendered_pages_;
+
+ base::TimeDelta document_render_time_;
+ base::TimeTicks begin_time_;
+
+ State state_;
+ };
+
+ PrintPreviewContext print_preview_context_;
+
DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelper);
};
« no previous file with comments | « chrome/renderer/mock_render_thread.cc ('k') | chrome/renderer/print_web_view_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698