Index: chrome/renderer/print_web_view_helper.cc |
=================================================================== |
--- chrome/renderer/print_web_view_helper.cc (revision 70859) |
+++ chrome/renderer/print_web_view_helper.cc (working copy) |
@@ -14,7 +14,10 @@ |
#include "grit/generated_resources.h" |
#include "printing/units.h" |
#include "third_party/WebKit/WebKit/chromium/public/WebConsoleMessage.h" |
+#include "third_party/WebKit/WebKit/chromium/public/WebDocument.h" |
+#include "third_party/WebKit/WebKit/chromium/public/WebElement.h" |
#include "third_party/WebKit/WebKit/chromium/public/WebFrame.h" |
+#include "third_party/WebKit/WebKit/chromium/public/WebNode.h" |
#include "third_party/WebKit/WebKit/chromium/public/WebRect.h" |
#include "third_party/WebKit/WebKit/chromium/public/WebScreenInfo.h" |
#include "third_party/WebKit/WebKit/chromium/public/WebSize.h" |
@@ -28,6 +31,7 @@ |
using printing::ConvertUnitDouble; |
using WebKit::WebConsoleMessage; |
using WebKit::WebFrame; |
+using WebKit::WebPoint; |
viettrungluu
2011/01/13 01:04:40
To be consistent with the file, maybe you should a
|
using WebKit::WebRect; |
using WebKit::WebSize; |
using WebKit::WebScreenInfo; |
@@ -38,6 +42,7 @@ |
PrepareFrameAndViewForPrint::PrepareFrameAndViewForPrint( |
const ViewMsg_Print_Params& print_params, |
WebFrame* frame, |
+ WebKit::WebNode* node, |
WebView* web_view) |
: frame_(frame), web_view_(web_view), expected_pages_count_(0), |
use_browser_overlays_(true) { |
@@ -69,7 +74,9 @@ |
web_view->resize(print_layout_size); |
expected_pages_count_ = frame->printBegin( |
- print_canvas_size_, static_cast<int>(print_params.dpi), |
+ print_canvas_size_, |
+ node, |
+ static_cast<int>(print_params.dpi), |
&use_browser_overlays_); |
} |
@@ -90,6 +97,19 @@ |
void PrintWebViewHelper::Print(WebFrame* frame, |
bool script_initiated, |
bool is_preview) { |
+ Print(frame, NULL, script_initiated, is_preview); |
+} |
+ |
+void PrintWebViewHelper::Print(WebKit::WebNode* node, |
+ bool script_initiated, |
+ bool is_preview) { |
+ Print(node->document().frame(), node, script_initiated, is_preview); |
+} |
+ |
+void PrintWebViewHelper::Print(WebKit::WebFrame* frame, |
+ WebKit::WebNode* node, |
+ bool script_initiated, |
+ bool is_preview) { |
const int kMinSecondsToIgnoreJavascriptInitiatedPrint = 2; |
const int kMaxSecondsToIgnoreJavascriptInitiatedPrint = 2 * 60; // 2 Minutes. |
@@ -122,7 +142,7 @@ |
is_preview_ = is_preview; |
// Initialize print settings. |
- if (!InitPrintSettings(frame)) |
+ if (!InitPrintSettings(frame, node)) |
return; // Failed to init print page settings. |
int expected_pages_count = 0; |
@@ -132,7 +152,7 @@ |
// a scope for itself (see comments on PrepareFrameAndViewForPrint). |
{ |
PrepareFrameAndViewForPrint prep_frame_view( |
- (*print_pages_params_).params, frame, frame->view()); |
+ (*print_pages_params_).params, frame, node, frame->view()); |
expected_pages_count = prep_frame_view.GetExpectedPageCount(); |
if (expected_pages_count) |
use_browser_overlays = prep_frame_view.ShouldUseBrowserOverlays(); |
@@ -153,7 +173,7 @@ |
if (is_preview_) |
RenderPagesForPreview(frame); |
else |
- RenderPagesForPrint(frame); |
+ RenderPagesForPrint(frame, node); |
// Reset cancel counter on first successful print. |
user_cancelled_scripted_print_count_ = 0; |
@@ -222,12 +242,14 @@ |
#if defined(OS_MACOSX) || defined(OS_WIN) |
void PrintWebViewHelper::PrintPages(const ViewMsg_PrintPages_Params& params, |
- WebFrame* frame) { |
+ WebFrame* frame, |
+ WebKit::WebNode* node) { |
ViewMsg_Print_Params printParams = params.params; |
- UpdatePrintableSizeInPrintParameters(frame, &printParams); |
+ UpdatePrintableSizeInPrintParameters(frame, node, &printParams); |
PrepareFrameAndViewForPrint prep_frame_view(printParams, |
frame, |
+ node, |
frame->view()); |
int page_count = prep_frame_view.GetExpectedPageCount(); |
@@ -266,7 +288,7 @@ |
void PrintWebViewHelper::didStopLoading() { |
DCHECK(print_pages_params_.get() != NULL); |
- PrintPages(*print_pages_params_.get(), print_web_view_->mainFrame()); |
+ PrintPages(*print_pages_params_.get(), print_web_view_->mainFrame(), NULL); |
} |
void PrintWebViewHelper::GetPageSizeAndMarginsInPoints( |
@@ -351,14 +373,16 @@ |
} |
void PrintWebViewHelper::UpdatePrintableSizeInPrintParameters( |
- WebFrame* frame, ViewMsg_Print_Params* params) { |
+ WebFrame* frame, |
+ WebKit::WebNode* node, |
+ ViewMsg_Print_Params* params) { |
double content_width_in_points; |
double content_height_in_points; |
double margin_top_in_points; |
double margin_right_in_points; |
double margin_bottom_in_points; |
double margin_left_in_points; |
- PrepareFrameAndViewForPrint prepare(*params, frame, frame->view()); |
+ PrepareFrameAndViewForPrint prepare(*params, frame, node, frame->view()); |
PrintWebViewHelper::GetPageSizeAndMarginsInPoints(frame, 0, *params, |
&content_width_in_points, &content_height_in_points, |
&margin_top_in_points, &margin_right_in_points, |
@@ -384,9 +408,10 @@ |
params->margin_left = static_cast<int>(margin_left_in_points); |
} |
-bool PrintWebViewHelper::InitPrintSettings(WebFrame* frame) { |
+bool PrintWebViewHelper::InitPrintSettings(WebFrame* frame, |
+ WebKit::WebNode* node) { |
ViewMsg_PrintPages_Params settings; |
- if (GetDefaultPrintSettings(frame, &settings.params)) { |
+ if (GetDefaultPrintSettings(frame, node, &settings.params)) { |
print_pages_params_.reset(new ViewMsg_PrintPages_Params(settings)); |
print_pages_params_->pages.clear(); |
return true; |
@@ -395,7 +420,9 @@ |
} |
bool PrintWebViewHelper::GetDefaultPrintSettings( |
- WebFrame* frame, ViewMsg_Print_Params* params) { |
+ WebFrame* frame, |
+ WebKit::WebNode* node, |
+ ViewMsg_Print_Params* params) { |
IPC::SyncMessage* msg = |
new ViewHostMsg_GetDefaultPrintSettings(routing_id(), params); |
if (!Send(msg)) { |
@@ -416,7 +443,7 @@ |
NOTREACHED(); |
return false; |
} |
- UpdatePrintableSizeInPrintParameters(frame, params); |
+ UpdatePrintableSizeInPrintParameters(frame, node, params); |
return true; |
} |
@@ -453,13 +480,14 @@ |
return (print_settings.params.dpi && print_settings.params.document_cookie); |
} |
viettrungluu
2011/01/13 01:04:40
Could you change that to |WebFrame* frame| while y
|
-void PrintWebViewHelper::RenderPagesForPrint(WebFrame *frame) { |
+void PrintWebViewHelper::RenderPagesForPrint(WebFrame *frame, |
+ WebKit::WebNode* node) { |
ViewMsg_PrintPages_Params print_settings = *print_pages_params_; |
if (print_settings.params.selection_only) { |
CopyAndPrint(frame); |
} else { |
// TODO: Always copy before printing. |
- PrintPages(print_settings, frame); |
+ PrintPages(print_settings, frame, node); |
} |
} |