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

Unified Diff: xfa/fxfa/app/xfa_ffdoc.cpp

Issue 2123133004: Remove IXFA_Parser, cleanup XFA parser code. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase to master Created 4 years, 5 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « xfa.gyp ('k') | xfa/fxfa/app/xfa_ffwidgethandler.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: xfa/fxfa/app/xfa_ffdoc.cpp
diff --git a/xfa/fxfa/app/xfa_ffdoc.cpp b/xfa/fxfa/app/xfa_ffdoc.cpp
index e85d1b76c52a6f2d2e6a15fd382615e9ab3b6aad..6320cb9b2a6a53b5436a8874d745122c68c9da17 100644
--- a/xfa/fxfa/app/xfa_ffdoc.cpp
+++ b/xfa/fxfa/app/xfa_ffdoc.cpp
@@ -23,7 +23,6 @@
#include "xfa/fxfa/include/xfa_fontmgr.h"
#include "xfa/fxfa/parser/xfa_document.h"
#include "xfa/fxfa/parser/xfa_document_serialize.h"
-#include "xfa/fxfa/parser/xfa_parser.h"
#include "xfa/fxfa/parser/xfa_parser_imp.h"
#include "xfa/fxfa/parser/xfa_parser_imp.h"
@@ -150,26 +149,29 @@ int32_t Base64DecodeW(const FX_WCHAR* pSrc, int32_t iSrcLen, uint8_t* pDst) {
CXFA_FFDoc::CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocProvider* pDocProvider)
: m_pDocProvider(pDocProvider),
- m_pDocument(nullptr),
+ m_pDocumentParser(nullptr),
m_pStream(nullptr),
m_pApp(pApp),
m_pNotify(nullptr),
m_pPDFDoc(nullptr),
m_dwDocType(XFA_DOCTYPE_Static),
m_bOwnStream(TRUE) {}
+
CXFA_FFDoc::~CXFA_FFDoc() {
CloseDoc();
}
+
uint32_t CXFA_FFDoc::GetDocType() {
return m_dwDocType;
}
+
int32_t CXFA_FFDoc::StartLoad() {
- m_pNotify = new CXFA_FFNotify(this);
- CXFA_DocumentParser* pDocParser = new CXFA_DocumentParser(m_pNotify);
- int32_t iStatus = pDocParser->StartParse(m_pStream);
- m_pDocument = pDocParser->GetDocument();
+ m_pNotify.reset(new CXFA_FFNotify(this));
+ m_pDocumentParser.reset(new CXFA_DocumentParser(m_pNotify.get()));
+ int32_t iStatus = m_pDocumentParser->StartParse(m_pStream);
return iStatus;
}
+
FX_BOOL XFA_GetPDFContentsFromPDFXML(CFDE_XMLNode* pPDFElement,
uint8_t*& pByteBuffer,
int32_t& iBufferSize) {
@@ -234,9 +236,10 @@ void XFA_XPDPacket_MergeRootNode(CXFA_Node* pOriginRoot, CXFA_Node* pNewRoot) {
}
}
int32_t CXFA_FFDoc::DoLoad(IFX_Pause* pPause) {
- int32_t iStatus = m_pDocument->GetParser()->DoParse(pPause);
+ int32_t iStatus = m_pDocumentParser->DoParse(pPause);
if (iStatus == XFA_PARSESTATUS_Done && !m_pPDFDoc) {
- CXFA_Node* pPDFNode = ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Pdf));
+ CXFA_Node* pPDFNode = ToNode(
+ m_pDocumentParser->GetDocument()->GetXFAObject(XFA_HASHCODE_Pdf));
if (!pPDFNode) {
return XFA_PARSESTATUS_SyntaxErr;
}
@@ -256,39 +259,40 @@ int32_t CXFA_FFDoc::DoLoad(IFX_Pause* pPause) {
pXFAReader = GetDocProvider()->OpenLinkedFile(this, wsHref);
}
}
- if (!pXFAReader) {
+ if (!pXFAReader)
return XFA_PARSESTATUS_SyntaxErr;
- }
+
CPDF_Document* pPDFDocument =
GetDocProvider()->OpenPDF(this, pXFAReader, TRUE);
ASSERT(!m_pPDFDoc);
- if (!OpenDoc(pPDFDocument)) {
+ if (!OpenDoc(pPDFDocument))
return XFA_PARSESTATUS_SyntaxErr;
- }
- IXFA_Parser* pParser = IXFA_Parser::Create(m_pDocument, TRUE);
- if (!pParser) {
+
+ CXFA_Document* doc = m_pDocumentParser->GetDocument();
+ std::unique_ptr<CXFA_SimpleParser> pParser(
+ new CXFA_SimpleParser(doc, true));
+ if (!pParser)
return XFA_PARSESTATUS_SyntaxErr;
- }
+
CXFA_Node* pRootNode = nullptr;
if (pParser->StartParse(m_pStream) == XFA_PARSESTATUS_Ready &&
pParser->DoParse(nullptr) == XFA_PARSESTATUS_Done) {
pRootNode = pParser->GetRootNode();
}
- if (pRootNode && m_pDocument->GetRoot()) {
- XFA_XPDPacket_MergeRootNode(m_pDocument->GetRoot(), pRootNode);
+ if (pRootNode && doc->GetRoot()) {
+ XFA_XPDPacket_MergeRootNode(doc->GetRoot(), pRootNode);
iStatus = XFA_PARSESTATUS_Done;
} else {
iStatus = XFA_PARSESTATUS_StatusErr;
}
- pParser->Release();
- pParser = nullptr;
}
return iStatus;
}
void CXFA_FFDoc::StopLoad() {
m_pApp->GetXFAFontMgr()->LoadDocFonts(this);
m_dwDocType = XFA_DOCTYPE_Static;
- CXFA_Node* pConfig = ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Config));
+ CXFA_Node* pConfig = ToNode(
+ m_pDocumentParser->GetDocument()->GetXFAObject(XFA_HASHCODE_Config));
if (!pConfig) {
return;
}
@@ -375,23 +379,19 @@ FX_BOOL CXFA_FFDoc::OpenDoc(CPDF_Document* pPDFDoc) {
m_bOwnStream = TRUE;
return TRUE;
}
+
FX_BOOL CXFA_FFDoc::CloseDoc() {
for (const auto& pair : m_TypeToDocViewMap)
pair.second->RunDocClose();
- if (m_pDocument)
- m_pDocument->ClearLayoutData();
+ CXFA_Document* doc =
+ m_pDocumentParser ? m_pDocumentParser->GetDocument() : nullptr;
+ if (doc)
+ doc->ClearLayoutData();
m_TypeToDocViewMap.clear();
- if (m_pDocument) {
- m_pDocument->GetParser()->Release();
- m_pDocument = nullptr;
- }
-
- delete m_pNotify;
- m_pNotify = nullptr;
-
+ m_pNotify.reset(nullptr);
m_pApp->GetXFAFontMgr()->ReleaseDocFonts(this);
if (m_dwDocType != XFA_DOCTYPE_XDP && m_pStream && m_bOwnStream) {
@@ -474,11 +474,11 @@ CFX_DIBitmap* CXFA_FFDoc::GetPDFNamedImage(const CFX_WideStringC& wsName,
bool CXFA_FFDoc::SavePackage(XFA_HashCode code,
IFX_FileWrite* pFile,
CXFA_ChecksumContext* pCSContext) {
- std::unique_ptr<CXFA_DataExporter> pExport(
- new CXFA_DataExporter(m_pDocument));
- CXFA_Node* pNode = code == XFA_HASHCODE_Xfa
- ? m_pDocument->GetRoot()
- : ToNode(m_pDocument->GetXFAObject(code));
+ CXFA_Document* doc = m_pDocumentParser->GetDocument();
+
+ std::unique_ptr<CXFA_DataExporter> pExport(new CXFA_DataExporter(doc));
+ CXFA_Node* pNode = code == XFA_HASHCODE_Xfa ? doc->GetRoot()
+ : ToNode(doc->GetXFAObject(code));
if (!pNode)
return !!pExport->Export(pFile);
@@ -492,6 +492,6 @@ bool CXFA_FFDoc::SavePackage(XFA_HashCode code,
FX_BOOL CXFA_FFDoc::ImportData(IFX_FileRead* pStream, FX_BOOL bXDP) {
std::unique_ptr<CXFA_DataImporter> importer(
- new CXFA_DataImporter(m_pDocument));
+ new CXFA_DataImporter(m_pDocumentParser->GetDocument()));
return importer->ImportData(pStream);
}
« no previous file with comments | « xfa.gyp ('k') | xfa/fxfa/app/xfa_ffwidgethandler.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698