diff options
Diffstat (limited to 'fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp')
-rw-r--r-- | fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp | 59 |
1 files changed, 30 insertions, 29 deletions
diff --git a/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp index 95f0cbe25a..2b8b7e3044 100644 --- a/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp +++ b/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp @@ -48,8 +48,6 @@ CPDFXFA_Document::CPDFXFA_Document(CPDF_Document* pPDFDoc, CPDFXFA_App* pProvider) : m_iDocType(DOCTYPE_PDF), m_pPDFDoc(pPDFDoc), - m_pSDKDoc(nullptr), - m_pXFADoc(nullptr), m_pXFADocView(nullptr), m_pApp(pProvider), m_pJSContext(nullptr), @@ -67,11 +65,13 @@ CPDFXFA_Document::~CPDFXFA_Document() { CloseXFADoc(pDocHandler); } } - delete m_pXFADoc; + m_pXFADoc.reset(); } if (m_pJSContext && m_pSDKDoc && m_pSDKDoc->GetEnv()) m_pSDKDoc->GetEnv()->GetJSRuntime()->ReleaseContext(m_pJSContext); - delete m_pSDKDoc; + // |m_pSDKDoc| has to be released before |pParser| and |m_pPDFDoc| since it + // needs to access them to kill focused annotations. + m_pSDKDoc.reset(); if (m_pPDFDoc) { CPDF_Parser* pParser = m_pPDFDoc->GetParser(); if (pParser) @@ -95,7 +95,7 @@ FX_BOOL CPDFXFA_Document::LoadXFADoc() { if (!pApp) return FALSE; - m_pXFADoc = pApp->CreateDoc(this, m_pPDFDoc); + m_pXFADoc.reset(pApp->CreateDoc(this, m_pPDFDoc)); if (!m_pXFADoc) { SetLastError(FPDF_ERR_XFALOAD); return FALSE; @@ -222,8 +222,8 @@ void CPDFXFA_Document::RemovePage(CPDFXFA_Page* page) { CPDFSDK_Document* CPDFXFA_Document::GetSDKDocument( CPDFDoc_Environment* pFormFillEnv) { if (!m_pSDKDoc && pFormFillEnv) - m_pSDKDoc = new CPDFSDK_Document(this, pFormFillEnv); - return m_pSDKDoc; + m_pSDKDoc.reset(new CPDFSDK_Document(this, pFormFillEnv)); + return m_pSDKDoc.get(); } void CPDFXFA_Document::FXRect2PDFRect(const CFX_RectF& fxRectF, @@ -235,7 +235,7 @@ void CPDFXFA_Document::FXRect2PDFRect(const CFX_RectF& fxRectF, } void CPDFXFA_Document::SetChangeMark(CXFA_FFDoc* hDoc) { - if (hDoc == m_pXFADoc && m_pSDKDoc) { + if (hDoc == m_pXFADoc.get() && m_pSDKDoc) { m_pSDKDoc->SetChangeMark(); } } @@ -532,13 +532,13 @@ FX_BOOL CPDFXFA_Document::RenderCustomWidget(CXFA_FFWidget* hWidget, } int32_t CPDFXFA_Document::CountPages(CXFA_FFDoc* hDoc) { - if (hDoc == m_pXFADoc && m_pSDKDoc) + if (hDoc == m_pXFADoc.get() && m_pSDKDoc) return GetPageCount(); return 0; } int32_t CPDFXFA_Document::GetCurrentPage(CXFA_FFDoc* hDoc) { - if (hDoc != m_pXFADoc || !m_pSDKDoc) + if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) return -1; if (m_iDocType != DOCTYPE_DYNAMIC_XFA) return -1; @@ -551,8 +551,9 @@ int32_t CPDFXFA_Document::GetCurrentPage(CXFA_FFDoc* hDoc) { } void CPDFXFA_Document::SetCurrentPage(CXFA_FFDoc* hDoc, int32_t iCurPage) { - if (hDoc != m_pXFADoc || !m_pSDKDoc || m_iDocType != DOCTYPE_DYNAMIC_XFA || - iCurPage < 0 || iCurPage >= m_pSDKDoc->GetPageCount()) { + if (hDoc != m_pXFADoc.get() || !m_pSDKDoc || + m_iDocType != DOCTYPE_DYNAMIC_XFA || iCurPage < 0 || + iCurPage >= m_pSDKDoc->GetPageCount()) { return; } CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); @@ -561,7 +562,7 @@ void CPDFXFA_Document::SetCurrentPage(CXFA_FFDoc* hDoc, int32_t iCurPage) { pEnv->FFI_SetCurrentPage(this, iCurPage); } FX_BOOL CPDFXFA_Document::IsCalculationsEnabled(CXFA_FFDoc* hDoc) { - if (hDoc != m_pXFADoc || !m_pSDKDoc) + if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) return FALSE; if (m_pSDKDoc->GetInterForm()) return m_pSDKDoc->GetInterForm()->IsXfaCalculateEnabled(); @@ -570,14 +571,14 @@ FX_BOOL CPDFXFA_Document::IsCalculationsEnabled(CXFA_FFDoc* hDoc) { } void CPDFXFA_Document::SetCalculationsEnabled(CXFA_FFDoc* hDoc, FX_BOOL bEnabled) { - if (hDoc != m_pXFADoc || !m_pSDKDoc) + if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) return; if (m_pSDKDoc->GetInterForm()) m_pSDKDoc->GetInterForm()->XfaEnableCalculate(bEnabled); } void CPDFXFA_Document::GetTitle(CXFA_FFDoc* hDoc, CFX_WideString& wsTitle) { - if (hDoc != m_pXFADoc || !m_pPDFDoc) + if (hDoc != m_pXFADoc.get() || !m_pPDFDoc) return; CPDF_Dictionary* pInfoDict = m_pPDFDoc->GetInfo(); @@ -591,7 +592,7 @@ void CPDFXFA_Document::GetTitle(CXFA_FFDoc* hDoc, CFX_WideString& wsTitle) { void CPDFXFA_Document::SetTitle(CXFA_FFDoc* hDoc, const CFX_WideString& wsTitle) { - if (hDoc != m_pXFADoc || !m_pPDFDoc) + if (hDoc != m_pXFADoc.get() || !m_pPDFDoc) return; if (CPDF_Dictionary* pInfoDict = m_pPDFDoc->GetInfo()) @@ -601,7 +602,7 @@ void CPDFXFA_Document::SetTitle(CXFA_FFDoc* hDoc, void CPDFXFA_Document::ExportData(CXFA_FFDoc* hDoc, const CFX_WideString& wsFilePath, FX_BOOL bXDP) { - if (hDoc != m_pXFADoc) + if (hDoc != m_pXFADoc.get()) return; if (m_iDocType != DOCTYPE_DYNAMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA) @@ -694,7 +695,7 @@ void CPDFXFA_Document::ImportData(CXFA_FFDoc* hDoc, void CPDFXFA_Document::GotoURL(CXFA_FFDoc* hDoc, const CFX_WideString& bsURL, FX_BOOL bAppend) { - if (hDoc != m_pXFADoc) + if (hDoc != m_pXFADoc.get()) return; if (m_iDocType != DOCTYPE_DYNAMIC_XFA) @@ -710,7 +711,7 @@ void CPDFXFA_Document::GotoURL(CXFA_FFDoc* hDoc, } FX_BOOL CPDFXFA_Document::IsValidationsEnabled(CXFA_FFDoc* hDoc) { - if (hDoc != m_pXFADoc || !m_pSDKDoc) + if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) return FALSE; if (m_pSDKDoc->GetInterForm()) return m_pSDKDoc->GetInterForm()->IsXfaValidationsEnabled(); @@ -719,14 +720,14 @@ FX_BOOL CPDFXFA_Document::IsValidationsEnabled(CXFA_FFDoc* hDoc) { } void CPDFXFA_Document::SetValidationsEnabled(CXFA_FFDoc* hDoc, FX_BOOL bEnabled) { - if (hDoc != m_pXFADoc || !m_pSDKDoc) + if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) return; if (m_pSDKDoc->GetInterForm()) m_pSDKDoc->GetInterForm()->XfaSetValidationsEnabled(bEnabled); } void CPDFXFA_Document::SetFocusWidget(CXFA_FFDoc* hDoc, CXFA_FFWidget* hWidget) { - if (hDoc != m_pXFADoc) + if (hDoc != m_pXFADoc.get()) return; if (!hWidget) { @@ -750,7 +751,7 @@ void CPDFXFA_Document::Print(CXFA_FFDoc* hDoc, int32_t nStartPage, int32_t nEndPage, uint32_t dwOptions) { - if (hDoc != m_pXFADoc) + if (hDoc != m_pXFADoc.get()) return; CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); @@ -812,7 +813,7 @@ FX_BOOL CPDFXFA_Document::Clear(CXFA_FFDoc* hDoc, } void CPDFXFA_Document::GetURL(CXFA_FFDoc* hDoc, CFX_WideString& wsDocURL) { - if (hDoc != m_pXFADoc) + if (hDoc != m_pXFADoc.get()) return; CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); @@ -823,7 +824,7 @@ void CPDFXFA_Document::GetURL(CXFA_FFDoc* hDoc, CFX_WideString& wsDocURL) { } FX_ARGB CPDFXFA_Document::GetHighlightColor(CXFA_FFDoc* hDoc) { - if (hDoc != m_pXFADoc) + if (hDoc != m_pXFADoc.get()) return 0; if (m_pSDKDoc) { if (CPDFSDK_InterForm* pInterForm = m_pSDKDoc->GetInterForm()) { @@ -1236,7 +1237,7 @@ FX_BOOL CPDFXFA_Document::_SubmitData(CXFA_FFDoc* hDoc, CXFA_Submit submit) { FX_BOOL CPDFXFA_Document::SetGlobalProperty(CXFA_FFDoc* hDoc, const CFX_ByteStringC& szPropName, CFXJSE_Value* pValue) { - if (hDoc != m_pXFADoc) + if (hDoc != m_pXFADoc.get()) return FALSE; if (m_pSDKDoc && m_pSDKDoc->GetEnv()->GetJSRuntime()) @@ -1247,14 +1248,14 @@ FX_BOOL CPDFXFA_Document::SetGlobalProperty(CXFA_FFDoc* hDoc, FX_BOOL CPDFXFA_Document::GetPDFScriptObject(CXFA_FFDoc* hDoc, const CFX_ByteStringC& utf8Name, CFXJSE_Value* pValue) { - if (hDoc != m_pXFADoc) + if (hDoc != m_pXFADoc.get()) return FALSE; if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime()) return FALSE; if (!m_pJSContext) { - m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc); + m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc.get()); m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext(); } @@ -1263,13 +1264,13 @@ FX_BOOL CPDFXFA_Document::GetPDFScriptObject(CXFA_FFDoc* hDoc, FX_BOOL CPDFXFA_Document::GetGlobalProperty(CXFA_FFDoc* hDoc, const CFX_ByteStringC& szPropName, CFXJSE_Value* pValue) { - if (hDoc != m_pXFADoc) + if (hDoc != m_pXFADoc.get()) return FALSE; if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime()) return FALSE; if (!m_pJSContext) { - m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc); + m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc.get()); m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext(); } |