Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/renderer/print_web_view_helper.h" | 5 #include "chrome/renderer/print_web_view_helper.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 53 | 53 |
| 54 #if defined(OS_WIN) || defined(OS_MACOSX) | 54 #if defined(OS_WIN) || defined(OS_MACOSX) |
| 55 #define USE_RENDER_TEXT | 55 #define USE_RENDER_TEXT |
| 56 #endif | 56 #endif |
| 57 | 57 |
| 58 #if defined(USE_RENDER_TEXT) | 58 #if defined(USE_RENDER_TEXT) |
| 59 #include "ui/gfx/canvas.h" | 59 #include "ui/gfx/canvas.h" |
| 60 #include "ui/gfx/render_text.h" | 60 #include "ui/gfx/render_text.h" |
| 61 #endif | 61 #endif |
| 62 | 62 |
| 63 using printing::ConvertPixelsToPoint; | |
| 64 using printing::ConvertPixelsToPointDouble; | |
| 65 using printing::ConvertPointsToPixelDouble; | |
| 66 using printing::ConvertUnit; | 63 using printing::ConvertUnit; |
| 67 using printing::ConvertUnitDouble; | |
| 68 using printing::GetHeaderFooterSegmentWidth; | |
| 69 using printing::PageSizeMargins; | 64 using printing::PageSizeMargins; |
| 70 using WebKit::WebConsoleMessage; | 65 using printing::kPixelsPerInch; |
| 71 using WebKit::WebDocument; | 66 using printing::kPointsPerInch; |
| 72 using WebKit::WebElement; | |
| 73 using WebKit::WebFrame; | 67 using WebKit::WebFrame; |
| 74 using WebKit::WebNode; | 68 using WebKit::WebNode; |
| 75 using WebKit::WebPlugin; | |
| 76 using WebKit::WebPluginDocument; | |
| 77 using WebKit::WebPrintParams; | |
| 78 using WebKit::WebSize; | |
| 79 using WebKit::WebString; | |
| 80 using WebKit::WebURLRequest; | |
| 81 using WebKit::WebView; | |
| 82 | 69 |
| 83 namespace { | 70 namespace { |
| 84 | 71 |
| 85 #if defined(USE_RENDER_TEXT) | 72 #if defined(USE_RENDER_TEXT) |
| 86 typedef gfx::RenderText* HeaderFooterPaint; | 73 typedef gfx::RenderText* HeaderFooterPaint; |
| 87 #else | 74 #else |
| 88 typedef SkPaint HeaderFooterPaint; | 75 typedef SkPaint HeaderFooterPaint; |
| 89 #endif | 76 #endif |
| 90 | 77 |
| 91 const double kMinDpi = 1.0; | 78 const double kMinDpi = 1.0; |
| 92 | 79 |
| 93 int GetDPI(const PrintMsg_Print_Params* print_params) { | 80 int GetDPI(const PrintMsg_Print_Params* print_params) { |
| 94 #if defined(OS_MACOSX) | 81 #if defined(OS_MACOSX) |
| 95 // On the Mac, the printable area is in points, don't do any scaling based | 82 // On the Mac, the printable area is in points, don't do any scaling based |
| 96 // on dpi. | 83 // on dpi. |
| 97 return printing::kPointsPerInch; | 84 return kPointsPerInch; |
| 98 #else | 85 #else |
| 99 return static_cast<int>(print_params->dpi); | 86 return static_cast<int>(print_params->dpi); |
| 100 #endif // defined(OS_MACOSX) | 87 #endif // defined(OS_MACOSX) |
| 101 } | 88 } |
| 102 | 89 |
| 103 bool PrintMsg_Print_Params_IsValid(const PrintMsg_Print_Params& params) { | 90 bool PrintMsg_Print_Params_IsValid(const PrintMsg_Print_Params& params) { |
| 104 return !params.content_size.IsEmpty() && !params.page_size.IsEmpty() && | 91 return !params.content_size.IsEmpty() && !params.page_size.IsEmpty() && |
| 105 !params.printable_area.IsEmpty() && params.document_cookie && | 92 !params.printable_area.IsEmpty() && params.document_cookie && |
| 106 params.desired_dpi && params.max_shrink && params.min_shrink && | 93 params.desired_dpi && params.max_shrink && params.min_shrink && |
| 107 params.dpi && (params.margin_top >= 0) && (params.margin_left >= 0); | 94 params.dpi && (params.margin_top >= 0) && (params.margin_left >= 0); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 139 std::equal(oldParams.pages.begin(), oldParams.pages.end(), | 126 std::equal(oldParams.pages.begin(), oldParams.pages.end(), |
| 140 newParams.pages.begin()); | 127 newParams.pages.begin()); |
| 141 } | 128 } |
| 142 | 129 |
| 143 PrintMsg_Print_Params GetCssPrintParams( | 130 PrintMsg_Print_Params GetCssPrintParams( |
| 144 WebFrame* frame, | 131 WebFrame* frame, |
| 145 int page_index, | 132 int page_index, |
| 146 const PrintMsg_Print_Params& page_params) { | 133 const PrintMsg_Print_Params& page_params) { |
| 147 PrintMsg_Print_Params page_css_params = page_params; | 134 PrintMsg_Print_Params page_css_params = page_params; |
| 148 int dpi = GetDPI(&page_params); | 135 int dpi = GetDPI(&page_params); |
| 149 WebSize page_size_in_pixels( | 136 WebKit::WebSize page_size_in_pixels( |
| 150 ConvertUnit(page_params.page_size.width(), | 137 ConvertUnit(page_params.page_size.width(), dpi, kPixelsPerInch), |
| 151 dpi, printing::kPixelsPerInch), | 138 ConvertUnit(page_params.page_size.height(), dpi, kPixelsPerInch)); |
| 152 ConvertUnit(page_params.page_size.height(), | 139 int margin_top_in_pixels = |
| 153 dpi, printing::kPixelsPerInch)); | 140 ConvertUnit(page_params.margin_top, dpi, kPixelsPerInch); |
| 154 int margin_top_in_pixels = ConvertUnit( | |
| 155 page_params.margin_top, | |
| 156 dpi, printing::kPixelsPerInch); | |
| 157 int margin_right_in_pixels = ConvertUnit( | 141 int margin_right_in_pixels = ConvertUnit( |
| 158 page_params.page_size.width() - | 142 page_params.page_size.width() - |
| 159 page_params.content_size.width() - page_params.margin_left, | 143 page_params.content_size.width() - page_params.margin_left, |
| 160 dpi, printing::kPixelsPerInch); | 144 dpi, kPixelsPerInch); |
| 161 int margin_bottom_in_pixels = ConvertUnit( | 145 int margin_bottom_in_pixels = ConvertUnit( |
| 162 page_params.page_size.height() - | 146 page_params.page_size.height() - |
| 163 page_params.content_size.height() - page_params.margin_top, | 147 page_params.content_size.height() - page_params.margin_top, |
| 164 dpi, printing::kPixelsPerInch); | 148 dpi, kPixelsPerInch); |
| 165 int margin_left_in_pixels = ConvertUnit( | 149 int margin_left_in_pixels = ConvertUnit( |
| 166 page_params.margin_left, | 150 page_params.margin_left, |
| 167 dpi, printing::kPixelsPerInch); | 151 dpi, kPixelsPerInch); |
| 168 | 152 |
| 169 WebSize original_page_size_in_pixels = page_size_in_pixels; | 153 WebKit::WebSize original_page_size_in_pixels = page_size_in_pixels; |
| 170 | 154 |
| 171 if (frame) { | 155 if (frame) { |
| 172 frame->pageSizeAndMarginsInPixels(page_index, | 156 frame->pageSizeAndMarginsInPixels(page_index, |
| 173 page_size_in_pixels, | 157 page_size_in_pixels, |
| 174 margin_top_in_pixels, | 158 margin_top_in_pixels, |
| 175 margin_right_in_pixels, | 159 margin_right_in_pixels, |
| 176 margin_bottom_in_pixels, | 160 margin_bottom_in_pixels, |
| 177 margin_left_in_pixels); | 161 margin_left_in_pixels); |
| 178 } | 162 } |
| 179 | 163 |
| 180 int new_content_width = page_size_in_pixels.width - | 164 int new_content_width = page_size_in_pixels.width - |
| 181 margin_left_in_pixels - margin_right_in_pixels; | 165 margin_left_in_pixels - margin_right_in_pixels; |
| 182 int new_content_height = page_size_in_pixels.height - | 166 int new_content_height = page_size_in_pixels.height - |
| 183 margin_top_in_pixels - margin_bottom_in_pixels; | 167 margin_top_in_pixels - margin_bottom_in_pixels; |
| 184 | 168 |
| 185 // Invalid page size and/or margins. We just use the default setting. | 169 // Invalid page size and/or margins. We just use the default setting. |
| 186 if (new_content_width < 1 || new_content_height < 1) { | 170 if (new_content_width < 1 || new_content_height < 1) { |
| 187 CHECK(frame != NULL); | 171 CHECK(frame != NULL); |
| 188 page_css_params = GetCssPrintParams(NULL, page_index, page_params); | 172 page_css_params = GetCssPrintParams(NULL, page_index, page_params); |
| 189 return page_css_params; | 173 return page_css_params; |
| 190 } | 174 } |
| 191 | 175 |
| 192 page_css_params.content_size = gfx::Size( | 176 page_css_params.content_size = gfx::Size( |
| 193 static_cast<int>(ConvertUnit(new_content_width, | 177 ConvertUnit(new_content_width, kPixelsPerInch, dpi), |
| 194 printing::kPixelsPerInch, dpi)), | 178 ConvertUnit(new_content_height, kPixelsPerInch, dpi)); |
| 195 static_cast<int>(ConvertUnit(new_content_height, | |
| 196 printing::kPixelsPerInch, dpi))); | |
| 197 | 179 |
| 198 if (original_page_size_in_pixels != page_size_in_pixels) { | 180 if (original_page_size_in_pixels != page_size_in_pixels) { |
| 199 page_css_params.page_size = gfx::Size( | 181 page_css_params.page_size = gfx::Size( |
| 200 static_cast<int>(ConvertUnit(page_size_in_pixels.width, | 182 ConvertUnit(page_size_in_pixels.width, kPixelsPerInch, dpi), |
| 201 printing::kPixelsPerInch, dpi)), | 183 ConvertUnit(page_size_in_pixels.height, kPixelsPerInch, dpi)); |
| 202 static_cast<int>(ConvertUnit(page_size_in_pixels.height, | |
| 203 printing::kPixelsPerInch, dpi))); | |
| 204 } else { | 184 } else { |
| 205 // Printing frame doesn't have any page size css. Pixels to dpi conversion | 185 // Printing frame doesn't have any page size css. Pixels to dpi conversion |
| 206 // causes rounding off errors. Therefore use the default page size values | 186 // causes rounding off errors. Therefore use the default page size values |
| 207 // directly. | 187 // directly. |
| 208 page_css_params.page_size = page_params.page_size; | 188 page_css_params.page_size = page_params.page_size; |
| 209 } | 189 } |
| 210 | 190 |
| 211 page_css_params.margin_top = | 191 page_css_params.margin_top = |
| 212 static_cast<int>(ConvertUnit(margin_top_in_pixels, | 192 ConvertUnit(margin_top_in_pixels, kPixelsPerInch, dpi); |
| 213 printing::kPixelsPerInch, dpi)); | |
| 214 | |
| 215 page_css_params.margin_left = | 193 page_css_params.margin_left = |
| 216 static_cast<int>(ConvertUnit(margin_left_in_pixels, | 194 ConvertUnit(margin_left_in_pixels, kPixelsPerInch, dpi); |
| 217 printing::kPixelsPerInch, dpi)); | |
| 218 return page_css_params; | 195 return page_css_params; |
| 219 } | 196 } |
| 220 | 197 |
| 221 double FitPrintParamsToPage(const PrintMsg_Print_Params& page_params, | 198 double FitPrintParamsToPage(const PrintMsg_Print_Params& page_params, |
| 222 PrintMsg_Print_Params* params_to_fit) { | 199 PrintMsg_Print_Params* params_to_fit) { |
| 223 double content_width = | 200 double content_width = |
| 224 static_cast<double>(params_to_fit->content_size.width()); | 201 static_cast<double>(params_to_fit->content_size.width()); |
| 225 double content_height = | 202 double content_height = |
| 226 static_cast<double>(params_to_fit->content_size.height()); | 203 static_cast<double>(params_to_fit->content_size.height()); |
| 227 int default_page_size_height = page_params.page_size.height(); | 204 int default_page_size_height = page_params.page_size.height(); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 260 PageSizeMargins* page_layout_in_points) { | 237 PageSizeMargins* page_layout_in_points) { |
| 261 int dpi = GetDPI(¶ms); | 238 int dpi = GetDPI(¶ms); |
| 262 int content_width = params.content_size.width(); | 239 int content_width = params.content_size.width(); |
| 263 int content_height = params.content_size.height(); | 240 int content_height = params.content_size.height(); |
| 264 | 241 |
| 265 int margin_bottom = params.page_size.height() - | 242 int margin_bottom = params.page_size.height() - |
| 266 content_height - params.margin_top; | 243 content_height - params.margin_top; |
| 267 int margin_right = params.page_size.width() - | 244 int margin_right = params.page_size.width() - |
| 268 content_width - params.margin_left; | 245 content_width - params.margin_left; |
| 269 | 246 |
| 270 page_layout_in_points->content_width = ConvertUnit( | 247 page_layout_in_points->content_width = |
| 271 content_width, dpi, printing::kPointsPerInch); | 248 ConvertUnit(content_width, dpi, kPointsPerInch); |
| 272 page_layout_in_points->content_height = ConvertUnit( | 249 page_layout_in_points->content_height = |
| 273 content_height, dpi, printing::kPointsPerInch); | 250 ConvertUnit(content_height, dpi, kPointsPerInch); |
| 274 page_layout_in_points->margin_top = ConvertUnit( | 251 page_layout_in_points->margin_top = |
| 275 params.margin_top, dpi, printing::kPointsPerInch); | 252 ConvertUnit(params.margin_top, dpi, kPointsPerInch); |
| 276 page_layout_in_points->margin_right = ConvertUnit( | 253 page_layout_in_points->margin_right = |
| 277 margin_right, dpi, printing::kPointsPerInch); | 254 ConvertUnit(margin_right, dpi, kPointsPerInch); |
| 278 page_layout_in_points->margin_bottom = ConvertUnit( | 255 page_layout_in_points->margin_bottom = |
| 279 margin_bottom, dpi, printing::kPointsPerInch); | 256 ConvertUnit(margin_bottom, dpi, kPointsPerInch); |
| 280 page_layout_in_points->margin_left = ConvertUnit( | 257 page_layout_in_points->margin_left = |
| 281 params.margin_left, dpi, printing::kPointsPerInch); | 258 ConvertUnit(params.margin_left, dpi, kPointsPerInch); |
| 282 } | 259 } |
| 283 | 260 |
| 284 void EnsureOrientationMatches(const PrintMsg_Print_Params& css_params, | 261 void EnsureOrientationMatches(const PrintMsg_Print_Params& css_params, |
| 285 PrintMsg_Print_Params* page_params) { | 262 PrintMsg_Print_Params* page_params) { |
| 286 if ((page_params->page_size.width() > page_params->page_size.height()) == | 263 if ((page_params->page_size.width() > page_params->page_size.height()) == |
| 287 (css_params.page_size.width() > css_params.page_size.height())) { | 264 (css_params.page_size.width() > css_params.page_size.height())) { |
| 288 return; | 265 return; |
| 289 } | 266 } |
| 290 | 267 |
| 291 // Swap the |width| and |height| values. | 268 // Swap the |width| and |height| values. |
| 292 page_params->page_size.SetSize(page_params->page_size.height(), | 269 page_params->page_size.SetSize(page_params->page_size.height(), |
| 293 page_params->page_size.width()); | 270 page_params->page_size.width()); |
| 294 page_params->content_size.SetSize(page_params->content_size.height(), | 271 page_params->content_size.SetSize(page_params->content_size.height(), |
| 295 page_params->content_size.width()); | 272 page_params->content_size.width()); |
| 296 page_params->printable_area.set_size( | 273 page_params->printable_area.set_size( |
| 297 gfx::Size(page_params->printable_area.height(), | 274 gfx::Size(page_params->printable_area.height(), |
| 298 page_params->printable_area.width())); | 275 page_params->printable_area.width())); |
| 299 } | 276 } |
| 300 | 277 |
| 301 void ComputeWebKitPrintParamsInDesiredDpi( | 278 void ComputeWebKitPrintParamsInDesiredDpi( |
| 302 const PrintMsg_Print_Params& print_params, | 279 const PrintMsg_Print_Params& print_params, |
| 303 WebPrintParams* webkit_print_params) { | 280 WebKit::WebPrintParams* webkit_print_params) { |
| 304 int dpi = GetDPI(&print_params); | 281 int dpi = GetDPI(&print_params); |
| 305 webkit_print_params->printerDPI = dpi; | 282 webkit_print_params->printerDPI = dpi; |
| 306 webkit_print_params->printScalingOption = print_params.print_scaling_option; | 283 webkit_print_params->printScalingOption = print_params.print_scaling_option; |
| 307 | 284 |
| 308 webkit_print_params->printContentArea.width = | 285 webkit_print_params->printContentArea.width = |
| 309 ConvertUnit(print_params.content_size.width(), dpi, | 286 ConvertUnit(print_params.content_size.width(), dpi, |
| 310 print_params.desired_dpi); | 287 print_params.desired_dpi); |
| 311 webkit_print_params->printContentArea.height = | 288 webkit_print_params->printContentArea.height = |
| 312 ConvertUnit(print_params.content_size.height(), dpi, | 289 ConvertUnit(print_params.content_size.height(), dpi, |
| 313 print_params.desired_dpi); | 290 print_params.desired_dpi); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 331 webkit_print_params->paperSize.height = | 308 webkit_print_params->paperSize.height = |
| 332 ConvertUnit(print_params.page_size.height(), dpi, | 309 ConvertUnit(print_params.page_size.height(), dpi, |
| 333 print_params.desired_dpi); | 310 print_params.desired_dpi); |
| 334 } | 311 } |
| 335 | 312 |
| 336 bool PrintingNodeOrPdfFrame(const WebFrame* frame, const WebNode& node) { | 313 bool PrintingNodeOrPdfFrame(const WebFrame* frame, const WebNode& node) { |
| 337 if (!node.isNull()) | 314 if (!node.isNull()) |
| 338 return true; | 315 return true; |
| 339 if (!frame->document().isPluginDocument()) | 316 if (!frame->document().isPluginDocument()) |
| 340 return false; | 317 return false; |
| 341 WebPlugin* plugin = frame->document().to<WebPluginDocument>().plugin(); | 318 WebKit::WebPlugin* plugin = |
| 319 frame->document().to<WebKit::WebPluginDocument>().plugin(); | |
| 342 return plugin && plugin->supportsPaginatedPrint(); | 320 return plugin && plugin->supportsPaginatedPrint(); |
| 343 } | 321 } |
| 344 | 322 |
| 345 bool PrintingFrameHasPageSizeStyle(WebFrame* frame, int total_page_count) { | 323 bool PrintingFrameHasPageSizeStyle(WebFrame* frame, int total_page_count) { |
| 346 if (!frame) | 324 if (!frame) |
| 347 return false; | 325 return false; |
| 348 bool frame_has_custom_page_size_style = false; | 326 bool frame_has_custom_page_size_style = false; |
| 349 for (int i = 0; i < total_page_count; ++i) { | 327 for (int i = 0; i < total_page_count; ++i) { |
| 350 if (frame->hasCustomPageSizeStyle(i)) { | 328 if (frame->hasCustomPageSizeStyle(i)) { |
| 351 frame_has_custom_page_size_style = true; | 329 frame_has_custom_page_size_style = true; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 386 case printing::LEFT: { | 364 case printing::LEFT: { |
| 387 x = printing::kSettingHeaderFooterInterstice - page_layout.margin_left; | 365 x = printing::kSettingHeaderFooterInterstice - page_layout.margin_left; |
| 388 break; | 366 break; |
| 389 } | 367 } |
| 390 case printing::RIGHT: { | 368 case printing::RIGHT: { |
| 391 x = page_layout.content_width + page_layout.margin_right - | 369 x = page_layout.content_width + page_layout.margin_right - |
| 392 printing::kSettingHeaderFooterInterstice - text_width_in_points; | 370 printing::kSettingHeaderFooterInterstice - text_width_in_points; |
| 393 break; | 371 break; |
| 394 } | 372 } |
| 395 case printing::CENTER: { | 373 case printing::CENTER: { |
| 396 SkScalar available_width = GetHeaderFooterSegmentWidth( | 374 SkScalar available_width = printing::GetHeaderFooterSegmentWidth( |
| 397 page_layout.margin_left + page_layout.margin_right + | 375 page_layout.margin_left + page_layout.margin_right + |
| 398 page_layout.content_width); | 376 page_layout.content_width); |
| 399 x = available_width - page_layout.margin_left + | 377 x = available_width - page_layout.margin_left + |
| 400 (available_width - text_width_in_points) / 2; | 378 (available_width - text_width_in_points) / 2; |
| 401 break; | 379 break; |
| 402 } | 380 } |
| 403 default: { | 381 default: { |
| 404 NOTREACHED(); | 382 NOTREACHED(); |
| 405 } | 383 } |
| 406 } | 384 } |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 534 | 512 |
| 535 } // namespace | 513 } // namespace |
| 536 | 514 |
| 537 // static - Not anonymous so that platform implementations can use it. | 515 // static - Not anonymous so that platform implementations can use it. |
| 538 void PrintWebViewHelper::PrintHeaderAndFooter( | 516 void PrintWebViewHelper::PrintHeaderAndFooter( |
| 539 WebKit::WebCanvas* canvas, | 517 WebKit::WebCanvas* canvas, |
| 540 int page_number, | 518 int page_number, |
| 541 int total_pages, | 519 int total_pages, |
| 542 float webkit_scale_factor, | 520 float webkit_scale_factor, |
| 543 const PageSizeMargins& page_layout, | 521 const PageSizeMargins& page_layout, |
| 544 const DictionaryValue& header_footer_info) { | 522 const DictionaryValue& header_footer_info, |
| 523 const PrintMsg_Print_Params& params) { | |
| 545 skia::VectorPlatformDeviceSkia* device = | 524 skia::VectorPlatformDeviceSkia* device = |
| 546 static_cast<skia::VectorPlatformDeviceSkia*>(canvas->getTopDevice()); | 525 static_cast<skia::VectorPlatformDeviceSkia*>(canvas->getTopDevice()); |
| 547 device->setDrawingArea(SkPDFDevice::kMargin_DrawingArea); | 526 device->setDrawingArea(SkPDFDevice::kMargin_DrawingArea); |
| 548 | 527 |
| 549 #if defined(USE_RENDER_TEXT) | 528 #if defined(USE_RENDER_TEXT) |
| 550 scoped_ptr<gfx::RenderText> render_text(gfx::RenderText::CreateInstance()); | 529 scoped_ptr<gfx::RenderText> render_text(gfx::RenderText::CreateInstance()); |
| 551 // TODO(asvitkine): The below line is to workaround http://crbug.com/133548. | 530 // TODO(asvitkine): The below line is to workaround http://crbug.com/133548. |
| 552 // Remove it when the underlying Skia bug has been fixed. | 531 // Remove it when the underlying Skia bug has been fixed. |
| 553 render_text->set_clip_to_display_rect(false); | 532 render_text->set_clip_to_display_rect(false); |
| 554 gfx::FontList font_list( | 533 gfx::FontList font_list( |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 601 page_layout, printing::CENTER, printing::TOP, | 580 page_layout, printing::CENTER, printing::TOP, |
| 602 header_vertical_bounds.top()); | 581 header_vertical_bounds.top()); |
| 603 } | 582 } |
| 604 | 583 |
| 605 // Prints the footers onto the |canvas| if there is enough space to print | 584 // Prints the footers onto the |canvas| if there is enough space to print |
| 606 // them. | 585 // them. |
| 607 string16 page_of_total_pages = base::IntToString16(page_number) + | 586 string16 page_of_total_pages = base::IntToString16(page_number) + |
| 608 UTF8ToUTF16("/") + | 587 UTF8ToUTF16("/") + |
| 609 base::IntToString16(total_pages); | 588 base::IntToString16(total_pages); |
| 610 string16 url; | 589 string16 url; |
| 611 if (!header_footer_info.GetString(printing::kSettingHeaderFooterURL, | 590 if (!header_footer_info.GetString(printing::kSettingHeaderFooterURL, &url)) { |
| 612 &url)) { | |
| 613 NOTREACHED(); | 591 NOTREACHED(); |
| 614 } | 592 } |
| 615 string16 footer_text = page_of_total_pages + url; | 593 string16 footer_text = page_of_total_pages + url; |
| 616 | 594 |
| 617 // Used for height calculations. Note that the width may be undefined. | 595 // Used for height calculations. Note that the width may be undefined. |
| 618 SkRect footer_vertical_bounds; | 596 SkRect footer_vertical_bounds; |
| 619 #if defined(USE_RENDER_TEXT) | 597 #if defined(USE_RENDER_TEXT) |
| 620 paint->SetFontList(font_list); | 598 paint->SetFontList(font_list); |
| 621 paint->SetText(footer_text); | 599 paint->SetText(footer_text); |
| 622 { | 600 { |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 646 PrepareFrameAndViewForPrint::PrepareFrameAndViewForPrint( | 624 PrepareFrameAndViewForPrint::PrepareFrameAndViewForPrint( |
| 647 const PrintMsg_Print_Params& print_params, | 625 const PrintMsg_Print_Params& print_params, |
| 648 WebFrame* frame, | 626 WebFrame* frame, |
| 649 const WebNode& node) | 627 const WebNode& node) |
| 650 : frame_(frame), | 628 : frame_(frame), |
| 651 node_to_print_(node), | 629 node_to_print_(node), |
| 652 web_view_(frame->view()), | 630 web_view_(frame->view()), |
| 653 expected_pages_count_(0), | 631 expected_pages_count_(0), |
| 654 use_browser_overlays_(true), | 632 use_browser_overlays_(true), |
| 655 finished_(false) { | 633 finished_(false) { |
| 656 WebPrintParams webkit_print_params; | 634 WebKit::WebPrintParams webkit_print_params; |
| 657 ComputeWebKitPrintParamsInDesiredDpi(print_params, &webkit_print_params); | 635 ComputeWebKitPrintParamsInDesiredDpi(print_params, &webkit_print_params); |
| 658 | 636 |
| 659 if (WebFrame* web_frame = web_view_->mainFrame()) | 637 if (WebFrame* web_frame = web_view_->mainFrame()) |
| 660 prev_scroll_offset_ = web_frame->scrollOffset(); | 638 prev_scroll_offset_ = web_frame->scrollOffset(); |
| 661 prev_view_size_ = web_view_->size(); | 639 prev_view_size_ = web_view_->size(); |
| 662 | 640 |
| 663 StartPrinting(webkit_print_params); | 641 StartPrinting(webkit_print_params); |
| 664 } | 642 } |
| 665 | 643 |
| 666 PrepareFrameAndViewForPrint::~PrepareFrameAndViewForPrint() { | 644 PrepareFrameAndViewForPrint::~PrepareFrameAndViewForPrint() { |
| 667 FinishPrinting(); | 645 FinishPrinting(); |
| 668 } | 646 } |
| 669 | 647 |
| 670 void PrepareFrameAndViewForPrint::UpdatePrintParams( | 648 void PrepareFrameAndViewForPrint::UpdatePrintParams( |
| 671 const PrintMsg_Print_Params& print_params) { | 649 const PrintMsg_Print_Params& print_params) { |
| 672 DCHECK(!finished_); | 650 DCHECK(!finished_); |
| 673 WebPrintParams webkit_print_params; | 651 WebKit::WebPrintParams webkit_print_params; |
| 674 ComputeWebKitPrintParamsInDesiredDpi(print_params, &webkit_print_params); | 652 ComputeWebKitPrintParamsInDesiredDpi(print_params, &webkit_print_params); |
| 675 | 653 |
| 676 if (webkit_print_params.printContentArea == | 654 if (webkit_print_params.printContentArea == |
| 677 web_print_params_.printContentArea && | 655 web_print_params_.printContentArea && |
| 678 webkit_print_params.printableArea == web_print_params_.printableArea && | 656 webkit_print_params.printableArea == web_print_params_.printableArea && |
| 679 webkit_print_params.paperSize == web_print_params_.paperSize && | 657 webkit_print_params.paperSize == web_print_params_.paperSize && |
| 680 webkit_print_params.printScalingOption == | 658 webkit_print_params.printScalingOption == |
| 681 web_print_params_.printScalingOption) { | 659 web_print_params_.printScalingOption) { |
| 682 return; | 660 return; |
| 683 } | 661 } |
| 684 | 662 |
| 685 frame_->printEnd(); | 663 frame_->printEnd(); |
| 686 StartPrinting(webkit_print_params); | 664 StartPrinting(webkit_print_params); |
| 687 } | 665 } |
| 688 | 666 |
| 667 gfx::Size PrepareFrameAndViewForPrint::GetPrintCanvasSize() const { | |
| 668 return gfx::Size(web_print_params_.printContentArea.width, | |
| 669 web_print_params_.printContentArea.height); | |
| 670 } | |
| 671 | |
| 689 void PrepareFrameAndViewForPrint::StartPrinting( | 672 void PrepareFrameAndViewForPrint::StartPrinting( |
| 690 const WebPrintParams& webkit_print_params) { | 673 const WebKit::WebPrintParams& webkit_print_params) { |
| 691 web_print_params_ = webkit_print_params; | 674 web_print_params_ = webkit_print_params; |
| 692 | 675 |
| 693 // Layout page according to printer page size. Since WebKit shrinks the | 676 // Layout page according to printer page size. Since WebKit shrinks the |
| 694 // size of the page automatically (from 125% to 200%) we trick it to | 677 // size of the page automatically (from 125% to 200%) we trick it to |
| 695 // think the page is 125% larger so the size of the page is correct for | 678 // think the page is 125% larger so the size of the page is correct for |
| 696 // minimum (default) scaling. | 679 // minimum (default) scaling. |
| 697 // This is important for sites that try to fill the page. | 680 // This is important for sites that try to fill the page. |
| 698 gfx::Size print_layout_size(web_print_params_.printContentArea.width, | 681 gfx::Size print_layout_size(web_print_params_.printContentArea.width, |
| 699 web_print_params_.printContentArea.height); | 682 web_print_params_.printContentArea.height); |
| 700 print_layout_size.set_height(static_cast<int>( | 683 print_layout_size.set_height(static_cast<int>( |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 727 ignore_css_margins_(false), | 710 ignore_css_margins_(false), |
| 728 user_cancelled_scripted_print_count_(0), | 711 user_cancelled_scripted_print_count_(0), |
| 729 is_scripted_printing_blocked_(false), | 712 is_scripted_printing_blocked_(false), |
| 730 notify_browser_of_print_failure_(true), | 713 notify_browser_of_print_failure_(true), |
| 731 print_for_preview_(false) { | 714 print_for_preview_(false) { |
| 732 } | 715 } |
| 733 | 716 |
| 734 PrintWebViewHelper::~PrintWebViewHelper() {} | 717 PrintWebViewHelper::~PrintWebViewHelper() {} |
| 735 | 718 |
| 736 bool PrintWebViewHelper::IsScriptInitiatedPrintAllowed( | 719 bool PrintWebViewHelper::IsScriptInitiatedPrintAllowed( |
| 737 WebKit::WebFrame* frame, bool user_initiated) { | 720 WebFrame* frame, bool user_initiated) { |
|
Lei Zhang
2012/11/01 19:21:42
If you don't mind, can we keep this one and the on
Vitaly Buka (NO REVIEWS)
2012/11/01 19:55:56
Then we don't need these usings, most of them inte
| |
| 738 if (is_scripted_printing_blocked_) | 721 if (is_scripted_printing_blocked_) |
| 739 return false; | 722 return false; |
| 740 // If preview is enabled, then the print dialog is tab modal, and the user | 723 // If preview is enabled, then the print dialog is tab modal, and the user |
| 741 // can always close the tab on a mis-behaving page (the system print dialog | 724 // can always close the tab on a mis-behaving page (the system print dialog |
| 742 // is app modal). If the print was initiated through user action, don't | 725 // is app modal). If the print was initiated through user action, don't |
| 743 // throttle. Or, if the command line flag to skip throttling has been set. | 726 // throttle. Or, if the command line flag to skip throttling has been set. |
| 744 if (!is_scripted_print_throttling_disabled_ && | 727 if (!is_scripted_print_throttling_disabled_ && |
| 745 !is_preview_enabled_ && | 728 !is_preview_enabled_ && |
| 746 !user_initiated) | 729 !user_initiated) |
| 747 return !IsScriptInitiatedPrintTooFrequent(frame); | 730 return !IsScriptInitiatedPrintTooFrequent(frame); |
| 748 return true; | 731 return true; |
| 749 } | 732 } |
| 750 | 733 |
| 751 // Prints |frame| which called window.print(). | 734 // Prints |frame| which called window.print(). |
| 752 void PrintWebViewHelper::PrintPage(WebKit::WebFrame* frame, | 735 void PrintWebViewHelper::PrintPage(WebFrame* frame, |
| 753 bool user_initiated) { | 736 bool user_initiated) { |
| 754 DCHECK(frame); | 737 DCHECK(frame); |
| 755 | 738 |
| 756 // Allow Prerendering to cancel this print request if necessary. | 739 // Allow Prerendering to cancel this print request if necessary. |
| 757 if (prerender::PrerenderHelper::IsPrerendering(render_view())) { | 740 if (prerender::PrerenderHelper::IsPrerendering(render_view())) { |
| 758 Send(new ChromeViewHostMsg_CancelPrerenderForPrinting(routing_id())); | 741 Send(new ChromeViewHostMsg_CancelPrerenderForPrinting(routing_id())); |
| 759 return; | 742 return; |
| 760 } | 743 } |
| 761 | 744 |
| 762 if (!IsScriptInitiatedPrintAllowed(frame, user_initiated)) | 745 if (!IsScriptInitiatedPrintAllowed(frame, user_initiated)) |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 797 // If still not finished with earlier print request simply ignore. | 780 // If still not finished with earlier print request simply ignore. |
| 798 if (print_web_view_) | 781 if (print_web_view_) |
| 799 return; | 782 return; |
| 800 | 783 |
| 801 if (!render_view()->GetWebView()) | 784 if (!render_view()->GetWebView()) |
| 802 return; | 785 return; |
| 803 WebFrame* main_frame = render_view()->GetWebView()->mainFrame(); | 786 WebFrame* main_frame = render_view()->GetWebView()->mainFrame(); |
| 804 if (!main_frame) | 787 if (!main_frame) |
| 805 return; | 788 return; |
| 806 | 789 |
| 807 WebDocument document = main_frame->document(); | 790 WebKit::WebDocument document = main_frame->document(); |
| 808 // <object> with id="pdf-viewer" is created in | 791 // <object> with id="pdf-viewer" is created in |
| 809 // chrome/browser/resources/print_preview/print_preview.js | 792 // chrome/browser/resources/print_preview/print_preview.js |
| 810 WebElement pdf_element = document.getElementById("pdf-viewer"); | 793 WebKit::WebElement pdf_element = document.getElementById("pdf-viewer"); |
| 811 if (pdf_element.isNull()) { | 794 if (pdf_element.isNull()) { |
| 812 NOTREACHED(); | 795 NOTREACHED(); |
| 813 return; | 796 return; |
| 814 } | 797 } |
| 815 | 798 |
| 816 // Set |print_for_preview_| flag and autoreset it to back to original | 799 // Set |print_for_preview_| flag and autoreset it to back to original |
| 817 // on return. | 800 // on return. |
| 818 AutoReset<bool> set_printing_flag(&print_for_preview_, true); | 801 AutoReset<bool> set_printing_flag(&print_for_preview_, true); |
| 819 | 802 |
| 820 WebFrame* pdf_frame = pdf_element.document().frame(); | 803 WebFrame* pdf_frame = pdf_element.document().frame(); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 836 PrintMsg_Print_Params& print_params = print_pages_params_->params; | 819 PrintMsg_Print_Params& print_params = print_pages_params_->params; |
| 837 print_params.printable_area = gfx::Rect(print_params.page_size); | 820 print_params.printable_area = gfx::Rect(print_params.page_size); |
| 838 | 821 |
| 839 // Render Pages for printing. | 822 // Render Pages for printing. |
| 840 if (!RenderPagesForPrint(pdf_frame, pdf_element)) { | 823 if (!RenderPagesForPrint(pdf_frame, pdf_element)) { |
| 841 LOG(ERROR) << "RenderPagesForPrint failed"; | 824 LOG(ERROR) << "RenderPagesForPrint failed"; |
| 842 DidFinishPrinting(FAIL_PRINT); | 825 DidFinishPrinting(FAIL_PRINT); |
| 843 } | 826 } |
| 844 } | 827 } |
| 845 | 828 |
| 846 bool PrintWebViewHelper::GetPrintFrame(WebKit::WebFrame** frame) { | 829 bool PrintWebViewHelper::GetPrintFrame(WebFrame** frame) { |
| 847 DCHECK(frame); | 830 DCHECK(frame); |
| 848 DCHECK(render_view()->GetWebView()); | 831 DCHECK(render_view()->GetWebView()); |
| 849 if (!render_view()->GetWebView()) | 832 if (!render_view()->GetWebView()) |
| 850 return false; | 833 return false; |
| 851 | 834 |
| 852 // If the user has selected text in the currently focused frame we print | 835 // If the user has selected text in the currently focused frame we print |
| 853 // only that frame (this makes print selection work for multiple frames). | 836 // only that frame (this makes print selection work for multiple frames). |
| 854 *frame = render_view()->GetWebView()->focusedFrame()->hasSelection() ? | 837 *frame = render_view()->GetWebView()->focusedFrame()->hasSelection() ? |
| 855 render_view()->GetWebView()->focusedFrame() : | 838 render_view()->GetWebView()->focusedFrame() : |
| 856 render_view()->GetWebView()->mainFrame(); | 839 render_view()->GetWebView()->mainFrame(); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 867 WebFrame* frame = print_preview_context_.frame(); | 850 WebFrame* frame = print_preview_context_.frame(); |
| 868 if (!frame) { | 851 if (!frame) { |
| 869 NOTREACHED(); | 852 NOTREACHED(); |
| 870 return; | 853 return; |
| 871 } | 854 } |
| 872 | 855 |
| 873 Print(frame, print_preview_context_.node()); | 856 Print(frame, print_preview_context_.node()); |
| 874 } | 857 } |
| 875 | 858 |
| 876 void PrintWebViewHelper::GetPageSizeAndContentAreaFromPageLayout( | 859 void PrintWebViewHelper::GetPageSizeAndContentAreaFromPageLayout( |
| 877 const printing::PageSizeMargins& page_layout_in_points, | 860 const PageSizeMargins& page_layout_in_points, |
| 878 gfx::Size* page_size, | 861 gfx::Size* page_size, |
| 879 gfx::Rect* content_area) { | 862 gfx::Rect* content_area) { |
| 880 *page_size = gfx::Size( | 863 *page_size = gfx::Size( |
| 881 page_layout_in_points.content_width + | 864 page_layout_in_points.content_width + |
| 882 page_layout_in_points.margin_right + | 865 page_layout_in_points.margin_right + |
| 883 page_layout_in_points.margin_left, | 866 page_layout_in_points.margin_left, |
| 884 page_layout_in_points.content_height + | 867 page_layout_in_points.content_height + |
| 885 page_layout_in_points.margin_top + | 868 page_layout_in_points.margin_top + |
| 886 page_layout_in_points.margin_bottom); | 869 page_layout_in_points.margin_bottom); |
| 887 *content_area = gfx::Rect(page_layout_in_points.margin_left, | 870 *content_area = gfx::Rect(page_layout_in_points.margin_left, |
| 888 page_layout_in_points.margin_top, | 871 page_layout_in_points.margin_top, |
| 889 page_layout_in_points.content_width, | 872 page_layout_in_points.content_width, |
| 890 page_layout_in_points.content_height); | 873 page_layout_in_points.content_height); |
| 891 } | 874 } |
| 892 | 875 |
| 893 void PrintWebViewHelper::UpdateFrameMarginsCssInfo( | 876 void PrintWebViewHelper::UpdateFrameMarginsCssInfo( |
| 894 const DictionaryValue& settings) { | 877 const DictionaryValue& settings) { |
| 895 int margins_type = 0; | 878 int margins_type = 0; |
| 896 if (!settings.GetInteger(printing::kSettingMarginsType, &margins_type)) | 879 if (!settings.GetInteger(printing::kSettingMarginsType, &margins_type)) |
| 897 margins_type = printing::DEFAULT_MARGINS; | 880 margins_type = printing::DEFAULT_MARGINS; |
| 898 ignore_css_margins_ = margins_type != printing::DEFAULT_MARGINS; | 881 ignore_css_margins_ = (margins_type != printing::DEFAULT_MARGINS); |
| 899 } | 882 } |
| 900 | 883 |
| 901 bool PrintWebViewHelper::IsPrintToPdfRequested( | 884 bool PrintWebViewHelper::IsPrintToPdfRequested( |
| 902 const DictionaryValue& job_settings) { | 885 const DictionaryValue& job_settings) { |
| 903 bool print_to_pdf = false; | 886 bool print_to_pdf = false; |
| 904 if (!job_settings.GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf)) | 887 if (!job_settings.GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf)) |
| 905 NOTREACHED(); | 888 NOTREACHED(); |
| 906 return print_to_pdf; | 889 return print_to_pdf; |
| 907 } | 890 } |
| 908 | 891 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 989 if (CreatePreviewDocument()) { | 972 if (CreatePreviewDocument()) { |
| 990 DidFinishPrinting(OK); | 973 DidFinishPrinting(OK); |
| 991 } else { | 974 } else { |
| 992 if (notify_browser_of_print_failure_) | 975 if (notify_browser_of_print_failure_) |
| 993 LOG(ERROR) << "CreatePreviewDocument failed"; | 976 LOG(ERROR) << "CreatePreviewDocument failed"; |
| 994 DidFinishPrinting(FAIL_PREVIEW); | 977 DidFinishPrinting(FAIL_PREVIEW); |
| 995 } | 978 } |
| 996 } | 979 } |
| 997 | 980 |
| 998 bool PrintWebViewHelper::CreatePreviewDocument() { | 981 bool PrintWebViewHelper::CreatePreviewDocument() { |
| 999 PrintMsg_Print_Params print_params = print_pages_params_->params; | 982 const PrintMsg_Print_Params& print_params = print_pages_params_->params; |
| 1000 const std::vector<int>& pages = print_pages_params_->pages; | 983 const std::vector<int>& pages = print_pages_params_->pages; |
| 1001 if (!print_preview_context_.CreatePreviewDocument(&print_params, pages, | 984 if (!print_preview_context_.CreatePreviewDocument(print_params, pages, |
| 1002 ignore_css_margins_)) { | 985 ignore_css_margins_)) { |
| 1003 return false; | 986 return false; |
| 1004 } | 987 } |
| 1005 | 988 |
| 1006 PageSizeMargins default_page_layout; | 989 PageSizeMargins default_page_layout; |
| 1007 ComputePageLayoutInPointsForCss(print_preview_context_.frame(), 0, | 990 ComputePageLayoutInPointsForCss(print_preview_context_.frame(), 0, |
| 1008 print_params, ignore_css_margins_, NULL, | 991 print_params, ignore_css_margins_, NULL, |
| 1009 &default_page_layout); | 992 &default_page_layout); |
| 1010 | 993 |
| 1011 if (!old_print_pages_params_.get() || | 994 if (!old_print_pages_params_.get() || |
| 1012 !PageLayoutIsEqual(*old_print_pages_params_, *print_pages_params_)) { | 995 !PageLayoutIsEqual(*old_print_pages_params_, *print_pages_params_)) { |
| 1013 bool has_page_size_style = PrintingFrameHasPageSizeStyle( | 996 bool has_page_size_style = PrintingFrameHasPageSizeStyle( |
| 1014 print_preview_context_.frame(), | 997 print_preview_context_.frame(), |
| 1015 print_preview_context_.total_page_count()); | 998 print_preview_context_.total_page_count()); |
| 1016 int dpi = GetDPI(&print_params); | 999 int dpi = GetDPI(&print_params); |
| 1017 gfx::Rect printable_area_in_points( | 1000 gfx::Rect printable_area_in_points( |
| 1018 ConvertUnit(print_pages_params_->params.printable_area.x(), | 1001 ConvertUnit(print_params.printable_area.x(), dpi, kPointsPerInch), |
| 1019 dpi, printing::kPointsPerInch), | 1002 ConvertUnit(print_params.printable_area.y(), dpi, kPointsPerInch), |
| 1020 ConvertUnit(print_pages_params_->params.printable_area.y(), | 1003 ConvertUnit(print_params.printable_area.width(), dpi, kPointsPerInch), |
| 1021 dpi, printing::kPointsPerInch), | 1004 ConvertUnit(print_params.printable_area.height(), dpi, kPointsPerInch)); |
| 1022 ConvertUnit(print_pages_params_->params.printable_area.width(), | |
| 1023 dpi, printing::kPointsPerInch), | |
| 1024 ConvertUnit(print_pages_params_->params.printable_area.height(), | |
| 1025 dpi, printing::kPointsPerInch)); | |
| 1026 | 1005 |
| 1027 // Margins: Send default page layout to browser process. | 1006 // Margins: Send default page layout to browser process. |
| 1028 Send(new PrintHostMsg_DidGetDefaultPageLayout(routing_id(), | 1007 Send(new PrintHostMsg_DidGetDefaultPageLayout(routing_id(), |
| 1029 default_page_layout, | 1008 default_page_layout, |
| 1030 printable_area_in_points, | 1009 printable_area_in_points, |
| 1031 has_page_size_style)); | 1010 has_page_size_style)); |
| 1032 } | 1011 } |
| 1033 | 1012 |
| 1034 PrintHostMsg_DidGetPreviewPageCount_Params params; | 1013 PrintHostMsg_DidGetPreviewPageCount_Params params; |
| 1035 params.page_count = print_preview_context_.total_page_count(); | 1014 params.page_count = print_preview_context_.total_page_count(); |
| 1036 params.is_modifiable = print_preview_context_.IsModifiable(); | 1015 params.is_modifiable = print_preview_context_.IsModifiable(); |
| 1037 params.document_cookie = print_pages_params_->params.document_cookie; | 1016 params.document_cookie = print_params.document_cookie; |
| 1038 params.preview_request_id = print_pages_params_->params.preview_request_id; | 1017 params.preview_request_id = print_params.preview_request_id; |
| 1039 params.clear_preview_data = print_preview_context_.generate_draft_pages(); | 1018 params.clear_preview_data = print_preview_context_.generate_draft_pages(); |
| 1040 Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(), params)); | 1019 Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(), params)); |
| 1041 if (CheckForCancel()) | 1020 if (CheckForCancel()) |
| 1042 return false; | 1021 return false; |
| 1043 | 1022 |
| 1044 while (!print_preview_context_.IsFinalPageRendered()) { | 1023 while (!print_preview_context_.IsFinalPageRendered()) { |
| 1045 int page_number = print_preview_context_.GetNextPageNumber(); | 1024 int page_number = print_preview_context_.GetNextPageNumber(); |
| 1046 DCHECK_GE(page_number, 0); | 1025 DCHECK_GE(page_number, 0); |
| 1047 if (!RenderPreviewPage(page_number)) | 1026 if (!RenderPreviewPage(page_number, print_params)) |
| 1048 return false; | 1027 return false; |
| 1049 | 1028 |
| 1050 if (CheckForCancel()) | 1029 if (CheckForCancel()) |
| 1051 return false; | 1030 return false; |
| 1052 | 1031 |
| 1053 // We must call PrepareFrameAndViewForPrint::FinishPrinting() (by way of | 1032 // We must call PrepareFrameAndViewForPrint::FinishPrinting() (by way of |
| 1054 // print_preview_context_.AllPagesRendered()) before calling | 1033 // print_preview_context_.AllPagesRendered()) before calling |
| 1055 // FinalizePrintReadyDocument() when printing a PDF because the plugin | 1034 // FinalizePrintReadyDocument() when printing a PDF because the plugin |
| 1056 // code does not generate output until we call FinishPrinting(). We do not | 1035 // code does not generate output until we call FinishPrinting(). We do not |
| 1057 // generate draft pages for PDFs, so IsFinalPageRendered() and | 1036 // generate draft pages for PDFs, so IsFinalPageRendered() and |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1145 // its |context_menu_node_|. | 1124 // its |context_menu_node_|. |
| 1146 if (is_preview_enabled_) { | 1125 if (is_preview_enabled_) { |
| 1147 print_preview_context_.InitWithNode(node); | 1126 print_preview_context_.InitWithNode(node); |
| 1148 RequestPrintPreview(PRINT_PREVIEW_USER_INITIATED_CONTEXT_NODE); | 1127 RequestPrintPreview(PRINT_PREVIEW_USER_INITIATED_CONTEXT_NODE); |
| 1149 } else { | 1128 } else { |
| 1150 WebNode duplicate_node(node); | 1129 WebNode duplicate_node(node); |
| 1151 Print(duplicate_node.document().frame(), duplicate_node); | 1130 Print(duplicate_node.document().frame(), duplicate_node); |
| 1152 } | 1131 } |
| 1153 } | 1132 } |
| 1154 | 1133 |
| 1155 void PrintWebViewHelper::Print(WebKit::WebFrame* frame, | 1134 void PrintWebViewHelper::Print(WebFrame* frame, |
| 1156 const WebKit::WebNode& node) { | 1135 const WebNode& node) { |
| 1157 // If still not finished with earlier print request simply ignore. | 1136 // If still not finished with earlier print request simply ignore. |
| 1158 if (print_web_view_) | 1137 if (print_web_view_) |
| 1159 return; | 1138 return; |
| 1160 | 1139 |
| 1161 // Initialize print settings. | 1140 // Initialize print settings. |
| 1162 scoped_ptr<PrepareFrameAndViewForPrint> prepare; | 1141 scoped_ptr<PrepareFrameAndViewForPrint> prepare; |
| 1163 if (!InitPrintSettingsAndPrepareFrame(frame, node, &prepare)) { | 1142 if (!InitPrintSettingsAndPrepareFrame(frame, node, &prepare)) { |
| 1164 DidFinishPrinting(FAIL_PRINT_INIT); | 1143 DidFinishPrinting(FAIL_PRINT_INIT); |
| 1165 return; // Failed to init print page settings. | 1144 return; // Failed to init print page settings. |
| 1166 } | 1145 } |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1235 if (store_print_pages_params) { | 1214 if (store_print_pages_params) { |
| 1236 old_print_pages_params_.reset(print_pages_params_.release()); | 1215 old_print_pages_params_.reset(print_pages_params_.release()); |
| 1237 } else { | 1216 } else { |
| 1238 print_pages_params_.reset(); | 1217 print_pages_params_.reset(); |
| 1239 old_print_pages_params_.reset(); | 1218 old_print_pages_params_.reset(); |
| 1240 } | 1219 } |
| 1241 | 1220 |
| 1242 notify_browser_of_print_failure_ = true; | 1221 notify_browser_of_print_failure_ = true; |
| 1243 } | 1222 } |
| 1244 | 1223 |
| 1245 bool PrintWebViewHelper::CopyAndPrint(WebKit::WebFrame* web_frame) { | 1224 bool PrintWebViewHelper::CopyAndPrint(WebFrame* web_frame) { |
| 1246 // Create a new WebView with the same settings as the current display one. | 1225 // Create a new WebView with the same settings as the current display one. |
| 1247 // Except that we disable javascript (don't want any active content running | 1226 // Except that we disable javascript (don't want any active content running |
| 1248 // on the page). | 1227 // on the page). |
| 1249 webkit_glue::WebPreferences prefs = render_view()->GetWebkitPreferences(); | 1228 webkit_glue::WebPreferences prefs = render_view()->GetWebkitPreferences(); |
| 1250 prefs.javascript_enabled = false; | 1229 prefs.javascript_enabled = false; |
| 1251 prefs.java_enabled = false; | 1230 prefs.java_enabled = false; |
| 1252 | 1231 |
| 1253 print_web_view_ = WebView::create(this); | 1232 print_web_view_ = WebKit::WebView::create(this); |
| 1254 prefs.Apply(print_web_view_); | 1233 prefs.Apply(print_web_view_); |
| 1255 print_web_view_->initializeMainFrame(this); | 1234 print_web_view_->initializeMainFrame(this); |
| 1256 | 1235 |
| 1257 print_pages_params_->pages.clear(); // Print all pages of selection. | 1236 print_pages_params_->pages.clear(); // Print all pages of selection. |
| 1258 | 1237 |
| 1259 std::string html = web_frame->selectionAsMarkup().utf8(); | 1238 std::string html = web_frame->selectionAsMarkup().utf8(); |
| 1260 std::string url_str = "data:text/html;charset=utf-8,"; | 1239 std::string url_str = "data:text/html;charset=utf-8,"; |
| 1261 url_str.append(html); | 1240 url_str.append(html); |
| 1262 GURL url(url_str); | 1241 GURL url(url_str); |
| 1263 | 1242 |
| 1264 // When loading is done this will call didStopLoading() and that will do the | 1243 // When loading is done this will call didStopLoading() and that will do the |
| 1265 // actual printing. | 1244 // actual printing. |
| 1266 print_web_view_->mainFrame()->loadRequest(WebURLRequest(url)); | 1245 print_web_view_->mainFrame()->loadRequest(WebKit::WebURLRequest(url)); |
| 1267 | 1246 |
| 1268 return true; | 1247 return true; |
| 1269 } | 1248 } |
| 1270 | 1249 |
| 1271 #if defined(OS_MACOSX) || defined(OS_WIN) | 1250 #if defined(OS_MACOSX) || defined(OS_WIN) |
| 1272 bool PrintWebViewHelper::PrintPages(WebFrame* frame, const WebNode& node) { | 1251 bool PrintWebViewHelper::PrintPages(WebFrame* frame, const WebNode& node) { |
| 1273 const PrintMsg_PrintPages_Params& params = *print_pages_params_; | 1252 const PrintMsg_PrintPages_Params& params = *print_pages_params_; |
| 1274 const PrintMsg_Print_Params& print_params = params.params; | 1253 const PrintMsg_Print_Params& print_params = params.params; |
| 1275 PrepareFrameAndViewForPrint prep_frame_view(print_params, frame, node); | 1254 PrepareFrameAndViewForPrint prep_frame_view(print_params, frame, node); |
| 1276 UpdateFrameAndViewFromCssPageLayout(frame, node, &prep_frame_view, | 1255 UpdateFrameAndViewFromCssPageLayout(frame, node, &prep_frame_view, |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1367 if (fit_to_paper_size) { | 1346 if (fit_to_paper_size) { |
| 1368 settings.params.print_scaling_option = | 1347 settings.params.print_scaling_option = |
| 1369 WebKit::WebPrintScalingOptionFitToPrintableArea; | 1348 WebKit::WebPrintScalingOptionFitToPrintableArea; |
| 1370 } | 1349 } |
| 1371 | 1350 |
| 1372 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); | 1351 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); |
| 1373 return result; | 1352 return result; |
| 1374 } | 1353 } |
| 1375 | 1354 |
| 1376 bool PrintWebViewHelper::InitPrintSettingsAndPrepareFrame( | 1355 bool PrintWebViewHelper::InitPrintSettingsAndPrepareFrame( |
| 1377 WebKit::WebFrame* frame, const WebKit::WebNode& node, | 1356 WebFrame* frame, const WebNode& node, |
| 1378 scoped_ptr<PrepareFrameAndViewForPrint>* prepare) { | 1357 scoped_ptr<PrepareFrameAndViewForPrint>* prepare) { |
| 1379 DCHECK(frame); | 1358 DCHECK(frame); |
| 1380 | 1359 |
| 1381 bool fit_to_paper_size = !(PrintingNodeOrPdfFrame(frame, node)); | 1360 bool fit_to_paper_size = !(PrintingNodeOrPdfFrame(frame, node)); |
| 1382 if (!InitPrintSettings(fit_to_paper_size)) { | 1361 if (!InitPrintSettings(fit_to_paper_size)) { |
| 1383 notify_browser_of_print_failure_ = false; | 1362 notify_browser_of_print_failure_ = false; |
| 1384 render_view()->RunModalAlertDialog( | 1363 render_view()->RunModalAlertDialog( |
| 1385 frame, | 1364 frame, |
| 1386 l10n_util::GetStringUTF16(IDS_PRINT_PREVIEW_INVALID_PRINTER_SETTINGS)); | 1365 l10n_util::GetStringUTF16(IDS_PRINT_PREVIEW_INVALID_PRINTER_SETTINGS)); |
| 1387 return false; | 1366 return false; |
| 1388 } | 1367 } |
| 1389 | 1368 |
| 1390 DCHECK(!prepare->get()); | 1369 DCHECK(!prepare->get()); |
| 1391 prepare->reset(new PrepareFrameAndViewForPrint(print_pages_params_->params, | 1370 prepare->reset(new PrepareFrameAndViewForPrint(print_pages_params_->params, |
| 1392 frame, node)); | 1371 frame, node)); |
| 1393 UpdateFrameAndViewFromCssPageLayout(frame, node, prepare->get(), | 1372 UpdateFrameAndViewFromCssPageLayout(frame, node, prepare->get(), |
| 1394 print_pages_params_->params, | 1373 print_pages_params_->params, |
| 1395 ignore_css_margins_); | 1374 ignore_css_margins_); |
| 1396 Send(new PrintHostMsg_DidGetDocumentCookie( | 1375 Send(new PrintHostMsg_DidGetDocumentCookie( |
| 1397 routing_id(), print_pages_params_->params.document_cookie)); | 1376 routing_id(), print_pages_params_->params.document_cookie)); |
| 1398 return true; | 1377 return true; |
| 1399 } | 1378 } |
| 1400 | 1379 |
| 1401 bool PrintWebViewHelper::UpdatePrintSettings( | 1380 bool PrintWebViewHelper::UpdatePrintSettings( |
| 1402 WebKit::WebFrame* frame, const WebKit::WebNode& node, | 1381 WebFrame* frame, const WebNode& node, |
| 1403 const DictionaryValue& passed_job_settings) { | 1382 const DictionaryValue& passed_job_settings) { |
| 1404 DCHECK(is_preview_enabled_); | 1383 DCHECK(is_preview_enabled_); |
| 1405 const DictionaryValue* job_settings = &passed_job_settings; | 1384 const DictionaryValue* job_settings = &passed_job_settings; |
| 1406 DictionaryValue modified_job_settings; | 1385 DictionaryValue modified_job_settings; |
| 1407 if (job_settings->empty()) { | 1386 if (job_settings->empty()) { |
| 1408 if (!print_for_preview_) | 1387 if (!print_for_preview_) |
| 1409 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); | 1388 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); |
| 1410 return false; | 1389 return false; |
| 1411 } | 1390 } |
| 1412 | 1391 |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 1436 PrintMsg_PrintPages_Params settings; | 1415 PrintMsg_PrintPages_Params settings; |
| 1437 Send(new PrintHostMsg_UpdatePrintSettings(routing_id(), | 1416 Send(new PrintHostMsg_UpdatePrintSettings(routing_id(), |
| 1438 cookie, *job_settings, &settings)); | 1417 cookie, *job_settings, &settings)); |
| 1439 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); | 1418 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); |
| 1440 | 1419 |
| 1441 if (!PrintMsg_Print_Params_IsValid(settings.params)) { | 1420 if (!PrintMsg_Print_Params_IsValid(settings.params)) { |
| 1442 if (!print_for_preview_) { | 1421 if (!print_for_preview_) { |
| 1443 print_preview_context_.set_error(PREVIEW_ERROR_INVALID_PRINTER_SETTINGS); | 1422 print_preview_context_.set_error(PREVIEW_ERROR_INVALID_PRINTER_SETTINGS); |
| 1444 } else { | 1423 } else { |
| 1445 // PrintForPrintPreview | 1424 // PrintForPrintPreview |
| 1446 WebKit::WebFrame* print_frame = NULL; | 1425 WebFrame* print_frame = NULL; |
| 1447 // This may not be the right frame, but the alert will be modal, | 1426 // This may not be the right frame, but the alert will be modal, |
| 1448 // therefore it works well enough. | 1427 // therefore it works well enough. |
| 1449 GetPrintFrame(&print_frame); | 1428 GetPrintFrame(&print_frame); |
| 1450 if (print_frame) { | 1429 if (print_frame) { |
| 1451 render_view()->RunModalAlertDialog( | 1430 render_view()->RunModalAlertDialog( |
| 1452 print_frame, | 1431 print_frame, |
| 1453 l10n_util::GetStringUTF16( | 1432 l10n_util::GetStringUTF16( |
| 1454 IDS_PRINT_PREVIEW_INVALID_PRINTER_SETTINGS)); | 1433 IDS_PRINT_PREVIEW_INVALID_PRINTER_SETTINGS)); |
| 1455 } | 1434 } |
| 1456 } | 1435 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1491 settings.params.title); | 1470 settings.params.title); |
| 1492 } | 1471 } |
| 1493 } | 1472 } |
| 1494 | 1473 |
| 1495 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); | 1474 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); |
| 1496 Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(), | 1475 Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(), |
| 1497 settings.params.document_cookie)); | 1476 settings.params.document_cookie)); |
| 1498 return true; | 1477 return true; |
| 1499 } | 1478 } |
| 1500 | 1479 |
| 1501 bool PrintWebViewHelper::GetPrintSettingsFromUser(WebKit::WebFrame* frame, | 1480 bool PrintWebViewHelper::GetPrintSettingsFromUser(WebFrame* frame, |
| 1502 const WebKit::WebNode& node, | 1481 const WebNode& node, |
| 1503 int expected_pages_count, | 1482 int expected_pages_count, |
| 1504 bool use_browser_overlays) { | 1483 bool use_browser_overlays) { |
| 1505 PrintHostMsg_ScriptedPrint_Params params; | 1484 PrintHostMsg_ScriptedPrint_Params params; |
| 1506 PrintMsg_PrintPages_Params print_settings; | 1485 PrintMsg_PrintPages_Params print_settings; |
| 1507 | 1486 |
| 1508 params.cookie = print_pages_params_->params.document_cookie; | 1487 params.cookie = print_pages_params_->params.document_cookie; |
| 1509 params.has_selection = frame->hasSelection(); | 1488 params.has_selection = frame->hasSelection(); |
| 1510 params.expected_pages_count = expected_pages_count; | 1489 params.expected_pages_count = expected_pages_count; |
| 1511 printing::MarginType margin_type = printing::DEFAULT_MARGINS; | 1490 printing::MarginType margin_type = printing::DEFAULT_MARGINS; |
| 1512 if (PrintingNodeOrPdfFrame(frame, node)) | 1491 if (PrintingNodeOrPdfFrame(frame, node)) |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 1525 new PrintHostMsg_ScriptedPrint(routing_id(), params, &print_settings); | 1504 new PrintHostMsg_ScriptedPrint(routing_id(), params, &print_settings); |
| 1526 msg->EnableMessagePumping(); | 1505 msg->EnableMessagePumping(); |
| 1527 Send(msg); | 1506 Send(msg); |
| 1528 print_pages_params_.reset(new PrintMsg_PrintPages_Params(print_settings)); | 1507 print_pages_params_.reset(new PrintMsg_PrintPages_Params(print_settings)); |
| 1529 | 1508 |
| 1530 print_pages_params_->params.print_scaling_option = scaling_option; | 1509 print_pages_params_->params.print_scaling_option = scaling_option; |
| 1531 return (print_settings.params.dpi && print_settings.params.document_cookie); | 1510 return (print_settings.params.dpi && print_settings.params.document_cookie); |
| 1532 } | 1511 } |
| 1533 | 1512 |
| 1534 bool PrintWebViewHelper::RenderPagesForPrint( | 1513 bool PrintWebViewHelper::RenderPagesForPrint( |
| 1535 WebKit::WebFrame* frame, | 1514 WebFrame* frame, |
| 1536 const WebKit::WebNode& node) { | 1515 const WebNode& node) { |
| 1537 if (print_pages_params_->params.selection_only) | 1516 if (print_pages_params_->params.selection_only) |
| 1538 return CopyAndPrint(frame); | 1517 return CopyAndPrint(frame); |
| 1539 return PrintPages(frame, node); | 1518 return PrintPages(frame, node); |
| 1540 } | 1519 } |
| 1541 | 1520 |
| 1542 #if defined(OS_POSIX) | 1521 #if defined(OS_POSIX) |
| 1543 bool PrintWebViewHelper::CopyMetafileDataToSharedMem( | 1522 bool PrintWebViewHelper::CopyMetafileDataToSharedMem( |
| 1544 printing::Metafile* metafile, | 1523 printing::Metafile* metafile, |
| 1545 base::SharedMemoryHandle* shared_mem_handle) { | 1524 base::SharedMemoryHandle* shared_mem_handle) { |
| 1546 uint32 buf_size = metafile->GetDataSize(); | 1525 uint32 buf_size = metafile->GetDataSize(); |
| 1547 base::SharedMemoryHandle mem_handle = | 1526 base::SharedMemoryHandle mem_handle = |
| 1548 content::RenderThread::Get()->HostAllocateSharedMemoryBuffer(buf_size); | 1527 content::RenderThread::Get()->HostAllocateSharedMemoryBuffer(buf_size); |
| 1549 if (base::SharedMemory::IsHandleValid(mem_handle)) { | 1528 if (base::SharedMemory::IsHandleValid(mem_handle)) { |
| 1550 base::SharedMemory shared_buf(mem_handle, false); | 1529 base::SharedMemory shared_buf(mem_handle, false); |
| 1551 if (shared_buf.Map(buf_size)) { | 1530 if (shared_buf.Map(buf_size)) { |
| 1552 metafile->GetData(shared_buf.memory(), buf_size); | 1531 metafile->GetData(shared_buf.memory(), buf_size); |
| 1553 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), | 1532 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), |
| 1554 shared_mem_handle); | 1533 shared_mem_handle); |
| 1555 return true; | 1534 return true; |
| 1556 } | 1535 } |
| 1557 } | 1536 } |
| 1558 NOTREACHED(); | 1537 NOTREACHED(); |
| 1559 return false; | 1538 return false; |
| 1560 } | 1539 } |
| 1561 #endif // defined(OS_POSIX) | 1540 #endif // defined(OS_POSIX) |
| 1562 | 1541 |
| 1563 bool PrintWebViewHelper::IsScriptInitiatedPrintTooFrequent( | 1542 bool PrintWebViewHelper::IsScriptInitiatedPrintTooFrequent( |
| 1564 WebKit::WebFrame* frame) { | 1543 WebFrame* frame) { |
| 1565 const int kMinSecondsToIgnoreJavascriptInitiatedPrint = 2; | 1544 const int kMinSecondsToIgnoreJavascriptInitiatedPrint = 2; |
| 1566 const int kMaxSecondsToIgnoreJavascriptInitiatedPrint = 32; | 1545 const int kMaxSecondsToIgnoreJavascriptInitiatedPrint = 32; |
| 1567 bool too_frequent = false; | 1546 bool too_frequent = false; |
| 1568 | 1547 |
| 1569 // Check if there is script repeatedly trying to print and ignore it if too | 1548 // Check if there is script repeatedly trying to print and ignore it if too |
| 1570 // frequent. The first 3 times, we use a constant wait time, but if this | 1549 // frequent. The first 3 times, we use a constant wait time, but if this |
| 1571 // gets excessive, we switch to exponential wait time. So for a page that | 1550 // gets excessive, we switch to exponential wait time. So for a page that |
| 1572 // calls print() in a loop the user will need to cancel the print dialog | 1551 // calls print() in a loop the user will need to cancel the print dialog |
| 1573 // after: [2, 2, 2, 4, 8, 16, 32, 32, ...] seconds. | 1552 // after: [2, 2, 2, 4, 8, 16, 32, 32, ...] seconds. |
| 1574 // This gives the user time to navigate from the page. | 1553 // This gives the user time to navigate from the page. |
| 1575 if (user_cancelled_scripted_print_count_ > 0) { | 1554 if (user_cancelled_scripted_print_count_ > 0) { |
| 1576 base::TimeDelta diff = base::Time::Now() - last_cancelled_script_print_; | 1555 base::TimeDelta diff = base::Time::Now() - last_cancelled_script_print_; |
| 1577 int min_wait_seconds = kMinSecondsToIgnoreJavascriptInitiatedPrint; | 1556 int min_wait_seconds = kMinSecondsToIgnoreJavascriptInitiatedPrint; |
| 1578 if (user_cancelled_scripted_print_count_ > 3) { | 1557 if (user_cancelled_scripted_print_count_ > 3) { |
| 1579 min_wait_seconds = std::min( | 1558 min_wait_seconds = std::min( |
| 1580 kMinSecondsToIgnoreJavascriptInitiatedPrint << | 1559 kMinSecondsToIgnoreJavascriptInitiatedPrint << |
| 1581 (user_cancelled_scripted_print_count_ - 3), | 1560 (user_cancelled_scripted_print_count_ - 3), |
| 1582 kMaxSecondsToIgnoreJavascriptInitiatedPrint); | 1561 kMaxSecondsToIgnoreJavascriptInitiatedPrint); |
| 1583 } | 1562 } |
| 1584 if (diff.InSeconds() < min_wait_seconds) { | 1563 if (diff.InSeconds() < min_wait_seconds) { |
| 1585 too_frequent = true; | 1564 too_frequent = true; |
| 1586 } | 1565 } |
| 1587 } | 1566 } |
| 1588 | 1567 |
| 1589 if (!too_frequent) | 1568 if (!too_frequent) |
| 1590 return false; | 1569 return false; |
| 1591 | 1570 |
| 1592 WebString message(WebString::fromUTF8( | 1571 WebKit::WebString message( |
| 1593 "Ignoring too frequent calls to print().")); | 1572 WebKit::WebString::fromUTF8("Ignoring too frequent calls to print().")); |
| 1594 frame->addMessageToConsole(WebConsoleMessage(WebConsoleMessage::LevelWarning, | 1573 frame->addMessageToConsole( |
| 1595 message)); | 1574 WebKit::WebConsoleMessage( |
| 1575 WebKit::WebConsoleMessage::LevelWarning, message)); | |
| 1596 return true; | 1576 return true; |
| 1597 } | 1577 } |
| 1598 | 1578 |
| 1599 void PrintWebViewHelper::ResetScriptedPrintCount() { | 1579 void PrintWebViewHelper::ResetScriptedPrintCount() { |
| 1600 // Reset cancel counter on successful print. | 1580 // Reset cancel counter on successful print. |
| 1601 user_cancelled_scripted_print_count_ = 0; | 1581 user_cancelled_scripted_print_count_ = 0; |
| 1602 } | 1582 } |
| 1603 | 1583 |
| 1604 void PrintWebViewHelper::IncrementScriptedPrintCount() { | 1584 void PrintWebViewHelper::IncrementScriptedPrintCount() { |
| 1605 ++user_cancelled_scripted_print_count_; | 1585 ++user_cancelled_scripted_print_count_; |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1692 generate_draft_pages_(true), | 1672 generate_draft_pages_(true), |
| 1693 print_ready_metafile_page_count_(0), | 1673 print_ready_metafile_page_count_(0), |
| 1694 error_(PREVIEW_ERROR_NONE), | 1674 error_(PREVIEW_ERROR_NONE), |
| 1695 state_(UNINITIALIZED) { | 1675 state_(UNINITIALIZED) { |
| 1696 } | 1676 } |
| 1697 | 1677 |
| 1698 PrintWebViewHelper::PrintPreviewContext::~PrintPreviewContext() { | 1678 PrintWebViewHelper::PrintPreviewContext::~PrintPreviewContext() { |
| 1699 } | 1679 } |
| 1700 | 1680 |
| 1701 void PrintWebViewHelper::PrintPreviewContext::InitWithFrame( | 1681 void PrintWebViewHelper::PrintPreviewContext::InitWithFrame( |
| 1702 WebKit::WebFrame* web_frame) { | 1682 WebFrame* web_frame) { |
| 1703 DCHECK(web_frame); | 1683 DCHECK(web_frame); |
| 1704 DCHECK(!IsRendering()); | 1684 DCHECK(!IsRendering()); |
| 1705 state_ = INITIALIZED; | 1685 state_ = INITIALIZED; |
| 1706 frame_ = web_frame; | 1686 frame_ = web_frame; |
| 1707 node_.reset(); | 1687 node_.reset(); |
| 1708 } | 1688 } |
| 1709 | 1689 |
| 1710 void PrintWebViewHelper::PrintPreviewContext::InitWithNode( | 1690 void PrintWebViewHelper::PrintPreviewContext::InitWithNode( |
| 1711 const WebKit::WebNode& web_node) { | 1691 const WebNode& web_node) { |
| 1712 DCHECK(!web_node.isNull()); | 1692 DCHECK(!web_node.isNull()); |
| 1713 DCHECK(web_node.document().frame()); | 1693 DCHECK(web_node.document().frame()); |
| 1714 DCHECK(!IsRendering()); | 1694 DCHECK(!IsRendering()); |
| 1715 state_ = INITIALIZED; | 1695 state_ = INITIALIZED; |
| 1716 frame_ = web_node.document().frame(); | 1696 frame_ = web_node.document().frame(); |
| 1717 node_ = web_node; | 1697 node_ = web_node; |
| 1718 } | 1698 } |
| 1719 | 1699 |
| 1720 void PrintWebViewHelper::PrintPreviewContext::OnPrintPreview() { | 1700 void PrintWebViewHelper::PrintPreviewContext::OnPrintPreview() { |
| 1721 DCHECK_EQ(INITIALIZED, state_); | 1701 DCHECK_EQ(INITIALIZED, state_); |
| 1722 ClearContext(); | 1702 ClearContext(); |
| 1723 } | 1703 } |
| 1724 | 1704 |
| 1725 bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument( | 1705 bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument( |
| 1726 PrintMsg_Print_Params* print_params, | 1706 const PrintMsg_Print_Params& print_params, |
| 1727 const std::vector<int>& pages, | 1707 const std::vector<int>& pages, |
| 1728 bool ignore_css_margins) { | 1708 bool ignore_css_margins) { |
| 1729 DCHECK_EQ(INITIALIZED, state_); | 1709 DCHECK_EQ(INITIALIZED, state_); |
| 1730 state_ = RENDERING; | 1710 state_ = RENDERING; |
| 1731 | 1711 |
| 1732 metafile_.reset(new printing::PreviewMetafile); | 1712 metafile_.reset(new printing::PreviewMetafile); |
| 1733 if (!metafile_->Init()) { | 1713 if (!metafile_->Init()) { |
| 1734 set_error(PREVIEW_ERROR_METAFILE_INIT_FAILED); | 1714 set_error(PREVIEW_ERROR_METAFILE_INIT_FAILED); |
| 1735 LOG(ERROR) << "PreviewMetafile Init failed"; | 1715 LOG(ERROR) << "PreviewMetafile Init failed"; |
| 1736 return false; | 1716 return false; |
| 1737 } | 1717 } |
| 1738 | 1718 |
| 1739 // Need to make sure old object gets destroyed first. | 1719 // Need to make sure old object gets destroyed first. |
| 1740 prep_frame_view_.reset(new PrepareFrameAndViewForPrint(*print_params, frame(), | 1720 prep_frame_view_.reset(new PrepareFrameAndViewForPrint(print_params, frame(), |
| 1741 node())); | 1721 node())); |
| 1742 UpdateFrameAndViewFromCssPageLayout(frame_, node_, prep_frame_view_.get(), | 1722 UpdateFrameAndViewFromCssPageLayout(frame_, node_, prep_frame_view_.get(), |
| 1743 *print_params, ignore_css_margins); | 1723 print_params, ignore_css_margins); |
| 1744 | |
| 1745 print_params_.reset(new PrintMsg_Print_Params(*print_params)); | |
| 1746 | 1724 |
| 1747 total_page_count_ = prep_frame_view_->GetExpectedPageCount(); | 1725 total_page_count_ = prep_frame_view_->GetExpectedPageCount(); |
| 1748 if (total_page_count_ == 0) { | 1726 if (total_page_count_ == 0) { |
| 1749 LOG(ERROR) << "CreatePreviewDocument got 0 page count"; | 1727 LOG(ERROR) << "CreatePreviewDocument got 0 page count"; |
| 1750 set_error(PREVIEW_ERROR_ZERO_PAGES); | 1728 set_error(PREVIEW_ERROR_ZERO_PAGES); |
| 1751 return false; | 1729 return false; |
| 1752 } | 1730 } |
| 1753 | 1731 |
| 1754 int selected_page_count = pages.size(); | 1732 int selected_page_count = pages.size(); |
| 1755 current_page_index_ = 0; | 1733 current_page_index_ = 0; |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1860 bool generate_draft_pages) { | 1838 bool generate_draft_pages) { |
| 1861 DCHECK_EQ(INITIALIZED, state_); | 1839 DCHECK_EQ(INITIALIZED, state_); |
| 1862 generate_draft_pages_ = generate_draft_pages; | 1840 generate_draft_pages_ = generate_draft_pages; |
| 1863 } | 1841 } |
| 1864 | 1842 |
| 1865 void PrintWebViewHelper::PrintPreviewContext::set_error( | 1843 void PrintWebViewHelper::PrintPreviewContext::set_error( |
| 1866 enum PrintPreviewErrorBuckets error) { | 1844 enum PrintPreviewErrorBuckets error) { |
| 1867 error_ = error; | 1845 error_ = error; |
| 1868 } | 1846 } |
| 1869 | 1847 |
| 1870 WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() { | 1848 WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() { |
| 1871 // TODO(thestig) turn this back into a DCHECK when http://crbug.com/118303 is | 1849 // TODO(thestig) turn this back into a DCHECK when http://crbug.com/118303 is |
| 1872 // resolved. | 1850 // resolved. |
| 1873 CHECK(state_ != UNINITIALIZED); | 1851 CHECK(state_ != UNINITIALIZED); |
| 1874 return frame_; | 1852 return frame_; |
| 1875 } | 1853 } |
| 1876 | 1854 |
| 1877 const WebKit::WebNode& PrintWebViewHelper::PrintPreviewContext::node() const { | 1855 const WebNode& PrintWebViewHelper::PrintPreviewContext::node() const { |
| 1878 DCHECK(state_ != UNINITIALIZED); | 1856 DCHECK(state_ != UNINITIALIZED); |
| 1879 return node_; | 1857 return node_; |
| 1880 } | 1858 } |
| 1881 | 1859 |
| 1882 int PrintWebViewHelper::PrintPreviewContext::total_page_count() const { | 1860 int PrintWebViewHelper::PrintPreviewContext::total_page_count() const { |
| 1883 DCHECK(state_ != UNINITIALIZED); | 1861 DCHECK(state_ != UNINITIALIZED); |
| 1884 return total_page_count_; | 1862 return total_page_count_; |
| 1885 } | 1863 } |
| 1886 | 1864 |
| 1887 bool PrintWebViewHelper::PrintPreviewContext::generate_draft_pages() const { | 1865 bool PrintWebViewHelper::PrintPreviewContext::generate_draft_pages() const { |
| 1888 return generate_draft_pages_; | 1866 return generate_draft_pages_; |
| 1889 } | 1867 } |
| 1890 | 1868 |
| 1891 printing::PreviewMetafile* PrintWebViewHelper::PrintPreviewContext::metafile() { | 1869 printing::PreviewMetafile* PrintWebViewHelper::PrintPreviewContext::metafile() { |
| 1892 DCHECK(IsRendering()); | 1870 DCHECK(IsRendering()); |
| 1893 return metafile_.get(); | 1871 return metafile_.get(); |
| 1894 } | 1872 } |
| 1895 | 1873 |
| 1896 const PrintMsg_Print_Params& | |
| 1897 PrintWebViewHelper::PrintPreviewContext::print_params() const { | |
| 1898 DCHECK(state_ != UNINITIALIZED); | |
| 1899 return *print_params_; | |
| 1900 } | |
| 1901 | |
| 1902 int PrintWebViewHelper::PrintPreviewContext::last_error() const { | 1874 int PrintWebViewHelper::PrintPreviewContext::last_error() const { |
| 1903 return error_; | 1875 return error_; |
| 1904 } | 1876 } |
| 1905 | 1877 |
| 1906 gfx::Size PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const { | 1878 gfx::Size PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const { |
| 1907 DCHECK(IsRendering()); | 1879 DCHECK(IsRendering()); |
| 1908 return prep_frame_view_->GetPrintCanvasSize(); | 1880 return prep_frame_view_->GetPrintCanvasSize(); |
| 1909 } | 1881 } |
| 1910 | 1882 |
| 1911 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { | 1883 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { |
| 1912 prep_frame_view_.reset(); | 1884 prep_frame_view_.reset(); |
| 1913 metafile_.reset(); | 1885 metafile_.reset(); |
| 1914 pages_to_render_.clear(); | 1886 pages_to_render_.clear(); |
| 1915 error_ = PREVIEW_ERROR_NONE; | 1887 error_ = PREVIEW_ERROR_NONE; |
| 1916 } | 1888 } |
| OLD | NEW |