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

Side by Side Diff: pdf/pdfium/pdfium_engine.cc

Issue 1636413003: PDF: Load linearized files with FPDFAvail_GetDocument(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "pdf/pdfium/pdfium_engine.h" 5 #include "pdf/pdfium/pdfium_engine.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 1095 matching lines...) Expand 10 before | Expand all | Expand 10 after
1106 bool PDFiumEngine::IsProgressiveLoad() { 1106 bool PDFiumEngine::IsProgressiveLoad() {
1107 return doc_loader_.is_partial_document(); 1107 return doc_loader_.is_partial_document();
1108 } 1108 }
1109 1109
1110 std::string PDFiumEngine::GetMetadata(const std::string& key) { 1110 std::string PDFiumEngine::GetMetadata(const std::string& key) {
1111 return GetDocumentMetadata(doc(), key); 1111 return GetDocumentMetadata(doc(), key);
1112 } 1112 }
1113 1113
1114 void PDFiumEngine::OnPartialDocumentLoaded() { 1114 void PDFiumEngine::OnPartialDocumentLoaded() {
1115 file_access_.m_FileLen = doc_loader_.document_size(); 1115 file_access_.m_FileLen = doc_loader_.document_size();
1116 fpdf_availability_ = FPDFAvail_Create(&file_availability_, &file_access_); 1116 if (!fpdf_availability_) {
Lei Zhang 2016/01/28 23:17:58 I haven't checked the possible call orders between
1117 DCHECK(fpdf_availability_); 1117 fpdf_availability_ = FPDFAvail_Create(&file_availability_, &file_access_);
1118 DCHECK(fpdf_availability_);
1119 }
1118 1120
1119 // Currently engine does not deal efficiently with some non-linearized files. 1121 // Currently engine does not deal efficiently with some non-linearized files.
1120 // See http://code.google.com/p/chromium/issues/detail?id=59400 1122 // See http://code.google.com/p/chromium/issues/detail?id=59400
1121 // To improve user experience we download entire file for non-linearized PDF. 1123 // To improve user experience we download entire file for non-linearized PDF.
1122 if (!FPDFAvail_IsLinearized(fpdf_availability_)) { 1124 if (!FPDFAvail_IsLinearized(fpdf_availability_)) {
1123 doc_loader_.RequestData(0, doc_loader_.document_size()); 1125 doc_loader_.RequestData(0, doc_loader_.document_size());
1124 return; 1126 return;
1125 } 1127 }
1126 1128
1127 LoadDocument(); 1129 LoadDocument();
(...skipping 22 matching lines...) Expand all
1150 } 1152 }
1151 1153
1152 void PDFiumEngine::OnNewDataAvailable() { 1154 void PDFiumEngine::OnNewDataAvailable() {
1153 client_->DocumentLoadProgress(doc_loader_.GetAvailableData(), 1155 client_->DocumentLoadProgress(doc_loader_.GetAvailableData(),
1154 doc_loader_.document_size()); 1156 doc_loader_.document_size());
1155 } 1157 }
1156 1158
1157 void PDFiumEngine::OnDocumentComplete() { 1159 void PDFiumEngine::OnDocumentComplete() {
1158 if (!doc_ || !form_) { 1160 if (!doc_ || !form_) {
1159 file_access_.m_FileLen = doc_loader_.document_size(); 1161 file_access_.m_FileLen = doc_loader_.document_size();
1162 if (!fpdf_availability_) {
1163 fpdf_availability_ = FPDFAvail_Create(&file_availability_, &file_access_);
1164 DCHECK(fpdf_availability_);
1165 }
1160 LoadDocument(); 1166 LoadDocument();
1161 return; 1167 return;
1162 } 1168 }
1163 1169
1164 FinishLoadingDocument(); 1170 FinishLoadingDocument();
1165 } 1171 }
1166 1172
1167 void PDFiumEngine::FinishLoadingDocument() { 1173 void PDFiumEngine::FinishLoadingDocument() {
1168 DCHECK(doc_loader_.IsDocumentComplete() && doc_); 1174 DCHECK(doc_loader_.IsDocumentComplete() && doc_);
1169 1175
(...skipping 1324 matching lines...) Expand 10 before | Expand all | Expand 10 after
2494 bool* needs_password) { 2500 bool* needs_password) {
2495 *needs_password = false; 2501 *needs_password = false;
2496 if (doc_) 2502 if (doc_)
2497 return true; 2503 return true;
2498 2504
2499 const char* password_cstr = nullptr; 2505 const char* password_cstr = nullptr;
2500 if (with_password) { 2506 if (with_password) {
2501 password_cstr = password.c_str(); 2507 password_cstr = password.c_str();
2502 password_tries_remaining_--; 2508 password_tries_remaining_--;
2503 } 2509 }
2504 if (doc_loader_.IsDocumentComplete()) 2510 if (doc_loader_.IsDocumentComplete() &&
2511 !FPDFAvail_IsLinearized(fpdf_availability_)) {
2505 doc_ = FPDF_LoadCustomDocument(&file_access_, password_cstr); 2512 doc_ = FPDF_LoadCustomDocument(&file_access_, password_cstr);
2506 else 2513 } else {
2507 doc_ = FPDFAvail_GetDocument(fpdf_availability_, password_cstr); 2514 doc_ = FPDFAvail_GetDocument(fpdf_availability_, password_cstr);
2515 }
2508 2516
2509 if (!doc_ && FPDF_GetLastError() == FPDF_ERR_PASSWORD) 2517 if (!doc_ && FPDF_GetLastError() == FPDF_ERR_PASSWORD)
2510 *needs_password = true; 2518 *needs_password = true;
2511 2519
2512 return !!doc_; 2520 return !!doc_;
2513 } 2521 }
2514 2522
2515 void PDFiumEngine::GetPasswordAndLoad() { 2523 void PDFiumEngine::GetPasswordAndLoad() {
2516 getting_password_ = true; 2524 getting_password_ = true;
2517 DCHECK(!doc_ && FPDF_GetLastError() == FPDF_ERR_PASSWORD); 2525 DCHECK(!doc_ && FPDF_GetLastError() == FPDF_ERR_PASSWORD);
(...skipping 1426 matching lines...) Expand 10 before | Expand all | Expand 10 after
3944 double* height) { 3952 double* height) {
3945 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL); 3953 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL);
3946 if (!doc) 3954 if (!doc)
3947 return false; 3955 return false;
3948 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; 3956 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0;
3949 FPDF_CloseDocument(doc); 3957 FPDF_CloseDocument(doc);
3950 return success; 3958 return success;
3951 } 3959 }
3952 3960
3953 } // namespace chrome_pdf 3961 } // namespace chrome_pdf
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698