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 "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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |