summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2018-07-28 00:00:33 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-07-28 00:00:33 +0000
commit8584902d81ffabc06bb4895f558e375e5429fe72 (patch)
tree856d3cee8ef5ff8f0897d0c2b6ebb4d75db8fd99
parent522d77db501ab7ae33f7d17e4ab456232ca5a70c (diff)
downloadpdfium-chromium/3506.tar.xz
Remove CXFA_TraverseStrategy_ContentLayoutItem.chromium/3507chromium/3506
It makes illegal casts and requires its callers to double-check the type validity of results before use. Instead, use the parent class iterator and perform checked casts. No functional difference, since it looks like the requisite checks were being made in all places. Make one "using" visible to other files to save some verbosity. Change-Id: I894ca15b4bdddd4723b787663950a58bc58b7f06 Reviewed-on: https://pdfium-review.googlesource.com/39030 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
-rw-r--r--BUILD.gn1
-rw-r--r--fxjs/xfa/cjx_layoutpseudomodel.cpp51
-rw-r--r--xfa/fxfa/cxfa_ffpageview.h5
-rw-r--r--xfa/fxfa/parser/cxfa_traversestrategy_contentlayoutitem.h30
-rw-r--r--xfa/fxfa/parser/cxfa_traversestrategy_layoutitem.h5
5 files changed, 29 insertions, 63 deletions
diff --git a/BUILD.gn b/BUILD.gn
index 09cf28597c..24dfd1df59 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -2759,7 +2759,6 @@ if (pdf_enable_xfa) {
"xfa/fxfa/parser/cxfa_traverse.cpp",
"xfa/fxfa/parser/cxfa_traverse.h",
"xfa/fxfa/parser/cxfa_traversestrategy_contentareacontainerlayoutitem.h",
- "xfa/fxfa/parser/cxfa_traversestrategy_contentlayoutitem.h",
"xfa/fxfa/parser/cxfa_traversestrategy_layoutitem.h",
"xfa/fxfa/parser/cxfa_traversestrategy_xfacontainernode.h",
"xfa/fxfa/parser/cxfa_traversestrategy_xfanode.h",
diff --git a/fxjs/xfa/cjx_layoutpseudomodel.cpp b/fxjs/xfa/cjx_layoutpseudomodel.cpp
index 4918349111..ea842c78e0 100644
--- a/fxjs/xfa/cjx_layoutpseudomodel.cpp
+++ b/fxjs/xfa/cjx_layoutpseudomodel.cpp
@@ -24,7 +24,7 @@
#include "xfa/fxfa/parser/cxfa_measurement.h"
#include "xfa/fxfa/parser/cxfa_node.h"
#include "xfa/fxfa/parser/cxfa_nodeiteratortemplate.h"
-#include "xfa/fxfa/parser/cxfa_traversestrategy_contentlayoutitem.h"
+#include "xfa/fxfa/parser/cxfa_traversestrategy_layoutitem.h"
const CJX_MethodSpec CJX_LayoutPseudoModel::MethodSpecs[] = {
{"absPage", absPage_static},
@@ -244,14 +244,13 @@ std::vector<CXFA_Node*> CJX_LayoutPseudoModel::GetObjArray(
if (pItem->GetFormNode()->GetElementType() == XFA_Element::ContentArea) {
retArray.push_back(pItem->GetFormNode());
if (!bOnPageArea) {
- CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem,
- CXFA_TraverseStrategy_ContentLayoutItem>
- iterator(static_cast<CXFA_ContentLayoutItem*>(pItem->m_pFirstChild));
- for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent();
- pItemChild; pItemChild = iterator.MoveToNext()) {
- if (!pItemChild->IsContentLayoutItem()) {
+ CXFA_LayoutItemIterator iterator(pItem->m_pFirstChild);
+ for (CXFA_LayoutItem* pChild = iterator.GetCurrent(); pChild;
+ pChild = iterator.MoveToNext()) {
+ CXFA_ContentLayoutItem* pItemChild = pChild->AsContentLayoutItem();
+ if (!pItemChild)
continue;
- }
+
XFA_Element eType = pItemChild->GetFormNode()->GetElementType();
if (eType != XFA_Element::Field && eType != XFA_Element::Draw &&
eType != XFA_Element::Subform && eType != XFA_Element::Area) {
@@ -266,14 +265,13 @@ std::vector<CXFA_Node*> CJX_LayoutPseudoModel::GetObjArray(
}
} else {
if (bOnPageArea) {
- CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem,
- CXFA_TraverseStrategy_ContentLayoutItem>
- iterator(static_cast<CXFA_ContentLayoutItem*>(pItem));
- for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent();
- pItemChild; pItemChild = iterator.MoveToNext()) {
- if (!pItemChild->IsContentLayoutItem()) {
+ CXFA_LayoutItemIterator iterator(pItem);
+ for (CXFA_LayoutItem* pChild = iterator.GetCurrent(); pChild;
+ pChild = iterator.MoveToNext()) {
+ CXFA_ContentLayoutItem* pItemChild = pChild->AsContentLayoutItem();
+ if (!pItemChild)
continue;
- }
+
XFA_Element eType = pItemChild->GetFormNode()->GetElementType();
if (eType != XFA_Element::Field && eType != XFA_Element::Draw &&
eType != XFA_Element::Subform && eType != XFA_Element::Area) {
@@ -281,6 +279,7 @@ std::vector<CXFA_Node*> CJX_LayoutPseudoModel::GetObjArray(
}
if (pdfium::ContainsValue(formItems, pItemChild->GetFormNode()))
continue;
+
formItems.insert(pItemChild->GetFormNode());
retArray.push_back(pItemChild->GetFormNode());
}
@@ -305,12 +304,11 @@ std::vector<CXFA_Node*> CJX_LayoutPseudoModel::GetObjArray(
pItem = pItem->m_pNextSibling) {
if (pItem->GetFormNode()->GetElementType() == XFA_Element::ContentArea) {
if (!bOnPageArea) {
- CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem,
- CXFA_TraverseStrategy_ContentLayoutItem>
- iterator(static_cast<CXFA_ContentLayoutItem*>(pItem->m_pFirstChild));
- for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent();
- pItemChild; pItemChild = iterator.MoveToNext()) {
- if (!pItemChild->IsContentLayoutItem())
+ CXFA_LayoutItemIterator iterator(pItem->m_pFirstChild);
+ for (CXFA_LayoutItem* pChild = iterator.GetCurrent(); pChild;
+ pChild = iterator.MoveToNext()) {
+ CXFA_ContentLayoutItem* pItemChild = pChild->AsContentLayoutItem();
+ if (!pItemChild)
continue;
if (pItemChild->GetFormNode()->GetElementType() != eType)
continue;
@@ -323,12 +321,11 @@ std::vector<CXFA_Node*> CJX_LayoutPseudoModel::GetObjArray(
}
} else {
if (bOnPageArea) {
- CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem,
- CXFA_TraverseStrategy_ContentLayoutItem>
- iterator(static_cast<CXFA_ContentLayoutItem*>(pItem));
- for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent();
- pItemChild; pItemChild = iterator.MoveToNext()) {
- if (!pItemChild->IsContentLayoutItem())
+ CXFA_LayoutItemIterator iterator(pItem);
+ for (CXFA_LayoutItem* pChild = iterator.GetCurrent(); pChild;
+ pChild = iterator.MoveToNext()) {
+ CXFA_ContentLayoutItem* pItemChild = pChild->AsContentLayoutItem();
+ if (!pItemChild)
continue;
if (pItemChild->GetFormNode()->GetElementType() != eType)
continue;
diff --git a/xfa/fxfa/cxfa_ffpageview.h b/xfa/fxfa/cxfa_ffpageview.h
index f3ae069638..daf2b1933e 100644
--- a/xfa/fxfa/cxfa_ffpageview.h
+++ b/xfa/fxfa/cxfa_ffpageview.h
@@ -12,7 +12,6 @@
#include "xfa/fxfa/parser/cxfa_containerlayoutitem.h"
#include "xfa/fxfa/parser/cxfa_contentlayoutitem.h"
-#include "xfa/fxfa/parser/cxfa_nodeiteratortemplate.h"
#include "xfa/fxfa/parser/cxfa_traversestrategy_layoutitem.h"
class CXFA_FFWidget;
@@ -34,10 +33,6 @@ class CXFA_FFPageView : public CXFA_ContainerLayoutItem {
UnownedPtr<CXFA_FFDocView> const m_pDocView;
};
-using CXFA_LayoutItemIterator =
- CXFA_NodeIteratorTemplate<CXFA_LayoutItem,
- CXFA_TraverseStrategy_LayoutItem>;
-
class CXFA_FFPageWidgetIterator : public IXFA_WidgetIterator {
public:
CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, uint32_t dwFilter);
diff --git a/xfa/fxfa/parser/cxfa_traversestrategy_contentlayoutitem.h b/xfa/fxfa/parser/cxfa_traversestrategy_contentlayoutitem.h
deleted file mode 100644
index de0d52ab10..0000000000
--- a/xfa/fxfa/parser/cxfa_traversestrategy_contentlayoutitem.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2016 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 XFA_FXFA_PARSER_CXFA_TRAVERSESTRATEGY_CONTENTLAYOUTITEM_H_
-#define XFA_FXFA_PARSER_CXFA_TRAVERSESTRATEGY_CONTENTLAYOUTITEM_H_
-
-#include "xfa/fxfa/parser/cxfa_contentlayoutitem.h"
-
-class CXFA_TraverseStrategy_ContentLayoutItem {
- public:
- static CXFA_ContentLayoutItem* GetFirstChild(
- CXFA_ContentLayoutItem* pLayoutItem) {
- return static_cast<CXFA_ContentLayoutItem*>(pLayoutItem->m_pFirstChild);
- }
-
- static CXFA_ContentLayoutItem* GetNextSibling(
- CXFA_ContentLayoutItem* pLayoutItem) {
- return static_cast<CXFA_ContentLayoutItem*>(pLayoutItem->m_pNextSibling);
- }
-
- static CXFA_ContentLayoutItem* GetParent(
- CXFA_ContentLayoutItem* pLayoutItem) {
- return static_cast<CXFA_ContentLayoutItem*>(pLayoutItem->m_pParent);
- }
-};
-
-#endif // XFA_FXFA_PARSER_CXFA_TRAVERSESTRATEGY_CONTENTLAYOUTITEM_H_
diff --git a/xfa/fxfa/parser/cxfa_traversestrategy_layoutitem.h b/xfa/fxfa/parser/cxfa_traversestrategy_layoutitem.h
index 7b39826130..0371eef449 100644
--- a/xfa/fxfa/parser/cxfa_traversestrategy_layoutitem.h
+++ b/xfa/fxfa/parser/cxfa_traversestrategy_layoutitem.h
@@ -8,6 +8,7 @@
#define XFA_FXFA_PARSER_CXFA_TRAVERSESTRATEGY_LAYOUTITEM_H_
#include "xfa/fxfa/parser/cxfa_layoutitem.h"
+#include "xfa/fxfa/parser/cxfa_nodeiteratortemplate.h"
class CXFA_TraverseStrategy_LayoutItem {
public:
@@ -22,4 +23,8 @@ class CXFA_TraverseStrategy_LayoutItem {
}
};
+using CXFA_LayoutItemIterator =
+ CXFA_NodeIteratorTemplate<CXFA_LayoutItem,
+ CXFA_TraverseStrategy_LayoutItem>;
+
#endif // XFA_FXFA_PARSER_CXFA_TRAVERSESTRATEGY_LAYOUTITEM_H_