Switch from vector to deque for some CXFA_FFDocView members.

This make it easier to iterate through them safely.

Change-Id: Ie2dd3865ffd657ea0135de50f8390f660a95f4c7
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/52834
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/cxfa_ffdocview.cpp b/xfa/fxfa/cxfa_ffdocview.cpp
index 49edda3..9160398 100644
--- a/xfa/fxfa/cxfa_ffdocview.cpp
+++ b/xfa/fxfa/cxfa_ffdocview.cpp
@@ -171,14 +171,11 @@
 
   LockUpdate();
   while (!m_NewAddedNodes.empty()) {
-    std::vector<CXFA_Node*> nodes = std::move(m_NewAddedNodes);
-    m_NewAddedNodes.clear();
-    for (CXFA_Node* pNode : nodes) {
-      InitCalculate(pNode);
-      InitValidate(pNode);
-      ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Ready, true, true);
-    }
-    // May have created more newly added nodes, try again.
+    CXFA_Node* pNode = m_NewAddedNodes.front();
+    m_NewAddedNodes.pop_front();
+    InitCalculate(pNode);
+    InitValidate(pNode);
+    ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Ready, true, true);
   }
 
   RunSubformIndexChange();
@@ -577,13 +574,10 @@
     return false;
 
   while (!m_ValidateNodes.empty()) {
-    std::vector<CXFA_Node*> nodes = std::move(m_ValidateNodes);
-    m_ValidateNodes.clear();
-    for (CXFA_Node* node : nodes) {
-      if (!node->HasRemovedChildren())
-        node->ProcessValidate(this, 0);
-    }
-    // May have created more nodes to validate, try again.
+    CXFA_Node* node = m_ValidateNodes.front();
+    m_ValidateNodes.pop_front();
+    if (!node->HasRemovedChildren())
+      node->ProcessValidate(this, 0);
   }
   return true;
 }
diff --git a/xfa/fxfa/cxfa_ffdocview.h b/xfa/fxfa/cxfa_ffdocview.h
index cb55eea..1c7ab80 100644
--- a/xfa/fxfa/cxfa_ffdocview.h
+++ b/xfa/fxfa/cxfa_ffdocview.h
@@ -7,6 +7,7 @@
 #ifndef XFA_FXFA_CXFA_FFDOCVIEW_H_
 #define XFA_FXFA_CXFA_FFDOCVIEW_H_
 
+#include <deque>
 #include <memory>
 #include <vector>
 
@@ -119,10 +120,10 @@
   UnownedPtr<CXFA_LayoutProcessor> m_pXFADocLayout;
   UnownedPtr<CXFA_Node> m_pFocusNode;
   UnownedPtr<CXFA_FFWidget> m_pFocusWidget;
-  std::vector<CXFA_Node*> m_ValidateNodes;
+  std::deque<CXFA_Node*> m_ValidateNodes;
   std::vector<CXFA_Node*> m_CalculateNodes;
   std::vector<CXFA_BindItems*> m_BindItems;
-  std::vector<CXFA_Node*> m_NewAddedNodes;
+  std::deque<CXFA_Node*> m_NewAddedNodes;
   std::vector<CXFA_Node*> m_IndexChangedSubforms;
   XFA_DOCVIEW_LAYOUTSTATUS m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_None;
   int32_t m_iLock = 0;