Remove CXFA_Document::HasFlag() and SetFlag().
Also remove |CXFA_Document::m_dwDocFlags| and enum XFA_DocFlag. Replace
them with equivalent bools or Optional<bool>, and add trivial
getters/setters as needed.
Fix nits in CXFA_Node and CXFA_DocumentParserTest along the way.
Change-Id: I76f76a40736362ea07ba7b059be12325dcd6cd93
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/59133
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/xfa/cfxjse_engine.cpp b/fxjs/xfa/cfxjse_engine.cpp
index e4675fd..8dafcb3 100644
--- a/fxjs/xfa/cfxjse_engine.cpp
+++ b/fxjs/xfa/cfxjse_engine.cpp
@@ -460,7 +460,7 @@
}
bool CFXJSE_Engine::IsStrictScopeInJavaScript() {
- return m_pDocument->HasFlag(XFA_DOCFLAG_StrictScoping);
+ return m_pDocument->is_strict_scoping();
}
CXFA_Script::Type CFXJSE_Engine::GetType() {
diff --git a/xfa/fxfa/parser/cxfa_document.cpp b/xfa/fxfa/parser/cxfa_document.cpp
index 0626909..4212c1a 100644
--- a/xfa/fxfa/parser/cxfa_document.cpp
+++ b/xfa/fxfa/parser/cxfa_document.cpp
@@ -1376,16 +1376,9 @@
return AddOwnedNode(CXFA_Node::Create(this, eElement, packet));
}
-void CXFA_Document::SetFlag(uint32_t dwFlag, bool bOn) {
- if (bOn)
- m_dwDocFlags |= dwFlag;
- else
- m_dwDocFlags &= ~dwFlag;
-}
-
bool CXFA_Document::IsInteractive() {
- if (m_dwDocFlags & XFA_DOCFLAG_HasInteractive)
- return !!(m_dwDocFlags & XFA_DOCFLAG_Interactive);
+ if (m_Interactive.has_value())
+ return m_Interactive.value();
CXFA_Node* pConfig = ToNode(GetXFAObject(XFA_HASHCODE_Config));
if (!pConfig)
@@ -1402,16 +1395,13 @@
CXFA_Interactive* pFormFiller =
pPDF->GetChild<CXFA_Interactive>(0, XFA_Element::Interactive, false);
- if (pFormFiller) {
- m_dwDocFlags |= XFA_DOCFLAG_HasInteractive;
+ if (!pFormFiller)
+ return false;
- WideString wsInteractive = pFormFiller->JSObject()->GetContent(false);
- if (wsInteractive.EqualsASCII("1")) {
- m_dwDocFlags |= XFA_DOCFLAG_Interactive;
- return true;
- }
- }
- return false;
+ WideString wsInteractive = pFormFiller->JSObject()->GetContent(false);
+ bool bInteractive = wsInteractive.EqualsASCII("1");
+ m_Interactive = bInteractive;
+ return bInteractive;
}
CXFA_LocaleMgr* CXFA_Document::GetLocaleMgr() {
diff --git a/xfa/fxfa/parser/cxfa_document.h b/xfa/fxfa/parser/cxfa_document.h
index ca40234..878284c 100644
--- a/xfa/fxfa/parser/cxfa_document.h
+++ b/xfa/fxfa/parser/cxfa_document.h
@@ -12,6 +12,7 @@
#include <vector>
#include "core/fxcrt/unowned_ptr.h"
+#include "third_party/base/optional.h"
#include "xfa/fxfa/fxfa.h"
#include "xfa/fxfa/parser/cxfa_localemgr.h"
#include "xfa/fxfa/parser/cxfa_nodeowner.h"
@@ -34,13 +35,6 @@
XFA_VERSION_MAX = 400,
};
-enum XFA_DocFlag {
- XFA_DOCFLAG_StrictScoping = 0x0001,
- XFA_DOCFLAG_HasInteractive = 0x0002,
- XFA_DOCFLAG_Interactive = 0x0004,
- XFA_DOCFLAG_Scripting = 0x0008
-};
-
class CFXJSE_Engine;
class CJS_Runtime;
class CScript_DataWindow;
@@ -95,10 +89,11 @@
CXFA_Node* GetRoot() const { return m_pRootNode; }
void SetRoot(CXFA_Node* pNewRoot) { m_pRootNode = pNewRoot; }
- bool HasFlag(uint32_t dwFlag) const {
- return (m_dwDocFlags & dwFlag) == dwFlag;
- }
- void SetFlag(uint32_t dwFlag, bool bOn);
+ bool is_strict_scoping() const { return m_bStrictScoping; }
+ void set_is_strict_scoping() { m_bStrictScoping = true; }
+
+ bool is_scripting() const { return m_bScripting; }
+ void set_is_scripting() { m_bScripting = true; }
bool IsInteractive();
XFA_VERSION GetCurVersionMode() { return m_eCurVersionMode; }
@@ -140,7 +135,9 @@
std::unique_ptr<CScript_LayoutPseudoModel> m_pScriptLayout;
std::unique_ptr<CScript_SignaturePseudoModel> m_pScriptSignature;
XFA_VERSION m_eCurVersionMode = XFA_VERSION_DEFAULT;
- uint32_t m_dwDocFlags = 0;
+ Optional<bool> m_Interactive;
+ bool m_bStrictScoping = false;
+ bool m_bScripting = false;
};
#endif // XFA_FXFA_PARSER_CXFA_DOCUMENT_H_
diff --git a/xfa/fxfa/parser/cxfa_document_parser.cpp b/xfa/fxfa/parser/cxfa_document_parser.cpp
index da3cfce..b141f7d 100644
--- a/xfa/fxfa/parser/cxfa_document_parser.cpp
+++ b/xfa/fxfa/parser/cxfa_document_parser.cpp
@@ -1028,14 +1028,14 @@
(pXFANode->GetDocument()->RecognizeXFAVersionNumber(target_data[0]) !=
XFA_VERSION_UNKNOWN) &&
target_data[1].EqualsASCII("v2.7-scripting:1")) {
- pXFANode->GetDocument()->SetFlag(XFA_DOCFLAG_Scripting, true);
+ pXFANode->GetDocument()->set_is_scripting();
}
return;
}
if (pXMLInstruction->IsAcrobat()) {
if (target_data.size() > 1 && target_data[0].EqualsASCII("JavaScript") &&
target_data[1].EqualsASCII("strictScoping")) {
- pXFANode->GetDocument()->SetFlag(XFA_DOCFLAG_StrictScoping, true);
+ pXFANode->GetDocument()->set_is_strict_scoping();
}
}
}
diff --git a/xfa/fxfa/parser/cxfa_document_parser_unittest.cpp b/xfa/fxfa/parser/cxfa_document_parser_unittest.cpp
index 29127a0..625473a 100644
--- a/xfa/fxfa/parser/cxfa_document_parser_unittest.cpp
+++ b/xfa/fxfa/parser/cxfa_document_parser_unittest.cpp
@@ -33,92 +33,92 @@
};
TEST_F(CXFA_DocumentParserTest, XMLInstructionsScriptOff) {
- static const char input[] =
+ static const char kInput[] =
"<config>\n"
"<?originalXFAVersion http://www.xfa.org/schema/xfa-template/2.7 "
"v2.7-scripting:0 ?>\n"
"</config>";
- EXPECT_FALSE(GetDoc()->HasFlag(XFA_DOCFLAG_Scripting));
+ EXPECT_FALSE(GetDoc()->is_scripting());
auto stream = pdfium::MakeRetain<CFX_ReadOnlyMemoryStream>(
- pdfium::as_bytes(pdfium::make_span(input)));
+ pdfium::as_bytes(pdfium::make_span(kInput)));
ASSERT_TRUE(GetParser()->Parse(stream, XFA_PacketType::Config));
CXFA_Node* root = GetParser()->GetRootNode();
- ASSERT_TRUE(root != nullptr);
- EXPECT_FALSE(GetDoc()->HasFlag(XFA_DOCFLAG_Scripting));
+ ASSERT_TRUE(root);
+ EXPECT_FALSE(GetDoc()->is_scripting());
}
TEST_F(CXFA_DocumentParserTest, XMLInstructionsScriptOn) {
- static const char input[] =
+ static const char kInput[] =
"<config>\n"
"<?originalXFAVersion http://www.xfa.org/schema/xfa-template/2.7 "
"v2.7-scripting:1 ?>\n"
"</config>";
- EXPECT_FALSE(GetDoc()->HasFlag(XFA_DOCFLAG_Scripting));
+ EXPECT_FALSE(GetDoc()->is_scripting());
auto stream = pdfium::MakeRetain<CFX_ReadOnlyMemoryStream>(
- pdfium::as_bytes(pdfium::make_span(input)));
+ pdfium::as_bytes(pdfium::make_span(kInput)));
ASSERT_TRUE(GetParser()->Parse(stream, XFA_PacketType::Config));
CXFA_Node* root = GetParser()->GetRootNode();
- ASSERT_TRUE(root != nullptr);
- EXPECT_TRUE(GetDoc()->HasFlag(XFA_DOCFLAG_Scripting));
+ ASSERT_TRUE(root);
+ EXPECT_TRUE(GetDoc()->is_scripting());
}
TEST_F(CXFA_DocumentParserTest, XMLInstructionsStrictScope) {
- static const char input[] =
+ static const char kInput[] =
"<config>"
"<?acrobat JavaScript strictScoping ?>\n"
"</config>";
- EXPECT_FALSE(GetDoc()->HasFlag(XFA_DOCFLAG_StrictScoping));
+ EXPECT_FALSE(GetDoc()->is_strict_scoping());
auto stream = pdfium::MakeRetain<CFX_ReadOnlyMemoryStream>(
- pdfium::as_bytes(pdfium::make_span(input)));
+ pdfium::as_bytes(pdfium::make_span(kInput)));
ASSERT_TRUE(GetParser()->Parse(stream, XFA_PacketType::Config));
CXFA_Node* root = GetParser()->GetRootNode();
- ASSERT_TRUE(root != nullptr);
- EXPECT_TRUE(GetDoc()->HasFlag(XFA_DOCFLAG_StrictScoping));
+ ASSERT_TRUE(root);
+ EXPECT_TRUE(GetDoc()->is_strict_scoping());
}
TEST_F(CXFA_DocumentParserTest, XMLInstructionsStrictScopeBad) {
- static const char input[] =
+ static const char kInput[] =
"<config>"
"<?acrobat JavaScript otherScoping ?>\n"
"</config>";
- EXPECT_FALSE(GetDoc()->HasFlag(XFA_DOCFLAG_StrictScoping));
+ EXPECT_FALSE(GetDoc()->is_strict_scoping());
auto stream = pdfium::MakeRetain<CFX_ReadOnlyMemoryStream>(
- pdfium::as_bytes(pdfium::make_span(input)));
+ pdfium::as_bytes(pdfium::make_span(kInput)));
ASSERT_TRUE(GetParser()->Parse(stream, XFA_PacketType::Config));
CXFA_Node* root = GetParser()->GetRootNode();
- ASSERT_TRUE(root != nullptr);
- EXPECT_FALSE(GetDoc()->HasFlag(XFA_DOCFLAG_StrictScoping));
+ ASSERT_TRUE(root);
+ EXPECT_FALSE(GetDoc()->is_strict_scoping());
}
TEST_F(CXFA_DocumentParserTest, MultipleXMLInstructions) {
- static const char input[] =
+ static const char kInput[] =
"<config>"
"<?originalXFAVersion http://www.xfa.org/schema/xfa-template/2.7 "
"v2.7-scripting:1 ?>\n"
"<?acrobat JavaScript strictScoping ?>\n"
"</config>";
- EXPECT_FALSE(GetDoc()->HasFlag(XFA_DOCFLAG_Scripting));
- EXPECT_FALSE(GetDoc()->HasFlag(XFA_DOCFLAG_StrictScoping));
+ EXPECT_FALSE(GetDoc()->is_scripting());
+ EXPECT_FALSE(GetDoc()->is_strict_scoping());
auto stream = pdfium::MakeRetain<CFX_ReadOnlyMemoryStream>(
- pdfium::as_bytes(pdfium::make_span(input)));
+ pdfium::as_bytes(pdfium::make_span(kInput)));
ASSERT_TRUE(GetParser()->Parse(stream, XFA_PacketType::Config));
CXFA_Node* root = GetParser()->GetRootNode();
- ASSERT_TRUE(root != nullptr);
+ ASSERT_TRUE(root);
- EXPECT_TRUE(GetDoc()->HasFlag(XFA_DOCFLAG_Scripting));
- EXPECT_TRUE(GetDoc()->HasFlag(XFA_DOCFLAG_StrictScoping));
+ EXPECT_TRUE(GetDoc()->is_scripting());
+ EXPECT_TRUE(GetDoc()->is_strict_scoping());
}
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 465f786..59d5b73 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -2599,18 +2599,14 @@
}
XFA_VERSION version = pDocView->GetDoc()->GetXFADoc()->GetCurVersionMode();
- bool bVersionFlag = false;
- if (version < XFA_VERSION_208)
- bVersionFlag = true;
+ bool bVersionFlag = version < XFA_VERSION_208;
if (bInitDoc) {
validate->ClearFlag(XFA_NodeFlag_NeedsInitApp);
} else {
iFormat = ProcessFormatTestValidate(pDocView, validate, bVersionFlag);
- if (!bVersionFlag) {
- bVersionFlag =
- pDocView->GetDoc()->GetXFADoc()->HasFlag(XFA_DOCFLAG_Scripting);
- }
+ if (!bVersionFlag)
+ bVersionFlag = pDocView->GetDoc()->GetXFADoc()->is_scripting();
XFA_EventErrorAccumulate(
&iRet,
ProcessNullTestValidate(pDocView, validate, iFlags, bVersionFlag));