summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Sinclair <dsinclair@chromium.org>2017-11-01 18:46:47 +0000
committerChromium commit bot <commit-bot@chromium.org>2017-11-01 18:46:47 +0000
commit778f2feb328ac4321762b8dcf94ebc0a1bac79f5 (patch)
tree05bc5dcf30a98a012fc028942ffc7b641a2a69da
parent4ac35f239938877b15e6bbe1a5c73aab14a2ae5d (diff)
downloadpdfium-778f2feb328ac4321762b8dcf94ebc0a1bac79f5.tar.xz
Move CXFA_NodeList JS to CJX_NodeList
This CL moves the JS from CXFA_NodeList to CJX_NodeList and proxies the JS calls. Change-Id: Ic2295ce2140321748bfe5f851e00da32d4332ce0 Reviewed-on: https://pdfium-review.googlesource.com/17312 Commit-Queue: dsinclair <dsinclair@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org>
-rw-r--r--BUILD.gn2
-rw-r--r--fxjs/cjx_nodelist.cpp114
-rw-r--r--fxjs/cjx_nodelist.h35
-rw-r--r--xfa/fxfa/parser/cxfa_nodelist.cpp78
-rw-r--r--xfa/fxfa/parser/cxfa_nodelist.h3
5 files changed, 162 insertions, 70 deletions
diff --git a/BUILD.gn b/BUILD.gn
index 6c5996f675..4ae03b3010 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1301,6 +1301,8 @@ static_library("fxjs") {
"fxjs/cfxjse_value.h",
"fxjs/cjx_node.cpp",
"fxjs/cjx_node.h",
+ "fxjs/cjx_nodelist.cpp",
+ "fxjs/cjx_nodelist.h",
"fxjs/cjx_object.cpp",
"fxjs/cjx_object.h",
"fxjs/fxjse.h",
diff --git a/fxjs/cjx_nodelist.cpp b/fxjs/cjx_nodelist.cpp
new file mode 100644
index 0000000000..8200e2ef08
--- /dev/null
+++ b/fxjs/cjx_nodelist.cpp
@@ -0,0 +1,114 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "fxjs/cjx_nodelist.h"
+
+#include "fxjs/cfxjse_arguments.h"
+#include "fxjs/cfxjse_engine.h"
+#include "fxjs/cfxjse_value.h"
+#include "xfa/fxfa/parser/cxfa_document.h"
+#include "xfa/fxfa/parser/cxfa_node.h"
+#include "xfa/fxfa/parser/cxfa_nodelist.h"
+
+CJX_NodeList::CJX_NodeList(CXFA_NodeList* list) : CJX_Object(list) {}
+
+CJX_NodeList::~CJX_NodeList() {}
+
+CXFA_NodeList* CJX_NodeList::GetXFANodeList() {
+ return static_cast<CXFA_NodeList*>(GetXFAObject());
+}
+
+void CJX_NodeList::Script_ListClass_Append(CFXJSE_Arguments* pArguments) {
+ int32_t argc = pArguments->GetLength();
+ if (argc != 1) {
+ ThrowParamCountMismatchException(L"append");
+ return;
+ }
+
+ auto* pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
+ if (!pNode) {
+ ThrowArgumentMismatchException();
+ return;
+ }
+ GetXFANodeList()->Append(pNode);
+}
+
+void CJX_NodeList::Script_ListClass_Insert(CFXJSE_Arguments* pArguments) {
+ int32_t argc = pArguments->GetLength();
+ if (argc != 2) {
+ ThrowParamCountMismatchException(L"insert");
+ return;
+ }
+
+ auto* pNewNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
+ auto* pBeforeNode = static_cast<CXFA_Node*>(pArguments->GetObject(1));
+ if (!pNewNode) {
+ ThrowArgumentMismatchException();
+ return;
+ }
+ GetXFANodeList()->Insert(pNewNode, pBeforeNode);
+}
+
+void CJX_NodeList::Script_ListClass_Remove(CFXJSE_Arguments* pArguments) {
+ int32_t argc = pArguments->GetLength();
+ if (argc != 1) {
+ ThrowParamCountMismatchException(L"remove");
+ return;
+ }
+
+ auto* pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
+ if (!pNode) {
+ ThrowArgumentMismatchException();
+ return;
+ }
+ GetXFANodeList()->Remove(pNode);
+}
+
+void CJX_NodeList::Script_ListClass_Item(CFXJSE_Arguments* pArguments) {
+ int32_t argc = pArguments->GetLength();
+ if (argc != 1) {
+ ThrowParamCountMismatchException(L"item");
+ return;
+ }
+
+ int32_t iIndex = pArguments->GetInt32(0);
+ if (iIndex < 0 || iIndex >= GetXFANodeList()->GetLength()) {
+ ThrowIndexOutOfBoundsException();
+ return;
+ }
+ pArguments->GetReturnValue()->Assign(
+ GetXFANodeList()->GetDocument()->GetScriptContext()->GetJSValueFromMap(
+ GetXFANodeList()->Item(iIndex)));
+}
+
+void CJX_NodeList::Script_TreelistClass_NamedItem(
+ CFXJSE_Arguments* pArguments) {
+ int32_t argc = pArguments->GetLength();
+ if (argc != 1) {
+ ThrowParamCountMismatchException(L"namedItem");
+ return;
+ }
+
+ ByteString szName = pArguments->GetUTF8String(0);
+ CXFA_Node* pNode = GetXFANodeList()->NamedItem(
+ WideString::FromUTF8(szName.AsStringView()).AsStringView());
+ if (!pNode)
+ return;
+
+ pArguments->GetReturnValue()->Assign(
+ GetXFANodeList()->GetDocument()->GetScriptContext()->GetJSValueFromMap(
+ pNode));
+}
+
+void CJX_NodeList::Script_ListClass_Length(CFXJSE_Value* pValue,
+ bool bSetting,
+ XFA_ATTRIBUTE eAttribute) {
+ if (bSetting) {
+ ThrowInvalidPropertyException();
+ return;
+ }
+ pValue->SetInteger(GetXFANodeList()->GetLength());
+}
diff --git a/fxjs/cjx_nodelist.h b/fxjs/cjx_nodelist.h
new file mode 100644
index 0000000000..eec9b23960
--- /dev/null
+++ b/fxjs/cjx_nodelist.h
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef FXJS_CJX_NODELIST_H_
+#define FXJS_CJX_NODELIST_H_
+
+#include "fxjs/cjx_object.h"
+#include "xfa/fxfa/fxfa_basic.h"
+
+class CFXJSE_Arguments;
+class CFXJSE_Value;
+class CXFA_NodeList;
+
+class CJX_NodeList : public CJX_Object {
+ public:
+ explicit CJX_NodeList(CXFA_NodeList* list);
+ ~CJX_NodeList() override;
+
+ CXFA_NodeList* GetXFANodeList();
+
+ void Script_ListClass_Append(CFXJSE_Arguments* pArguments);
+ void Script_ListClass_Insert(CFXJSE_Arguments* pArguments);
+ void Script_ListClass_Remove(CFXJSE_Arguments* pArguments);
+ void Script_ListClass_Item(CFXJSE_Arguments* pArguments);
+
+ void Script_TreelistClass_NamedItem(CFXJSE_Arguments* pArguments);
+ void Script_ListClass_Length(CFXJSE_Value* pValue,
+ bool bSetting,
+ XFA_ATTRIBUTE eAttribute);
+};
+
+#endif // FXJS_CJX_NODELIST_H_
diff --git a/xfa/fxfa/parser/cxfa_nodelist.cpp b/xfa/fxfa/parser/cxfa_nodelist.cpp
index 4c5e5435c2..31e3bf6764 100644
--- a/xfa/fxfa/parser/cxfa_nodelist.cpp
+++ b/xfa/fxfa/parser/cxfa_nodelist.cpp
@@ -10,6 +10,7 @@
#include "core/fxcrt/fx_extension.h"
#include "fxjs/cfxjse_engine.h"
+#include "fxjs/cjx_nodelist.h"
#include "xfa/fxfa/parser/cxfa_document.h"
#include "xfa/fxfa/parser/cxfa_node.h"
@@ -18,7 +19,7 @@ CXFA_NodeList::CXFA_NodeList(CXFA_Document* pDocument)
XFA_ObjectType::NodeList,
XFA_Element::NodeList,
WideStringView(L"nodeList"),
- pdfium::MakeUnique<CJX_Object>(this)) {
+ pdfium::MakeUnique<CJX_NodeList>(this)) {
m_pDocument->GetScriptContext()->AddToCacheList(
std::unique_ptr<CXFA_NodeList>(this));
}
@@ -37,91 +38,28 @@ CXFA_Node* CXFA_NodeList::NamedItem(const WideStringView& wsName) {
}
void CXFA_NodeList::Script_ListClass_Append(CFXJSE_Arguments* pArguments) {
- int32_t argc = pArguments->GetLength();
- if (argc != 1) {
- JSObject()->ThrowParamCountMismatchException(L"append");
- return;
- }
-
- CXFA_Node* pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
- if (!pNode) {
- JSObject()->ThrowArgumentMismatchException();
- return;
- }
- Append(pNode);
+ JSNodeList()->Script_ListClass_Append(pArguments);
}
void CXFA_NodeList::Script_ListClass_Insert(CFXJSE_Arguments* pArguments) {
- int32_t argc = pArguments->GetLength();
- if (argc != 2) {
- JSObject()->ThrowParamCountMismatchException(L"insert");
- return;
- }
-
- CXFA_Node* pNewNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
- CXFA_Node* pBeforeNode = static_cast<CXFA_Node*>(pArguments->GetObject(1));
- if (!pNewNode) {
- JSObject()->ThrowArgumentMismatchException();
- return;
- }
- Insert(pNewNode, pBeforeNode);
+ JSNodeList()->Script_ListClass_Insert(pArguments);
}
void CXFA_NodeList::Script_ListClass_Remove(CFXJSE_Arguments* pArguments) {
- int32_t argc = pArguments->GetLength();
- if (argc != 1) {
- JSObject()->ThrowParamCountMismatchException(L"remove");
- return;
- }
-
- CXFA_Node* pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
- if (!pNode) {
- JSObject()->ThrowArgumentMismatchException();
- return;
- }
- Remove(pNode);
+ JSNodeList()->Script_ListClass_Remove(pArguments);
}
void CXFA_NodeList::Script_ListClass_Item(CFXJSE_Arguments* pArguments) {
- int32_t argc = pArguments->GetLength();
- if (argc != 1) {
- JSObject()->ThrowParamCountMismatchException(L"item");
- return;
- }
-
- int32_t iIndex = pArguments->GetInt32(0);
- if (iIndex < 0 || iIndex >= GetLength()) {
- JSObject()->ThrowIndexOutOfBoundsException();
- return;
- }
- pArguments->GetReturnValue()->Assign(
- m_pDocument->GetScriptContext()->GetJSValueFromMap(Item(iIndex)));
+ JSNodeList()->Script_ListClass_Item(pArguments);
}
void CXFA_NodeList::Script_TreelistClass_NamedItem(
CFXJSE_Arguments* pArguments) {
- int32_t argc = pArguments->GetLength();
- if (argc != 1) {
- JSObject()->ThrowParamCountMismatchException(L"namedItem");
- return;
- }
-
- ByteString szName = pArguments->GetUTF8String(0);
- CXFA_Node* pNode =
- NamedItem(WideString::FromUTF8(szName.AsStringView()).AsStringView());
- if (!pNode)
- return;
-
- pArguments->GetReturnValue()->Assign(
- m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode));
+ JSNodeList()->Script_TreelistClass_NamedItem(pArguments);
}
void CXFA_NodeList::Script_ListClass_Length(CFXJSE_Value* pValue,
bool bSetting,
XFA_ATTRIBUTE eAttribute) {
- if (bSetting) {
- JSObject()->ThrowInvalidPropertyException();
- return;
- }
- pValue->SetInteger(GetLength());
+ JSNodeList()->Script_ListClass_Length(pValue, bSetting, eAttribute);
}
diff --git a/xfa/fxfa/parser/cxfa_nodelist.h b/xfa/fxfa/parser/cxfa_nodelist.h
index 2fccd5d7a5..ec2176e44d 100644
--- a/xfa/fxfa/parser/cxfa_nodelist.h
+++ b/xfa/fxfa/parser/cxfa_nodelist.h
@@ -7,6 +7,7 @@
#ifndef XFA_FXFA_PARSER_CXFA_NODELIST_H_
#define XFA_FXFA_PARSER_CXFA_NODELIST_H_
+#include "fxjs/cjx_nodelist.h"
#include "xfa/fxfa/fxfa_basic.h"
#include "xfa/fxfa/parser/cxfa_object.h"
@@ -19,6 +20,8 @@ class CXFA_NodeList : public CXFA_Object {
explicit CXFA_NodeList(CXFA_Document* pDocument);
~CXFA_NodeList() override;
+ CJX_NodeList* JSNodeList() { return static_cast<CJX_NodeList*>(JSObject()); }
+
CXFA_Node* NamedItem(const WideStringView& wsName);
virtual int32_t GetLength() = 0;
virtual bool Append(CXFA_Node* pNode) = 0;