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

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

Issue 705823002: Add pdf layer code for PDFium XFA module (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Naming, comment Created 6 years, 1 month 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 | « pdf/pdfium/pdfium_engine.h ('k') | 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 8
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 file_availability_.loader = &doc_loader_; 590 file_availability_.loader = &doc_loader_;
591 591
592 download_hints_.version = 1; 592 download_hints_.version = 1;
593 download_hints_.AddSegment = &AddSegment; 593 download_hints_.AddSegment = &AddSegment;
594 download_hints_.loader = &doc_loader_; 594 download_hints_.loader = &doc_loader_;
595 595
596 // Initialize FPDF_FORMFILLINFO member variables. Deriving from this struct 596 // Initialize FPDF_FORMFILLINFO member variables. Deriving from this struct
597 // allows the static callbacks to be able to cast the FPDF_FORMFILLINFO in 597 // allows the static callbacks to be able to cast the FPDF_FORMFILLINFO in
598 // callbacks to ourself instead of maintaining a map of them to 598 // callbacks to ourself instead of maintaining a map of them to
599 // PDFiumEngine. 599 // PDFiumEngine.
600 FPDF_FORMFILLINFO::version = 1; 600 FPDF_FORMFILLINFO::version = 1;
Tom Sepez 2014/11/06 17:45:45 New fields are added to this structure, but the ve
Bo Xu 2014/11/06 18:52:05 Since we are branching out xfa, the version in xfa
601 FPDF_FORMFILLINFO::m_pJsPlatform = this; 601 FPDF_FORMFILLINFO::m_pJsPlatform = this;
Tom Sepez 2014/11/06 18:10:05 Note that in going from the pre-xfa version of str
Bo Xu 2014/11/06 18:52:05 If I understand correctly, I should move IPDF_JSP
602 FPDF_FORMFILLINFO::Release = NULL; 602 FPDF_FORMFILLINFO::Release = NULL;
603 FPDF_FORMFILLINFO::FFI_Invalidate = Form_Invalidate; 603 FPDF_FORMFILLINFO::FFI_Invalidate = Form_Invalidate;
604 FPDF_FORMFILLINFO::FFI_OutputSelectedRect = Form_OutputSelectedRect; 604 FPDF_FORMFILLINFO::FFI_OutputSelectedRect = Form_OutputSelectedRect;
605 FPDF_FORMFILLINFO::FFI_SetCursor = Form_SetCursor; 605 FPDF_FORMFILLINFO::FFI_SetCursor = Form_SetCursor;
606 FPDF_FORMFILLINFO::FFI_SetTimer = Form_SetTimer; 606 FPDF_FORMFILLINFO::FFI_SetTimer = Form_SetTimer;
607 FPDF_FORMFILLINFO::FFI_KillTimer = Form_KillTimer; 607 FPDF_FORMFILLINFO::FFI_KillTimer = Form_KillTimer;
608 FPDF_FORMFILLINFO::FFI_GetLocalTime = Form_GetLocalTime; 608 FPDF_FORMFILLINFO::FFI_GetLocalTime = Form_GetLocalTime;
609 FPDF_FORMFILLINFO::FFI_OnChange = Form_OnChange; 609 FPDF_FORMFILLINFO::FFI_OnChange = Form_OnChange;
610 FPDF_FORMFILLINFO::FFI_GetPage = Form_GetPage; 610 FPDF_FORMFILLINFO::FFI_GetPage = Form_GetPage;
611 FPDF_FORMFILLINFO::FFI_GetCurrentPage = Form_GetCurrentPage; 611 FPDF_FORMFILLINFO::FFI_GetCurrentPage = Form_GetCurrentPage;
612 FPDF_FORMFILLINFO::FFI_GetRotation = Form_GetRotation; 612 FPDF_FORMFILLINFO::FFI_GetRotation = Form_GetRotation;
613 FPDF_FORMFILLINFO::FFI_ExecuteNamedAction = Form_ExecuteNamedAction; 613 FPDF_FORMFILLINFO::FFI_ExecuteNamedAction = Form_ExecuteNamedAction;
614 FPDF_FORMFILLINFO::FFI_SetTextFieldFocus = Form_SetTextFieldFocus; 614 FPDF_FORMFILLINFO::FFI_SetTextFieldFocus = Form_SetTextFieldFocus;
615 FPDF_FORMFILLINFO::FFI_DoURIAction = Form_DoURIAction; 615 FPDF_FORMFILLINFO::FFI_DoURIAction = Form_DoURIAction;
616 FPDF_FORMFILLINFO::FFI_DoGoToAction = Form_DoGoToAction; 616 FPDF_FORMFILLINFO::FFI_DoGoToAction = Form_DoGoToAction;
617 617 #ifdef PDF_USE_XFA
618 FPDF_FORMFILLINFO::FFI_EmailTo = Form_EmailTo;
619 FPDF_FORMFILLINFO::FFI_DisplayCaret = Form_DisplayCaret;
620 FPDF_FORMFILLINFO::FFI_SetCurrentPage = Form_SetCurrentPage;
621 FPDF_FORMFILLINFO::FFI_GetCurrentPageIndex = Form_GetCurrentPageIndex;
622 FPDF_FORMFILLINFO::FFI_GetPageViewRect = Form_GetPageViewRect;
623 FPDF_FORMFILLINFO::FFI_GetPlatform = Form_GetPlatform;
624 FPDF_FORMFILLINFO::FFI_PopupMenu = Form_PopupMenu;
625 FPDF_FORMFILLINFO::FFI_PostRequestURL = Form_PostRequestURL;
626 FPDF_FORMFILLINFO::FFI_PutRequestURL = Form_PutRequestURL;
627 FPDF_FORMFILLINFO::FFI_UploadTo = Form_UploadTo;
628 FPDF_FORMFILLINFO::FFI_DownloadFromURL = Form_DownloadFromURL;
629 FPDF_FORMFILLINFO::FFI_OpenFile = Form_OpenFile;
630 FPDF_FORMFILLINFO::FFI_GotoURL = Form_GotoURL;
631 FPDF_FORMFILLINFO::FFI_GetLanguage = Form_GetLanguage;
632 #endif // PDF_USE_XFA
618 IPDF_JSPLATFORM::version = 1; 633 IPDF_JSPLATFORM::version = 1;
619 IPDF_JSPLATFORM::app_alert = Form_Alert; 634 IPDF_JSPLATFORM::app_alert = Form_Alert;
620 IPDF_JSPLATFORM::app_beep = Form_Beep; 635 IPDF_JSPLATFORM::app_beep = Form_Beep;
621 IPDF_JSPLATFORM::app_response = Form_Response; 636 IPDF_JSPLATFORM::app_response = Form_Response;
622 IPDF_JSPLATFORM::Doc_getFilePath = Form_GetFilePath; 637 IPDF_JSPLATFORM::Doc_getFilePath = Form_GetFilePath;
623 IPDF_JSPLATFORM::Doc_mail = Form_Mail; 638 IPDF_JSPLATFORM::Doc_mail = Form_Mail;
624 IPDF_JSPLATFORM::Doc_print = Form_Print; 639 IPDF_JSPLATFORM::Doc_print = Form_Print;
625 IPDF_JSPLATFORM::Doc_submitForm = Form_SubmitForm; 640 IPDF_JSPLATFORM::Doc_submitForm = Form_SubmitForm;
626 IPDF_JSPLATFORM::Doc_gotoPage = Form_GotoPage; 641 IPDF_JSPLATFORM::Doc_gotoPage = Form_GotoPage;
627 IPDF_JSPLATFORM::Field_browse = Form_Browse; 642 IPDF_JSPLATFORM::Field_browse = Form_Browse;
628 643
629 IFSDK_PAUSE::version = 1; 644 IFSDK_PAUSE::version = 1;
630 IFSDK_PAUSE::user = NULL; 645 IFSDK_PAUSE::user = NULL;
631 IFSDK_PAUSE::NeedToPauseNow = Pause_NeedToPauseNow; 646 IFSDK_PAUSE::NeedToPauseNow = Pause_NeedToPauseNow;
632 } 647 }
633 648
634 PDFiumEngine::~PDFiumEngine() { 649 PDFiumEngine::~PDFiumEngine() {
635 for (size_t i = 0; i < pages_.size(); ++i) 650 for (size_t i = 0; i < pages_.size(); ++i)
636 pages_[i]->Unload(); 651 pages_[i]->Unload();
637 652
638 if (doc_) { 653 if (doc_) {
639 if (form_) { 654 if (form_) {
640 FORM_DoDocumentAAction(form_, FPDFDOC_AACTION_WC); 655 FORM_DoDocumentAAction(form_, FPDFDOC_AACTION_WC);
656 }
657 FPDF_CloseDocument(doc_);
658 if (form_) {
641 FPDFDOC_ExitFormFillEnviroument(form_); 659 FPDFDOC_ExitFormFillEnviroument(form_);
642 } 660 }
643 FPDF_CloseDocument(doc_);
644 } 661 }
645 662
646 if (fpdf_availability_) 663 if (fpdf_availability_)
647 FPDFAvail_Destroy(fpdf_availability_); 664 FPDFAvail_Destroy(fpdf_availability_);
648 665
649 STLDeleteElements(&pages_); 666 STLDeleteElements(&pages_);
650 } 667 }
651 668
669 #ifdef PDF_USE_XFA
670
671 // This is just for testing, needs to be removed later
672 #if defined(WIN32)
673 #define XFA_TESTFILE(filename) "E:/"#filename
674 #else
675 #define XFA_TESTFILE(filename) "/home/"#filename
676 #endif
677
678 struct FPDF_FILE {
679 FPDF_FILEHANDLER fileHandler;
Lei Zhang 2014/11/06 19:15:29 nit: file_handler
680 FILE* file;
681 };
682
683 void Sample_Release(FPDF_LPVOID cilent_data) {
Lei Zhang 2014/11/06 19:15:30 cilent -> client
684 if (!cilent_data)
685 return;
686 FPDF_FILE* file_wrapper = (FPDF_FILE*)cilent_data;
687 fclose(file_wrapper->file);
688 delete file_wrapper;
689 }
690
691 FPDF_DWORD Sample_GetSize(FPDF_LPVOID cilent_data) {
692 if (!cilent_data)
693 return 0;
694 FPDF_FILE* file_wrapper = (FPDF_FILE*)cilent_data;
695 long cur_pos = ftell(file_wrapper->file);
Lei Zhang 2014/11/06 19:15:30 ftell() and fseek() can fail and return -1
696 fseek(file_wrapper->file, 0, SEEK_END);
697 long size = ftell(file_wrapper->file);
698 fseek(file_wrapper->file, cur_pos, SEEK_SET);
699 return (FPDF_DWORD)size;
700 }
701
702 FPDF_RESULT Sample_ReadBlock(FPDF_LPVOID cilent_data,
703 FPDF_DWORD offset,
704 FPDF_LPVOID buffer,
705 FPDF_DWORD size) {
706 if (!cilent_data)
707 return -1;
708 FPDF_FILE* file_wrapper = (FPDF_FILE*)cilent_data;
709 fseek(file_wrapper->file, (long)offset, SEEK_SET);
710 size_t read_size = fread(buffer, 1, size, file_wrapper->file);
711 return read_size == size ? 0 : -1;
712 }
713
714 FPDF_RESULT Sample_WriteBlock(FPDF_LPVOID cilent_data,
715 FPDF_DWORD offset,
716 FPDF_LPCVOID buffer,
717 FPDF_DWORD size) {
718 if (!cilent_data)
719 return -1;
720 FPDF_FILE* file_wrapper = (FPDF_FILE*)cilent_data;
721 fseek(file_wrapper->file, (long)offset, SEEK_SET);
722 // Write data
723 size_t write_size = fwrite(buffer, 1, size, file_wrapper->file);
724 return write_size == size ? 0 : -1;
725 }
726
727 FPDF_RESULT Sample_Flush(FPDF_LPVOID cilent_data) {
728 if (!cilent_data)
729 return -1;
730 // Flush file
731 fflush(((FPDF_FILE*)cilent_data)->file);
732 return 0;
733 }
734
735 FPDF_RESULT Sample_Truncate(FPDF_LPVOID cilent_data, FPDF_DWORD size) {
736 return 0;
737 }
738
739 void PDFiumEngine::Form_EmailTo(FPDF_FORMFILLINFO* param,
740 FPDF_FILEHANDLER* file_handler,
741 FPDF_WIDESTRING to,
742 FPDF_WIDESTRING subject,
743 FPDF_WIDESTRING cc,
744 FPDF_WIDESTRING bcc,
745 FPDF_WIDESTRING message) {
746 std::string to_str =
747 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(to));
748 std::string subject_str =
749 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(subject));
750 std::string cc_str =
751 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(cc));
752 std::string bcc_str =
753 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(bcc));
754 std::string message_str =
755 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(message));
756
757 PDFiumEngine* engine = static_cast<PDFiumEngine*>(param);
758 engine->client_->Email(to_str, cc_str, bcc_str, subject_str, message_str);
759 }
760
761 void PDFiumEngine::Form_DisplayCaret(FPDF_FORMFILLINFO* param,
762 FPDF_PAGE page,
763 FPDF_BOOL visible,
764 double left,
765 double top,
766 double right,
767 double bottom) {
768 PDFiumEngine* engine = static_cast<PDFiumEngine*>(param);
769 engine->client_->UpdateCursor(PP_CURSORTYPE_IBEAM);
770 std::vector<pp::Rect> tickmarks;
771 pp::Rect rect(left, top, right, bottom);
772 tickmarks.push_back(rect);
773 engine->client_->UpdateTickMarks(tickmarks);
774 }
775
776 void PDFiumEngine::Form_SetCurrentPage(FPDF_FORMFILLINFO* param,
777 FPDF_DOCUMENT document,
778 int page) {
779 PDFiumEngine* engine = static_cast<PDFiumEngine*>(param);
780 pp::Rect page_view_rect = engine->GetPageContentsRect(page);
781 engine->ScrolledToYPosition(page_view_rect.height());
782 pp::Point pos(1, page_view_rect.height());
783 engine->SetScrollPosition(pos);
784 }
785
786 int PDFiumEngine::Form_GetCurrentPageIndex(FPDF_FORMFILLINFO* param,
787 FPDF_DOCUMENT document) {
788 int page_index = -1;
Lei Zhang 2014/11/06 19:15:29 you don't need this variable, just return the GetM
789 PDFiumEngine* engine = static_cast<PDFiumEngine*>(param);
790 page_index = engine->GetMostVisiblePage();
791 return page_index;
792 }
793
794 void PDFiumEngine::Form_GetPageViewRect(FPDF_FORMFILLINFO* param,
795 FPDF_PAGE page,
796 double* left,
797 double* top,
798 double* right,
799 double* bottom) {
800 PDFiumEngine* engine = static_cast<PDFiumEngine*>(param);
801 int page_index = engine->GetMostVisiblePage();
802 pp::Rect page_view_rect = engine->GetPageContentsRect(page_index);
803
804 *left = page_view_rect.x();
805 *right = page_view_rect.width() + page_view_rect.x();
Lei Zhang 2014/11/06 19:15:29 pp::Rect has right() and bottom() methods, but no
806 *top = page_view_rect.y();
807 *bottom = page_view_rect.height();
808
809 std::string javascript = "alert(\"PageViewRect:"
Lei Zhang 2014/11/06 19:15:29 another unused variable, more below
810 + base::DoubleToString(*left) + ","
811 + base::DoubleToString(*right) + ","
812 + base::DoubleToString(*top) + ","
813 + base::DoubleToString(*bottom) + ","
814 + "\")";
815 }
816
817 int PDFiumEngine::Form_GetPlatform(FPDF_FORMFILLINFO* param,
818 void* platform,
819 int length) {
820 int platform_flag = -1;
821
822 #if defined(WIN32)
823 platform_flag = 0;
824 #elif defined(__linux__)
825 platform_flag = 1;
826 #else
827 platform_flag = 2;
828 #endif
829
830 std::string javascript = "alert(\"Platform:"
831 + base::DoubleToString(platform_flag)
832 + "\")";
833
834 return 3;
Lei Zhang 2014/11/06 19:15:30 why doesn't this return |platform_flag| ?
835 }
836
837 FPDF_BOOL PDFiumEngine::Form_PopupMenu(FPDF_FORMFILLINFO* param,
838 FPDF_PAGE page,
839 FPDF_WIDGET widget,
840 int menu_flag,
841 float x,
842 float y) {
843 return false;
844 }
845
846 FPDF_BOOL PDFiumEngine::Form_PostRequestURL(FPDF_FORMFILLINFO* param,
847 FPDF_WIDESTRING url,
848 FPDF_WIDESTRING data,
849 FPDF_WIDESTRING content_type,
850 FPDF_WIDESTRING encode,
851 FPDF_WIDESTRING header,
852 FPDF_BSTR* response) {
853 std::string url_str =
854 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(url));
855 std::string data_str =
856 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(data));
857 std::string content_type_str =
858 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(content_type));
859 std::string encode_str =
860 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(encode));
861 std::string header_str =
862 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(header));
863
864 std::string javascript = "alert(\"Post:"
865 + url_str + "," + data_str + "," + content_type_str + ","
866 + encode_str + "," + header_str
867 + "\")";
868 return true;
869 }
870
871 FPDF_BOOL PDFiumEngine::Form_PutRequestURL(FPDF_FORMFILLINFO* param,
872 FPDF_WIDESTRING url,
873 FPDF_WIDESTRING data,
874 FPDF_WIDESTRING encode) {
875 std::string url_str =
876 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(url));
877 std::string data_str =
878 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(data));
879 std::string encode_str =
880 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(encode));
881
882 std::string javascript = "alert(\"Put:"
883 + url_str + "," + data_str + "," + encode_str
884 + "\")";
885
886 return true;
887 }
888
889 void PDFiumEngine::Form_UploadTo(FPDF_FORMFILLINFO* param,
890 FPDF_FILEHANDLER* file_handle,
891 int file_flag,
892 FPDF_WIDESTRING dest) {
893 std::string to_str =
894 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(dest));
895 // TODO: needs the full implementation of form uploading
896 }
897
898 FPDF_LPFILEHANDLER PDFiumEngine::Form_DownloadFromURL(FPDF_FORMFILLINFO* param,
899 FPDF_WIDESTRING url) {
900 std::string url_str =
901 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(url));
902
903 // Now should get data from url.
904 // For testing purpose, use data read from file
905 // TODO: needs the full implementation here
906 FILE* file = fopen(XFA_TESTFILE("downloadtest.tem"), "w");
907
908 FPDF_FILE* file_wrapper = new FPDF_FILE;
909 file_wrapper->file = file;
910 file_wrapper->fileHandler.clientData = file_wrapper;
911 file_wrapper->fileHandler.Flush = Sample_Flush;
912 file_wrapper->fileHandler.GetSize = Sample_GetSize;
913 file_wrapper->fileHandler.ReadBlock = Sample_ReadBlock;
914 file_wrapper->fileHandler.Release = Sample_Release;
915 file_wrapper->fileHandler.Truncate = Sample_Truncate;
916 file_wrapper->fileHandler.WriteBlock = Sample_WriteBlock;
917
918 return &file_wrapper->fileHandler;
919 }
920
921 FPDF_FILEHANDLER* PDFiumEngine::Form_OpenFile(FPDF_FORMFILLINFO* param,
922 int file_flag,
923 FPDF_WIDESTRING url,
924 const char* mode) {
925 std::string url_str = "NULL";
926 if (url != NULL) {
927 url_str =
928 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(url));
929 }
930 if (strncmp(mode, "wb", 2) == 0) {
931 FILE* file = fopen(XFA_TESTFILE("tem.txt"), mode);
932 FPDF_FILE* file_wrapper = new FPDF_FILE;
933 file_wrapper->file = file;
934 file_wrapper->fileHandler.clientData = file_wrapper;
935 file_wrapper->fileHandler.Flush = Sample_Flush;
936 file_wrapper->fileHandler.GetSize = Sample_GetSize;
937 file_wrapper->fileHandler.ReadBlock = Sample_ReadBlock;
938 file_wrapper->fileHandler.Release = Sample_Release;
939 file_wrapper->fileHandler.Truncate = Sample_Truncate;
940 file_wrapper->fileHandler.WriteBlock = Sample_WriteBlock;
941 return &file_wrapper->fileHandler;
942 } else {
Lei Zhang 2014/11/06 19:15:30 you don't need the else block since you always ret
943 url_str = base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(url));
944 }
945 return NULL;
946 }
947
948 void PDFiumEngine::Form_GotoURL(FPDF_FORMFILLINFO* param,
949 FPDF_DOCUMENT document,
950 FPDF_WIDESTRING url) {
951 std::string url_str =
952 base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(url));
953 // TODO: needs to implement GOTO URL action
954 }
955
956 int PDFiumEngine::Form_GetLanguage(FPDF_FORMFILLINFO* param,
957 void* language,
958 int length) {
959 return 0;
960 }
961
962 #endif // PDF_USE_XFA
963
652 int PDFiumEngine::GetBlock(void* param, unsigned long position, 964 int PDFiumEngine::GetBlock(void* param, unsigned long position,
653 unsigned char* buffer, unsigned long size) { 965 unsigned char* buffer, unsigned long size) {
654 DocumentLoader* loader = static_cast<DocumentLoader*>(param); 966 DocumentLoader* loader = static_cast<DocumentLoader*>(param);
655 return loader->GetBlock(position, size, buffer); 967 return loader->GetBlock(position, size, buffer);
656 } 968 }
657 969
658 bool PDFiumEngine::IsDataAvail(FX_FILEAVAIL* param, 970 bool PDFiumEngine::IsDataAvail(FX_FILEAVAIL* param,
659 size_t offset, size_t size) { 971 size_t offset, size_t size) {
660 PDFiumEngine::FileAvail* file_avail = 972 PDFiumEngine::FileAvail* file_avail =
661 static_cast<PDFiumEngine::FileAvail*>(param); 973 static_cast<PDFiumEngine::FileAvail*>(param);
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
913 FORM_DoPageAAction(new_page, form_, FPDFPAGE_AACTION_OPEN); 1225 FORM_DoPageAAction(new_page, form_, FPDFPAGE_AACTION_OPEN);
914 } 1226 }
915 1227
916 if (doc_) // This can only happen if loading |doc_| fails. 1228 if (doc_) // This can only happen if loading |doc_| fails.
917 client_->DocumentLoadComplete(pages_.size()); 1229 client_->DocumentLoadComplete(pages_.size());
918 } 1230 }
919 1231
920 void PDFiumEngine::UnsupportedFeature(int type) { 1232 void PDFiumEngine::UnsupportedFeature(int type) {
921 std::string feature; 1233 std::string feature;
922 switch (type) { 1234 switch (type) {
1235 #ifndef PDF_USE_XFA
923 case FPDF_UNSP_DOC_XFAFORM: 1236 case FPDF_UNSP_DOC_XFAFORM:
924 feature = "XFA"; 1237 feature = "XFA";
925 break; 1238 break;
1239 #endif
926 case FPDF_UNSP_DOC_PORTABLECOLLECTION: 1240 case FPDF_UNSP_DOC_PORTABLECOLLECTION:
927 feature = "Portfolios_Packages"; 1241 feature = "Portfolios_Packages";
928 break; 1242 break;
929 case FPDF_UNSP_DOC_ATTACHMENT: 1243 case FPDF_UNSP_DOC_ATTACHMENT:
930 case FPDF_UNSP_ANNOT_ATTACHMENT: 1244 case FPDF_UNSP_ANNOT_ATTACHMENT:
931 feature = "Attachment"; 1245 feature = "Attachment";
932 break; 1246 break;
933 case FPDF_UNSP_DOC_SECURITY: 1247 case FPDF_UNSP_DOC_SECURITY:
934 feature = "Rights_Management"; 1248 feature = "Rights_Management";
935 break; 1249 break;
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after
1341 if (page_index != -1) { 1655 if (page_index != -1) {
1342 last_page_mouse_down_ = page_index; 1656 last_page_mouse_down_ = page_index;
1343 double page_x, page_y; 1657 double page_x, page_y;
1344 pp::Point point = event.GetPosition(); 1658 pp::Point point = event.GetPosition();
1345 DeviceToPage(page_index, point.x(), point.y(), &page_x, &page_y); 1659 DeviceToPage(page_index, point.x(), point.y(), &page_x, &page_y);
1346 1660
1347 FORM_OnLButtonDown(form_, pages_[page_index]->GetPage(), 0, page_x, page_y); 1661 FORM_OnLButtonDown(form_, pages_[page_index]->GetPage(), 0, page_x, page_y);
1348 int control = FPDPage_HasFormFieldAtPoint( 1662 int control = FPDPage_HasFormFieldAtPoint(
1349 form_, pages_[page_index]->GetPage(), page_x, page_y); 1663 form_, pages_[page_index]->GetPage(), page_x, page_y);
1350 if (control > FPDF_FORMFIELD_UNKNOWN) { // returns -1 sometimes... 1664 if (control > FPDF_FORMFIELD_UNKNOWN) { // returns -1 sometimes...
1351 client_->FormTextFieldFocusChange(control == FPDF_FORMFIELD_TEXTFIELD || 1665 #ifdef PDF_USE_XFA
1352 control == FPDF_FORMFIELD_COMBOBOX); 1666 client_->FormTextFieldFocusChange(control == FPDF_FORMFIELD_TEXTFIELD ||
1667 control == FPDF_FORMFIELD_COMBOBOX || control == FPDF_FORMFIELD_XFA);
Lei Zhang 2014/11/06 19:15:29 nit: 4 space indent on line continuations.
1668 #else
1669 client_->FormTextFieldFocusChange(control == FPDF_FORMFIELD_TEXTFIELD ||
1670 control == FPDF_FORMFIELD_COMBOBOX);
1671 #endif
1353 return true; // Return now before we get into the selection code. 1672 return true; // Return now before we get into the selection code.
1354 } 1673 }
1355 } 1674 }
1356 1675
1357 client_->FormTextFieldFocusChange(false); 1676 client_->FormTextFieldFocusChange(false);
1358 1677
1359 if (area != PDFiumPage::TEXT_AREA) 1678 if (area != PDFiumPage::TEXT_AREA)
1360 return true; // Return true so WebKit doesn't do its own highlighting. 1679 return true; // Return true so WebKit doesn't do its own highlighting.
1361 1680
1362 if (event.GetClickCount() == 1) { 1681 if (event.GetClickCount() == 1) {
(...skipping 864 matching lines...) Expand 10 before | Expand all | Expand 10 after
2227 if (!form_) { 2546 if (!form_) {
2228 // Only returns 0 when data isn't available. If form data is downloaded, or 2547 // Only returns 0 when data isn't available. If form data is downloaded, or
2229 // if this isn't a form, returns positive values. 2548 // if this isn't a form, returns positive values.
2230 if (!doc_loader_.IsDocumentComplete() && 2549 if (!doc_loader_.IsDocumentComplete() &&
2231 !FPDFAvail_IsFormAvail(fpdf_availability_, &download_hints_)) { 2550 !FPDFAvail_IsFormAvail(fpdf_availability_, &download_hints_)) {
2232 return; 2551 return;
2233 } 2552 }
2234 2553
2235 form_ = FPDFDOC_InitFormFillEnviroument( 2554 form_ = FPDFDOC_InitFormFillEnviroument(
2236 doc_, static_cast<FPDF_FORMFILLINFO*>(this)); 2555 doc_, static_cast<FPDF_FORMFILLINFO*>(this));
2556 #ifdef PDF_USE_XFA
2557 FPDF_LoadXFA(doc_);
2558 #endif
2559
2237 FPDF_SetFormFieldHighlightColor(form_, 0, kFormHighlightColor); 2560 FPDF_SetFormFieldHighlightColor(form_, 0, kFormHighlightColor);
2238 FPDF_SetFormFieldHighlightAlpha(form_, kFormHighlightAlpha); 2561 FPDF_SetFormFieldHighlightAlpha(form_, kFormHighlightAlpha);
2239 } 2562 }
2240 2563
2241 if (!doc_loader_.IsDocumentComplete()) { 2564 if (!doc_loader_.IsDocumentComplete()) {
2242 // Check if the first page is available. In a linearized PDF, that is not 2565 // Check if the first page is available. In a linearized PDF, that is not
2243 // always page 0. Doing this gives us the default page size, since when the 2566 // always page 0. Doing this gives us the default page size, since when the
2244 // document is available, the first page is available as well. 2567 // document is available, the first page is available as well.
2245 CheckPageAvailable(FPDFAvail_GetFirstPageNum(doc_), &pending_pages_); 2568 CheckPageAvailable(FPDFAvail_GetFirstPageNum(doc_), &pending_pages_);
2246 } 2569 }
(...skipping 1289 matching lines...) Expand 10 before | Expand all | Expand 10 after
3536 double* height) { 3859 double* height) {
3537 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL); 3860 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL);
3538 if (!doc) 3861 if (!doc)
3539 return false; 3862 return false;
3540 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; 3863 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0;
3541 FPDF_CloseDocument(doc); 3864 FPDF_CloseDocument(doc);
3542 return success; 3865 return success;
3543 } 3866 }
3544 3867
3545 } // namespace chrome_pdf 3868 } // namespace chrome_pdf
OLDNEW
« no previous file with comments | « pdf/pdfium/pdfium_engine.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698