diff --git a/xfa/fwl/core/cfwl_barcode.cpp b/xfa/fwl/core/cfwl_barcode.cpp
index 97249c9..49e417e 100644
--- a/xfa/fwl/core/cfwl_barcode.cpp
+++ b/xfa/fwl/core/cfwl_barcode.cpp
@@ -7,6 +7,7 @@
 #include "xfa/fwl/core/cfwl_barcode.h"
 
 #include <memory>
+#include <utility>
 
 #include "third_party/base/ptr_util.h"
 
@@ -26,8 +27,10 @@
 void CFWL_Barcode::Initialize() {
   ASSERT(!m_pIface);
 
-  m_pIface = pdfium::MakeUnique<IFWL_Barcode>(
-      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(this));
+  auto iface = pdfium::MakeUnique<IFWL_Barcode>(
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>());
+  iface->SetDataProvider(this);
+  m_pIface = std::move(iface);
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_checkbox.cpp b/xfa/fwl/core/cfwl_checkbox.cpp
index 0e757c3..5053d2f 100644
--- a/xfa/fwl/core/cfwl_checkbox.cpp
+++ b/xfa/fwl/core/cfwl_checkbox.cpp
@@ -7,6 +7,7 @@
 #include "xfa/fwl/core/cfwl_checkbox.h"
 
 #include <memory>
+#include <utility>
 
 #include "third_party/base/ptr_util.h"
 #include "xfa/fwl/core/fwl_error.h"
@@ -19,8 +20,10 @@
 void CFWL_CheckBox::Initialize() {
   ASSERT(!m_pIface);
 
-  m_pIface = pdfium::MakeUnique<IFWL_CheckBox>(
-      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(this));
+  auto iface = pdfium::MakeUnique<IFWL_CheckBox>(
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>());
+  iface->SetDataProvider(this);
+  m_pIface = std::move(iface);
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_combobox.cpp b/xfa/fwl/core/cfwl_combobox.cpp
index 7eb04b5..532f49f 100644
--- a/xfa/fwl/core/cfwl_combobox.cpp
+++ b/xfa/fwl/core/cfwl_combobox.cpp
@@ -29,7 +29,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_ComboBox>(
-      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(this));
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>());
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_combobox.h b/xfa/fwl/core/cfwl_combobox.h
index a670ef2..7b6f434 100644
--- a/xfa/fwl/core/cfwl_combobox.h
+++ b/xfa/fwl/core/cfwl_combobox.h
@@ -13,7 +13,7 @@
 #include "xfa/fwl/core/cfwl_widget.h"
 #include "xfa/fwl/core/ifwl_combobox.h"
 
-class CFWL_ComboBox : public CFWL_Widget, public IFWL_Widget::DataProvider {
+class CFWL_ComboBox : public CFWL_Widget {
  public:
   explicit CFWL_ComboBox(const CFWL_App* pApp);
   ~CFWL_ComboBox() override;
diff --git a/xfa/fwl/core/cfwl_datetimepicker.cpp b/xfa/fwl/core/cfwl_datetimepicker.cpp
index a1d628d..98aae94 100644
--- a/xfa/fwl/core/cfwl_datetimepicker.cpp
+++ b/xfa/fwl/core/cfwl_datetimepicker.cpp
@@ -30,7 +30,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_DateTimePicker>(
-      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(this));
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>());
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_datetimepicker.h b/xfa/fwl/core/cfwl_datetimepicker.h
index 67d0ff1..08e092e 100644
--- a/xfa/fwl/core/cfwl_datetimepicker.h
+++ b/xfa/fwl/core/cfwl_datetimepicker.h
@@ -10,8 +10,7 @@
 #include "xfa/fwl/core/cfwl_widget.h"
 #include "xfa/fwl/core/ifwl_datetimepicker.h"
 
-class CFWL_DateTimePicker : public CFWL_Widget,
-                            public IFWL_Widget::DataProvider {
+class CFWL_DateTimePicker : public CFWL_Widget {
  public:
   explicit CFWL_DateTimePicker(const CFWL_App* pApp);
   ~CFWL_DateTimePicker() override;
diff --git a/xfa/fwl/core/cfwl_listbox.cpp b/xfa/fwl/core/cfwl_listbox.cpp
index bf77989..784bf24 100644
--- a/xfa/fwl/core/cfwl_listbox.cpp
+++ b/xfa/fwl/core/cfwl_listbox.cpp
@@ -29,7 +29,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_ListBox>(
-      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(this), nullptr);
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(), nullptr);
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_listbox.h b/xfa/fwl/core/cfwl_listbox.h
index 941cbfb..36d13bd 100644
--- a/xfa/fwl/core/cfwl_listbox.h
+++ b/xfa/fwl/core/cfwl_listbox.h
@@ -10,12 +10,11 @@
 #include <memory>
 #include <vector>
 
+#include "xfa/fwl/core/cfwl_listitem.h"
 #include "xfa/fwl/core/cfwl_widget.h"
 #include "xfa/fwl/core/fwl_error.h"
-#include "xfa/fwl/core/ifwl_listbox.h"
-#include "xfa/fwl/core/ifwl_widget.h"
 
-class CFWL_ListBox : public CFWL_Widget, public IFWL_ListBox::DataProvider {
+class CFWL_ListBox : public CFWL_Widget {
  public:
   explicit CFWL_ListBox(const CFWL_App* pApp);
   ~CFWL_ListBox() override;
diff --git a/xfa/fwl/core/cfwl_picturebox.cpp b/xfa/fwl/core/cfwl_picturebox.cpp
index c1a331a..af0cb86 100644
--- a/xfa/fwl/core/cfwl_picturebox.cpp
+++ b/xfa/fwl/core/cfwl_picturebox.cpp
@@ -18,7 +18,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_PictureBox>(
-      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(this));
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>());
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_picturebox.h b/xfa/fwl/core/cfwl_picturebox.h
index e23a6ab..a7b3f1f 100644
--- a/xfa/fwl/core/cfwl_picturebox.h
+++ b/xfa/fwl/core/cfwl_picturebox.h
@@ -9,9 +9,8 @@
 
 #include "xfa/fwl/core/cfwl_widget.h"
 #include "xfa/fwl/core/ifwl_picturebox.h"
-#include "xfa/fwl/core/ifwl_widget.h"
 
-class CFWL_PictureBox : public CFWL_Widget, public IFWL_Widget::DataProvider {
+class CFWL_PictureBox : public CFWL_Widget {
  public:
   explicit CFWL_PictureBox(const CFWL_App* pApp);
   ~CFWL_PictureBox() override;
diff --git a/xfa/fwl/core/cfwl_pushbutton.cpp b/xfa/fwl/core/cfwl_pushbutton.cpp
index 33c6698..5fddff0 100644
--- a/xfa/fwl/core/cfwl_pushbutton.cpp
+++ b/xfa/fwl/core/cfwl_pushbutton.cpp
@@ -18,7 +18,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_PushButton>(
-      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(this));
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>());
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_pushbutton.h b/xfa/fwl/core/cfwl_pushbutton.h
index be8c5eb..66fa406 100644
--- a/xfa/fwl/core/cfwl_pushbutton.h
+++ b/xfa/fwl/core/cfwl_pushbutton.h
@@ -9,9 +9,8 @@
 
 #include "xfa/fwl/core/cfwl_widget.h"
 #include "xfa/fwl/core/ifwl_pushbutton.h"
-#include "xfa/fwl/core/ifwl_widget.h"
 
-class CFWL_PushButton : public CFWL_Widget, public IFWL_Widget::DataProvider {
+class CFWL_PushButton : public CFWL_Widget {
  public:
   explicit CFWL_PushButton(const CFWL_App*);
   ~CFWL_PushButton() override;
diff --git a/xfa/fwl/core/cfwl_widgetproperties.cpp b/xfa/fwl/core/cfwl_widgetproperties.cpp
index 409b7f5..6e03300 100644
--- a/xfa/fwl/core/cfwl_widgetproperties.cpp
+++ b/xfa/fwl/core/cfwl_widgetproperties.cpp
@@ -7,15 +7,10 @@
 #include "xfa/fwl/core/cfwl_widgetproperties.h"
 
 CFWL_WidgetProperties::CFWL_WidgetProperties()
-    : CFWL_WidgetProperties(nullptr) {}
-
-CFWL_WidgetProperties::CFWL_WidgetProperties(
-    IFWL_Widget::DataProvider* dataProvider)
     : m_dwStyles(FWL_WGTSTYLE_Child),
       m_dwStyleExes(0),
       m_dwStates(0),
       m_pThemeProvider(nullptr),
-      m_pDataProvider(dataProvider),
       m_pParent(nullptr),
       m_pOwner(nullptr) {
   m_rtWidget.Set(0, 0, 0, 0);
diff --git a/xfa/fwl/core/cfwl_widgetproperties.h b/xfa/fwl/core/cfwl_widgetproperties.h
index 5b2a602..c8746f5 100644
--- a/xfa/fwl/core/cfwl_widgetproperties.h
+++ b/xfa/fwl/core/cfwl_widgetproperties.h
@@ -18,7 +18,6 @@
 class CFWL_WidgetProperties {
  public:
   CFWL_WidgetProperties();
-  explicit CFWL_WidgetProperties(IFWL_Widget::DataProvider* dataProvider);
   ~CFWL_WidgetProperties();
 
   CFX_RectF m_rtWidget;
@@ -26,7 +25,6 @@
   uint32_t m_dwStyleExes;
   uint32_t m_dwStates;
   IFWL_ThemeProvider* m_pThemeProvider;
-  IFWL_Widget::DataProvider* m_pDataProvider;
   IFWL_Widget* m_pParent;
   IFWL_Widget* m_pOwner;
 };
diff --git a/xfa/fwl/core/ifwl_barcode.cpp b/xfa/fwl/core/ifwl_barcode.cpp
index d5ab17f..b4cd13a 100644
--- a/xfa/fwl/core/ifwl_barcode.cpp
+++ b/xfa/fwl/core/ifwl_barcode.cpp
@@ -66,10 +66,6 @@
 
   m_dwStatus = 0;
   CreateBarcodeEngine();
-  IFWL_Barcode::DataProvider* pData =
-      static_cast<IFWL_Barcode::DataProvider*>(m_pProperties->m_pDataProvider);
-  if (!pData)
-    return;
   if (!m_pBarcodeEngine)
     return;
 
@@ -98,33 +94,35 @@
 
   m_pBarcodeEngine->SetHeight(int32_t(GetRTClient().height));
   m_pBarcodeEngine->SetWidth(int32_t(GetRTClient().width));
-  uint32_t dwAttributeMask = pData->GetBarcodeAttributeMask();
+  uint32_t dwAttributeMask = m_pDataProvider->GetBarcodeAttributeMask();
   if (dwAttributeMask & FWL_BCDATTRIBUTE_CHARENCODING)
-    m_pBarcodeEngine->SetCharEncoding(pData->GetCharEncoding());
+    m_pBarcodeEngine->SetCharEncoding(m_pDataProvider->GetCharEncoding());
   if (dwAttributeMask & FWL_BCDATTRIBUTE_MODULEHEIGHT)
-    m_pBarcodeEngine->SetModuleHeight(pData->GetModuleHeight());
+    m_pBarcodeEngine->SetModuleHeight(m_pDataProvider->GetModuleHeight());
   if (dwAttributeMask & FWL_BCDATTRIBUTE_MODULEWIDTH)
-    m_pBarcodeEngine->SetModuleWidth(pData->GetModuleWidth());
+    m_pBarcodeEngine->SetModuleWidth(m_pDataProvider->GetModuleWidth());
   if (dwAttributeMask & FWL_BCDATTRIBUTE_DATALENGTH)
-    m_pBarcodeEngine->SetDataLength(pData->GetDataLength());
+    m_pBarcodeEngine->SetDataLength(m_pDataProvider->GetDataLength());
   if (dwAttributeMask & FWL_BCDATTRIBUTE_CALCHECKSUM)
-    m_pBarcodeEngine->SetCalChecksum(pData->GetCalChecksum());
+    m_pBarcodeEngine->SetCalChecksum(m_pDataProvider->GetCalChecksum());
   if (dwAttributeMask & FWL_BCDATTRIBUTE_PRINTCHECKSUM)
-    m_pBarcodeEngine->SetPrintChecksum(pData->GetPrintChecksum());
+    m_pBarcodeEngine->SetPrintChecksum(m_pDataProvider->GetPrintChecksum());
   if (dwAttributeMask & FWL_BCDATTRIBUTE_TEXTLOCATION)
-    m_pBarcodeEngine->SetTextLocation(pData->GetTextLocation());
+    m_pBarcodeEngine->SetTextLocation(m_pDataProvider->GetTextLocation());
   if (dwAttributeMask & FWL_BCDATTRIBUTE_WIDENARROWRATIO)
-    m_pBarcodeEngine->SetWideNarrowRatio(pData->GetWideNarrowRatio());
+    m_pBarcodeEngine->SetWideNarrowRatio(m_pDataProvider->GetWideNarrowRatio());
   if (dwAttributeMask & FWL_BCDATTRIBUTE_STARTCHAR)
-    m_pBarcodeEngine->SetStartChar(pData->GetStartChar());
+    m_pBarcodeEngine->SetStartChar(m_pDataProvider->GetStartChar());
   if (dwAttributeMask & FWL_BCDATTRIBUTE_ENDCHAR)
-    m_pBarcodeEngine->SetEndChar(pData->GetEndChar());
+    m_pBarcodeEngine->SetEndChar(m_pDataProvider->GetEndChar());
   if (dwAttributeMask & FWL_BCDATTRIBUTE_VERSION)
-    m_pBarcodeEngine->SetVersion(pData->GetVersion());
-  if (dwAttributeMask & FWL_BCDATTRIBUTE_ECLEVEL)
-    m_pBarcodeEngine->SetErrorCorrectionLevel(pData->GetErrorCorrectionLevel());
+    m_pBarcodeEngine->SetVersion(m_pDataProvider->GetVersion());
+  if (dwAttributeMask & FWL_BCDATTRIBUTE_ECLEVEL) {
+    m_pBarcodeEngine->SetErrorCorrectionLevel(
+        m_pDataProvider->GetErrorCorrectionLevel());
+  }
   if (dwAttributeMask & FWL_BCDATTRIBUTE_TRUNCATED)
-    m_pBarcodeEngine->SetTruncated(pData->GetTruncated());
+    m_pBarcodeEngine->SetTruncated(m_pDataProvider->GetTruncated());
 
   int32_t errorCode = 0;
   m_dwStatus = m_pBarcodeEngine->Encode(wsText.AsStringC(), true, errorCode)
diff --git a/xfa/fwl/core/ifwl_barcode.h b/xfa/fwl/core/ifwl_barcode.h
index 2a4c9d7..7c6f346 100644
--- a/xfa/fwl/core/ifwl_barcode.h
+++ b/xfa/fwl/core/ifwl_barcode.h
@@ -40,7 +40,7 @@
 
 class IFWL_Barcode : public IFWL_Edit {
  public:
-  class DataProvider : public IFWL_Widget::DataProvider {
+  class DataProvider {
    public:
     virtual BC_CHAR_ENCODING GetCharEncoding() const = 0;
     virtual int32_t GetModuleHeight() const = 0;
@@ -75,11 +75,16 @@
   void SetType(BC_TYPE type);
   bool IsProtectedType() const;
 
+  void SetDataProvider(IFWL_Barcode::DataProvider* provider) {
+    m_pDataProvider = provider;
+  }
+
  private:
   void GenerateBarcodeImageCache();
   void CreateBarcodeEngine();
 
   std::unique_ptr<CFX_Barcode> m_pBarcodeEngine;
+  IFWL_Barcode::DataProvider* m_pDataProvider;  // Not owned.
   uint32_t m_dwStatus;
   BC_TYPE m_type;
 };
diff --git a/xfa/fwl/core/ifwl_checkbox.cpp b/xfa/fwl/core/ifwl_checkbox.cpp
index 5268ace..b33eaa6 100644
--- a/xfa/fwl/core/ifwl_checkbox.cpp
+++ b/xfa/fwl/core/ifwl_checkbox.cpp
@@ -57,8 +57,6 @@
     m_pProperties->m_pThemeProvider = GetAvailableTheme();
   if (!m_pProperties->m_pThemeProvider)
     return;
-  if (!m_pProperties->m_pDataProvider)
-    return;
 
   CFX_SizeF sz = CalcTextSize(
       L"Check box", m_pProperties->m_pThemeProvider,
@@ -66,9 +64,7 @@
   rect.Set(0, 0, sz.x, sz.y);
   rect.Inflate(kCaptionMargin, kCaptionMargin);
 
-  IFWL_CheckBox::DataProvider* pData =
-      static_cast<IFWL_CheckBox::DataProvider*>(m_pProperties->m_pDataProvider);
-  FX_FLOAT fCheckBox = pData->GetBoxSize(this);
+  FX_FLOAT fCheckBox = m_pDataProvider->GetBoxSize(this);
   rect.width += fCheckBox;
   rect.height = std::max(rect.height, fCheckBox);
   IFWL_Widget::GetWidgetRect(rect, true);
@@ -117,9 +113,6 @@
   param.m_rtPart = m_rtBox;
   pTheme->DrawBackground(&param);
 
-  if (!m_pProperties->m_pDataProvider)
-    return;
-
   CFWL_ThemeText textParam;
   textParam.m_pWidget = this;
   textParam.m_iPart = CFWL_Part::Caption;
@@ -157,15 +150,10 @@
       FXSYS_round(m_pProperties->m_rtWidget.height);
   GetClientRect(m_rtClient);
 
-  if (!m_pProperties->m_pDataProvider)
-    return;
-
   FX_FLOAT fBoxTop = m_rtClient.top;
   FX_FLOAT fClientBottom = m_rtClient.bottom();
 
-  IFWL_CheckBox::DataProvider* pData =
-      static_cast<IFWL_CheckBox::DataProvider*>(m_pProperties->m_pDataProvider);
-  FX_FLOAT fCheckBox = pData->GetBoxSize(this);
+  FX_FLOAT fCheckBox = m_pDataProvider->GetBoxSize(this);
   switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_VLayoutMask) {
     case FWL_STYLEEXT_CKB_Top:
       break;
diff --git a/xfa/fwl/core/ifwl_checkbox.h b/xfa/fwl/core/ifwl_checkbox.h
index 8d777fc..3a5b83c 100644
--- a/xfa/fwl/core/ifwl_checkbox.h
+++ b/xfa/fwl/core/ifwl_checkbox.h
@@ -50,7 +50,7 @@
 
 class IFWL_CheckBox : public IFWL_Widget {
  public:
-  class DataProvider : public IFWL_Widget::DataProvider {
+  class DataProvider {
    public:
     virtual FX_FLOAT GetBoxSize(IFWL_Widget* pWidget) = 0;
   };
@@ -70,6 +70,10 @@
   void OnDrawWidget(CFX_Graphics* pGraphics,
                     const CFX_Matrix* pMatrix) override;
 
+  void SetDataProvider(IFWL_CheckBox::DataProvider* pProvider) {
+    m_pDataProvider = pProvider;
+  }
+
  private:
   void SetCheckState(int32_t iCheck);
   void Layout();
@@ -83,6 +87,7 @@
   void OnMouseLeave();
   void OnKeyDown(CFWL_MsgKey* pMsg);
 
+  IFWL_CheckBox::DataProvider* m_pDataProvider;  // Not owned.
   CFX_RectF m_rtClient;
   CFX_RectF m_rtBox;
   CFX_RectF m_rtCaption;
diff --git a/xfa/fwl/core/ifwl_combobox.cpp b/xfa/fwl/core/ifwl_combobox.cpp
index 19d1c3f..7917b4e 100644
--- a/xfa/fwl/core/ifwl_combobox.cpp
+++ b/xfa/fwl/core/ifwl_combobox.cpp
@@ -50,14 +50,14 @@
     return;
   }
 
-  auto prop =
-      pdfium::MakeUnique<CFWL_WidgetProperties>(m_pProperties->m_pDataProvider);
+  auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
   prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
   prop->m_dwStyles |= FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll;
   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_ListItemIconText)
     prop->m_dwStyleExes |= FWL_STYLEEXT_LTB_Icon;
+  m_pListBox =
+      pdfium::MakeUnique<IFWL_ComboList>(m_pOwnerApp, std::move(prop), this);
 
-  m_pListBox.reset(new IFWL_ComboList(m_pOwnerApp, std::move(prop), this));
   if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown) && !m_pEdit) {
     m_pEdit.reset(new IFWL_ComboEdit(
         m_pOwnerApp, pdfium::MakeUnique<CFWL_WidgetProperties>(), this));
@@ -590,13 +590,11 @@
   if (m_pListBox)
     return;
 
-  auto prop =
-      pdfium::MakeUnique<CFWL_WidgetProperties>(m_pProperties->m_pDataProvider);
+  auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
   prop->m_pParent = this;
   prop->m_dwStyles = FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll;
   prop->m_dwStates = FWL_WGTSTATE_Invisible;
   prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
-
   m_pListBox =
       pdfium::MakeUnique<IFWL_ComboList>(m_pOwnerApp, std::move(prop), this);
 }
diff --git a/xfa/fwl/core/ifwl_datetimepicker.cpp b/xfa/fwl/core/ifwl_datetimepicker.cpp
index 1a7cf2c..f97e955 100644
--- a/xfa/fwl/core/ifwl_datetimepicker.cpp
+++ b/xfa/fwl/core/ifwl_datetimepicker.cpp
@@ -41,7 +41,7 @@
 
   m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat;
 
-  auto monthProp = pdfium::MakeUnique<CFWL_WidgetProperties>(this);
+  auto monthProp = pdfium::MakeUnique<CFWL_WidgetProperties>();
   monthProp->m_dwStyles = FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border;
   monthProp->m_dwStates = FWL_WGTSTATE_Invisible;
   monthProp->m_pParent = this;
diff --git a/xfa/fwl/core/ifwl_datetimepicker.h b/xfa/fwl/core/ifwl_datetimepicker.h
index 3b0dc39..7d73002 100644
--- a/xfa/fwl/core/ifwl_datetimepicker.h
+++ b/xfa/fwl/core/ifwl_datetimepicker.h
@@ -35,8 +35,7 @@
 class IFWL_DateTimeEdit;
 class IFWL_FormProxy;
 
-class IFWL_DateTimePicker : public IFWL_Widget,
-                            public IFWL_Widget::DataProvider {
+class IFWL_DateTimePicker : public IFWL_Widget {
  public:
   explicit IFWL_DateTimePicker(
       const CFWL_App* app,
diff --git a/xfa/fwl/core/ifwl_picturebox.cpp b/xfa/fwl/core/ifwl_picturebox.cpp
index 3cffa52..9a3fbf3 100644
--- a/xfa/fwl/core/ifwl_picturebox.cpp
+++ b/xfa/fwl/core/ifwl_picturebox.cpp
@@ -35,8 +35,7 @@
   }
 
   rect.Set(0, 0, 0, 0);
-  if (!m_pProperties->m_pDataProvider)
-    return;
+
   IFWL_Widget::GetWidgetRect(rect, true);
 }
 
diff --git a/xfa/fwl/core/ifwl_spinbutton.cpp b/xfa/fwl/core/ifwl_spinbutton.cpp
index 39da43e..d4b790a 100644
--- a/xfa/fwl/core/ifwl_spinbutton.cpp
+++ b/xfa/fwl/core/ifwl_spinbutton.cpp
@@ -221,8 +221,6 @@
   m_bLButtonDwn = true;
   SetGrab(true);
   SetFocus(true);
-  if (!m_pProperties->m_pDataProvider)
-    return;
 
   bool bUpPress =
       (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsButtonEnabled(true));
@@ -274,8 +272,6 @@
 }
 
 void IFWL_SpinButton::OnMouseMove(CFWL_MsgMouse* pMsg) {
-  if (!m_pProperties->m_pDataProvider)
-    return;
   if (m_bLButtonDwn)
     return;
 
@@ -351,9 +347,6 @@
 }
 
 void IFWL_SpinButton::OnKeyDown(CFWL_MsgKey* pMsg) {
-  if (!m_pProperties->m_pDataProvider)
-    return;
-
   bool bUp =
       pMsg->m_dwKeyCode == FWL_VKEY_Up || pMsg->m_dwKeyCode == FWL_VKEY_Left;
   bool bDown =
diff --git a/xfa/fwl/core/ifwl_widget.cpp b/xfa/fwl/core/ifwl_widget.cpp
index a44ad97..dca89c9 100644
--- a/xfa/fwl/core/ifwl_widget.cpp
+++ b/xfa/fwl/core/ifwl_widget.cpp
@@ -285,10 +285,6 @@
   return m_pProperties->m_pThemeProvider;
 }
 
-IFWL_Widget::DataProvider* IFWL_Widget::GetDataProvider() const {
-  return m_pProperties->m_pDataProvider;
-}
-
 void IFWL_Widget::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) {
   m_pProperties->m_pThemeProvider = pThemeProvider;
 }
diff --git a/xfa/fwl/core/ifwl_widget.h b/xfa/fwl/core/ifwl_widget.h
index 7d2faf0..056a0c8 100644
--- a/xfa/fwl/core/ifwl_widget.h
+++ b/xfa/fwl/core/ifwl_widget.h
@@ -64,8 +64,6 @@
 
 class IFWL_Widget : public IFWL_WidgetDelegate {
  public:
-  class DataProvider {};
-
   ~IFWL_Widget() override;
 
   virtual FWL_Type GetClassID() const = 0;
@@ -108,7 +106,6 @@
   void TransformTo(IFWL_Widget* pWidget, FX_FLOAT& fx, FX_FLOAT& fy);
   void GetMatrix(CFX_Matrix& matrix, bool bGlobal = false);
   IFWL_ThemeProvider* GetThemeProvider() const;
-  IFWL_Widget::DataProvider* GetDataProvider() const;
 
   void SetDelegate(IFWL_WidgetDelegate* delegate) { m_pDelegate = delegate; }
   IFWL_WidgetDelegate* GetDelegate() {
