Chromium Code Reviews| Index: testing/embedder_test.cpp |
| diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp |
| index d4ce7eba5a511f2c1c0b499c1ebe1f97aef98343..6a80bf4df1464c4f9ecffa270cb85e2372c7894f 100644 |
| --- a/testing/embedder_test.cpp |
| +++ b/testing/embedder_test.cpp |
| @@ -59,6 +59,91 @@ EmbedderTest::EmbedderTest() |
| EmbedderTest::~EmbedderTest() {} |
| +// static |
| +bool EmbedderTest::LoadDocument(const char* data, |
| + size_t data_size, |
| + bool must_linearize, |
| + TestLoader* loader, |
| + EmbedderTest* embedder_test, |
| + LoadDocumentData* out_data) { |
| + out_data->file_access->m_FileLen = static_cast<unsigned long>(data_size); |
| + out_data->file_access->m_GetBlock = TestLoader::GetBlock; |
| + out_data->file_access->m_Param = loader; |
| + |
| + out_data->file_avail->version = 1; |
| + out_data->file_avail->IsDataAvail = Is_Data_Avail; |
| + |
| + out_data->hints->version = 1; |
| + out_data->hints->AddSegment = Add_Segment; |
| + |
| + *out_data->avail = |
| + FPDFAvail_Create(out_data->file_avail, out_data->file_access); |
| + |
| + if (FPDFAvail_IsLinearized(*out_data->avail) == PDF_LINEARIZED) { |
| + *out_data->document = FPDFAvail_GetDocument(*out_data->avail, nullptr); |
| + if (!*out_data->document) { |
| + return false; |
| + } |
| + int32_t nRet = PDF_DATA_NOTAVAIL; |
| + while (nRet == PDF_DATA_NOTAVAIL) { |
| + nRet = FPDFAvail_IsDocAvail(*out_data->avail, out_data->hints); |
| + } |
| + if (nRet == PDF_DATA_ERROR) { |
| + return false; |
| + } |
| + nRet = FPDFAvail_IsFormAvail(*out_data->avail, out_data->hints); |
| + if (nRet == PDF_FORM_ERROR || nRet == PDF_FORM_NOTAVAIL) { |
| + return false; |
| + } |
| + int page_count = FPDF_GetPageCount(*out_data->document); |
| + for (int i = 0; i < page_count; ++i) { |
| + nRet = PDF_DATA_NOTAVAIL; |
| + while (nRet == PDF_DATA_NOTAVAIL) { |
| + nRet = FPDFAvail_IsPageAvail(*out_data->avail, i, out_data->hints); |
|
Wei Li
2016/01/04 19:01:13
I know this is from the original code, but worth c
Lei Zhang
2016/01/07 02:50:58
Maybe. If you can create a test case that does tha
|
| + } |
| + if (nRet == PDF_DATA_ERROR) { |
| + return false; |
| + } |
| + } |
| + } else { |
| + if (must_linearize) { |
| + return false; |
| + } |
| + *out_data->document = |
| + FPDF_LoadCustomDocument(out_data->file_access, nullptr); |
| + if (!*out_data->document) { |
| + return false; |
| + } |
| + } |
| + |
| + (void)FPDF_GetDocPermissions(*out_data->document); |
| + |
| + if (embedder_test) { |
| + IPDF_JSPLATFORM* platform = static_cast<IPDF_JSPLATFORM*>(embedder_test); |
| + memset(platform, 0, sizeof(IPDF_JSPLATFORM)); |
| + platform->version = 2; |
| + platform->app_alert = AlertTrampoline; |
| + |
| + FPDF_FORMFILLINFO* formfillinfo = |
| + static_cast<FPDF_FORMFILLINFO*>(embedder_test); |
| + memset(formfillinfo, 0, sizeof(FPDF_FORMFILLINFO)); |
| + formfillinfo->version = 1; |
| + formfillinfo->FFI_SetTimer = SetTimerTrampoline; |
| + formfillinfo->FFI_KillTimer = KillTimerTrampoline; |
| + formfillinfo->FFI_GetPage = GetPageTrampoline; |
| + formfillinfo->m_pJsPlatform = platform; |
| + |
| + *out_data->form_handle = |
| + FPDFDOC_InitFormFillEnvironment(*out_data->document, formfillinfo); |
| + FPDF_SetFormFieldHighlightColor(*out_data->form_handle, 0, 0xFFE4DD); |
| + FPDF_SetFormFieldHighlightAlpha(*out_data->form_handle, 100); |
| + } else { |
| + *out_data->form_handle = nullptr; |
| + } |
| + |
| + return true; |
| +} |
| + |
| void EmbedderTest::SetUp() { |
| FPDF_LIBRARY_CONFIG config; |
| config.version = 2; |
| @@ -102,74 +187,15 @@ bool EmbedderTest::OpenDocument(const std::string& filename, |
| return false; |
| loader_ = new TestLoader(file_contents_, file_length_); |
| - file_access_.m_FileLen = static_cast<unsigned long>(file_length_); |
| - file_access_.m_GetBlock = TestLoader::GetBlock; |
| - file_access_.m_Param = loader_; |
| - |
| - file_avail_.version = 1; |
| - file_avail_.IsDataAvail = Is_Data_Avail; |
| - |
| - hints_.version = 1; |
| - hints_.AddSegment = Add_Segment; |
| - |
| - avail_ = FPDFAvail_Create(&file_avail_, &file_access_); |
| - |
| - if (FPDFAvail_IsLinearized(avail_) == PDF_LINEARIZED) { |
| - document_ = FPDFAvail_GetDocument(avail_, nullptr); |
| - 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_); |
| - |
| - IPDF_JSPLATFORM* platform = static_cast<IPDF_JSPLATFORM*>(this); |
| - memset(platform, 0, sizeof(IPDF_JSPLATFORM)); |
| - platform->version = 2; |
| - platform->app_alert = AlertTrampoline; |
| - |
| - FPDF_FORMFILLINFO* formfillinfo = static_cast<FPDF_FORMFILLINFO*>(this); |
| - memset(formfillinfo, 0, sizeof(FPDF_FORMFILLINFO)); |
| - formfillinfo->version = 1; |
| - formfillinfo->FFI_SetTimer = SetTimerTrampoline; |
| - formfillinfo->FFI_KillTimer = KillTimerTrampoline; |
| - formfillinfo->FFI_GetPage = GetPageTrampoline; |
| - formfillinfo->m_pJsPlatform = platform; |
| - |
| - form_handle_ = FPDFDOC_InitFormFillEnvironment(document_, formfillinfo); |
| - FPDF_SetFormFieldHighlightColor(form_handle_, 0, 0xFFE4DD); |
| - FPDF_SetFormFieldHighlightAlpha(form_handle_, 100); |
| - |
| - return true; |
| + LoadDocumentData load_data; |
| + load_data.document = &document_; |
| + load_data.file_access = &file_access_; |
| + load_data.file_avail = &file_avail_; |
| + load_data.avail = &avail_; |
| + load_data.hints = &hints_; |
| + load_data.form_handle = &form_handle_; |
| + return LoadDocument(file_contents_, file_length_, must_linearize, loader_, |
| + this, &load_data); |
| } |
| void EmbedderTest::DoOpenActions() { |