Break circular dependency between xfa/fxfa and xfa/fgas.

Move CXFA_LinkUserData and CXFA_TextUserData to xfa/fgas/layout.
Rename them to CFX_LinkUserData and CFX_TextUserData, respectively.

Change-Id: Ie31b58fb72890f01b8fb1b107c04df7c9eaf1a2a
Reviewed-on: https://pdfium-review.googlesource.com/c/50351
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fgas/layout/BUILD.gn b/xfa/fgas/layout/BUILD.gn
index 59b4fcd..ba0b40c 100644
--- a/xfa/fgas/layout/BUILD.gn
+++ b/xfa/fgas/layout/BUILD.gn
@@ -18,8 +18,12 @@
     "cfx_breakpiece.h",
     "cfx_char.cpp",
     "cfx_char.h",
+    "cfx_linkuserdata.cpp",
+    "cfx_linkuserdata.h",
     "cfx_rtfbreak.cpp",
     "cfx_rtfbreak.h",
+    "cfx_textuserdata.cpp",
+    "cfx_textuserdata.h",
     "cfx_txtbreak.cpp",
     "cfx_txtbreak.h",
     "fx_arabic.cpp",
@@ -30,6 +34,7 @@
   deps = [
     "../:fgas",
     "../../../core/fxcrt",
+    "../../../core/fxcrt/css",
     "../../../core/fxge",
   ]
   configs += [
diff --git a/xfa/fgas/layout/cfx_breakpiece.cpp b/xfa/fgas/layout/cfx_breakpiece.cpp
index 9372c2f..b0cc754 100644
--- a/xfa/fgas/layout/cfx_breakpiece.cpp
+++ b/xfa/fgas/layout/cfx_breakpiece.cpp
@@ -6,6 +6,8 @@
 
 #include "xfa/fgas/layout/cfx_breakpiece.h"
 
+#include "xfa/fgas/layout/cfx_textuserdata.h"
+
 CFX_BreakPiece::CFX_BreakPiece()
     : m_dwStatus(CFX_BreakType::Piece),
       m_iStartPos(0),
diff --git a/xfa/fgas/layout/cfx_breakpiece.h b/xfa/fgas/layout/cfx_breakpiece.h
index 9b1ebd6..8ea7032 100644
--- a/xfa/fgas/layout/cfx_breakpiece.h
+++ b/xfa/fgas/layout/cfx_breakpiece.h
@@ -13,7 +13,8 @@
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxcrt/unowned_ptr.h"
 #include "xfa/fgas/layout/cfx_char.h"
-#include "xfa/fxfa/cxfa_textuserdata.h"
+
+class CFX_TextUserData;
 
 class CFX_BreakPiece {
  public:
@@ -41,7 +42,7 @@
   uint32_t m_dwIdentity;
   uint32_t m_dwCharStyles;
   UnownedPtr<std::vector<CFX_Char>> m_pChars;
-  RetainPtr<CXFA_TextUserData> m_pUserData;
+  RetainPtr<CFX_TextUserData> m_pUserData;
 };
 
 #endif  // XFA_FGAS_LAYOUT_CFX_BREAKPIECE_H_
diff --git a/xfa/fxfa/cxfa_linkuserdata.cpp b/xfa/fgas/layout/cfx_linkuserdata.cpp
similarity index 65%
rename from xfa/fxfa/cxfa_linkuserdata.cpp
rename to xfa/fgas/layout/cfx_linkuserdata.cpp
index 84cee35..591d861 100644
--- a/xfa/fxfa/cxfa_linkuserdata.cpp
+++ b/xfa/fgas/layout/cfx_linkuserdata.cpp
@@ -4,9 +4,9 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/fxfa/cxfa_linkuserdata.h"
+#include "xfa/fgas/layout/cfx_linkuserdata.h"
 
-CXFA_LinkUserData::CXFA_LinkUserData(const wchar_t* pszText)
+CFX_LinkUserData::CFX_LinkUserData(const wchar_t* pszText)
     : m_wsURLContent(pszText) {}
 
-CXFA_LinkUserData::~CXFA_LinkUserData() {}
+CFX_LinkUserData::~CFX_LinkUserData() {}
diff --git a/xfa/fxfa/cxfa_linkuserdata.h b/xfa/fgas/layout/cfx_linkuserdata.h
similarity index 67%
rename from xfa/fxfa/cxfa_linkuserdata.h
rename to xfa/fgas/layout/cfx_linkuserdata.h
index baa39aa..6f23b0e 100644
--- a/xfa/fxfa/cxfa_linkuserdata.h
+++ b/xfa/fgas/layout/cfx_linkuserdata.h
@@ -4,14 +4,14 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_FXFA_CXFA_LINKUSERDATA_H_
-#define XFA_FXFA_CXFA_LINKUSERDATA_H_
+#ifndef XFA_FGAS_LAYOUT_CFX_LINKUSERDATA_H_
+#define XFA_FGAS_LAYOUT_CFX_LINKUSERDATA_H_
 
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 #include "core/fxcrt/retain_ptr.h"
 
-class CXFA_LinkUserData final : public Retainable {
+class CFX_LinkUserData final : public Retainable {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
@@ -19,10 +19,10 @@
   const wchar_t* GetLinkURL() const { return m_wsURLContent.c_str(); }
 
  private:
-  explicit CXFA_LinkUserData(const wchar_t* pszText);
-  ~CXFA_LinkUserData() override;
+  explicit CFX_LinkUserData(const wchar_t* pszText);
+  ~CFX_LinkUserData() override;
 
   WideString m_wsURLContent;
 };
 
-#endif  // XFA_FXFA_CXFA_LINKUSERDATA_H_
+#endif  // XFA_FGAS_LAYOUT_CFX_LINKUSERDATA_H_
diff --git a/xfa/fgas/layout/cfx_rtfbreak.cpp b/xfa/fgas/layout/cfx_rtfbreak.cpp
index 407d574..776a2fe 100644
--- a/xfa/fgas/layout/cfx_rtfbreak.cpp
+++ b/xfa/fgas/layout/cfx_rtfbreak.cpp
@@ -13,6 +13,7 @@
 #include "third_party/base/stl_util.h"
 #include "xfa/fgas/font/cfgas_gefont.h"
 #include "xfa/fgas/layout/cfx_char.h"
+#include "xfa/fgas/layout/cfx_textuserdata.h"
 #include "xfa/fgas/layout/fx_arabic.h"
 #include "xfa/fgas/layout/fx_linebreak.h"
 
@@ -43,7 +44,7 @@
   m_PositionedTabs.insert(it, iTabPos);
 }
 
-void CFX_RTFBreak::SetUserData(const RetainPtr<CXFA_TextUserData>& pUserData) {
+void CFX_RTFBreak::SetUserData(const RetainPtr<CFX_TextUserData>& pUserData) {
   if (m_pUserData == pUserData)
     return;
 
@@ -389,7 +390,7 @@
       tp.m_iVerticalScale = pTC->vertical_scale();
       dwIdentity = pTC->m_dwIdentity;
       tp.m_dwIdentity = dwIdentity;
-      tp.m_pUserData = pTC->m_pUserData.As<CXFA_TextUserData>();
+      tp.m_pUserData = pTC->m_pUserData.As<CFX_TextUserData>();
       j = i;
       bNew = false;
     }
@@ -462,7 +463,7 @@
       tp.m_iVerticalScale = pTC->vertical_scale();
       dwIdentity = pTC->m_dwIdentity;
       tp.m_dwIdentity = dwIdentity;
-      tp.m_pUserData = pTC->m_pUserData.As<CXFA_TextUserData>();
+      tp.m_pUserData = pTC->m_pUserData.As<CFX_TextUserData>();
       tp.m_dwStatus = CFX_BreakType::Piece;
       ++i;
     } else if (iBidiLevel != pTC->m_iBidiLevel ||
diff --git a/xfa/fgas/layout/cfx_rtfbreak.h b/xfa/fgas/layout/cfx_rtfbreak.h
index 7af369f..2f09d99 100644
--- a/xfa/fgas/layout/cfx_rtfbreak.h
+++ b/xfa/fgas/layout/cfx_rtfbreak.h
@@ -14,9 +14,9 @@
 #include "core/fxcrt/fx_unicode.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "xfa/fgas/layout/cfx_break.h"
-#include "xfa/fxfa/cxfa_textuserdata.h"
 
 class CFGAS_GEFont;
+class CFX_TextUserData;
 class TextCharPos;
 
 enum class CFX_RTFLineAlignment {
@@ -51,7 +51,7 @@
   void SetLineStartPos(float fLinePos);
 
   void SetAlignment(CFX_RTFLineAlignment align) { m_iAlignment = align; }
-  void SetUserData(const RetainPtr<CXFA_TextUserData>& pUserData);
+  void SetUserData(const RetainPtr<CFX_TextUserData>& pUserData);
 
   void AddPositionedTab(float fTabPos);
 
@@ -90,7 +90,7 @@
   bool m_bPagination;
   std::vector<int32_t> m_PositionedTabs;
   CFX_RTFLineAlignment m_iAlignment;
-  RetainPtr<CXFA_TextUserData> m_pUserData;
+  RetainPtr<CFX_TextUserData> m_pUserData;
 };
 
 #endif  // XFA_FGAS_LAYOUT_CFX_RTFBREAK_H_
diff --git a/xfa/fxfa/cxfa_textuserdata.cpp b/xfa/fgas/layout/cfx_textuserdata.cpp
similarity index 68%
rename from xfa/fxfa/cxfa_textuserdata.cpp
rename to xfa/fgas/layout/cfx_textuserdata.cpp
index 6c46978..f5151bd 100644
--- a/xfa/fxfa/cxfa_textuserdata.cpp
+++ b/xfa/fgas/layout/cfx_textuserdata.cpp
@@ -4,20 +4,20 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/fxfa/cxfa_textuserdata.h"
+#include "xfa/fgas/layout/cfx_textuserdata.h"
 
 #include "core/fxcrt/css/cfx_css.h"
 #include "core/fxcrt/css/cfx_csscomputedstyle.h"
 #include "core/fxcrt/css/cfx_cssstyleselector.h"
-#include "xfa/fxfa/cxfa_linkuserdata.h"
+#include "xfa/fgas/layout/cfx_linkuserdata.h"
 
-CXFA_TextUserData::CXFA_TextUserData(
+CFX_TextUserData::CFX_TextUserData(
     const RetainPtr<CFX_CSSComputedStyle>& pStyle)
     : m_pStyle(pStyle) {}
 
-CXFA_TextUserData::CXFA_TextUserData(
+CFX_TextUserData::CFX_TextUserData(
     const RetainPtr<CFX_CSSComputedStyle>& pStyle,
-    const RetainPtr<CXFA_LinkUserData>& pLinkData)
+    const RetainPtr<CFX_LinkUserData>& pLinkData)
     : m_pStyle(pStyle), m_pLinkData(pLinkData) {}
 
-CXFA_TextUserData::~CXFA_TextUserData() {}
+CFX_TextUserData::~CFX_TextUserData() {}
diff --git a/xfa/fgas/layout/cfx_textuserdata.h b/xfa/fgas/layout/cfx_textuserdata.h
new file mode 100644
index 0000000..d5aaed9
--- /dev/null
+++ b/xfa/fgas/layout/cfx_textuserdata.h
@@ -0,0 +1,30 @@
+// 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 XFA_FGAS_LAYOUT_CFX_TEXTUSERDATA_H_
+#define XFA_FGAS_LAYOUT_CFX_TEXTUSERDATA_H_
+
+#include "core/fxcrt/retain_ptr.h"
+
+class CFX_CSSComputedStyle;
+class CFX_LinkUserData;
+
+class CFX_TextUserData final : public Retainable {
+ public:
+  template <typename T, typename... Args>
+  friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+
+  RetainPtr<CFX_CSSComputedStyle> m_pStyle;
+  RetainPtr<CFX_LinkUserData> m_pLinkData;
+
+ private:
+  explicit CFX_TextUserData(const RetainPtr<CFX_CSSComputedStyle>& pStyle);
+  CFX_TextUserData(const RetainPtr<CFX_CSSComputedStyle>& pStyle,
+                   const RetainPtr<CFX_LinkUserData>& pLinkData);
+  ~CFX_TextUserData() override;
+};
+
+#endif  // XFA_FGAS_LAYOUT_CFX_TEXTUSERDATA_H_
diff --git a/xfa/fxfa/BUILD.gn b/xfa/fxfa/BUILD.gn
index 2eb80ce..4f4e95f 100644
--- a/xfa/fxfa/BUILD.gn
+++ b/xfa/fxfa/BUILD.gn
@@ -72,8 +72,6 @@
     "cxfa_fwltheme.h",
     "cxfa_imagerenderer.cpp",
     "cxfa_imagerenderer.h",
-    "cxfa_linkuserdata.cpp",
-    "cxfa_linkuserdata.h",
     "cxfa_loadercontext.cpp",
     "cxfa_loadercontext.h",
     "cxfa_pieceline.cpp",
@@ -94,8 +92,6 @@
     "cxfa_textprovider.h",
     "cxfa_texttabstopscontext.cpp",
     "cxfa_texttabstopscontext.h",
-    "cxfa_textuserdata.cpp",
-    "cxfa_textuserdata.h",
     "fxfa.h",
     "fxfa_basic.h",
   ]
@@ -121,8 +117,6 @@
   ]
   allow_circular_includes_from = [
     "../../fxjs",
-    "../fgas",
-    "../fgas/layout",
     "../fwl",
     "layout",
     "parser",
diff --git a/xfa/fxfa/cxfa_fftext.cpp b/xfa/fxfa/cxfa_fftext.cpp
index cca6cc0..0db0aff 100644
--- a/xfa/fxfa/cxfa_fftext.cpp
+++ b/xfa/fxfa/cxfa_fftext.cpp
@@ -6,13 +6,13 @@
 
 #include "xfa/fxfa/cxfa_fftext.h"
 
+#include "xfa/fgas/layout/cfx_linkuserdata.h"
 #include "xfa/fwl/fwl_widgetdef.h"
 #include "xfa/fwl/fwl_widgethit.h"
 #include "xfa/fxfa/cxfa_ffapp.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
 #include "xfa/fxfa/cxfa_ffpageview.h"
 #include "xfa/fxfa/cxfa_ffwidget.h"
-#include "xfa/fxfa/cxfa_linkuserdata.h"
 #include "xfa/fxfa/cxfa_pieceline.h"
 #include "xfa/fxfa/cxfa_textlayout.h"
 #include "xfa/fxfa/cxfa_textpiece.h"
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index 0902bb7..2d6bce9 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -21,15 +21,15 @@
 #include "third_party/base/stl_util.h"
 #include "xfa/fde/cfde_textout.h"
 #include "xfa/fgas/font/cfgas_gefont.h"
+#include "xfa/fgas/layout/cfx_linkuserdata.h"
 #include "xfa/fgas/layout/cfx_rtfbreak.h"
-#include "xfa/fxfa/cxfa_linkuserdata.h"
+#include "xfa/fgas/layout/cfx_textuserdata.h"
 #include "xfa/fxfa/cxfa_loadercontext.h"
 #include "xfa/fxfa/cxfa_pieceline.h"
 #include "xfa/fxfa/cxfa_textparsecontext.h"
 #include "xfa/fxfa/cxfa_textpiece.h"
 #include "xfa/fxfa/cxfa_textprovider.h"
 #include "xfa/fxfa/cxfa_texttabstopscontext.h"
-#include "xfa/fxfa/cxfa_textuserdata.h"
 #include "xfa/fxfa/parser/cxfa_font.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
 #include "xfa/fxfa/parser/cxfa_para.h"
@@ -700,7 +700,7 @@
     float* pLinePos,
     const RetainPtr<CFX_CSSComputedStyle>& pParentStyle,
     bool bSavePieces,
-    RetainPtr<CXFA_LinkUserData> pLinkData,
+    RetainPtr<CFX_LinkUserData> pLinkData,
     bool bEndBreak,
     bool bIsOl,
     int32_t iLiCount) {
@@ -761,7 +761,7 @@
           WideString wsLinkContent = pElement->GetAttribute(L"href");
           if (!wsLinkContent.IsEmpty()) {
             pLinkData =
-                pdfium::MakeRetain<CXFA_LinkUserData>(wsLinkContent.c_str());
+                pdfium::MakeRetain<CFX_LinkUserData>(wsLinkContent.c_str());
           }
         }
 
@@ -815,7 +815,7 @@
 
         if (wsText.GetLength() > 0) {
           if (!m_pLoader || m_pLoader->iChar == 0) {
-            auto pUserData = pdfium::MakeRetain<CXFA_TextUserData>(
+            auto pUserData = pdfium::MakeRetain<CFX_TextUserData>(
                 bContentNode ? pParentStyle : pStyle, pLinkData);
             m_pBreak->SetUserData(pUserData);
           }
@@ -1005,7 +1005,7 @@
     int32_t i = 0;
     for (i = 0; i < iPieces; i++) {
       const CFX_BreakPiece* pPiece = m_pBreak->GetBreakPieceUnstable(i);
-      CXFA_TextUserData* pUserData = pPiece->m_pUserData.Get();
+      CFX_TextUserData* pUserData = pPiece->m_pUserData.Get();
       if (pUserData)
         pStyle = pUserData->m_pStyle;
       float fVerScale = pPiece->m_iVerticalScale / 100.0f;
@@ -1057,7 +1057,7 @@
     float fLineWidth = 0;
     for (int32_t i = 0; i < iPieces; i++) {
       const CFX_BreakPiece* pPiece = m_pBreak->GetBreakPieceUnstable(i);
-      CXFA_TextUserData* pUserData = pPiece->m_pUserData.Get();
+      CFX_TextUserData* pUserData = pPiece->m_pUserData.Get();
       if (pUserData)
         pStyle = pUserData->m_pStyle;
       float fVerScale = pPiece->m_iVerticalScale / 100.0f;
diff --git a/xfa/fxfa/cxfa_textlayout.h b/xfa/fxfa/cxfa_textlayout.h
index f09653b..b28be42 100644
--- a/xfa/fxfa/cxfa_textlayout.h
+++ b/xfa/fxfa/cxfa_textlayout.h
@@ -21,7 +21,7 @@
 class CFX_RTFBreak;
 class CFX_RenderDevice;
 class CFX_XMLNode;
-class CXFA_LinkUserData;
+class CFX_LinkUserData;
 class CXFA_Node;
 class CXFA_PieceLine;
 class CXFA_TextPiece;
@@ -86,7 +86,7 @@
                     float* pLinePos,
                     const RetainPtr<CFX_CSSComputedStyle>& pParentStyle,
                     bool bSavePieces,
-                    RetainPtr<CXFA_LinkUserData> pLinkData,
+                    RetainPtr<CFX_LinkUserData> pLinkData,
                     bool bEndBreak,
                     bool bIsOl,
                     int32_t iLiCount);
diff --git a/xfa/fxfa/cxfa_textpiece.cpp b/xfa/fxfa/cxfa_textpiece.cpp
index d6a8d3a..166bb51 100644
--- a/xfa/fxfa/cxfa_textpiece.cpp
+++ b/xfa/fxfa/cxfa_textpiece.cpp
@@ -7,7 +7,7 @@
 #include "xfa/fxfa/cxfa_textpiece.h"
 
 #include "xfa/fgas/font/cfgas_gefont.h"
-#include "xfa/fxfa/cxfa_linkuserdata.h"
+#include "xfa/fgas/layout/cfx_linkuserdata.h"
 
 CXFA_TextPiece::CXFA_TextPiece() {}
 
diff --git a/xfa/fxfa/cxfa_textpiece.h b/xfa/fxfa/cxfa_textpiece.h
index f115c41..d09d066 100644
--- a/xfa/fxfa/cxfa_textpiece.h
+++ b/xfa/fxfa/cxfa_textpiece.h
@@ -15,7 +15,7 @@
 #include "xfa/fxfa/fxfa_basic.h"
 
 class CFGAS_GEFont;
-class CXFA_LinkUserData;
+class CFX_LinkUserData;
 
 class CXFA_TextPiece {
  public:
@@ -35,7 +35,7 @@
   float fFontSize;
   CFX_RectF rtPiece;
   RetainPtr<CFGAS_GEFont> pFont;
-  RetainPtr<CXFA_LinkUserData> pLinkData;
+  RetainPtr<CFX_LinkUserData> pLinkData;
 };
 
 #endif  // XFA_FXFA_CXFA_TEXTPIECE_H_
diff --git a/xfa/fxfa/cxfa_textuserdata.h b/xfa/fxfa/cxfa_textuserdata.h
deleted file mode 100644
index 1fe4fae..0000000
--- a/xfa/fxfa/cxfa_textuserdata.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// 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 XFA_FXFA_CXFA_TEXTUSERDATA_H_
-#define XFA_FXFA_CXFA_TEXTUSERDATA_H_
-
-#include "core/fxcrt/retain_ptr.h"
-
-class CFX_CSSComputedStyle;
-class CXFA_LinkUserData;
-
-class CXFA_TextUserData final : public Retainable {
- public:
-  template <typename T, typename... Args>
-  friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
-  RetainPtr<CFX_CSSComputedStyle> m_pStyle;
-  RetainPtr<CXFA_LinkUserData> m_pLinkData;
-
- private:
-  explicit CXFA_TextUserData(const RetainPtr<CFX_CSSComputedStyle>& pStyle);
-  CXFA_TextUserData(const RetainPtr<CFX_CSSComputedStyle>& pStyle,
-                    const RetainPtr<CXFA_LinkUserData>& pLinkData);
-  ~CXFA_TextUserData() override;
-};
-
-#endif  // XFA_FXFA_CXFA_TEXTUSERDATA_H_