| Index: chrome/renderer/print_web_view_helper_win.cc
 | 
| ===================================================================
 | 
| --- chrome/renderer/print_web_view_helper_win.cc	(revision 134542)
 | 
| +++ chrome/renderer/print_web_view_helper_win.cc	(working copy)
 | 
| @@ -12,6 +12,7 @@
 | 
|  #include "base/win/scoped_hdc.h"
 | 
|  #include "base/win/scoped_select_object.h"
 | 
|  #include "chrome/common/print_messages.h"
 | 
| +#include "printing/custom_scaling.h"
 | 
|  #include "printing/metafile.h"
 | 
|  #include "printing/metafile_impl.h"
 | 
|  #include "printing/metafile_skia_wrapper.h"
 | 
| @@ -114,46 +115,44 @@
 | 
|    // actual printing.
 | 
|    double actual_shrink = static_cast<float>(params.params.desired_dpi /
 | 
|                                              params.params.dpi);
 | 
| -  if (print_for_preview_) {
 | 
| -    // While printing from the preview, we are using PDF to print.
 | 
| -    // It creates a temp metafile based on screen DC. The standard scale factor
 | 
| -    // may not fit an entire content of the PDF to the metafile. It will cause
 | 
| -    // output to be cutoff.
 | 
| -    // (See http://code.google.com/p/chromium-os/issues/detail?id=16088 and
 | 
| -    // related Chrome bugs)
 | 
| -    // In such case we need to calculate the same scale ratio PDF plugin will
 | 
| -    // calculate during printing.
 | 
| -    // TODO(gene): Revisit current implementation and address comments below.
 | 
| -    // (http://code.google.com/p/chromium/issues/detail?id=123408)
 | 
| -    // Ideally, we should return this parameter from the plugin to avoid code
 | 
| -    // duplication. However, currently the call stack involves WebKit and at
 | 
| -    // some point shrink factor was cutoff and always returns 1.0.
 | 
| -    //   webkit::ppapi::PluginInstance::PrintPDFOutput - ratio calculated here
 | 
| -    //   webkit::ppapi::PluginInstance::PrintPageHelper
 | 
| -    //   webkit::ppapi::PluginInstance::PrintPage
 | 
| -    //   webkit::ppapi::WebPluginImpl::printPage
 | 
| -    //   WebKit::WebPluginContainerImpl::printPage
 | 
| -    //   WebKit::ChromePluginPrintContext::spoolPage - always return 1.0 scale
 | 
| -    //   WebKit::WebFrameImpl::printPage
 | 
| -    //   PrintWebViewHelper::RenderPage
 | 
| -    //   PrintWebViewHelper::PrintPageInternal
 | 
| -    //
 | 
| -    // Another solution is to build in scaling factor into metafile itself
 | 
| -    // (for example, GDI comments), and make metafile playback to take care of
 | 
| -    // scaling automatically.
 | 
| -    actual_shrink = gfx::CalculatePageScale(
 | 
| -        metafile->context(),
 | 
| -        params.params.content_size.width(),
 | 
| -        params.params.content_size.height());
 | 
| -  }
 | 
| -
 | 
|    gfx::Size page_size_in_dpi;
 | 
|    gfx::Rect content_area_in_dpi;
 | 
| +
 | 
| +  // If we are printing PDF, it may not fit into metafile using 72dpi.
 | 
| +  // (Metafile is based on screen resolution here.)
 | 
| +  // (See http://code.google.com/p/chromium-os/issues/detail?id=16088)
 | 
| +  // If PDF plugin encounter this issue it will save custom scale in TLS,
 | 
| +  // so we can apply the same scaling factor here.
 | 
| +  // If will do so ONLY if default scaling does not work.
 | 
| +  // TODO(gene): We should revisit this solution for the next versions.
 | 
| +  // Two possible solutions:
 | 
| +  // We can create metafile of the right size (or resizable)
 | 
| +  // https://code.google.com/p/chromium/issues/detail?id=126037
 | 
| +  // or
 | 
| +  // We should return scale factor all the way from the plugin:
 | 
| +  //   webkit::ppapi::PluginInstance::PrintPDFOutput - scale calculated here
 | 
| +  //   webkit::ppapi::PluginInstance::PrintPageHelper
 | 
| +  //   webkit::ppapi::PluginInstance::PrintPage
 | 
| +  //   webkit::ppapi::WebPluginImpl::printPage
 | 
| +  //   WebKit::WebPluginContainerImpl::printPage
 | 
| +  //   WebKit::ChromePluginPrintContext::spoolPage - always return 1.0 scale
 | 
| +  //   WebKit::WebFrameImpl::printPage
 | 
| +  //   PrintWebViewHelper::RenderPage
 | 
| +  //   PrintWebViewHelper::PrintPageInternal
 | 
| +
 | 
| +  printing::ClearCustomPrintingPageScale();
 | 
| +
 | 
|    // Render page for printing.
 | 
|    metafile.reset(RenderPage(params.params, page_number, frame, false,
 | 
|                              metafile.get(), &actual_shrink, &page_size_in_dpi,
 | 
|                              &content_area_in_dpi));
 | 
|  
 | 
| +  double custom_scale;
 | 
| +  if (printing::GetCustomPrintingPageScale(&custom_scale)) {
 | 
| +    actual_shrink = custom_scale;
 | 
| +    printing::ClearCustomPrintingPageScale();
 | 
| +  }
 | 
| +
 | 
|    // Close the device context to retrieve the compiled metafile.
 | 
|    if (!metafile->FinishDocument())
 | 
|      NOTREACHED();
 | 
| 
 |