Add back-pointer to "Associated widget" to CFWL_WidgetImp.

This is the last use of CFX_PrivateData, which is now removed.

Review-Url: https://codereview.chromium.org/2016743002
diff --git a/core/fxcrt/fx_basic_util.cpp b/core/fxcrt/fx_basic_util.cpp
index 02e09ce..8eba2cc 100644
--- a/core/fxcrt/fx_basic_util.cpp
+++ b/core/fxcrt/fx_basic_util.cpp
@@ -18,87 +18,6 @@
 #include <cctype>
 #include <memory>
 
-#ifdef PDF_ENABLE_XFA
-CFX_PrivateData::CFX_PrivateData() {}
-
-CFX_PrivateData::~CFX_PrivateData() {
-  ClearAll();
-}
-void FX_PRIVATEDATA::FreeData() {
-  if (!m_pData) {
-    return;
-  }
-  if (m_bSelfDestruct) {
-    delete static_cast<CFX_Deletable*>(m_pData);
-  } else if (m_pCallback) {
-    m_pCallback(m_pData);
-  }
-}
-void CFX_PrivateData::AddData(void* pModuleId,
-                              void* pData,
-                              PD_CALLBACK_FREEDATA callback,
-                              FX_BOOL bSelfDestruct) {
-  if (!pModuleId) {
-    return;
-  }
-  FX_PRIVATEDATA* pList = m_DataList.GetData();
-  int count = m_DataList.GetSize();
-  for (int i = 0; i < count; i++) {
-    if (pList[i].m_pModuleId == pModuleId) {
-      pList[i].FreeData();
-      pList[i].m_pData = pData;
-      pList[i].m_pCallback = callback;
-      return;
-    }
-  }
-  FX_PRIVATEDATA data = {pModuleId, pData, callback, bSelfDestruct};
-  m_DataList.Add(data);
-}
-void CFX_PrivateData::SetPrivateData(void* pModuleId,
-                                     void* pData,
-                                     PD_CALLBACK_FREEDATA callback) {
-  AddData(pModuleId, pData, callback, FALSE);
-}
-void CFX_PrivateData::SetPrivateObj(void* pModuleId, CFX_Deletable* pObj) {
-  AddData(pModuleId, pObj, NULL, TRUE);
-}
-FX_BOOL CFX_PrivateData::RemovePrivateData(void* pModuleId) {
-  if (!pModuleId) {
-    return FALSE;
-  }
-  FX_PRIVATEDATA* pList = m_DataList.GetData();
-  int count = m_DataList.GetSize();
-  for (int i = 0; i < count; i++) {
-    if (pList[i].m_pModuleId == pModuleId) {
-      m_DataList.RemoveAt(i);
-      return TRUE;
-    }
-  }
-  return FALSE;
-}
-void* CFX_PrivateData::GetPrivateData(void* pModuleId) {
-  if (!pModuleId) {
-    return NULL;
-  }
-  FX_PRIVATEDATA* pList = m_DataList.GetData();
-  int count = m_DataList.GetSize();
-  for (int i = 0; i < count; i++) {
-    if (pList[i].m_pModuleId == pModuleId) {
-      return pList[i].m_pData;
-    }
-  }
-  return NULL;
-}
-void CFX_PrivateData::ClearAll() {
-  FX_PRIVATEDATA* pList = m_DataList.GetData();
-  int count = m_DataList.GetSize();
-  for (int i = 0; i < count; i++) {
-    pList[i].FreeData();
-  }
-  m_DataList.RemoveAll();
-}
-#endif  // PDF_ENABLE_XFA
-
 void FX_atonum(const CFX_ByteStringC& strc, FX_BOOL& bInteger, void* pData) {
   if (strc.Find('.') == -1) {
     bInteger = TRUE;
diff --git a/core/fxcrt/include/fx_basic.h b/core/fxcrt/include/fx_basic.h
index 73cb648..13b51bd 100644
--- a/core/fxcrt/include/fx_basic.h
+++ b/core/fxcrt/include/fx_basic.h
@@ -324,9 +324,7 @@
 typedef CFX_ArrayTemplate<FX_FLOAT> CFX_FloatArray;
 typedef CFX_ArrayTemplate<uint8_t> CFX_ByteArray;
 typedef CFX_ArrayTemplate<int32_t> CFX_Int32Array;
-#endif  // PDF_ENABLE_XFA
 
-#ifdef PDF_ENABLE_XFA
 template <class ObjectClass>
 class CFX_ObjectArray : public CFX_BasicArray {
  public:
@@ -621,52 +619,6 @@
 
 #ifdef PDF_ENABLE_XFA
 typedef void (*PD_CALLBACK_FREEDATA)(void* pData);
-struct FX_PRIVATEDATA {
-  void FreeData();
-
-  void* m_pModuleId;
-  void* m_pData;
-  PD_CALLBACK_FREEDATA m_pCallback;
-  FX_BOOL m_bSelfDestruct;
-};
-
-class CFX_PrivateData {
- public:
-  CFX_PrivateData();
-  ~CFX_PrivateData();
-
-  void ClearAll();
-
-  void SetPrivateData(void* module_id,
-                      void* pData,
-                      PD_CALLBACK_FREEDATA callback);
-  void SetPrivateObj(void* module_id, CFX_Deletable* pObj);
-
-  void* GetPrivateData(void* module_id);
-  FX_BOOL LookupPrivateData(void* module_id, void*& pData) const {
-    if (!module_id) {
-      return FALSE;
-    }
-    uint32_t nCount = m_DataList.GetSize();
-    for (uint32_t n = 0; n < nCount; n++) {
-      if (m_DataList[n].m_pModuleId == module_id) {
-        pData = m_DataList[n].m_pData;
-        return TRUE;
-      }
-    }
-    return FALSE;
-  }
-
-  FX_BOOL RemovePrivateData(void* module_id);
-
- protected:
-  CFX_ArrayTemplate<FX_PRIVATEDATA> m_DataList;
-
-  void AddData(void* module_id,
-               void* pData,
-               PD_CALLBACK_FREEDATA callback,
-               FX_BOOL bSelfDestruct);
-};
 #endif  // PDF_ENABLE_XFA
 
 class CFX_BitStream {
diff --git a/xfa/fwl/core/fwl_widgetimp.cpp b/xfa/fwl/core/fwl_widgetimp.cpp
index 38e3a1f..1c0d283 100644
--- a/xfa/fwl/core/fwl_widgetimp.cpp
+++ b/xfa/fwl/core/fwl_widgetimp.cpp
@@ -111,14 +111,14 @@
   GetImpl()->SetLayoutItem(pItem);
 }
 
-FWL_Error IFWL_Widget::SetPrivateData(void* module_id,
-                                      void* pData,
-                                      PD_CALLBACK_FREEDATA callback) {
-  return GetImpl()->SetPrivateData(module_id, pData, callback);
+void* IFWL_Widget::GetAssociateWidget() const {
+  return GetImpl()->GetAssociateWidget();
 }
-void* IFWL_Widget::GetPrivateData(void* module_id) {
-  return GetImpl()->GetPrivateData(module_id);
+
+void IFWL_Widget::SetAssociateWidget(void* pAssociate) {
+  GetImpl()->SetAssociateWidget(pAssociate);
 }
+
 FWL_Error IFWL_Widget::Update() {
   return GetImpl()->Update();
 }
@@ -330,20 +330,6 @@
   }
   return;
 }
-FWL_Error CFWL_WidgetImp::SetPrivateData(void* module_id,
-                                         void* pData,
-                                         PD_CALLBACK_FREEDATA callback) {
-  if (!m_pPrivateData) {
-    m_pPrivateData = new CFX_PrivateData;
-  }
-  m_pPrivateData->SetPrivateData(module_id, pData, callback);
-  return FWL_Error::Succeeded;
-}
-void* CFWL_WidgetImp::GetPrivateData(void* module_id) {
-  if (!m_pPrivateData)
-    return NULL;
-  return m_pPrivateData->GetPrivateData(module_id);
-}
 FWL_Error CFWL_WidgetImp::Update() {
   return FWL_Error::Succeeded;
 }
@@ -533,15 +519,23 @@
   m_pLayoutItem = pItem;
 }
 
+void* CFWL_WidgetImp::GetAssociateWidget() const {
+  return m_pAssociate;
+}
+
+void CFWL_WidgetImp::SetAssociateWidget(void* pAssociate) {
+  m_pAssociate = pAssociate;
+}
+
 CFWL_WidgetImp::CFWL_WidgetImp(const CFWL_WidgetImpProperties& properties,
                                IFWL_Widget* pOuter)
     : m_pProperties(new CFWL_WidgetImpProperties),
-      m_pPrivateData(nullptr),
       m_pDelegate(nullptr),
       m_pCurDelegate(nullptr),
       m_pOuter(pOuter),
       m_pInterface(nullptr),
       m_pLayoutItem(nullptr),
+      m_pAssociate(nullptr),
       m_iLock(0),
       m_nEventKey(0) {
   *m_pProperties = properties;
@@ -550,7 +544,6 @@
 }
 
 CFWL_WidgetImp::~CFWL_WidgetImp() {
-  delete m_pPrivateData;
   delete m_pProperties;
 }
 
diff --git a/xfa/fwl/core/fwl_widgetimp.h b/xfa/fwl/core/fwl_widgetimp.h
index 8a88712..be97c06 100644
--- a/xfa/fwl/core/fwl_widgetimp.h
+++ b/xfa/fwl/core/fwl_widgetimp.h
@@ -52,10 +52,6 @@
                                    uint32_t dwStylesExRemoved);
   virtual uint32_t GetStates();
   virtual void SetStates(uint32_t dwStates, FX_BOOL bSet = TRUE);
-  virtual FWL_Error SetPrivateData(void* module_id,
-                                   void* pData,
-                                   PD_CALLBACK_FREEDATA callback);
-  virtual void* GetPrivateData(void* module_id);
   virtual FWL_Error Update();
   virtual FWL_Error LockUpdate();
   virtual FWL_Error UnlockUpdate();
@@ -82,6 +78,8 @@
   void SetEventKey(uint32_t key);
   void* GetLayoutItem() const;
   void SetLayoutItem(void* pItem);
+  void* GetAssociateWidget() const;
+  void SetAssociateWidget(void* pAssociate);
 
  protected:
   friend class CFWL_WidgetImpDelegate;
@@ -159,12 +157,12 @@
   CFWL_WidgetMgr* m_pWidgetMgr;
   CFWL_AppImp* m_pOwnerApp;
   CFWL_WidgetImpProperties* m_pProperties;
-  CFX_PrivateData* m_pPrivateData;
   IFWL_WidgetDelegate* m_pDelegate;
   IFWL_WidgetDelegate* m_pCurDelegate;
   IFWL_Widget* m_pOuter;
   IFWL_Widget* m_pInterface;
   void* m_pLayoutItem;
+  void* m_pAssociate;
   int32_t m_iLock;
   uint32_t m_nEventKey;
 };
diff --git a/xfa/fwl/core/ifwl_widget.h b/xfa/fwl/core/ifwl_widget.h
index e9da806..0b864fe 100644
--- a/xfa/fwl/core/ifwl_widget.h
+++ b/xfa/fwl/core/ifwl_widget.h
@@ -18,13 +18,16 @@
 // FWL contains three parallel inheritance hierarchies, which reference each
 // other via pointers as follows:
 //
-//                   m_pIface                m_pImpl
+//                              m_pAssociate
+//                  <----------------------------------
 //      CFWL_Widget ----------> IFWL_Widget ----------> CFWL_WidgetImp
-//           |                       |                       |
+//           |       m_pIface        |       m_pImpl         |
 //           A                       A                       A
 //           |                       |                       |
 //      CFWL_...                IFWL_...                CFWL_...Imp
 //
+// TODO(tsepez): Collapse these into a single hierarchy.
+//
 
 enum class FWL_Type {
   Unknown = 0,
@@ -79,10 +82,8 @@
   void SetEventKey(uint32_t key);
   void* GetLayoutItem() const;
   void SetLayoutItem(void* pItem);
-  FWL_Error SetPrivateData(void* module_id,
-                           void* pData,
-                           PD_CALLBACK_FREEDATA callback);
-  void* GetPrivateData(void* module_id);
+  void* GetAssociateWidget() const;
+  void SetAssociateWidget(void* pAssociate);
   FWL_Error Update();
   FWL_Error LockUpdate();
   FWL_Error UnlockUpdate();
diff --git a/xfa/fwl/lightwidget/cfwl_widget.cpp b/xfa/fwl/lightwidget/cfwl_widget.cpp
index 239796d..8022f0a 100644
--- a/xfa/fwl/lightwidget/cfwl_widget.cpp
+++ b/xfa/fwl/lightwidget/cfwl_widget.cpp
@@ -41,12 +41,11 @@
   return m_pIface->IsInstance(wsClass);
 }
 
-static void* gs_pFWLWidget = (void*)FXBSTR_ID('l', 'i', 'g', 't');
-
 FWL_Error CFWL_Widget::Initialize(const CFWL_WidgetProperties* pProperties) {
   if (!m_pIface)
     return FWL_Error::Indefinite;
-  return m_pIface->SetPrivateData(gs_pFWLWidget, this, nullptr);
+  m_pIface->SetAssociateWidget(this);
+  return FWL_Error::Succeeded;
 }
 
 FWL_Error CFWL_Widget::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) {
@@ -78,9 +77,10 @@
     return nullptr;
 
   IFWL_Widget* parent = m_pIface->GetParent();
-  if (parent)
-    return static_cast<CFWL_Widget*>(parent->GetPrivateData(gs_pFWLWidget));
-  return nullptr;
+  if (!parent)
+    return nullptr;
+
+  return static_cast<CFWL_Widget*>(parent->GetAssociateWidget());
 }
 
 FWL_Error CFWL_Widget::SetParent(CFWL_Widget* pParent) {
@@ -141,20 +141,6 @@
     m_pIface->SetLayoutItem(pItem);
 }
 
-FWL_Error CFWL_Widget::SetPrivateData(void* module_id,
-                                      void* pData,
-                                      PD_CALLBACK_FREEDATA callback) {
-  if (!m_pIface)
-    return FWL_Error::Indefinite;
-  return m_pIface->SetPrivateData(module_id, pData, callback);
-}
-
-void* CFWL_Widget::GetPrivateData(void* module_id) {
-  if (!m_pIface)
-    return nullptr;
-  return m_pIface->GetPrivateData(module_id);
-}
-
 FWL_Error CFWL_Widget::Update() {
   if (!m_pIface)
     return FWL_Error::Indefinite;