Add virtual AddChangedContainer() to CXFA_Document::LayoutProcessorIface.

Prefer interfaces over downcast to specific type as an aid to
improving layering down the road. Can remove one circular include
now, but several still remain between these directories.

Change-Id: I57a570c715b5d5fd9d1069f62f2cce7b9a927dfc
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/63850
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/xfa/cjx_instancemanager.cpp b/fxjs/xfa/cjx_instancemanager.cpp
index af02561..7ea4ba2 100644
--- a/fxjs/xfa/cjx_instancemanager.cpp
+++ b/fxjs/xfa/cjx_instancemanager.cpp
@@ -14,7 +14,6 @@
 #include "fxjs/xfa/cfxjse_value.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
 #include "xfa/fxfa/cxfa_ffnotify.h"
-#include "xfa/fxfa/layout/cxfa_layoutprocessor.h"
 #include "xfa/fxfa/parser/cxfa_document.h"
 #include "xfa/fxfa/parser/cxfa_instancemanager.h"
 #include "xfa/fxfa/parser/cxfa_occur.h"
@@ -103,8 +102,7 @@
       pNotify->RunNodeInitialize(pNewInstance);
     }
   }
-  auto* pLayout = CXFA_LayoutProcessor::FromDocument(GetDocument());
-  pLayout->AddChangedContainer(
+  GetDocument()->GetLayoutProcessor()->AddChangedContainer(
       ToNode(GetDocument()->GetXFAObject(XFA_HASHCODE_Form)));
   return 0;
 }
@@ -126,8 +124,7 @@
 
   GetXFANode()->RemoveItem(pMoveInstance, false);
   GetXFANode()->InsertItem(pMoveInstance, iTo, iCount - 1, true);
-  auto* pLayout = CXFA_LayoutProcessor::FromDocument(GetDocument());
-  pLayout->AddChangedContainer(
+  GetDocument()->GetLayoutProcessor()->AddChangedContainer(
       ToNode(GetDocument()->GetXFAObject(XFA_HASHCODE_Form)));
   return 0;
 }
@@ -199,8 +196,7 @@
       }
     }
   }
-  auto* pLayout = CXFA_LayoutProcessor::FromDocument(GetDocument());
-  pLayout->AddChangedContainer(
+  GetDocument()->GetLayoutProcessor()->AddChangedContainer(
       ToNode(GetDocument()->GetXFAObject(XFA_HASHCODE_Form)));
   return CJS_Result::Success();
 }
@@ -248,9 +244,8 @@
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
   if (pNotify) {
     pNotify->RunNodeInitialize(pNewInstance);
-    CXFA_LayoutProcessor::FromDocument(GetDocument())
-        ->AddChangedContainer(
-            ToNode(GetDocument()->GetXFAObject(XFA_HASHCODE_Form)));
+    GetDocument()->GetLayoutProcessor()->AddChangedContainer(
+        ToNode(GetDocument()->GetXFAObject(XFA_HASHCODE_Form)));
   }
 
   CFXJSE_Value* value =
@@ -294,9 +289,8 @@
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
   if (pNotify) {
     pNotify->RunNodeInitialize(pNewInstance);
-    CXFA_LayoutProcessor::FromDocument(GetDocument())
-        ->AddChangedContainer(
-            ToNode(GetDocument()->GetXFAObject(XFA_HASHCODE_Form)));
+    GetDocument()->GetLayoutProcessor()->AddChangedContainer(
+        ToNode(GetDocument()->GetXFAObject(XFA_HASHCODE_Form)));
   }
 
   CFXJSE_Value* value =
diff --git a/fxjs/xfa/cjx_layoutpseudomodel.cpp b/fxjs/xfa/cjx_layoutpseudomodel.cpp
index 0fdcb5f..35852a8 100644
--- a/fxjs/xfa/cjx_layoutpseudomodel.cpp
+++ b/fxjs/xfa/cjx_layoutpseudomodel.cpp
@@ -402,7 +402,7 @@
     CFX_V8* runtime,
     const std::vector<v8::Local<v8::Value>>& params) {
   CXFA_Node* pRootNode = GetDocument()->GetRoot();
-  auto* pLayoutProcessor = CXFA_LayoutProcessor::FromDocument(GetDocument());
+  auto* pLayoutProcessor = GetDocument()->GetLayoutProcessor();
   CXFA_Form* pFormRoot =
       pRootNode->GetFirstChildByClass<CXFA_Form>(XFA_Element::Form);
   if (pFormRoot) {
diff --git a/xfa/fxfa/cxfa_ffnotify.cpp b/xfa/fxfa/cxfa_ffnotify.cpp
index d610cc4..e69d991 100644
--- a/xfa/fxfa/cxfa_ffnotify.cpp
+++ b/xfa/fxfa/cxfa_ffnotify.cpp
@@ -412,8 +412,7 @@
 }
 
 void CXFA_FFNotify::OnContainerChanged(CXFA_Node* pNode) {
-  auto* pLayout = CXFA_LayoutProcessor::FromDocument(m_pDoc->GetXFADoc());
-  pLayout->AddChangedContainer(pNode);
+  m_pDoc->GetXFADoc()->GetLayoutProcessor()->AddChangedContainer(pNode);
 }
 
 void CXFA_FFNotify::OnChildAdded(CXFA_Node* pSender) {
diff --git a/xfa/fxfa/layout/cxfa_layoutprocessor.h b/xfa/fxfa/layout/cxfa_layoutprocessor.h
index 5b6730a..fab6746 100644
--- a/xfa/fxfa/layout/cxfa_layoutprocessor.h
+++ b/xfa/fxfa/layout/cxfa_layoutprocessor.h
@@ -29,6 +29,7 @@
 
   // CXFA_Document::LayoutProcessorIface:
   void SetForceRelayout(bool bForceRestart) override;
+  void AddChangedContainer(CXFA_Node* pContainer) override;
 
   int32_t StartLayout(bool bForceRestart);
   int32_t DoLayout();
@@ -36,7 +37,6 @@
   int32_t CountPages() const;
   CXFA_ViewLayoutItem* GetPage(int32_t index) const;
   CXFA_LayoutItem* GetLayoutItem(CXFA_Node* pFormItem);
-  void AddChangedContainer(CXFA_Node* pContainer);
   CXFA_ViewLayoutItem* GetRootLayoutItem() const;
   CXFA_ContentLayoutProcessor* GetRootContentLayoutProcessor() const {
     return m_pContentLayoutProcessor.get();
diff --git a/xfa/fxfa/parser/cxfa_document.h b/xfa/fxfa/parser/cxfa_document.h
index 878284c..ea80475 100644
--- a/xfa/fxfa/parser/cxfa_document.h
+++ b/xfa/fxfa/parser/cxfa_document.h
@@ -54,6 +54,7 @@
     LayoutProcessorIface();
     virtual ~LayoutProcessorIface();
     virtual void SetForceRelayout(bool enable) = 0;
+    virtual void AddChangedContainer(CXFA_Node* pContainer) = 0;
 
     void SetDocument(CXFA_Document* pDocument) { m_pDocument = pDocument; }
     CXFA_Document* GetDocument() const { return m_pDocument.Get(); }