| Index: pdf/pdfium/pdfium_engine.cc
|
| diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
|
| index 09d8a2f5ec1e64c196e87981fce53607ab6817ea..ac00af5c590d3827fb2493b4e615f44729fed331 100644
|
| --- a/pdf/pdfium/pdfium_engine.cc
|
| +++ b/pdf/pdfium/pdfium_engine.cc
|
| @@ -2522,17 +2522,27 @@ void PDFiumEngine::LoadPageInfo(bool reload) {
|
| std::vector<pp::Rect> page_rects;
|
| int page_count = FPDF_GetPageCount(doc_);
|
| bool doc_complete = doc_loader_.IsDocumentComplete();
|
| + bool is_linear = FPDFAvail_IsLinearized(fpdf_availability_) == PDF_LINEARIZED;
|
| for (int i = 0; i < page_count; ++i) {
|
| if (i != 0) {
|
| // Add space for horizontal separator.
|
| document_size_.Enlarge(0, kPageSeparatorThickness);
|
| }
|
|
|
| - // Get page availability. If reload==false, and document is not loaded yet
|
| - // (we are using async loading) - mark all pages as unavailable.
|
| - // If reload==true (we have document constructed already), get page
|
| - // availability flag from already existing PDFiumPage class.
|
| - bool page_available = reload ? pages_[i]->available() : doc_complete;
|
| + // Get page availability. If |reload| == true, then the document has been
|
| + // constructed already. Get page availability flag from already existing
|
| + // PDFiumPage class.
|
| + // If |reload| == false, then the document may not be fully loaded yet.
|
| + bool page_available;
|
| + if (reload) {
|
| + page_available = pages_[i]->available();
|
| + } else if (is_linear) {
|
| + int linear_page_avail =
|
| + FPDFAvail_IsPageAvail(fpdf_availability_, i, &download_hints_);
|
| + page_available = linear_page_avail == PDF_DATA_AVAIL;
|
| + } else {
|
| + page_available = doc_complete;
|
| + }
|
|
|
| pp::Size size = page_available ? GetPageSize(i) : default_page_size_;
|
| size.Enlarge(kPageShadowLeft + kPageShadowRight,
|
| @@ -2632,13 +2642,7 @@ bool PDFiumEngine::CheckPageAvailable(int index, std::vector<int>* pending) {
|
| return true;
|
|
|
| if (!FPDFAvail_IsPageAvail(fpdf_availability_, index, &download_hints_)) {
|
| - size_t j;
|
| - for (j = 0; j < pending->size(); ++j) {
|
| - if ((*pending)[j] == index)
|
| - break;
|
| - }
|
| -
|
| - if (j == pending->size())
|
| + if (!ContainsValue(*pending, index))
|
| pending->push_back(index);
|
| return false;
|
| }
|
|
|