diff options
author | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-11 21:04:34 +0000 |
---|---|---|
committer | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-11 21:04:34 +0000 |
commit | 09285ec7503530eef8332cd92ee1ceea6486dddb (patch) | |
tree | fa18978aa25db27678a7f21da9454e4d17c14726 /chrome/renderer | |
parent | 9c7675c2eaede3572e28e5f1ae964836fcaf18ae (diff) | |
download | chromium_src-09285ec7503530eef8332cd92ee1ceea6486dddb.zip chromium_src-09285ec7503530eef8332cd92ee1ceea6486dddb.tar.gz chromium_src-09285ec7503530eef8332cd92ee1ceea6486dddb.tar.bz2 |
Printing: Further cleanup of PrintWebViewHelper. PrintWebViewHelper inherently knows whether it should be in preview mode or not.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/6677001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@77858 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/print_web_view_helper.cc | 44 | ||||
-rw-r--r-- | chrome/renderer/print_web_view_helper.h | 37 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 8 |
3 files changed, 43 insertions, 46 deletions
diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc index d348b6b..e4b1fc4 100644 --- a/chrome/renderer/print_web_view_helper.cc +++ b/chrome/renderer/print_web_view_helper.cc @@ -6,9 +6,11 @@ #include <string> +#include "base/command_line.h" #include "base/logging.h" #include "base/process_util.h" #include "base/utf_string_conversions.h" +#include "chrome/common/chrome_switches.h" #include "chrome/common/render_messages.h" #include "chrome/common/render_messages_params.h" #include "chrome/renderer/render_view.h" @@ -108,14 +110,14 @@ PrintWebViewHelper::PrintWebViewHelper(RenderView* render_view) : RenderViewObserver(render_view), print_web_view_(NULL), user_cancelled_scripted_print_count_(0) { + is_preview_ = CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnablePrintPreview); } PrintWebViewHelper::~PrintWebViewHelper() {} -void PrintWebViewHelper::PrintFrame(WebFrame* frame, - bool script_initiated, - bool is_preview) { - Print(frame, NULL, script_initiated, is_preview); +void PrintWebViewHelper::ScriptInitiatedPrint(WebFrame* frame) { + Print(frame, NULL, true); } bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) { @@ -135,6 +137,7 @@ bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) { void PrintWebViewHelper::OnPrintForPrintPreview( const DictionaryValue& job_settings) { + DCHECK(is_preview_); #if defined(OS_MACOSX) // If still not finished with earlier print request simply ignore. if (print_web_view_) @@ -172,21 +175,27 @@ void PrintWebViewHelper::OnPrintForPrintPreview( #endif } -void PrintWebViewHelper::OnPrint(bool is_preview) { +void PrintWebViewHelper::OnPrint() { DCHECK(render_view()->webview()); if (!render_view()->webview()) return; // If the user has selected text in the currently focused frame we print // only that frame (this makes print selection work for multiple frames). - if (render_view()->webview()->focusedFrame()->hasSelection()) - PrintFrame(render_view()->webview()->focusedFrame(), false, is_preview); - else - PrintFrame(render_view()->webview()->mainFrame(), false, is_preview); + WebFrame* frame = render_view()->webview()->focusedFrame()->hasSelection() ? + render_view()->webview()->focusedFrame() : + render_view()->webview()->mainFrame(); + Print(frame, NULL, false); } void PrintWebViewHelper::OnPrintPages() { - OnPrint(false); + DCHECK(!is_preview_); + OnPrint(); +} + +void PrintWebViewHelper::OnPrintPreview() { + DCHECK(is_preview_); + OnPrint(); } void PrintWebViewHelper::OnPrintingDone(int document_cookie, bool success) { @@ -195,26 +204,23 @@ void PrintWebViewHelper::OnPrintingDone(int document_cookie, bool success) { DidFinishPrinting(success); } -void PrintWebViewHelper::OnPrintPreview() { - OnPrint(true); -} - void PrintWebViewHelper::OnPrintNodeUnderContextMenu() { if (render_view()->context_menu_node().isNull()) { NOTREACHED(); return; } + // TODO(thestig) Handle print preview case. http://crbug.com/75505. + // 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()); - Print(context_menu_node.document().frame(), &context_menu_node, false, false); + Print(context_menu_node.document().frame(), &context_menu_node, false); } void PrintWebViewHelper::Print(WebKit::WebFrame* frame, WebNode* node, - bool script_initiated, - bool is_preview) { + bool script_initiated) { // If still not finished with earlier print request simply ignore. if (print_web_view_) return; @@ -243,7 +249,7 @@ void PrintWebViewHelper::Print(WebKit::WebFrame* frame, // Some full screen plugins can say they don't want to print. if (expected_pages_count) { - if (!is_preview) { + if (!is_preview_) { // Ask the browser to show UI to retrieve the final print settings. if (!GetPrintSettingsFromUser(frame, expected_pages_count, use_browser_overlays)) { @@ -253,7 +259,7 @@ void PrintWebViewHelper::Print(WebKit::WebFrame* frame, // Render Pages for printing. if (!print_cancelled) { - if (is_preview) + if (is_preview_) RenderPagesForPreview(frame); else RenderPagesForPrint(frame, node); diff --git a/chrome/renderer/print_web_view_helper.h b/chrome/renderer/print_web_view_helper.h index 29b79b95..768f066 100644 --- a/chrome/renderer/print_web_view_helper.h +++ b/chrome/renderer/print_web_view_helper.h @@ -16,6 +16,9 @@ #include "ui/gfx/size.h" class DictionaryValue; +struct ViewMsg_Print_Params; +struct ViewMsg_PrintPage_Params; +struct ViewMsg_PrintPages_Params; #if defined(USE_X11) namespace skia { @@ -23,10 +26,6 @@ class VectorCanvas; } #endif -struct ViewMsg_Print_Params; -struct ViewMsg_PrintPage_Params; -struct ViewMsg_PrintPages_Params; - // Class that calls the Begin and End print functions on the frame and changes // the size of the view temporarily to support full page printing.. // Do not serve any events in the time between construction and destruction of @@ -76,10 +75,8 @@ class PrintWebViewHelper : public RenderViewObserver , explicit PrintWebViewHelper(RenderView* render_view); virtual ~PrintWebViewHelper(); - // Prints |frame|. - void PrintFrame(WebKit::WebFrame* frame, - bool script_initiated, - bool is_preview); + // Prints |frame| which called window.print(). + void ScriptInitiatedPrint(WebKit::WebFrame* frame); protected: // WebKit::WebViewClient override: @@ -88,14 +85,9 @@ class PrintWebViewHelper : public RenderViewObserver , private: friend class RenderViewTest_OnPrintPages_Test; -#if defined(OS_WIN) - friend class RenderViewTest_DISABLED_PrintLayoutTest_Test; -#elif defined(OS_MACOSX) - friend class RenderViewTest_PrintLayoutTest_Test; -#endif // defined(OS_WIN) - #if defined(OS_WIN) || defined(OS_MACOSX) - friend class RenderViewTest_PrintWithIframe_Test; + FRIEND_TEST_ALL_PREFIXES(RenderViewTest, PrintLayoutTest); + FRIEND_TEST_ALL_PREFIXES(RenderViewTest, PrintWithIframe); #endif // defined(OS_WIN) || defined(OS_MACOSX) // RenderViewObserver implementation. @@ -103,25 +95,27 @@ class PrintWebViewHelper : public RenderViewObserver , // Message handlers --------------------------------------------------------- + // Print the document or generate a print preview. void OnPrintPages(); - void OnPrintNodeUnderContextMenu(); void OnPrintPreview(); + // Common method for OnPrintPages() and OnPrintPreview(). + void OnPrint(); + + // Print / preview the node under the context menu. + void OnPrintNodeUnderContextMenu(); + // Print the pages for print preview. Do not display the native print dialog // for user settings. |job_settings| has new print job settings values. void OnPrintForPrintPreview(const DictionaryValue& job_settings); void OnPrintingDone(int document_cookie, bool success); - // Common method for OnPrintPages() and OnPrintPreview(). - void OnPrint(bool is_preview); - // Main printing code ------------------------------------------------------- void Print(WebKit::WebFrame* frame, WebKit::WebNode* node, - bool script_initiated, - bool is_preview); + bool script_initiated); // Notification when printing is done - signal teardown. void DidFinishPrinting(bool success); @@ -233,6 +227,7 @@ class PrintWebViewHelper : public RenderViewObserver , scoped_ptr<ViewMsg_PrintPages_Params> print_pages_params_; base::Time last_cancelled_script_print_; int user_cancelled_scripted_print_count_; + bool is_preview_; DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelper); }; diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index c0a2e4b..5934412 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -2153,13 +2153,9 @@ void RenderView::didAddMessageToConsole( } void RenderView::printPage(WebFrame* frame) { + // TODO(thestig) Handle print preview case. http://crbug.com/75505. DCHECK(frame); - if (CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnablePrintPreview)) { - print_helper_->PrintFrame(frame, true, true); - } else { - print_helper_->PrintFrame(frame, true, false); - } + print_helper_->ScriptInitiatedPrint(frame); } WebKit::WebNotificationPresenter* RenderView::notificationPresenter() { |