Use CFXA_Script subclass for scripts in XFA.
-- remove unused bool return value.
Change-Id: I705464bdf20e35a4815b4f7188f9d090afde2e34
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/94031
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/xfa/cfxjse_engine.cpp b/fxjs/xfa/cfxjse_engine.cpp
index 8784a20..7a4e436 100644
--- a/fxjs/xfa/cfxjse_engine.cpp
+++ b/fxjs/xfa/cfxjse_engine.cpp
@@ -34,6 +34,7 @@
#include "xfa/fxfa/parser/cxfa_node.h"
#include "xfa/fxfa/parser/cxfa_object.h"
#include "xfa/fxfa/parser/cxfa_thisproxy.h"
+#include "xfa/fxfa/parser/cxfa_variables.h"
#include "xfa/fxfa/parser/xfa_basic_data.h"
#include "xfa/fxfa/parser/xfa_utils.h"
@@ -319,7 +320,8 @@
CXFA_Object* pScriptObject =
pScriptContext->GetVariablesScript(pOriginalObject);
if (pScriptObject && pScriptContext->QueryVariableValue(
- pScriptObject->AsNode(), szPropName, &pValue)) {
+ CXFA_Script::FromNode(pScriptObject->AsNode()),
+ szPropName, &pValue)) {
return pValue;
}
@@ -401,8 +403,9 @@
if (!pScriptObject)
return pReturnValue;
- if (pScriptContext->QueryVariableValue(ToNode(pScriptObject), szPropName,
- &pReturnValue)) {
+ if (pScriptContext->QueryVariableValue(
+ CXFA_Script::FromNode(pScriptObject->AsNode()), szPropName,
+ &pReturnValue)) {
return pReturnValue;
}
absl::optional<XFA_SCRIPTATTRIBUTEINFO> info = XFA_GetScriptAttributeByName(
@@ -483,8 +486,8 @@
CXFA_Object* pScriptObject =
pScriptContext->GetVariablesScript(pOriginalObject);
if (pScriptObject) {
- pScriptContext->UpdateVariableValue(ToNode(pScriptObject), szPropName,
- pValue);
+ pScriptContext->UpdateVariableValue(
+ CXFA_Script::FromNode(pScriptObject->AsNode()), szPropName, pValue);
}
}
@@ -546,7 +549,7 @@
return !m_upObjectArray.empty() ? m_upObjectArray.back() : nullptr;
}
-CFXJSE_Context* CFXJSE_Engine::CreateVariablesContext(CXFA_Node* pScriptNode,
+CFXJSE_Context* CFXJSE_Engine::CreateVariablesContext(CXFA_Script* pScriptNode,
CXFA_Node* pSubform) {
if (!pScriptNode || !pSubform)
return nullptr;
@@ -573,29 +576,26 @@
return pProxy ? pProxy->GetScriptNode() : pObject;
}
-bool CFXJSE_Engine::RunVariablesScript(CXFA_Node* pScriptNode) {
+void CFXJSE_Engine::RunVariablesScript(CXFA_Script* pScriptNode) {
if (!pScriptNode)
- return false;
+ return;
- if (pScriptNode->GetElementType() != XFA_Element::Script)
- return true;
-
- CXFA_Node* pParent = pScriptNode->GetParent();
- if (!pParent || pParent->GetElementType() != XFA_Element::Variables)
- return false;
+ auto* pParent = CXFA_Variables::FromNode(pScriptNode->GetParent());
+ if (!pParent)
+ return;
auto it = m_mapVariableToContext.find(pScriptNode->JSObject());
if (it != m_mapVariableToContext.end() && it->second)
- return true;
+ return;
CXFA_Node* pTextNode = pScriptNode->GetFirstChild();
if (!pTextNode)
- return false;
+ return;
absl::optional<WideString> wsScript =
pTextNode->JSObject()->TryCData(XFA_Attribute::Value, true);
if (!wsScript.has_value())
- return false;
+ return;
ByteString btScript = wsScript->ToUTF8();
auto hRetValue = std::make_unique<CFXJSE_Value>();
@@ -604,26 +604,24 @@
CreateVariablesContext(pScriptNode, pThisObject);
AutoRestorer<cppgc::Persistent<CXFA_Object>> nodeRestorer(&m_pThisObject);
m_pThisObject = pThisObject;
- return pVariablesContext->ExecuteScript(
- btScript.AsStringView(), hRetValue.get(), v8::Local<v8::Object>());
+ pVariablesContext->ExecuteScript(btScript.AsStringView(), hRetValue.get(),
+ v8::Local<v8::Object>());
}
CFXJSE_Context* CFXJSE_Engine::VariablesContextForScriptNode(
- CXFA_Node* pScriptNode) {
- if (!pScriptNode || pScriptNode->GetElementType() != XFA_Element::Script)
+ CXFA_Script* pScriptNode) {
+ if (!pScriptNode)
return nullptr;
- CXFA_Node* variablesNode = pScriptNode->GetParent();
- if (!variablesNode ||
- variablesNode->GetElementType() != XFA_Element::Variables) {
+ auto* variablesNode = CXFA_Variables::FromNode(pScriptNode->GetParent());
+ if (!variablesNode)
return nullptr;
- }
auto it = m_mapVariableToContext.find(pScriptNode->JSObject());
return it != m_mapVariableToContext.end() ? it->second.get() : nullptr;
}
-bool CFXJSE_Engine::QueryVariableValue(CXFA_Node* pScriptNode,
+bool CFXJSE_Engine::QueryVariableValue(CXFA_Script* pScriptNode,
ByteStringView szPropName,
v8::Local<v8::Value>* pValue) {
CFXJSE_Context* pVariableContext = VariablesContextForScriptNode(pScriptNode);
@@ -649,7 +647,7 @@
return true;
}
-bool CFXJSE_Engine::UpdateVariableValue(CXFA_Node* pScriptNode,
+bool CFXJSE_Engine::UpdateVariableValue(CXFA_Script* pScriptNode,
ByteStringView szPropName,
v8::Local<v8::Value> pValue) {
CFXJSE_Context* pVariableContext = VariablesContextForScriptNode(pScriptNode);
@@ -859,8 +857,7 @@
v8::Local<v8::Object> CFXJSE_Engine::GetOrCreateJSBindingFromMap(
CXFA_Object* pObject) {
- if (pObject->IsNode())
- RunVariablesScript(pObject->AsNode());
+ RunVariablesScript(CXFA_Script::FromNode(pObject->AsNode()));
CJX_Object* pCJXObject = pObject->JSObject();
auto iter = m_mapObjectToObject.find(pCJXObject);
diff --git a/fxjs/xfa/cfxjse_engine.h b/fxjs/xfa/cfxjse_engine.h
index 21c0ff4..ce8108e 100644
--- a/fxjs/xfa/cfxjse_engine.h
+++ b/fxjs/xfa/cfxjse_engine.h
@@ -150,7 +150,7 @@
bool IsResolvingNodes() const { return m_bResolvingNodes; }
private:
- CFXJSE_Context* CreateVariablesContext(CXFA_Node* pScriptNode,
+ CFXJSE_Context* CreateVariablesContext(CXFA_Script* pScriptNode,
CXFA_Node* pSubform);
void RemoveBuiltInObjs(CFXJSE_Context* pContext);
bool QueryNodeByFlag(CXFA_Node* refNode,
@@ -164,14 +164,14 @@
bool IsStrictScopeInJavaScript();
CXFA_Object* GetVariablesThis(CXFA_Object* pObject);
CXFA_Object* GetVariablesScript(CXFA_Object* pObject);
- CFXJSE_Context* VariablesContextForScriptNode(CXFA_Node* pScriptNode);
- bool QueryVariableValue(CXFA_Node* pScriptNode,
+ CFXJSE_Context* VariablesContextForScriptNode(CXFA_Script* pScriptNode);
+ bool QueryVariableValue(CXFA_Script* pScriptNode,
ByteStringView szPropName,
v8::Local<v8::Value>* pValue);
- bool UpdateVariableValue(CXFA_Node* pScriptNode,
+ bool UpdateVariableValue(CXFA_Script* pScriptNode,
ByteStringView szPropName,
v8::Local<v8::Value> pValue);
- bool RunVariablesScript(CXFA_Node* pScriptNode);
+ void RunVariablesScript(CXFA_Script* pScriptNode);
UnownedPtr<CJS_Runtime> const m_pSubordinateRuntime;
cppgc::WeakPersistent<CXFA_Document> const m_pDocument;
diff --git a/xfa/fxfa/parser/cxfa_script.cpp b/xfa/fxfa/parser/cxfa_script.cpp
index e5791ca..cc15761 100644
--- a/xfa/fxfa/parser/cxfa_script.cpp
+++ b/xfa/fxfa/parser/cxfa_script.cpp
@@ -32,6 +32,13 @@
} // namespace
+// static
+CXFA_Script* CXFA_Script::FromNode(CXFA_Node* pNode) {
+ return pNode && pNode->GetElementType() == XFA_Element::Script
+ ? static_cast<CXFA_Script*>(pNode)
+ : nullptr;
+}
+
CXFA_Script::CXFA_Script(CXFA_Document* doc, XFA_PacketType packet)
: CXFA_Node(doc,
packet,
diff --git a/xfa/fxfa/parser/cxfa_script.h b/xfa/fxfa/parser/cxfa_script.h
index 065a400..2eaa672 100644
--- a/xfa/fxfa/parser/cxfa_script.h
+++ b/xfa/fxfa/parser/cxfa_script.h
@@ -18,6 +18,8 @@
Unknown,
};
+ static CXFA_Script* FromNode(CXFA_Node* pNode);
+
CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
~CXFA_Script() override;
diff --git a/xfa/fxfa/parser/cxfa_thisproxy.cpp b/xfa/fxfa/parser/cxfa_thisproxy.cpp
index b16d920..6b346b6 100644
--- a/xfa/fxfa/parser/cxfa_thisproxy.cpp
+++ b/xfa/fxfa/parser/cxfa_thisproxy.cpp
@@ -9,8 +9,9 @@
#include "fxjs/xfa/cjx_object.h"
#include "xfa/fxfa/parser/cxfa_document.h"
#include "xfa/fxfa/parser/cxfa_node.h"
+#include "xfa/fxfa/parser/cxfa_script.h"
-CXFA_ThisProxy::CXFA_ThisProxy(CXFA_Node* pThisNode, CXFA_Node* pScriptNode)
+CXFA_ThisProxy::CXFA_ThisProxy(CXFA_Node* pThisNode, CXFA_Script* pScriptNode)
: CXFA_Object(
pThisNode->GetDocument(),
XFA_ObjectType::ThisProxy,
diff --git a/xfa/fxfa/parser/cxfa_thisproxy.h b/xfa/fxfa/parser/cxfa_thisproxy.h
index 86f595a..e21e214 100644
--- a/xfa/fxfa/parser/cxfa_thisproxy.h
+++ b/xfa/fxfa/parser/cxfa_thisproxy.h
@@ -12,6 +12,7 @@
#include "xfa/fxfa/parser/cxfa_object.h"
class CXFA_Node;
+class CXFA_Script;
class CXFA_ThisProxy final : public CXFA_Object {
public:
@@ -21,13 +22,13 @@
void Trace(cppgc::Visitor* visitor) const override;
CXFA_Node* GetThisNode() const { return m_pThisNode.Get(); }
- CXFA_Node* GetScriptNode() const { return m_pScriptNode.Get(); }
+ CXFA_Script* GetScriptNode() const { return m_pScriptNode.Get(); }
private:
- CXFA_ThisProxy(CXFA_Node* pThisNode, CXFA_Node* pScriptNode);
+ CXFA_ThisProxy(CXFA_Node* pThisNode, CXFA_Script* pScriptNode);
cppgc::Member<CXFA_Node> m_pThisNode;
- cppgc::Member<CXFA_Node> m_pScriptNode;
+ cppgc::Member<CXFA_Script> m_pScriptNode;
};
#endif // XFA_FXFA_PARSER_CXFA_THISPROXY_H_
diff --git a/xfa/fxfa/parser/cxfa_variables.cpp b/xfa/fxfa/parser/cxfa_variables.cpp
index 855b430..db912e3 100644
--- a/xfa/fxfa/parser/cxfa_variables.cpp
+++ b/xfa/fxfa/parser/cxfa_variables.cpp
@@ -19,6 +19,13 @@
} // namespace
+// static
+CXFA_Variables* CXFA_Variables::FromNode(CXFA_Node* pNode) {
+ return pNode && pNode->GetElementType() == XFA_Element::Variables
+ ? static_cast<CXFA_Variables*>(pNode)
+ : nullptr;
+}
+
CXFA_Variables::CXFA_Variables(CXFA_Document* doc, XFA_PacketType packet)
: CXFA_Node(doc,
packet,
diff --git a/xfa/fxfa/parser/cxfa_variables.h b/xfa/fxfa/parser/cxfa_variables.h
index 67ea571..72a3492 100644
--- a/xfa/fxfa/parser/cxfa_variables.h
+++ b/xfa/fxfa/parser/cxfa_variables.h
@@ -11,6 +11,8 @@
class CXFA_Variables final : public CXFA_Node {
public:
+ static CXFA_Variables* FromNode(CXFA_Node* pNode);
+
CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
~CXFA_Variables() override;