diff options
author | Jun Fang <jun_fang@foxitsoftware.com> | 2015-11-02 13:45:35 +0800 |
---|---|---|
committer | Jun Fang <jun_fang@foxitsoftware.com> | 2015-11-02 13:45:35 +0800 |
commit | d946f3011984755b14d7dcfb05d572e870f93f3f (patch) | |
tree | 86fd77c65b920bf3e606c9048761a8e73ec0c6a2 /testing/embedder_test.cpp | |
parent | c88c42f317c0e94c4c7b98949bfe1a495aef07a9 (diff) | |
download | pdfium-d946f3011984755b14d7dcfb05d572e870f93f3f.tar.xz |
Support linearized loading
BUG=446715
R=tsepez@chromium.org
Review URL: https://codereview.chromium.org/1353093003 .
Diffstat (limited to 'testing/embedder_test.cpp')
-rw-r--r-- | testing/embedder_test.cpp | 46 |
1 files changed, 37 insertions, 9 deletions
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp index b474955566..6151d73afd 100644 --- a/testing/embedder_test.cpp +++ b/testing/embedder_test.cpp @@ -11,6 +11,7 @@ #include <utility> #include <vector> +#include "../public/fpdf_dataavail.h" #include "../public/fpdf_text.h" #include "../public/fpdfview.h" #include "test_support.h" @@ -91,7 +92,8 @@ void EmbedderTest::TearDown() { free(file_contents_); } -bool EmbedderTest::OpenDocument(const std::string& filename) { +bool EmbedderTest::OpenDocument(const std::string& filename, + bool must_linearize) { file_contents_ = GetFileContents(filename.c_str(), &file_length_); if (!file_contents_) return false; @@ -108,18 +110,44 @@ bool EmbedderTest::OpenDocument(const std::string& filename) { hints_.AddSegment = Add_Segment; avail_ = FPDFAvail_Create(&file_avail_, &file_access_); - (void)FPDFAvail_IsDocAvail(avail_, &hints_); - if (!FPDFAvail_IsLinearized(avail_)) - document_ = FPDF_LoadCustomDocument(&file_access_, nullptr); - else + if (FPDFAvail_IsLinearized(avail_) == PDF_LINEARIZED) { document_ = FPDFAvail_GetDocument(avail_, nullptr); - - if (!document_) - return false; + if (!document_) { + return false; + } + int32_t nRet = PDF_DATA_NOTAVAIL; + while (nRet == PDF_DATA_NOTAVAIL) { + nRet = FPDFAvail_IsDocAvail(avail_, &hints_); + } + if (nRet == PDF_DATA_ERROR) { + return false; + } + nRet = FPDFAvail_IsFormAvail(avail_, &hints_); + if (nRet == PDF_FORM_ERROR || nRet == PDF_FORM_NOTAVAIL) { + return false; + } + int page_count = FPDF_GetPageCount(document_); + for (int i = 0; i < page_count; ++i) { + nRet = PDF_DATA_NOTAVAIL; + while (nRet == PDF_DATA_NOTAVAIL) { + nRet = FPDFAvail_IsPageAvail(avail_, i, &hints_); + } + if (nRet == PDF_DATA_ERROR) { + return false; + } + } + } else { + if (must_linearize) { + return false; + } + document_ = FPDF_LoadCustomDocument(&file_access_, nullptr); + if (!document_) { + return false; + } + } (void)FPDF_GetDocPermissions(document_); - (void)FPDFAvail_IsFormAvail(avail_, &hints_); IPDF_JSPLATFORM* platform = static_cast<IPDF_JSPLATFORM*>(this); memset(platform, 0, sizeof(IPDF_JSPLATFORM)); |