1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2016 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef FPDFSDK_CPDFSDK_FORMFILLENVIRONMENT_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define FPDFSDK_CPDFSDK_FORMFILLENVIRONMENT_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <stdint.h> 11*3ac0a46fSAndroid Build Coastguard Worker 12*3ac0a46fSAndroid Build Coastguard Worker #include <map> 13*3ac0a46fSAndroid Build Coastguard Worker #include <memory> 14*3ac0a46fSAndroid Build Coastguard Worker #include <set> 15*3ac0a46fSAndroid Build Coastguard Worker #include <utility> 16*3ac0a46fSAndroid Build Coastguard Worker #include <vector> 17*3ac0a46fSAndroid Build Coastguard Worker 18*3ac0a46fSAndroid Build Coastguard Worker #include "core/fpdfapi/page/cpdf_occontext.h" 19*3ac0a46fSAndroid Build Coastguard Worker #include "core/fpdfapi/parser/cpdf_document.h" 20*3ac0a46fSAndroid Build Coastguard Worker #include "core/fpdfdoc/cpdf_aaction.h" 21*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/cfx_timer.h" 22*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/mask.h" 23*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/observed_ptr.h" 24*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/retain_ptr.h" 25*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr.h" 26*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/cpdfsdk_annot.h" 27*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/formfiller/cffl_interactiveformfiller.h" 28*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/pwl/cpwl_wnd.h" 29*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/pwl/ipwl_fillernotify.h" 30*3ac0a46fSAndroid Build Coastguard Worker #include "public/fpdf_formfill.h" 31*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/containers/span.h" 32*3ac0a46fSAndroid Build Coastguard Worker 33*3ac0a46fSAndroid Build Coastguard Worker class CPDF_Action; 34*3ac0a46fSAndroid Build Coastguard Worker class CPDF_FormField; 35*3ac0a46fSAndroid Build Coastguard Worker class CPDFSDK_InteractiveForm; 36*3ac0a46fSAndroid Build Coastguard Worker class CPDFSDK_PageView; 37*3ac0a46fSAndroid Build Coastguard Worker class IJS_EventContext; 38*3ac0a46fSAndroid Build Coastguard Worker class IJS_Runtime; 39*3ac0a46fSAndroid Build Coastguard Worker class IPDF_Page; 40*3ac0a46fSAndroid Build Coastguard Worker struct CFFL_FieldAction; 41*3ac0a46fSAndroid Build Coastguard Worker 42*3ac0a46fSAndroid Build Coastguard Worker // NOTE: |bsUTF16LE| must outlive the use of the result. Care must be taken 43*3ac0a46fSAndroid Build Coastguard Worker // since modifying the result would impact |bsUTF16LE|. 44*3ac0a46fSAndroid Build Coastguard Worker FPDF_WIDESTRING AsFPDFWideString(ByteString* bsUTF16LE); 45*3ac0a46fSAndroid Build Coastguard Worker 46*3ac0a46fSAndroid Build Coastguard Worker // The CPDFSDK_FormFillEnvironment is "owned" by the embedder across the 47*3ac0a46fSAndroid Build Coastguard Worker // C API as a FPDF_FormHandle, and may pop out of existence at any time, 48*3ac0a46fSAndroid Build Coastguard Worker // so long as the associated embedder-owned FPDF_Document outlives it. 49*3ac0a46fSAndroid Build Coastguard Worker // Pointers from objects in the FPDF_Document ownership hierarchy should 50*3ac0a46fSAndroid Build Coastguard Worker // be ObservedPtr<> so as to clear themselves when the embedder "exits" 51*3ac0a46fSAndroid Build Coastguard Worker // the form fill environment. Pointers from objects in this ownership 52*3ac0a46fSAndroid Build Coastguard Worker // heirarcy to objects in the FPDF_Document ownership hierarcy should be 53*3ac0a46fSAndroid Build Coastguard Worker // UnownedPtr<>, as should pointers from objects in this ownership 54*3ac0a46fSAndroid Build Coastguard Worker // hierarcy back to the form fill environment itself, so as to flag any 55*3ac0a46fSAndroid Build Coastguard Worker // lingering lifetime issues via the memory tools. 56*3ac0a46fSAndroid Build Coastguard Worker 57*3ac0a46fSAndroid Build Coastguard Worker class CPDFSDK_FormFillEnvironment final 58*3ac0a46fSAndroid Build Coastguard Worker : public CFX_Timer::HandlerIface, 59*3ac0a46fSAndroid Build Coastguard Worker public CFFL_InteractiveFormFiller::CallbackIface { 60*3ac0a46fSAndroid Build Coastguard Worker public: 61*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_FormFillEnvironment(CPDF_Document* pDoc, FPDF_FORMFILLINFO* pFFinfo); 62*3ac0a46fSAndroid Build Coastguard Worker 63*3ac0a46fSAndroid Build Coastguard Worker ~CPDFSDK_FormFillEnvironment() override; 64*3ac0a46fSAndroid Build Coastguard Worker 65*3ac0a46fSAndroid Build Coastguard Worker // TimerHandlerIface: 66*3ac0a46fSAndroid Build Coastguard Worker int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc) override; 67*3ac0a46fSAndroid Build Coastguard Worker void KillTimer(int32_t nTimerID) override; 68*3ac0a46fSAndroid Build Coastguard Worker 69*3ac0a46fSAndroid Build Coastguard Worker // CFFL_InteractiveFormFiller::CallbackIface: 70*3ac0a46fSAndroid Build Coastguard Worker void InvalidateRect(CPDFSDK_Widget* widget, 71*3ac0a46fSAndroid Build Coastguard Worker const CFX_FloatRect& rect) override; 72*3ac0a46fSAndroid Build Coastguard Worker void OutputSelectedRect(CFFL_FormField* pFormField, 73*3ac0a46fSAndroid Build Coastguard Worker const CFX_FloatRect& rect) override; 74*3ac0a46fSAndroid Build Coastguard Worker bool IsSelectionImplemented() const override; 75*3ac0a46fSAndroid Build Coastguard Worker void SetCursor(IPWL_FillerNotify::CursorStyle nCursorType) override; 76*3ac0a46fSAndroid Build Coastguard Worker void OnSetFieldInputFocus(const WideString& text) override; 77*3ac0a46fSAndroid Build Coastguard Worker void OnCalculate(ObservedPtr<CPDFSDK_Annot>& pAnnot) override; 78*3ac0a46fSAndroid Build Coastguard Worker void OnFormat(ObservedPtr<CPDFSDK_Annot>& pAnnot) override; 79*3ac0a46fSAndroid Build Coastguard Worker void Invalidate(IPDF_Page* page, const FX_RECT& rect) override; 80*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_PageView* GetOrCreatePageView(IPDF_Page* pUnderlyingPage) override; 81*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_PageView* GetPageView(IPDF_Page* pUnderlyingPage) override; 82*3ac0a46fSAndroid Build Coastguard Worker CFX_Timer::HandlerIface* GetTimerHandler() override; 83*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Annot* GetFocusAnnot() const override; 84*3ac0a46fSAndroid Build Coastguard Worker bool SetFocusAnnot(ObservedPtr<CPDFSDK_Annot>& pAnnot) override; 85*3ac0a46fSAndroid Build Coastguard Worker bool HasPermissions(uint32_t flags) const override; 86*3ac0a46fSAndroid Build Coastguard Worker void OnChange() override; 87*3ac0a46fSAndroid Build Coastguard Worker 88*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_PageView* GetPageViewAtIndex(int nIndex); 89*3ac0a46fSAndroid Build Coastguard Worker void RemovePageView(IPDF_Page* pUnderlyingPage); 90*3ac0a46fSAndroid Build Coastguard Worker void UpdateAllViews(CPDFSDK_Annot* pAnnot); 91*3ac0a46fSAndroid Build Coastguard Worker 92*3ac0a46fSAndroid Build Coastguard Worker bool KillFocusAnnot(Mask<FWL_EVENTFLAG> nFlags); 93*3ac0a46fSAndroid Build Coastguard Worker void ClearAllFocusedAnnots(); 94*3ac0a46fSAndroid Build Coastguard Worker 95*3ac0a46fSAndroid Build Coastguard Worker int GetPageCount() const; 96*3ac0a46fSAndroid Build Coastguard Worker GetChangeMark()97*3ac0a46fSAndroid Build Coastguard Worker bool GetChangeMark() const { return m_bChangeMask; } SetChangeMark()98*3ac0a46fSAndroid Build Coastguard Worker void SetChangeMark() { m_bChangeMask = true; } ClearChangeMark()99*3ac0a46fSAndroid Build Coastguard Worker void ClearChangeMark() { m_bChangeMask = false; } 100*3ac0a46fSAndroid Build Coastguard Worker 101*3ac0a46fSAndroid Build Coastguard Worker void ProcJavascriptAction(); 102*3ac0a46fSAndroid Build Coastguard Worker bool ProcOpenAction(); 103*3ac0a46fSAndroid Build Coastguard Worker 104*3ac0a46fSAndroid Build Coastguard Worker void ExecuteNamedAction(const ByteString& namedAction); 105*3ac0a46fSAndroid Build Coastguard Worker void DoURIAction(const ByteString& bsURI, Mask<FWL_EVENTFLAG> modifiers); 106*3ac0a46fSAndroid Build Coastguard Worker void DoGoToAction(int nPageIndex, 107*3ac0a46fSAndroid Build Coastguard Worker int zoomMode, 108*3ac0a46fSAndroid Build Coastguard Worker pdfium::span<float> fPosArray); 109*3ac0a46fSAndroid Build Coastguard Worker GetPDFDocument()110*3ac0a46fSAndroid Build Coastguard Worker CPDF_Document* GetPDFDocument() const { return m_pCPDFDoc; } GetDocExtension()111*3ac0a46fSAndroid Build Coastguard Worker CPDF_Document::Extension* GetDocExtension() const { 112*3ac0a46fSAndroid Build Coastguard Worker return m_pCPDFDoc->GetExtension(); 113*3ac0a46fSAndroid Build Coastguard Worker } 114*3ac0a46fSAndroid Build Coastguard Worker IsJSPlatformPresent()115*3ac0a46fSAndroid Build Coastguard Worker bool IsJSPlatformPresent() const { return m_pInfo && m_pInfo->m_pJsPlatform; } GetJSPlatform()116*3ac0a46fSAndroid Build Coastguard Worker IPDF_JSPLATFORM* GetJSPlatform() const { 117*3ac0a46fSAndroid Build Coastguard Worker return m_pInfo ? m_pInfo->m_pJsPlatform : nullptr; 118*3ac0a46fSAndroid Build Coastguard Worker } 119*3ac0a46fSAndroid Build Coastguard Worker 120*3ac0a46fSAndroid Build Coastguard Worker // Actions. 121*3ac0a46fSAndroid Build Coastguard Worker bool DoActionDocOpen(const CPDF_Action& action); 122*3ac0a46fSAndroid Build Coastguard Worker bool DoActionJavaScript(const CPDF_Action& JsAction, WideString csJSName); 123*3ac0a46fSAndroid Build Coastguard Worker bool DoActionPage(const CPDF_Action& action, CPDF_AAction::AActionType eType); 124*3ac0a46fSAndroid Build Coastguard Worker bool DoActionDocument(const CPDF_Action& action, 125*3ac0a46fSAndroid Build Coastguard Worker CPDF_AAction::AActionType eType); 126*3ac0a46fSAndroid Build Coastguard Worker bool DoActionField(const CPDF_Action& action, 127*3ac0a46fSAndroid Build Coastguard Worker CPDF_AAction::AActionType type, 128*3ac0a46fSAndroid Build Coastguard Worker CPDF_FormField* pFormField, 129*3ac0a46fSAndroid Build Coastguard Worker CFFL_FieldAction* data); 130*3ac0a46fSAndroid Build Coastguard Worker bool DoActionFieldJavaScript(const CPDF_Action& JsAction, 131*3ac0a46fSAndroid Build Coastguard Worker CPDF_AAction::AActionType type, 132*3ac0a46fSAndroid Build Coastguard Worker CPDF_FormField* pFormField, 133*3ac0a46fSAndroid Build Coastguard Worker CFFL_FieldAction* data); 134*3ac0a46fSAndroid Build Coastguard Worker bool DoActionLink(const CPDF_Action& action, 135*3ac0a46fSAndroid Build Coastguard Worker CPDF_AAction::AActionType type, 136*3ac0a46fSAndroid Build Coastguard Worker Mask<FWL_EVENTFLAG> modifiers); 137*3ac0a46fSAndroid Build Coastguard Worker bool DoActionDestination(const CPDF_Dest& dest); 138*3ac0a46fSAndroid Build Coastguard Worker void DoActionNoJs(const CPDF_Action& action, CPDF_AAction::AActionType type); 139*3ac0a46fSAndroid Build Coastguard Worker void DoActionGoTo(const CPDF_Action& action); 140*3ac0a46fSAndroid Build Coastguard Worker void DoActionLaunch(const CPDF_Action& action); 141*3ac0a46fSAndroid Build Coastguard Worker void DoActionURI(const CPDF_Action& action, Mask<FWL_EVENTFLAG> modifiers); 142*3ac0a46fSAndroid Build Coastguard Worker void DoActionNamed(const CPDF_Action& action); 143*3ac0a46fSAndroid Build Coastguard Worker bool DoActionHide(const CPDF_Action& action); 144*3ac0a46fSAndroid Build Coastguard Worker bool DoActionSubmitForm(const CPDF_Action& action); 145*3ac0a46fSAndroid Build Coastguard Worker void DoActionResetForm(const CPDF_Action& action); 146*3ac0a46fSAndroid Build Coastguard Worker 147*3ac0a46fSAndroid Build Coastguard Worker #ifdef PDF_ENABLE_V8 148*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_PageView* GetCurrentView(); 149*3ac0a46fSAndroid Build Coastguard Worker IPDF_Page* GetCurrentPage() const; 150*3ac0a46fSAndroid Build Coastguard Worker 151*3ac0a46fSAndroid Build Coastguard Worker WideString GetLanguage(); 152*3ac0a46fSAndroid Build Coastguard Worker WideString GetPlatform(); 153*3ac0a46fSAndroid Build Coastguard Worker 154*3ac0a46fSAndroid Build Coastguard Worker int JS_appAlert(const WideString& Msg, 155*3ac0a46fSAndroid Build Coastguard Worker const WideString& Title, 156*3ac0a46fSAndroid Build Coastguard Worker int Type, 157*3ac0a46fSAndroid Build Coastguard Worker int Icon); 158*3ac0a46fSAndroid Build Coastguard Worker int JS_appResponse(const WideString& Question, 159*3ac0a46fSAndroid Build Coastguard Worker const WideString& Title, 160*3ac0a46fSAndroid Build Coastguard Worker const WideString& Default, 161*3ac0a46fSAndroid Build Coastguard Worker const WideString& cLabel, 162*3ac0a46fSAndroid Build Coastguard Worker FPDF_BOOL bPassword, 163*3ac0a46fSAndroid Build Coastguard Worker pdfium::span<uint8_t> response); 164*3ac0a46fSAndroid Build Coastguard Worker void JS_appBeep(int nType); 165*3ac0a46fSAndroid Build Coastguard Worker WideString JS_fieldBrowse(); 166*3ac0a46fSAndroid Build Coastguard Worker void JS_docmailForm(pdfium::span<const uint8_t> mailData, 167*3ac0a46fSAndroid Build Coastguard Worker FPDF_BOOL bUI, 168*3ac0a46fSAndroid Build Coastguard Worker const WideString& To, 169*3ac0a46fSAndroid Build Coastguard Worker const WideString& Subject, 170*3ac0a46fSAndroid Build Coastguard Worker const WideString& CC, 171*3ac0a46fSAndroid Build Coastguard Worker const WideString& BCC, 172*3ac0a46fSAndroid Build Coastguard Worker const WideString& Msg); 173*3ac0a46fSAndroid Build Coastguard Worker void JS_docprint(FPDF_BOOL bUI, 174*3ac0a46fSAndroid Build Coastguard Worker int nStart, 175*3ac0a46fSAndroid Build Coastguard Worker int nEnd, 176*3ac0a46fSAndroid Build Coastguard Worker FPDF_BOOL bSilent, 177*3ac0a46fSAndroid Build Coastguard Worker FPDF_BOOL bShrinkToFit, 178*3ac0a46fSAndroid Build Coastguard Worker FPDF_BOOL bPrintAsImage, 179*3ac0a46fSAndroid Build Coastguard Worker FPDF_BOOL bReverse, 180*3ac0a46fSAndroid Build Coastguard Worker FPDF_BOOL bAnnotations); 181*3ac0a46fSAndroid Build Coastguard Worker void JS_docgotoPage(int nPageNum); 182*3ac0a46fSAndroid Build Coastguard Worker WideString JS_docGetFilePath(); 183*3ac0a46fSAndroid Build Coastguard Worker 184*3ac0a46fSAndroid Build Coastguard Worker #ifdef PDF_ENABLE_XFA 185*3ac0a46fSAndroid Build Coastguard Worker int GetPageViewCount() const; 186*3ac0a46fSAndroid Build Coastguard Worker void DisplayCaret(IPDF_Page* page, 187*3ac0a46fSAndroid Build Coastguard Worker FPDF_BOOL bVisible, 188*3ac0a46fSAndroid Build Coastguard Worker double left, 189*3ac0a46fSAndroid Build Coastguard Worker double top, 190*3ac0a46fSAndroid Build Coastguard Worker double right, 191*3ac0a46fSAndroid Build Coastguard Worker double bottom); 192*3ac0a46fSAndroid Build Coastguard Worker int GetCurrentPageIndex() const; 193*3ac0a46fSAndroid Build Coastguard Worker void SetCurrentPage(int iCurPage); 194*3ac0a46fSAndroid Build Coastguard Worker 195*3ac0a46fSAndroid Build Coastguard Worker // TODO(dsinclair): This should probably change to PDFium? FFI_GetAppName()196*3ac0a46fSAndroid Build Coastguard Worker WideString FFI_GetAppName() const { return WideString(L"Acrobat"); } 197*3ac0a46fSAndroid Build Coastguard Worker 198*3ac0a46fSAndroid Build Coastguard Worker void GotoURL(const WideString& wsURL); 199*3ac0a46fSAndroid Build Coastguard Worker FS_RECTF GetPageViewRect(IPDF_Page* page); 200*3ac0a46fSAndroid Build Coastguard Worker bool PopupMenu(IPDF_Page* page, int menuFlag, const CFX_PointF& pt); 201*3ac0a46fSAndroid Build Coastguard Worker void EmailTo(FPDF_FILEHANDLER* fileHandler, 202*3ac0a46fSAndroid Build Coastguard Worker FPDF_WIDESTRING pTo, 203*3ac0a46fSAndroid Build Coastguard Worker FPDF_WIDESTRING pSubject, 204*3ac0a46fSAndroid Build Coastguard Worker FPDF_WIDESTRING pCC, 205*3ac0a46fSAndroid Build Coastguard Worker FPDF_WIDESTRING pBcc, 206*3ac0a46fSAndroid Build Coastguard Worker FPDF_WIDESTRING pMsg); 207*3ac0a46fSAndroid Build Coastguard Worker void UploadTo(FPDF_FILEHANDLER* fileHandler, 208*3ac0a46fSAndroid Build Coastguard Worker int fileFlag, 209*3ac0a46fSAndroid Build Coastguard Worker FPDF_WIDESTRING uploadTo); 210*3ac0a46fSAndroid Build Coastguard Worker FPDF_FILEHANDLER* OpenFile(int fileType, 211*3ac0a46fSAndroid Build Coastguard Worker FPDF_WIDESTRING wsURL, 212*3ac0a46fSAndroid Build Coastguard Worker const char* mode); 213*3ac0a46fSAndroid Build Coastguard Worker RetainPtr<IFX_SeekableReadStream> DownloadFromURL(const WideString& url); 214*3ac0a46fSAndroid Build Coastguard Worker WideString PostRequestURL(const WideString& wsURL, 215*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsData, 216*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsContentType, 217*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsEncode, 218*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsHeader); 219*3ac0a46fSAndroid Build Coastguard Worker FPDF_BOOL PutRequestURL(const WideString& wsURL, 220*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsData, 221*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsEncode); 222*3ac0a46fSAndroid Build Coastguard Worker 223*3ac0a46fSAndroid Build Coastguard Worker void PageEvent(int iPageCount, uint32_t dwEventType) const; 224*3ac0a46fSAndroid Build Coastguard Worker #endif // PDF_ENABLE_XFA 225*3ac0a46fSAndroid Build Coastguard Worker #endif // PDF_ENABLE_V8 226*3ac0a46fSAndroid Build Coastguard Worker 227*3ac0a46fSAndroid Build Coastguard Worker WideString GetFilePath() const; GetAppName()228*3ac0a46fSAndroid Build Coastguard Worker ByteString GetAppName() const { return ByteString(); } GetFormFillInfo()229*3ac0a46fSAndroid Build Coastguard Worker FPDF_FORMFILLINFO* GetFormFillInfo() const { return m_pInfo; } 230*3ac0a46fSAndroid Build Coastguard Worker void SubmitForm(pdfium::span<const uint8_t> form_data, const WideString& URL); 231*3ac0a46fSAndroid Build Coastguard Worker SetFocusableAnnotSubtypes(const std::vector<CPDF_Annot::Subtype> & focusableAnnotTypes)232*3ac0a46fSAndroid Build Coastguard Worker void SetFocusableAnnotSubtypes( 233*3ac0a46fSAndroid Build Coastguard Worker const std::vector<CPDF_Annot::Subtype>& focusableAnnotTypes) { 234*3ac0a46fSAndroid Build Coastguard Worker m_FocusableAnnotTypes = focusableAnnotTypes; 235*3ac0a46fSAndroid Build Coastguard Worker } GetFocusableAnnotSubtypes()236*3ac0a46fSAndroid Build Coastguard Worker const std::vector<CPDF_Annot::Subtype>& GetFocusableAnnotSubtypes() const { 237*3ac0a46fSAndroid Build Coastguard Worker return m_FocusableAnnotTypes; 238*3ac0a46fSAndroid Build Coastguard Worker } 239*3ac0a46fSAndroid Build Coastguard Worker 240*3ac0a46fSAndroid Build Coastguard Worker // Never returns null. GetInteractiveFormFiller()241*3ac0a46fSAndroid Build Coastguard Worker CFFL_InteractiveFormFiller* GetInteractiveFormFiller() { 242*3ac0a46fSAndroid Build Coastguard Worker return m_pInteractiveFormFiller.get(); 243*3ac0a46fSAndroid Build Coastguard Worker } 244*3ac0a46fSAndroid Build Coastguard Worker 245*3ac0a46fSAndroid Build Coastguard Worker IJS_Runtime* GetIJSRuntime(); // Creates if not present. 246*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_InteractiveForm* GetInteractiveForm(); // Creates if not present. 247*3ac0a46fSAndroid Build Coastguard Worker 248*3ac0a46fSAndroid Build Coastguard Worker private: 249*3ac0a46fSAndroid Build Coastguard Worker using RunScriptCallback = std::function<void(IJS_EventContext* context)>; 250*3ac0a46fSAndroid Build Coastguard Worker 251*3ac0a46fSAndroid Build Coastguard Worker IPDF_Page* GetPage(int nIndex) const; 252*3ac0a46fSAndroid Build Coastguard Worker void OnSetFieldInputFocusInternal(const WideString& text, bool bFocus); 253*3ac0a46fSAndroid Build Coastguard Worker void SendOnFocusChange(ObservedPtr<CPDFSDK_Annot>& pAnnot); 254*3ac0a46fSAndroid Build Coastguard Worker 255*3ac0a46fSAndroid Build Coastguard Worker // Support methods for Actions. 256*3ac0a46fSAndroid Build Coastguard Worker void RunScript(const WideString& script, const RunScriptCallback& cb); 257*3ac0a46fSAndroid Build Coastguard Worker bool ExecuteDocumentOpenAction(const CPDF_Action& action, 258*3ac0a46fSAndroid Build Coastguard Worker std::set<const CPDF_Dictionary*>* visited); 259*3ac0a46fSAndroid Build Coastguard Worker bool ExecuteDocumentPageAction(const CPDF_Action& action, 260*3ac0a46fSAndroid Build Coastguard Worker CPDF_AAction::AActionType type, 261*3ac0a46fSAndroid Build Coastguard Worker std::set<const CPDF_Dictionary*>* visited); 262*3ac0a46fSAndroid Build Coastguard Worker bool ExecuteFieldAction(const CPDF_Action& action, 263*3ac0a46fSAndroid Build Coastguard Worker CPDF_AAction::AActionType type, 264*3ac0a46fSAndroid Build Coastguard Worker CPDF_FormField* pFormField, 265*3ac0a46fSAndroid Build Coastguard Worker CFFL_FieldAction* data, 266*3ac0a46fSAndroid Build Coastguard Worker std::set<const CPDF_Dictionary*>* visited); 267*3ac0a46fSAndroid Build Coastguard Worker void RunDocumentPageJavaScript(CPDF_AAction::AActionType type, 268*3ac0a46fSAndroid Build Coastguard Worker const WideString& script); 269*3ac0a46fSAndroid Build Coastguard Worker void RunDocumentOpenJavaScript(const WideString& sScriptName, 270*3ac0a46fSAndroid Build Coastguard Worker const WideString& script); 271*3ac0a46fSAndroid Build Coastguard Worker void RunFieldJavaScript(CPDF_FormField* pFormField, 272*3ac0a46fSAndroid Build Coastguard Worker CPDF_AAction::AActionType type, 273*3ac0a46fSAndroid Build Coastguard Worker CFFL_FieldAction* data, 274*3ac0a46fSAndroid Build Coastguard Worker const WideString& script); 275*3ac0a46fSAndroid Build Coastguard Worker bool IsValidField(const CPDF_Dictionary* pFieldDict); 276*3ac0a46fSAndroid Build Coastguard Worker 277*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<FPDF_FORMFILLINFO> const m_pInfo; 278*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<IJS_Runtime> m_pIJSRuntime; 279*3ac0a46fSAndroid Build Coastguard Worker 280*3ac0a46fSAndroid Build Coastguard Worker // Iterator stability guarantees as provided by std::map<> required. 281*3ac0a46fSAndroid Build Coastguard Worker std::map<IPDF_Page*, std::unique_ptr<CPDFSDK_PageView>> m_PageMap; 282*3ac0a46fSAndroid Build Coastguard Worker 283*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CPDFSDK_InteractiveForm> m_pInteractiveForm; 284*3ac0a46fSAndroid Build Coastguard Worker ObservedPtr<CPDFSDK_Annot> m_pFocusAnnot; 285*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<CPDF_Document> const m_pCPDFDoc; 286*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CFFL_InteractiveFormFiller> m_pInteractiveFormFiller; 287*3ac0a46fSAndroid Build Coastguard Worker bool m_bChangeMask = false; 288*3ac0a46fSAndroid Build Coastguard Worker bool m_bBeingDestroyed = false; 289*3ac0a46fSAndroid Build Coastguard Worker 290*3ac0a46fSAndroid Build Coastguard Worker // Holds the list of focusable annot types. 291*3ac0a46fSAndroid Build Coastguard Worker // Annotations of type WIDGET are by default focusable. 292*3ac0a46fSAndroid Build Coastguard Worker std::vector<CPDF_Annot::Subtype> m_FocusableAnnotTypes = { 293*3ac0a46fSAndroid Build Coastguard Worker CPDF_Annot::Subtype::WIDGET}; 294*3ac0a46fSAndroid Build Coastguard Worker }; 295*3ac0a46fSAndroid Build Coastguard Worker 296*3ac0a46fSAndroid Build Coastguard Worker #endif // FPDFSDK_CPDFSDK_FORMFILLENVIRONMENT_H_ 297