| Index: chrome/renderer/print_web_view_helper.cc
 | 
| ===================================================================
 | 
| --- chrome/renderer/print_web_view_helper.cc	(revision 71495)
 | 
| +++ 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"
 | 
| @@ -39,6 +42,7 @@
 | 
|  PrepareFrameAndViewForPrint::PrepareFrameAndViewForPrint(
 | 
|      const ViewMsg_Print_Params& print_params,
 | 
|      WebFrame* frame,
 | 
| +    WebNode* node,
 | 
|      WebView* web_view)
 | 
|          : frame_(frame), web_view_(web_view), expected_pages_count_(0),
 | 
|            use_browser_overlays_(true) {
 | 
| @@ -69,15 +73,12 @@
 | 
|  
 | 
|    web_view->resize(print_layout_size);
 | 
|  
 | 
| -#if defined(WEBFRAME_PRINTBEGIN_TAKES_NODE)
 | 
| +  WebNode node_to_print;
 | 
| +  if (node)
 | 
| +    node_to_print = *node;
 | 
|    expected_pages_count_ = frame->printBegin(
 | 
| -      print_canvas_size_, WebNode(), static_cast<int>(print_params.dpi),
 | 
| +      print_canvas_size_, node_to_print, static_cast<int>(print_params.dpi),
 | 
|        &use_browser_overlays_);
 | 
| -#else
 | 
| -  expected_pages_count_ = frame->printBegin(
 | 
| -      print_canvas_size_, static_cast<int>(print_params.dpi),
 | 
| -      &use_browser_overlays_);
 | 
| -#endif
 | 
|  }
 | 
|  
 | 
|  PrepareFrameAndViewForPrint::~PrepareFrameAndViewForPrint() {
 | 
| @@ -94,7 +95,20 @@
 | 
|  
 | 
|  PrintWebViewHelper::~PrintWebViewHelper() {}
 | 
|  
 | 
| -void PrintWebViewHelper::Print(WebFrame* frame,
 | 
| +void PrintWebViewHelper::PrintFrame(WebFrame* frame,
 | 
| +                                    bool script_initiated,
 | 
| +                                    bool is_preview) {
 | 
| +  Print(frame, NULL, script_initiated, is_preview);
 | 
| +}
 | 
| +
 | 
| +void PrintWebViewHelper::PrintNode(WebNode* node,
 | 
| +                                   bool script_initiated,
 | 
| +                                   bool is_preview) {
 | 
| +  Print(node->document().frame(), node, script_initiated, is_preview);
 | 
| +}
 | 
| +
 | 
| +void PrintWebViewHelper::Print(WebKit::WebFrame* frame,
 | 
| +                               WebNode* node,
 | 
|                                 bool script_initiated,
 | 
|                                 bool is_preview) {
 | 
|    const int kMinSecondsToIgnoreJavascriptInitiatedPrint = 2;
 | 
| @@ -129,7 +143,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;
 | 
| @@ -139,7 +153,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();
 | 
| @@ -160,7 +174,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;
 | 
| @@ -229,12 +243,14 @@
 | 
|  
 | 
|  #if defined(OS_MACOSX) || defined(OS_WIN)
 | 
|  void PrintWebViewHelper::PrintPages(const ViewMsg_PrintPages_Params& params,
 | 
| -                                    WebFrame* frame) {
 | 
| +                                    WebFrame* frame,
 | 
| +                                    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();
 | 
|  
 | 
| @@ -273,7 +289,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(
 | 
| @@ -358,14 +374,16 @@
 | 
|  }
 | 
|  
 | 
|  void PrintWebViewHelper::UpdatePrintableSizeInPrintParameters(
 | 
| -    WebFrame* frame, ViewMsg_Print_Params* params) {
 | 
| +    WebFrame* frame,
 | 
| +    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,
 | 
| @@ -397,9 +415,10 @@
 | 
|        margin_left_in_points, printing::kPointsPerInch, dpi));
 | 
|  }
 | 
|  
 | 
| -bool PrintWebViewHelper::InitPrintSettings(WebFrame* frame) {
 | 
| +bool PrintWebViewHelper::InitPrintSettings(WebFrame* frame,
 | 
| +                                           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;
 | 
| @@ -408,7 +427,9 @@
 | 
|  }
 | 
|  
 | 
|  bool PrintWebViewHelper::GetDefaultPrintSettings(
 | 
| -    WebFrame* frame, ViewMsg_Print_Params* params) {
 | 
| +    WebFrame* frame,
 | 
| +    WebNode* node,
 | 
| +    ViewMsg_Print_Params* params) {
 | 
|    IPC::SyncMessage* msg =
 | 
|        new ViewHostMsg_GetDefaultPrintSettings(routing_id(), params);
 | 
|    if (!Send(msg)) {
 | 
| @@ -429,7 +450,7 @@
 | 
|      NOTREACHED();
 | 
|      return false;
 | 
|    }
 | 
| -  UpdatePrintableSizeInPrintParameters(frame, params);
 | 
| +  UpdatePrintableSizeInPrintParameters(frame, node, params);
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| @@ -466,13 +487,14 @@
 | 
|    return (print_settings.params.dpi && print_settings.params.document_cookie);
 | 
|  }
 | 
|  
 | 
| -void PrintWebViewHelper::RenderPagesForPrint(WebFrame *frame) {
 | 
| +void PrintWebViewHelper::RenderPagesForPrint(WebFrame* frame,
 | 
| +                                             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);
 | 
|    }
 | 
|  }
 | 
|  
 | 
| 
 |