Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Side by Side Diff: components/printing/renderer/print_render_frame_helper.cc

Issue 2920013002: Use pdf compositor service for printing when OOPIF is enabled
Patch Set: rebase Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "components/printing/renderer/print_render_frame_helper.h" 5 #include "components/printing/renderer/print_render_frame_helper.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after
792 792
793 // Backup size and offset if it's a local frame. 793 // Backup size and offset if it's a local frame.
794 blink::WebView* web_view = frame_.view(); 794 blink::WebView* web_view = frame_.view();
795 if (blink::WebFrame* web_frame = web_view->MainFrame()) { 795 if (blink::WebFrame* web_frame = web_view->MainFrame()) {
796 // TODO(lukasza, weili): Support restoring scroll offset of a remote main 796 // TODO(lukasza, weili): Support restoring scroll offset of a remote main
797 // frame - https://crbug.com/734815. 797 // frame - https://crbug.com/734815.
798 if (web_frame->IsWebLocalFrame()) 798 if (web_frame->IsWebLocalFrame())
799 prev_scroll_offset_ = web_frame->ToWebLocalFrame()->GetScrollOffset(); 799 prev_scroll_offset_ = web_frame->ToWebLocalFrame()->GetScrollOffset();
800 } 800 }
801 prev_view_size_ = web_view->Size(); 801 prev_view_size_ = web_view->Size();
802
803 web_view->Resize(print_layout_size); 802 web_view->Resize(print_layout_size);
804 } 803 }
805 804
806 void PrepareFrameAndViewForPrint::StartPrinting() { 805 void PrepareFrameAndViewForPrint::StartPrinting() {
807 blink::WebView* web_view = frame_.view(); 806 blink::WebView* web_view = frame_.view();
808 web_view->GetSettings()->SetShouldPrintBackgrounds(should_print_backgrounds_); 807 web_view->GetSettings()->SetShouldPrintBackgrounds(should_print_backgrounds_);
809 expected_pages_count_ = 808 expected_pages_count_ =
810 frame()->PrintBegin(web_print_params_, node_to_print_); 809 frame()->PrintBegin(web_print_params_, node_to_print_);
811 ResizeForPrinting(); 810 ResizeForPrinting();
812 is_printing_started_ = true; 811 is_printing_started_ = true;
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
1284 bool PrintRenderFrameHelper::CreatePreviewDocument() { 1283 bool PrintRenderFrameHelper::CreatePreviewDocument() {
1285 if (!print_pages_params_ || CheckForCancel()) 1284 if (!print_pages_params_ || CheckForCancel())
1286 return false; 1285 return false;
1287 1286
1288 UMA_HISTOGRAM_ENUMERATION("PrintPreview.PreviewEvent", 1287 UMA_HISTOGRAM_ENUMERATION("PrintPreview.PreviewEvent",
1289 PREVIEW_EVENT_CREATE_DOCUMENT, PREVIEW_EVENT_MAX); 1288 PREVIEW_EVENT_CREATE_DOCUMENT, PREVIEW_EVENT_MAX);
1290 1289
1291 const PrintMsg_Print_Params& print_params = print_pages_params_->params; 1290 const PrintMsg_Print_Params& print_params = print_pages_params_->params;
1292 const std::vector<int>& pages = print_pages_params_->pages; 1291 const std::vector<int>& pages = print_pages_params_->pages;
1293 1292
1294 if (!print_preview_context_.CreatePreviewDocument(prep_frame_view_.release(), 1293 if (!print_preview_context_.CreatePreviewDocument(
1295 pages)) { 1294 prep_frame_view_.release(), pages, print_params.printed_doc_type)) {
1296 return false; 1295 return false;
1297 } 1296 }
1298 1297
1299 PageSizeMargins default_page_layout; 1298 PageSizeMargins default_page_layout;
1300 double scale_factor = 1299 double scale_factor =
1301 print_params.scale_factor >= kEpsilon ? print_params.scale_factor : 1.0f; 1300 print_params.scale_factor >= kEpsilon ? print_params.scale_factor : 1.0f;
1302 1301
1303 ComputePageLayoutInPointsForCss(print_preview_context_.prepared_frame(), 0, 1302 ComputePageLayoutInPointsForCss(print_preview_context_.prepared_frame(), 0,
1304 print_params, ignore_css_margins_, 1303 print_params, ignore_css_margins_,
1305 &scale_factor, &default_page_layout); 1304 &scale_factor, &default_page_layout);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1391 return true; 1390 return true;
1392 } 1391 }
1393 1392
1394 #if !defined(OS_MACOSX) && BUILDFLAG(ENABLE_PRINT_PREVIEW) 1393 #if !defined(OS_MACOSX) && BUILDFLAG(ENABLE_PRINT_PREVIEW)
1395 bool PrintRenderFrameHelper::RenderPreviewPage( 1394 bool PrintRenderFrameHelper::RenderPreviewPage(
1396 int page_number, 1395 int page_number,
1397 const PrintMsg_Print_Params& print_params) { 1396 const PrintMsg_Print_Params& print_params) {
1398 std::unique_ptr<PdfMetafileSkia> draft_metafile; 1397 std::unique_ptr<PdfMetafileSkia> draft_metafile;
1399 PdfMetafileSkia* initial_render_metafile = print_preview_context_.metafile(); 1398 PdfMetafileSkia* initial_render_metafile = print_preview_context_.metafile();
1400 if (print_preview_context_.IsModifiable() && is_print_ready_metafile_sent_) { 1399 if (print_preview_context_.IsModifiable() && is_print_ready_metafile_sent_) {
1401 draft_metafile = base::MakeUnique<PdfMetafileSkia>(PDF_SKIA_DOCUMENT_TYPE); 1400 draft_metafile.reset(new PdfMetafileSkia(print_params.printed_doc_type));
Lei Zhang 2017/08/16 21:17:01 Can't use MakeUnique anymore?
Wei Li 2017/08/25 23:39:37 Done in another CL.
1402 initial_render_metafile = draft_metafile.get(); 1401 initial_render_metafile = draft_metafile.get();
1403 } 1402 }
1404 1403
1405 base::TimeTicks begin_time = base::TimeTicks::Now(); 1404 base::TimeTicks begin_time = base::TimeTicks::Now();
1406 PrintPageInternal(print_params, page_number, 1405 PrintPageInternal(print_params, page_number,
1407 print_preview_context_.total_page_count(), 1406 print_preview_context_.total_page_count(),
1408 print_preview_context_.prepared_frame(), 1407 print_preview_context_.prepared_frame(),
1409 initial_render_metafile, nullptr, nullptr, nullptr); 1408 initial_render_metafile, nullptr, nullptr, nullptr);
1410 print_preview_context_.RenderedPreviewPage(base::TimeTicks::Now() - 1409 print_preview_context_.RenderedPreviewPage(base::TimeTicks::Now() -
1411 begin_time); 1410 begin_time);
1412 if (draft_metafile.get()) { 1411 if (draft_metafile.get()) {
1413 draft_metafile->FinishDocument(); 1412 draft_metafile->FinishDocument();
1414 } else if (print_preview_context_.IsModifiable() && 1413 } else if (print_preview_context_.IsModifiable() &&
1415 print_preview_context_.generate_draft_pages()) { 1414 print_preview_context_.generate_draft_pages()) {
1416 DCHECK(!draft_metafile.get()); 1415 DCHECK(!draft_metafile.get());
1417 draft_metafile = 1416 draft_metafile =
1418 print_preview_context_.metafile()->GetMetafileForCurrentPage( 1417 print_preview_context_.metafile()->GetMetafileForCurrentPage(
1419 PDF_SKIA_DOCUMENT_TYPE); 1418 print_params.printed_doc_type);
1420 } 1419 }
1421 return PreviewPageRendered(page_number, draft_metafile.get()); 1420 return PreviewPageRendered(page_number, draft_metafile.get());
1422 } 1421 }
1423 #endif // !defined(OS_MACOSX) && BUILDFLAG(ENABLE_PRINT_PREVIEW) 1422 #endif // !defined(OS_MACOSX) && BUILDFLAG(ENABLE_PRINT_PREVIEW)
1424 1423
1425 bool PrintRenderFrameHelper::FinalizePrintReadyDocument() { 1424 bool PrintRenderFrameHelper::FinalizePrintReadyDocument() {
1426 DCHECK(!is_print_ready_metafile_sent_); 1425 DCHECK(!is_print_ready_metafile_sent_);
1427 print_preview_context_.FinalizePrintReadyDocument(); 1426 print_preview_context_.FinalizePrintReadyDocument();
1428 1427
1429 PdfMetafileSkia* metafile = print_preview_context_.metafile(); 1428 PdfMetafileSkia* metafile = print_preview_context_.metafile();
1430 PrintHostMsg_DidPreviewDocument_Params preview_params; 1429 PrintHostMsg_DidPreviewDocument_Params preview_params;
1431 1430
1432 // Ask the browser to create the shared memory for us.
1433 if (!CopyMetafileDataToSharedMem(*metafile, 1431 if (!CopyMetafileDataToSharedMem(*metafile,
1434 &(preview_params.metafile_data_handle))) { 1432 &preview_params.metafile_data_handle)) {
1435 LOG(ERROR) << "CopyMetafileDataToSharedMem failed"; 1433 LOG(ERROR) << "CopyMetafileDataToSharedMem failed";
1436 print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED); 1434 print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED);
1437 return false; 1435 return false;
1438 } 1436 }
1439 1437
1440 preview_params.data_size = metafile->GetDataSize(); 1438 preview_params.data_size = metafile->GetDataSize();
1441 preview_params.document_cookie = print_pages_params_->params.document_cookie; 1439 preview_params.document_cookie = print_pages_params_->params.document_cookie;
1442 preview_params.expected_pages_count = 1440 preview_params.expected_pages_count =
1443 print_preview_context_.total_page_count(); 1441 print_preview_context_.total_page_count();
1444 preview_params.modifiable = print_preview_context_.IsModifiable(); 1442 preview_params.modifiable = print_preview_context_.IsModifiable();
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after
2124 } 2122 }
2125 2123
2126 if (!metafile) { 2124 if (!metafile) {
2127 NOTREACHED(); 2125 NOTREACHED();
2128 print_preview_context_.set_error( 2126 print_preview_context_.set_error(
2129 PREVIEW_ERROR_PAGE_RENDERED_WITHOUT_METAFILE); 2127 PREVIEW_ERROR_PAGE_RENDERED_WITHOUT_METAFILE);
2130 return false; 2128 return false;
2131 } 2129 }
2132 2130
2133 PrintHostMsg_DidPreviewPage_Params preview_page_params; 2131 PrintHostMsg_DidPreviewPage_Params preview_page_params;
2134 // Get the size of the resulting metafile. 2132 if (!CopyMetafileDataToSharedMem(*metafile,
2135 if (!CopyMetafileDataToSharedMem( 2133 &preview_page_params.metafile_data_handle)) {
2136 *metafile, &(preview_page_params.metafile_data_handle))) {
2137 LOG(ERROR) << "CopyMetafileDataToSharedMem failed"; 2134 LOG(ERROR) << "CopyMetafileDataToSharedMem failed";
2138 print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED); 2135 print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED);
2139 return false; 2136 return false;
2140 } 2137 }
2138
2141 preview_page_params.data_size = metafile->GetDataSize(); 2139 preview_page_params.data_size = metafile->GetDataSize();
2142 preview_page_params.page_number = page_number; 2140 preview_page_params.page_number = page_number;
2143 preview_page_params.preview_request_id = 2141 preview_page_params.preview_request_id =
2144 print_pages_params_->params.preview_request_id; 2142 print_pages_params_->params.preview_request_id;
2145 2143
2146 Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params)); 2144 Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params));
2147 return true; 2145 return true;
2148 } 2146 }
2149 #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) 2147 #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
2150 2148
(...skipping 29 matching lines...) Expand all
2180 CalculateIsModifiable(); 2178 CalculateIsModifiable();
2181 } 2179 }
2182 2180
2183 void PrintRenderFrameHelper::PrintPreviewContext::OnPrintPreview() { 2181 void PrintRenderFrameHelper::PrintPreviewContext::OnPrintPreview() {
2184 DCHECK_EQ(INITIALIZED, state_); 2182 DCHECK_EQ(INITIALIZED, state_);
2185 ClearContext(); 2183 ClearContext();
2186 } 2184 }
2187 2185
2188 bool PrintRenderFrameHelper::PrintPreviewContext::CreatePreviewDocument( 2186 bool PrintRenderFrameHelper::PrintPreviewContext::CreatePreviewDocument(
2189 PrepareFrameAndViewForPrint* prepared_frame, 2187 PrepareFrameAndViewForPrint* prepared_frame,
2190 const std::vector<int>& pages) { 2188 const std::vector<int>& pages,
2189 SkiaDocumentType doc_type) {
2191 DCHECK_EQ(INITIALIZED, state_); 2190 DCHECK_EQ(INITIALIZED, state_);
2192 state_ = RENDERING; 2191 state_ = RENDERING;
2193 2192
2194 // Need to make sure old object gets destroyed first. 2193 // Need to make sure old object gets destroyed first.
2195 prep_frame_view_.reset(prepared_frame); 2194 prep_frame_view_.reset(prepared_frame);
2196 prep_frame_view_->StartPrinting(); 2195 prep_frame_view_->StartPrinting();
2197 2196
2198 total_page_count_ = prep_frame_view_->GetExpectedPageCount(); 2197 total_page_count_ = prep_frame_view_->GetExpectedPageCount();
2199 if (total_page_count_ == 0) { 2198 if (total_page_count_ == 0) {
2200 LOG(ERROR) << "CreatePreviewDocument got 0 page count"; 2199 LOG(ERROR) << "CreatePreviewDocument got 0 page count";
2201 set_error(PREVIEW_ERROR_ZERO_PAGES); 2200 set_error(PREVIEW_ERROR_ZERO_PAGES);
2202 return false; 2201 return false;
2203 } 2202 }
2204 2203
2205 metafile_ = base::MakeUnique<PdfMetafileSkia>(PDF_SKIA_DOCUMENT_TYPE); 2204 metafile_.reset(new PdfMetafileSkia(doc_type));
2206 CHECK(metafile_->Init()); 2205 CHECK(metafile_->Init());
2207 2206
2208 current_page_index_ = 0; 2207 current_page_index_ = 0;
2209 pages_to_render_ = pages; 2208 pages_to_render_ = pages;
2210 // Sort and make unique. 2209 // Sort and make unique.
2211 std::sort(pages_to_render_.begin(), pages_to_render_.end()); 2210 std::sort(pages_to_render_.begin(), pages_to_render_.end());
2212 pages_to_render_.resize( 2211 pages_to_render_.resize(
2213 std::unique(pages_to_render_.begin(), pages_to_render_.end()) - 2212 std::unique(pages_to_render_.begin(), pages_to_render_.end()) -
2214 pages_to_render_.begin()); 2213 pages_to_render_.begin());
2215 // Remove invalid pages. 2214 // Remove invalid pages.
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
2434 blink::WebConsoleMessage::kLevelWarning, message)); 2433 blink::WebConsoleMessage::kLevelWarning, message));
2435 return false; 2434 return false;
2436 } 2435 }
2437 2436
2438 void PrintRenderFrameHelper::ScriptingThrottler::Reset() { 2437 void PrintRenderFrameHelper::ScriptingThrottler::Reset() {
2439 // Reset counter on successful print. 2438 // Reset counter on successful print.
2440 count_ = 0; 2439 count_ = 0;
2441 } 2440 }
2442 2441
2443 } // namespace printing 2442 } // namespace printing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698