Split fwl/core class pt II.

Split classes in FWL to be single class per file. In the case of data providers
which added no new methods, removed and used the IFWL_Widget::DataProvider
directly.

Review-Url: https://codereview.chromium.org/2520063002
diff --git a/xfa/fwl/core/cfwl_barcode.h b/xfa/fwl/core/cfwl_barcode.h
index 95b4cd2..2a4622f 100644
--- a/xfa/fwl/core/cfwl_barcode.h
+++ b/xfa/fwl/core/cfwl_barcode.h
@@ -11,7 +11,7 @@
 #include "xfa/fwl/core/fwl_error.h"
 #include "xfa/fwl/core/ifwl_barcode.h"
 
-class CFWL_Barcode : public CFWL_Edit, public IFWL_BarcodeDP {
+class CFWL_Barcode : public CFWL_Edit, public IFWL_Barcode::DataProvider {
  public:
   explicit CFWL_Barcode(const IFWL_App* pApp);
   ~CFWL_Barcode() override;
@@ -21,7 +21,7 @@
   // IFWL_Widget::DataProvider
   void GetCaption(IFWL_Widget* pWidget, CFX_WideString& wsCaption) override;
 
-  // IFWL_BarcodeDP
+  // IFWL_Barcode::DataProvider
   BC_CHAR_ENCODING GetCharEncoding() const override;
   int32_t GetModuleHeight() const override;
   int32_t GetModuleWidth() const override;
diff --git a/xfa/fwl/core/cfwl_checkbox.h b/xfa/fwl/core/cfwl_checkbox.h
index d395aa0..4d39a94 100644
--- a/xfa/fwl/core/cfwl_checkbox.h
+++ b/xfa/fwl/core/cfwl_checkbox.h
@@ -10,7 +10,7 @@
 #include "xfa/fwl/core/cfwl_widget.h"
 #include "xfa/fwl/core/ifwl_checkbox.h"
 
-class CFWL_CheckBox : public CFWL_Widget, public IFWL_CheckBoxDP {
+class CFWL_CheckBox : public CFWL_Widget, public IFWL_CheckBox::DataProvider {
  public:
   explicit CFWL_CheckBox(const IFWL_App* pApp);
   ~CFWL_CheckBox() override;
@@ -20,7 +20,7 @@
   // IFWL_Widget::DataProvider
   void GetCaption(IFWL_Widget* pWidget, CFX_WideString& wsCaption) override;
 
-  // IFWL_CheckBoxDP
+  // IFWL_CheckBox::DataProvider
   FX_FLOAT GetBoxSize(IFWL_Widget* pWidget) override;
 
   void SetBoxSize(FX_FLOAT fHeight);
diff --git a/xfa/fwl/core/cfwl_datetimepicker.h b/xfa/fwl/core/cfwl_datetimepicker.h
index 8d983c9..68cc421 100644
--- a/xfa/fwl/core/cfwl_datetimepicker.h
+++ b/xfa/fwl/core/cfwl_datetimepicker.h
@@ -10,7 +10,8 @@
 #include "xfa/fwl/core/cfwl_widget.h"
 #include "xfa/fwl/core/ifwl_datetimepicker.h"
 
-class CFWL_DateTimePicker : public CFWL_Widget, public IFWL_DateTimePickerDP {
+class CFWL_DateTimePicker : public CFWL_Widget,
+                            public IFWL_DateTimePicker::DataProvider {
  public:
   explicit CFWL_DateTimePicker(const IFWL_App* pApp);
   ~CFWL_DateTimePicker() override;
@@ -20,7 +21,7 @@
   // IFWL_Widget::DataProvider
   void GetCaption(IFWL_Widget* pWidget, CFX_WideString& wsCaption) override;
 
-  // IFWL_DateTimePickerDP
+  // IFWL_DateTimePicker::DataProvider
   void GetToday(IFWL_Widget* pWidget,
                 int32_t& iYear,
                 int32_t& iMonth,
diff --git a/xfa/fwl/core/cfwl_eventtarget.cpp b/xfa/fwl/core/cfwl_eventtarget.cpp
new file mode 100644
index 0000000..77fb9d8
--- /dev/null
+++ b/xfa/fwl/core/cfwl_eventtarget.cpp
@@ -0,0 +1,74 @@
+// Copyright 2016 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
+
+#include "xfa/fwl/core/cfwl_eventtarget.h"
+
+#include "xfa/fwl/core/ifwl_widget.h"
+#include "xfa/fwl/core/ifwl_widgetdelegate.h"
+
+CFWL_EventTarget::CFWL_EventTarget(IFWL_Widget* pListener)
+    : m_pListener(pListener), m_bInvalid(false) {}
+
+CFWL_EventTarget::~CFWL_EventTarget() {
+  m_eventSources.RemoveAll();
+}
+
+int32_t CFWL_EventTarget::SetEventSource(IFWL_Widget* pSource,
+                                         uint32_t dwFilter) {
+  if (pSource) {
+    m_eventSources.SetAt(pSource, dwFilter);
+    return m_eventSources.GetCount();
+  }
+  return 1;
+}
+
+bool CFWL_EventTarget::ProcessEvent(CFWL_Event* pEvent) {
+  IFWL_WidgetDelegate* pDelegate = m_pListener->GetDelegate();
+  if (!pDelegate)
+    return false;
+  if (m_eventSources.GetCount() == 0) {
+    pDelegate->OnProcessEvent(pEvent);
+    return true;
+  }
+
+  FX_POSITION pos = m_eventSources.GetStartPosition();
+  while (pos) {
+    IFWL_Widget* pSource = nullptr;
+    uint32_t dwFilter = 0;
+    m_eventSources.GetNextAssoc(pos, (void*&)pSource, dwFilter);
+    if (pSource == pEvent->m_pSrcTarget) {
+      if (IsFilterEvent(pEvent, dwFilter)) {
+        pDelegate->OnProcessEvent(pEvent);
+        return true;
+      }
+    }
+  }
+  return false;
+}
+
+bool CFWL_EventTarget::IsFilterEvent(CFWL_Event* pEvent,
+                                     uint32_t dwFilter) const {
+  if (dwFilter == FWL_EVENT_ALL_MASK)
+    return true;
+
+  switch (pEvent->GetClassID()) {
+    case CFWL_EventType::Mouse:
+      return !!(dwFilter & FWL_EVENT_MOUSE_MASK);
+    case CFWL_EventType::MouseWheel:
+      return !!(dwFilter & FWL_EVENT_MOUSEWHEEL_MASK);
+    case CFWL_EventType::Key:
+      return !!(dwFilter & FWL_EVENT_KEY_MASK);
+    case CFWL_EventType::SetFocus:
+    case CFWL_EventType::KillFocus:
+      return !!(dwFilter & FWL_EVENT_FOCUSCHANGED_MASK);
+    case CFWL_EventType::Close:
+      return !!(dwFilter & FWL_EVENT_CLOSE_MASK);
+    case CFWL_EventType::SizeChanged:
+      return !!(dwFilter & FWL_EVENT_SIZECHANGED_MASK);
+    default:
+      return !!(dwFilter & FWL_EVENT_CONTROL_MASK);
+  }
+}
diff --git a/xfa/fwl/core/cfwl_eventtarget.h b/xfa/fwl/core/cfwl_eventtarget.h
new file mode 100644
index 0000000..b7e43ce
--- /dev/null
+++ b/xfa/fwl/core/cfwl_eventtarget.h
@@ -0,0 +1,36 @@
+// Copyright 2016 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_FWL_CORE_CFWL_EVENTTARGET_H_
+#define XFA_FWL_CORE_CFWL_EVENTTARGET_H_
+
+#include "core/fxcrt/fx_basic.h"
+#include "xfa/fwl/core/cfwl_event.h"
+
+class CFWL_Event;
+class IFWL_Widget;
+
+class CFWL_EventTarget {
+ public:
+  explicit CFWL_EventTarget(IFWL_Widget* pListener);
+  ~CFWL_EventTarget();
+
+  int32_t SetEventSource(IFWL_Widget* pSource,
+                         uint32_t dwFilter = FWL_EVENT_ALL_MASK);
+  bool ProcessEvent(CFWL_Event* pEvent);
+
+  bool IsInvalid() const { return m_bInvalid; }
+  void FlagInvalid() { m_bInvalid = true; }
+
+ private:
+  bool IsFilterEvent(CFWL_Event* pEvent, uint32_t dwFilter) const;
+
+  CFX_MapPtrTemplate<void*, uint32_t> m_eventSources;
+  IFWL_Widget* m_pListener;
+  bool m_bInvalid;
+};
+
+#endif  // XFA_FWL_CORE_CFWL_EVENTTARGET_H_
diff --git a/xfa/fwl/core/fwl_noteimp.cpp b/xfa/fwl/core/cfwl_notedriver.cpp
similarity index 86%
rename from xfa/fwl/core/fwl_noteimp.cpp
rename to xfa/fwl/core/cfwl_notedriver.cpp
index 8b9a723..7c53e54 100644
--- a/xfa/fwl/core/fwl_noteimp.cpp
+++ b/xfa/fwl/core/cfwl_notedriver.cpp
@@ -4,24 +4,24 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/fwl/core/fwl_noteimp.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 
 #include <utility>
 
 #include "core/fxcrt/fx_ext.h"
 #include "third_party/base/ptr_util.h"
 #include "third_party/base/stl_util.h"
+#include "xfa/fwl/core/cfwl_eventtarget.h"
 #include "xfa/fwl/core/cfwl_msgkey.h"
 #include "xfa/fwl/core/cfwl_msgkillfocus.h"
 #include "xfa/fwl/core/cfwl_msgmouse.h"
 #include "xfa/fwl/core/cfwl_msgmousewheel.h"
 #include "xfa/fwl/core/cfwl_msgsetfocus.h"
+#include "xfa/fwl/core/cfwl_noteloop.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_tooltip.h"
 
-CFWL_NoteLoop::CFWL_NoteLoop() : m_bContinueModal(true) {}
-
 CFWL_NoteDriver::CFWL_NoteDriver()
     : m_pHover(nullptr),
       m_pFocus(nullptr),
@@ -487,67 +487,3 @@
     }
   }
 }
-
-CFWL_EventTarget::CFWL_EventTarget(IFWL_Widget* pListener)
-    : m_pListener(pListener), m_bInvalid(false) {}
-
-CFWL_EventTarget::~CFWL_EventTarget() {
-  m_eventSources.RemoveAll();
-}
-
-int32_t CFWL_EventTarget::SetEventSource(IFWL_Widget* pSource,
-                                         uint32_t dwFilter) {
-  if (pSource) {
-    m_eventSources.SetAt(pSource, dwFilter);
-    return m_eventSources.GetCount();
-  }
-  return 1;
-}
-
-bool CFWL_EventTarget::ProcessEvent(CFWL_Event* pEvent) {
-  IFWL_WidgetDelegate* pDelegate = m_pListener->GetDelegate();
-  if (!pDelegate)
-    return false;
-  if (m_eventSources.GetCount() == 0) {
-    pDelegate->OnProcessEvent(pEvent);
-    return true;
-  }
-
-  FX_POSITION pos = m_eventSources.GetStartPosition();
-  while (pos) {
-    IFWL_Widget* pSource = nullptr;
-    uint32_t dwFilter = 0;
-    m_eventSources.GetNextAssoc(pos, (void*&)pSource, dwFilter);
-    if (pSource == pEvent->m_pSrcTarget) {
-      if (IsFilterEvent(pEvent, dwFilter)) {
-        pDelegate->OnProcessEvent(pEvent);
-        return true;
-      }
-    }
-  }
-  return false;
-}
-
-bool CFWL_EventTarget::IsFilterEvent(CFWL_Event* pEvent,
-                                     uint32_t dwFilter) const {
-  if (dwFilter == FWL_EVENT_ALL_MASK)
-    return true;
-
-  switch (pEvent->GetClassID()) {
-    case CFWL_EventType::Mouse:
-      return !!(dwFilter & FWL_EVENT_MOUSE_MASK);
-    case CFWL_EventType::MouseWheel:
-      return !!(dwFilter & FWL_EVENT_MOUSEWHEEL_MASK);
-    case CFWL_EventType::Key:
-      return !!(dwFilter & FWL_EVENT_KEY_MASK);
-    case CFWL_EventType::SetFocus:
-    case CFWL_EventType::KillFocus:
-      return !!(dwFilter & FWL_EVENT_FOCUSCHANGED_MASK);
-    case CFWL_EventType::Close:
-      return !!(dwFilter & FWL_EVENT_CLOSE_MASK);
-    case CFWL_EventType::SizeChanged:
-      return !!(dwFilter & FWL_EVENT_SIZECHANGED_MASK);
-    default:
-      return !!(dwFilter & FWL_EVENT_CONTROL_MASK);
-  }
-}
diff --git a/xfa/fwl/core/fwl_noteimp.h b/xfa/fwl/core/cfwl_notedriver.h
similarity index 71%
rename from xfa/fwl/core/fwl_noteimp.h
rename to xfa/fwl/core/cfwl_notedriver.h
index 5a530ed..a9b2c71 100644
--- a/xfa/fwl/core/fwl_noteimp.h
+++ b/xfa/fwl/core/cfwl_notedriver.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_FWL_CORE_FWL_NOTEIMP_H_
-#define XFA_FWL_CORE_FWL_NOTEIMP_H_
+#ifndef XFA_FWL_CORE_CFWL_NOTEDRIVER_H_
+#define XFA_FWL_CORE_CFWL_NOTEDRIVER_H_
 
 #include <deque>
 #include <memory>
@@ -17,25 +17,11 @@
 #include "xfa/fxgraphics/cfx_graphics.h"
 
 class CFWL_EventTarget;
+class CFWL_NoteLoop;
 class CFWL_TargetImp;
 class IFWL_ToolTip;
 class IFWL_Widget;
 
-class CFWL_NoteLoop {
- public:
-  CFWL_NoteLoop();
-  ~CFWL_NoteLoop() {}
-
-  IFWL_Widget* GetForm() const { return m_pForm; }
-  bool ContinueModal() const { return m_bContinueModal; }
-  void EndModalLoop() { m_bContinueModal = false; }
-  void SetMainForm(IFWL_Widget* pForm) { m_pForm = pForm; }
-
- private:
-  IFWL_Widget* m_pForm;
-  bool m_bContinueModal;
-};
-
 class CFWL_NoteDriver {
  public:
   CFWL_NoteDriver();
@@ -93,24 +79,4 @@
   std::unique_ptr<CFWL_NoteLoop> m_pNoteLoop;
 };
 
-class CFWL_EventTarget {
- public:
-  explicit CFWL_EventTarget(IFWL_Widget* pListener);
-  ~CFWL_EventTarget();
-
-  int32_t SetEventSource(IFWL_Widget* pSource,
-                         uint32_t dwFilter = FWL_EVENT_ALL_MASK);
-  bool ProcessEvent(CFWL_Event* pEvent);
-
-  bool IsInvalid() const { return m_bInvalid; }
-  void FlagInvalid() { m_bInvalid = true; }
-
- private:
-  bool IsFilterEvent(CFWL_Event* pEvent, uint32_t dwFilter) const;
-
-  CFX_MapPtrTemplate<void*, uint32_t> m_eventSources;
-  IFWL_Widget* m_pListener;
-  bool m_bInvalid;
-};
-
-#endif  // XFA_FWL_CORE_FWL_NOTEIMP_H_
+#endif  // XFA_FWL_CORE_CFWL_NOTEDRIVER_H_
diff --git a/xfa/fwl/core/cfwl_noteloop.cpp b/xfa/fwl/core/cfwl_noteloop.cpp
new file mode 100644
index 0000000..4b2b610
--- /dev/null
+++ b/xfa/fwl/core/cfwl_noteloop.cpp
@@ -0,0 +1,9 @@
+// Copyright 2016 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
+
+#include "xfa/fwl/core/cfwl_noteloop.h"
+
+CFWL_NoteLoop::CFWL_NoteLoop() : m_bContinueModal(true) {}
diff --git a/xfa/fwl/core/cfwl_noteloop.h b/xfa/fwl/core/cfwl_noteloop.h
new file mode 100644
index 0000000..f07bdc5
--- /dev/null
+++ b/xfa/fwl/core/cfwl_noteloop.h
@@ -0,0 +1,27 @@
+// Copyright 2016 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_FWL_CORE_CFWL_NOTELOOP_H_
+#define XFA_FWL_CORE_CFWL_NOTELOOP_H_
+
+class IFWL_Widget;
+
+class CFWL_NoteLoop {
+ public:
+  CFWL_NoteLoop();
+  ~CFWL_NoteLoop() {}
+
+  IFWL_Widget* GetForm() const { return m_pForm; }
+  bool ContinueModal() const { return m_bContinueModal; }
+  void EndModalLoop() { m_bContinueModal = false; }
+  void SetMainForm(IFWL_Widget* pForm) { m_pForm = pForm; }
+
+ private:
+  IFWL_Widget* m_pForm;
+  bool m_bContinueModal;
+};
+
+#endif  // XFA_FWL_CORE_CFWL_NOTELOOP_H_
diff --git a/xfa/fwl/core/cfwl_themepart.cpp b/xfa/fwl/core/cfwl_themepart.cpp
new file mode 100644
index 0000000..6b48a1e
--- /dev/null
+++ b/xfa/fwl/core/cfwl_themepart.cpp
@@ -0,0 +1,18 @@
+// Copyright 2016 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
+
+#include "xfa/fwl/core/cfwl_themepart.h"
+
+CFWL_ThemePart::CFWL_ThemePart()
+    : m_pWidget(nullptr),
+      m_iPart(CFWL_Part::None),
+      m_dwStates(CFWL_PartState_Normal),
+      m_bMaximize(false),
+      m_bStaticBackground(false),
+      m_pData(nullptr) {
+  m_rtPart.Reset();
+  m_matrix.SetIdentity();
+}
diff --git a/xfa/fwl/core/cfwl_themepart.h b/xfa/fwl/core/cfwl_themepart.h
index 1b2c706..93565e9 100644
--- a/xfa/fwl/core/cfwl_themepart.h
+++ b/xfa/fwl/core/cfwl_themepart.h
@@ -93,15 +93,4 @@
   void* m_pData;
 };
 
-inline CFWL_ThemePart::CFWL_ThemePart()
-    : m_pWidget(nullptr),
-      m_iPart(CFWL_Part::None),
-      m_dwStates(CFWL_PartState_Normal),
-      m_bMaximize(false),
-      m_bStaticBackground(false),
-      m_pData(nullptr) {
-  m_rtPart.Reset();
-  m_matrix.SetIdentity();
-}
-
 #endif  // XFA_FWL_CORE_CFWL_THEMEPART_H_
diff --git a/xfa/fwl/core/cfwl_widget.cpp b/xfa/fwl/core/cfwl_widget.cpp
index 39d86fa..2e08be7 100644
--- a/xfa/fwl/core/cfwl_widget.cpp
+++ b/xfa/fwl/core/cfwl_widget.cpp
@@ -7,9 +7,9 @@
 #include "xfa/fwl/core/cfwl_widget.h"
 
 #include "xfa/fde/tto/fde_textout.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 
diff --git a/xfa/fwl/core/cfwl_widgetmgr.cpp b/xfa/fwl/core/cfwl_widgetmgr.cpp
index 6623e8f..6c11018 100644
--- a/xfa/fwl/core/cfwl_widgetmgr.cpp
+++ b/xfa/fwl/core/cfwl_widgetmgr.cpp
@@ -8,7 +8,8 @@
 
 #include <utility>
 
-#include "xfa/fwl/core/fwl_noteimp.h"
+#include "third_party/base/ptr_util.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_form.h"
 #include "xfa/fxfa/app/xfa_fwladapter.h"
@@ -38,7 +39,7 @@
 CFWL_WidgetMgr::CFWL_WidgetMgr(CXFA_FFApp* pAdapterNative)
     : m_dwCapability(0), m_pAdapter(pAdapterNative->GetWidgetMgr(this)) {
   ASSERT(m_pAdapter);
-  m_mapWidgetItem[nullptr].reset(new CFWL_WidgetMgrItem);
+  m_mapWidgetItem[nullptr] = pdfium::MakeUnique<Item>();
 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_)
   m_rtScreen.Reset();
 #endif
@@ -47,17 +48,17 @@
 CFWL_WidgetMgr::~CFWL_WidgetMgr() {}
 
 IFWL_Widget* CFWL_WidgetMgr::GetParentWidget(IFWL_Widget* pWidget) const {
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   return pItem && pItem->pParent ? pItem->pParent->pWidget : nullptr;
 }
 
 IFWL_Widget* CFWL_WidgetMgr::GetOwnerWidget(IFWL_Widget* pWidget) const {
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   return pItem && pItem->pOwner ? pItem->pOwner->pWidget : nullptr;
 }
 
 IFWL_Widget* CFWL_WidgetMgr::GetFirstSiblingWidget(IFWL_Widget* pWidget) const {
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   if (!pItem)
     return nullptr;
 
@@ -68,22 +69,22 @@
 }
 
 IFWL_Widget* CFWL_WidgetMgr::GetPriorSiblingWidget(IFWL_Widget* pWidget) const {
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   return pItem && pItem->pPrevious ? pItem->pPrevious->pWidget : nullptr;
 }
 
 IFWL_Widget* CFWL_WidgetMgr::GetNextSiblingWidget(IFWL_Widget* pWidget) const {
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   return pItem && pItem->pNext ? pItem->pNext->pWidget : nullptr;
 }
 
 IFWL_Widget* CFWL_WidgetMgr::GetFirstChildWidget(IFWL_Widget* pWidget) const {
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   return pItem && pItem->pChild ? pItem->pChild->pWidget : nullptr;
 }
 
 IFWL_Widget* CFWL_WidgetMgr::GetLastChildWidget(IFWL_Widget* pWidget) const {
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   if (!pItem)
     return nullptr;
 
@@ -94,7 +95,7 @@
 }
 
 IFWL_Widget* CFWL_WidgetMgr::GetSystemFormWidget(IFWL_Widget* pWidget) const {
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   while (pItem) {
     if (IsAbleNative(pItem->pWidget))
       return pItem->pWidget;
@@ -104,13 +105,13 @@
 }
 
 void CFWL_WidgetMgr::SetWidgetIndex(IFWL_Widget* pWidget, int32_t nIndex) {
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   if (!pItem)
     return;
   if (!pItem->pParent)
     return;
 
-  CFWL_WidgetMgrItem* pChild = pItem->pParent->pChild;
+  Item* pChild = pItem->pParent->pChild;
   int32_t i = 0;
   while (pChild) {
     if (pChild == pItem) {
@@ -203,18 +204,21 @@
 void CFWL_WidgetMgr::InsertWidget(IFWL_Widget* pParent,
                                   IFWL_Widget* pChild,
                                   int32_t nIndex) {
-  CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent);
+  Item* pParentItem = GetWidgetMgrItem(pParent);
   if (!pParentItem) {
-    pParentItem = new CFWL_WidgetMgrItem(pParent);
-    m_mapWidgetItem[pParent].reset(pParentItem);
+    auto item = pdfium::MakeUnique<Item>(pParent);
+    pParentItem = item.get();
+    m_mapWidgetItem[pParent] = std::move(item);
+
     pParentItem->pParent = GetWidgetMgrItem(nullptr);
     SetWidgetIndex(pParent, -1);
   }
 
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pChild);
+  Item* pItem = GetWidgetMgrItem(pChild);
   if (!pItem) {
-    pItem = new CFWL_WidgetMgrItem(pChild);
-    m_mapWidgetItem[pChild].reset(pItem);
+    auto item = pdfium::MakeUnique<Item>(pChild);
+    pItem = item.get();
+    m_mapWidgetItem[pChild] = std::move(item);
   }
   if (pItem->pParent && pItem->pParent != pParentItem) {
     if (pItem->pPrevious)
@@ -229,7 +233,7 @@
 }
 
 void CFWL_WidgetMgr::RemoveWidget(IFWL_Widget* pWidget) {
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   if (!pItem)
     return;
   if (pItem->pPrevious)
@@ -239,9 +243,9 @@
   if (pItem->pParent && pItem->pParent->pChild == pItem)
     pItem->pParent->pChild = pItem->pNext;
 
-  CFWL_WidgetMgrItem* pChild = pItem->pChild;
+  Item* pChild = pItem->pChild;
   while (pChild) {
-    CFWL_WidgetMgrItem* pNext = pChild->pNext;
+    Item* pNext = pChild->pNext;
     RemoveWidget(pChild->pWidget);
     pChild = pNext;
   }
@@ -249,24 +253,27 @@
 }
 
 void CFWL_WidgetMgr::SetOwner(IFWL_Widget* pOwner, IFWL_Widget* pOwned) {
-  CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pOwner);
+  Item* pParentItem = GetWidgetMgrItem(pOwner);
   if (!pParentItem) {
-    pParentItem = new CFWL_WidgetMgrItem(pOwner);
-    m_mapWidgetItem[pOwner].reset(pParentItem);
+    auto item = pdfium::MakeUnique<Item>(pOwner);
+    pParentItem = item.get();
+    m_mapWidgetItem[pOwner] = std::move(item);
+
     pParentItem->pParent = GetWidgetMgrItem(nullptr);
     SetWidgetIndex(pOwner, -1);
   }
 
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pOwned);
+  Item* pItem = GetWidgetMgrItem(pOwned);
   if (!pItem) {
-    pItem = new CFWL_WidgetMgrItem(pOwned);
-    m_mapWidgetItem[pOwned].reset(pItem);
+    auto item = pdfium::MakeUnique<Item>(pOwned);
+    pItem = item.get();
+    m_mapWidgetItem[pOwned] = std::move(item);
   }
   pItem->pOwner = pParentItem;
 }
 void CFWL_WidgetMgr::SetParent(IFWL_Widget* pParent, IFWL_Widget* pChild) {
-  CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent);
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pChild);
+  Item* pParentItem = GetWidgetMgrItem(pParent);
+  Item* pItem = GetWidgetMgrItem(pChild);
   if (!pItem)
     return;
   if (pItem->pParent && pItem->pParent != pParentItem) {
@@ -289,7 +296,7 @@
   if (!FWL_UseOffscreen(pWidget))
     return;
 
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   pItem->iRedrawCounter++;
   if (pItem->pOffscreen) {
     CFX_RenderDevice* pDevice = pItem->pOffscreen->GetRenderDevice();
@@ -427,12 +434,11 @@
   GetWidgetMgrItem(pWidget)->iRedrawCounter = 0;
 }
 
-CFWL_WidgetMgrItem* CFWL_WidgetMgr::GetWidgetMgrItem(
+CFWL_WidgetMgr::Item* CFWL_WidgetMgr::GetWidgetMgrItem(
     IFWL_Widget* pWidget) const {
   auto it = m_mapWidgetItem.find(pWidget);
-  return it != m_mapWidgetItem.end()
-             ? static_cast<CFWL_WidgetMgrItem*>(it->second.get())
-             : nullptr;
+  return it != m_mapWidgetItem.end() ? static_cast<Item*>(it->second.get())
+                                     : nullptr;
 }
 
 bool CFWL_WidgetMgr::IsAbleNative(IFWL_Widget* pWidget) const {
@@ -591,7 +597,7 @@
   if (!FWL_UseOffscreen(pWidget))
     return pGraphics;
 
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   if (!pItem->pOffscreen) {
     pItem->pOffscreen.reset(new CFX_Graphics);
     CFX_RectF rect;
@@ -610,21 +616,21 @@
                                      CFX_RectF& rtClip,
                                      const CFX_Matrix* pMatrix) {
   if (FWL_UseOffscreen(pWidget)) {
-    CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+    Item* pItem = GetWidgetMgrItem(pWidget);
     pGraphics->Transfer(pItem->pOffscreen.get(), rtClip.left, rtClip.top,
                         rtClip, pMatrix);
 #ifdef _WIN32
     pItem->pOffscreen->ClearClip();
 #endif
   }
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   pItem->iRedrawCounter = 0;
 }
 
 bool CFWL_WidgetMgr::IsNeedRepaint(IFWL_Widget* pWidget,
                                    CFX_Matrix* pMatrix,
                                    const CFX_RectF& rtDirty) {
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   if (pItem && pItem->iRedrawCounter > 0) {
     pItem->iRedrawCounter = 0;
     return true;
@@ -722,7 +728,7 @@
 }
 
 bool CFWL_WidgetMgr::UseOffscreenDirect(IFWL_Widget* pWidget) const {
-  CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
+  Item* pItem = GetWidgetMgrItem(pWidget);
   if (!FWL_UseOffscreen(pWidget) || !(pItem->pOffscreen))
     return false;
 
@@ -742,9 +748,9 @@
   return pItem->iRedrawCounter == 0;
 }
 
-CFWL_WidgetMgrItem::CFWL_WidgetMgrItem() : CFWL_WidgetMgrItem(nullptr) {}
+CFWL_WidgetMgr::Item::Item() : CFWL_WidgetMgr::Item(nullptr) {}
 
-CFWL_WidgetMgrItem::CFWL_WidgetMgrItem(IFWL_Widget* widget)
+CFWL_WidgetMgr::Item::Item(IFWL_Widget* widget)
     : pParent(nullptr),
       pOwner(nullptr),
       pChild(nullptr),
@@ -759,4 +765,4 @@
 {
 }
 
-CFWL_WidgetMgrItem::~CFWL_WidgetMgrItem() {}
+CFWL_WidgetMgr::Item::~Item() {}
diff --git a/xfa/fwl/core/cfwl_widgetmgr.h b/xfa/fwl/core/cfwl_widgetmgr.h
index cdfa24a..0c6a184 100644
--- a/xfa/fwl/core/cfwl_widgetmgr.h
+++ b/xfa/fwl/core/cfwl_widgetmgr.h
@@ -12,6 +12,7 @@
 
 #include "core/fxcrt/fx_system.h"
 #include "xfa/fwl/core/fwl_error.h"
+#include "xfa/fwl/core/ifwl_widgetmgrdelegate.h"
 #include "xfa/fxgraphics/cfx_graphics.h"
 
 #define FWL_WGTMGR_DisableForm 0x00000002
@@ -23,34 +24,6 @@
 class CFX_Matrix;
 class IFWL_Widget;
 
-class CFWL_WidgetMgrItem {
- public:
-  CFWL_WidgetMgrItem();
-  explicit CFWL_WidgetMgrItem(IFWL_Widget* widget);
-  ~CFWL_WidgetMgrItem();
-
-  CFWL_WidgetMgrItem* pParent;
-  CFWL_WidgetMgrItem* pOwner;
-  CFWL_WidgetMgrItem* pChild;
-  CFWL_WidgetMgrItem* pPrevious;
-  CFWL_WidgetMgrItem* pNext;
-  IFWL_Widget* const pWidget;
-  std::unique_ptr<CFX_Graphics> pOffscreen;
-  int32_t iRedrawCounter;
-#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_)
-  bool bOutsideChanged;
-#endif
-};
-
-class IFWL_WidgetMgrDelegate {
- public:
-  virtual void OnSetCapability(uint32_t dwCapability) = 0;
-  virtual void OnProcessMessageToForm(CFWL_Message* pMessage) = 0;
-  virtual void OnDrawWidget(IFWL_Widget* pWidget,
-                            CFX_Graphics* pGraphics,
-                            const CFX_Matrix* pMatrix) = 0;
-};
-
 class CFWL_WidgetMgr : public IFWL_WidgetMgrDelegate {
  public:
   explicit CFWL_WidgetMgr(CXFA_FFApp* pAdapterNative);
@@ -102,10 +75,29 @@
                           CFX_RectF& rtPopup) const;
 
  private:
+  class Item {
+   public:
+    Item();
+    explicit Item(IFWL_Widget* widget);
+    ~Item();
+
+    Item* pParent;
+    Item* pOwner;
+    Item* pChild;
+    Item* pPrevious;
+    Item* pNext;
+    IFWL_Widget* const pWidget;
+    std::unique_ptr<CFX_Graphics> pOffscreen;
+    int32_t iRedrawCounter;
+#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_)
+    bool bOutsideChanged;
+#endif
+  };
+
   IFWL_Widget* GetFirstSiblingWidget(IFWL_Widget* pWidget) const;
   IFWL_Widget* GetPriorSiblingWidget(IFWL_Widget* pWidget) const;
   IFWL_Widget* GetLastChildWidget(IFWL_Widget* pWidget) const;
-  CFWL_WidgetMgrItem* GetWidgetMgrItem(IFWL_Widget* pWidget) const;
+  Item* GetWidgetMgrItem(IFWL_Widget* pWidget) const;
 
   void SetWidgetIndex(IFWL_Widget* pWidget, int32_t nIndex);
 
@@ -133,7 +125,7 @@
   bool IsAbleNative(IFWL_Widget* pWidget) const;
 
   uint32_t m_dwCapability;
-  std::map<IFWL_Widget*, std::unique_ptr<CFWL_WidgetMgrItem>> m_mapWidgetItem;
+  std::map<IFWL_Widget*, std::unique_ptr<Item>> m_mapWidgetItem;
   CXFA_FWLAdapterWidgetMgr* const m_pAdapter;
 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_)
   CFX_RectF m_rtScreen;
diff --git a/xfa/fwl/core/cfwl_widgetproperties.cpp b/xfa/fwl/core/cfwl_widgetproperties.cpp
new file mode 100644
index 0000000..409b7f5
--- /dev/null
+++ b/xfa/fwl/core/cfwl_widgetproperties.cpp
@@ -0,0 +1,24 @@
+// Copyright 2016 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
+
+#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);
+}
+
+CFWL_WidgetProperties::~CFWL_WidgetProperties() {}
diff --git a/xfa/fwl/core/cfwl_widgetproperties.h b/xfa/fwl/core/cfwl_widgetproperties.h
index 83e54f1..5b2a602 100644
--- a/xfa/fwl/core/cfwl_widgetproperties.h
+++ b/xfa/fwl/core/cfwl_widgetproperties.h
@@ -31,21 +31,4 @@
   IFWL_Widget* m_pOwner;
 };
 
-inline CFWL_WidgetProperties::CFWL_WidgetProperties()
-    : CFWL_WidgetProperties(nullptr) {}
-
-inline 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);
-}
-
-inline CFWL_WidgetProperties::~CFWL_WidgetProperties() {}
-
 #endif  // XFA_FWL_CORE_CFWL_WIDGETPROPERTIES_H_
diff --git a/xfa/fwl/core/ifwl_adaptertimermgr.h b/xfa/fwl/core/ifwl_adaptertimermgr.h
index 156c0cf..ad54f46 100644
--- a/xfa/fwl/core/ifwl_adaptertimermgr.h
+++ b/xfa/fwl/core/ifwl_adaptertimermgr.h
@@ -11,7 +11,6 @@
 
 class IFWL_AdapterTimerMgr {
  public:
-  virtual ~IFWL_AdapterTimerMgr() {}
   virtual void Start(IFWL_Timer* pTimer,
                      uint32_t dwElapse,
                      bool bImmediately,
diff --git a/xfa/fwl/core/ifwl_app.cpp b/xfa/fwl/core/ifwl_app.cpp
index 0a2b53a..c4a6dc3 100644
--- a/xfa/fwl/core/ifwl_app.cpp
+++ b/xfa/fwl/core/ifwl_app.cpp
@@ -7,8 +7,8 @@
 #include "xfa/fwl/core/ifwl_app.h"
 
 #include "third_party/base/ptr_util.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_widget.h"
 #include "xfa/fxfa/app/xfa_fwladapter.h"
 
diff --git a/xfa/fwl/core/ifwl_barcode.cpp b/xfa/fwl/core/ifwl_barcode.cpp
index 26d60aa..71346b8 100644
--- a/xfa/fwl/core/ifwl_barcode.cpp
+++ b/xfa/fwl/core/ifwl_barcode.cpp
@@ -10,9 +10,9 @@
 
 #include "third_party/base/ptr_util.h"
 #include "xfa/fgas/font/cfgas_gefont.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_themepart.h"
 #include "xfa/fwl/core/cfx_barcode.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 
 IFWL_Barcode::IFWL_Barcode(const IFWL_App* app,
@@ -66,8 +66,8 @@
 
   m_dwStatus = 0;
   CreateBarcodeEngine();
-  IFWL_BarcodeDP* pData =
-      static_cast<IFWL_BarcodeDP*>(m_pProperties->m_pDataProvider);
+  IFWL_Barcode::DataProvider* pData =
+      static_cast<IFWL_Barcode::DataProvider*>(m_pProperties->m_pDataProvider);
   if (!pData)
     return;
   if (!m_pBarcodeEngine)
diff --git a/xfa/fwl/core/ifwl_barcode.h b/xfa/fwl/core/ifwl_barcode.h
index 417b1b7..5ff99e8 100644
--- a/xfa/fwl/core/ifwl_barcode.h
+++ b/xfa/fwl/core/ifwl_barcode.h
@@ -38,26 +38,26 @@
   FWL_BCDATTRIBUTE_TRUNCATED = 1 << 12
 };
 
-class IFWL_BarcodeDP : public IFWL_Widget::DataProvider {
- public:
-  virtual BC_CHAR_ENCODING GetCharEncoding() const = 0;
-  virtual int32_t GetModuleHeight() const = 0;
-  virtual int32_t GetModuleWidth() const = 0;
-  virtual int32_t GetDataLength() const = 0;
-  virtual bool GetCalChecksum() const = 0;
-  virtual bool GetPrintChecksum() const = 0;
-  virtual BC_TEXT_LOC GetTextLocation() const = 0;
-  virtual int32_t GetWideNarrowRatio() const = 0;
-  virtual FX_CHAR GetStartChar() const = 0;
-  virtual FX_CHAR GetEndChar() const = 0;
-  virtual int32_t GetVersion() const = 0;
-  virtual int32_t GetErrorCorrectionLevel() const = 0;
-  virtual bool GetTruncated() const = 0;
-  virtual uint32_t GetBarcodeAttributeMask() const = 0;
-};
-
 class IFWL_Barcode : public IFWL_Edit {
  public:
+  class DataProvider : public IFWL_Widget::DataProvider {
+   public:
+    virtual BC_CHAR_ENCODING GetCharEncoding() const = 0;
+    virtual int32_t GetModuleHeight() const = 0;
+    virtual int32_t GetModuleWidth() const = 0;
+    virtual int32_t GetDataLength() const = 0;
+    virtual bool GetCalChecksum() const = 0;
+    virtual bool GetPrintChecksum() const = 0;
+    virtual BC_TEXT_LOC GetTextLocation() const = 0;
+    virtual int32_t GetWideNarrowRatio() const = 0;
+    virtual FX_CHAR GetStartChar() const = 0;
+    virtual FX_CHAR GetEndChar() const = 0;
+    virtual int32_t GetVersion() const = 0;
+    virtual int32_t GetErrorCorrectionLevel() const = 0;
+    virtual bool GetTruncated() const = 0;
+    virtual uint32_t GetBarcodeAttributeMask() const = 0;
+  };
+
   IFWL_Barcode(const IFWL_App* app,
                std::unique_ptr<CFWL_WidgetProperties> properties);
   ~IFWL_Barcode() override;
diff --git a/xfa/fwl/core/ifwl_caret.cpp b/xfa/fwl/core/ifwl_caret.cpp
index b7607e3..5dcebc1 100644
--- a/xfa/fwl/core/ifwl_caret.cpp
+++ b/xfa/fwl/core/ifwl_caret.cpp
@@ -9,9 +9,9 @@
 #include <utility>
 
 #include "third_party/base/ptr_util.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_widgetproperties.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 #include "xfa/fwl/core/ifwl_timerinfo.h"
 
diff --git a/xfa/fwl/core/ifwl_checkbox.cpp b/xfa/fwl/core/ifwl_checkbox.cpp
index 0d18e2c..04f367f 100644
--- a/xfa/fwl/core/ifwl_checkbox.cpp
+++ b/xfa/fwl/core/ifwl_checkbox.cpp
@@ -15,10 +15,10 @@
 #include "xfa/fwl/core/cfwl_evtcheckstatechanged.h"
 #include "xfa/fwl/core/cfwl_msgkey.h"
 #include "xfa/fwl/core/cfwl_msgmouse.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 
@@ -70,8 +70,8 @@
   }
   rect.Inflate(kCaptionMargin, kCaptionMargin);
 
-  IFWL_CheckBoxDP* pData =
-      static_cast<IFWL_CheckBoxDP*>(m_pProperties->m_pDataProvider);
+  IFWL_CheckBox::DataProvider* pData =
+      static_cast<IFWL_CheckBox::DataProvider*>(m_pProperties->m_pDataProvider);
   FX_FLOAT fCheckBox = pData->GetBoxSize(this);
   rect.width += fCheckBox;
   rect.height = std::max(rect.height, fCheckBox);
@@ -172,8 +172,8 @@
   FX_FLOAT fBoxTop = m_rtClient.top;
   FX_FLOAT fClientBottom = m_rtClient.bottom();
 
-  IFWL_CheckBoxDP* pData =
-      static_cast<IFWL_CheckBoxDP*>(m_pProperties->m_pDataProvider);
+  IFWL_CheckBox::DataProvider* pData =
+      static_cast<IFWL_CheckBox::DataProvider*>(m_pProperties->m_pDataProvider);
   FX_FLOAT fCheckBox = pData->GetBoxSize(this);
   switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_VLayoutMask) {
     case FWL_STYLEEXT_CKB_Top:
diff --git a/xfa/fwl/core/ifwl_checkbox.h b/xfa/fwl/core/ifwl_checkbox.h
index 30d9b63..0c9f3cd 100644
--- a/xfa/fwl/core/ifwl_checkbox.h
+++ b/xfa/fwl/core/ifwl_checkbox.h
@@ -48,13 +48,13 @@
 class CFWL_WidgetProperties;
 class IFWL_Widget;
 
-class IFWL_CheckBoxDP : public IFWL_Widget::DataProvider {
- public:
-  virtual FX_FLOAT GetBoxSize(IFWL_Widget* pWidget) = 0;
-};
-
 class IFWL_CheckBox : public IFWL_Widget {
  public:
+  class DataProvider : public IFWL_Widget::DataProvider {
+   public:
+    virtual FX_FLOAT GetBoxSize(IFWL_Widget* pWidget) = 0;
+  };
+
   IFWL_CheckBox(const IFWL_App* app,
                 std::unique_ptr<CFWL_WidgetProperties> properties);
   ~IFWL_CheckBox() override;
diff --git a/xfa/fwl/core/ifwl_combobox.cpp b/xfa/fwl/core/ifwl_combobox.cpp
index b85f4e4..e632120 100644
--- a/xfa/fwl/core/ifwl_combobox.cpp
+++ b/xfa/fwl/core/ifwl_combobox.cpp
@@ -22,11 +22,11 @@
 #include "xfa/fwl/core/cfwl_msgkillfocus.h"
 #include "xfa/fwl/core/cfwl_msgmouse.h"
 #include "xfa/fwl/core/cfwl_msgsetfocus.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_themepart.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_formproxy.h"
 #include "xfa/fwl/core/ifwl_listbox.h"
diff --git a/xfa/fwl/core/ifwl_comboboxproxy.cpp b/xfa/fwl/core/ifwl_comboboxproxy.cpp
index f454f4c..53586f4 100644
--- a/xfa/fwl/core/ifwl_comboboxproxy.cpp
+++ b/xfa/fwl/core/ifwl_comboboxproxy.cpp
@@ -11,7 +11,7 @@
 
 #include "xfa/fwl/core/cfwl_msgkillfocus.h"
 #include "xfa/fwl/core/cfwl_msgmouse.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_combobox.h"
 
diff --git a/xfa/fwl/core/ifwl_datetimepicker.cpp b/xfa/fwl/core/ifwl_datetimepicker.cpp
index dca32c3..b0e0114 100644
--- a/xfa/fwl/core/ifwl_datetimepicker.cpp
+++ b/xfa/fwl/core/ifwl_datetimepicker.cpp
@@ -14,9 +14,9 @@
 #include "xfa/fwl/core/cfwl_evtselectchanged.h"
 #include "xfa/fwl/core/cfwl_msgmouse.h"
 #include "xfa/fwl/core/cfwl_msgsetfocus.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_formproxy.h"
 #include "xfa/fwl/core/ifwl_spinbutton.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
@@ -118,8 +118,9 @@
   if (!(m_pMonthCal->GetThemeProvider()))
     m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider);
   if (m_pProperties->m_pDataProvider) {
-    IFWL_DateTimePickerDP* pData =
-        static_cast<IFWL_DateTimePickerDP*>(m_pProperties->m_pDataProvider);
+    IFWL_DateTimePicker::DataProvider* pData =
+        static_cast<IFWL_DateTimePicker::DataProvider*>(
+            m_pProperties->m_pDataProvider);
     pData->GetToday(this, m_iCurYear, m_iCurMonth, m_iCurDay);
   }
 
@@ -467,8 +468,9 @@
   if (!m_pMonthCal->GetThemeProvider())
     m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider);
   if (m_pProperties->m_pDataProvider) {
-    IFWL_DateTimePickerDP* pData =
-        static_cast<IFWL_DateTimePickerDP*>(m_pProperties->m_pDataProvider);
+    IFWL_DateTimePicker::DataProvider* pData =
+        static_cast<IFWL_DateTimePicker::DataProvider*>(
+            m_pProperties->m_pDataProvider);
     pData->GetToday(this, m_iCurYear, m_iCurMonth, m_iCurDay);
   }
 
diff --git a/xfa/fwl/core/ifwl_datetimepicker.h b/xfa/fwl/core/ifwl_datetimepicker.h
index 9d7b83a..21f5f4a 100644
--- a/xfa/fwl/core/ifwl_datetimepicker.h
+++ b/xfa/fwl/core/ifwl_datetimepicker.h
@@ -35,17 +35,17 @@
 class IFWL_DateTimeEdit;
 class IFWL_FormProxy;
 
-class IFWL_DateTimePickerDP : public IFWL_Widget::DataProvider {
- public:
-  virtual void GetToday(IFWL_Widget* pWidget,
-                        int32_t& iYear,
-                        int32_t& iMonth,
-                        int32_t& iDay) = 0;
-};
-
 class IFWL_DateTimePicker : public IFWL_Widget,
                             public IFWL_MonthCalendar::DataProvider {
  public:
+  class DataProvider : public IFWL_Widget::DataProvider {
+   public:
+    virtual void GetToday(IFWL_Widget* pWidget,
+                          int32_t& iYear,
+                          int32_t& iMonth,
+                          int32_t& iDay) = 0;
+  };
+
   explicit IFWL_DateTimePicker(
       const IFWL_App* app,
       std::unique_ptr<CFWL_WidgetProperties> properties);
diff --git a/xfa/fwl/core/ifwl_form.cpp b/xfa/fwl/core/ifwl_form.cpp
index 115aca0..bbc16eb 100644
--- a/xfa/fwl/core/ifwl_form.cpp
+++ b/xfa/fwl/core/ifwl_form.cpp
@@ -12,12 +12,13 @@
 #include "xfa/fde/tto/fde_textout.h"
 #include "xfa/fwl/core/cfwl_evtclose.h"
 #include "xfa/fwl/core/cfwl_msgmouse.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
+#include "xfa/fwl/core/cfwl_noteloop.h"
 #include "xfa/fwl/core/cfwl_sysbtn.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_themepart.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_formproxy.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
diff --git a/xfa/fwl/core/ifwl_form.h b/xfa/fwl/core/ifwl_form.h
index 3b7fe4f..8970a5c 100644
--- a/xfa/fwl/core/ifwl_form.h
+++ b/xfa/fwl/core/ifwl_form.h
@@ -33,8 +33,6 @@
 class IFWL_ThemeProvider;
 class CFWL_SysBtn;
 
-class IFWL_FormDP : public IFWL_Widget::DataProvider {};
-
 class IFWL_Form : public IFWL_Widget {
  public:
   IFWL_Form(const IFWL_App* app,
diff --git a/xfa/fwl/core/ifwl_formproxy.cpp b/xfa/fwl/core/ifwl_formproxy.cpp
index 0e85d98..253ed7f 100644
--- a/xfa/fwl/core/ifwl_formproxy.cpp
+++ b/xfa/fwl/core/ifwl_formproxy.cpp
@@ -10,7 +10,7 @@
 #include <utility>
 
 #include "third_party/base/ptr_util.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 
 IFWL_FormProxy::IFWL_FormProxy(
     const IFWL_App* app,
diff --git a/xfa/fwl/core/ifwl_monthcalendar.cpp b/xfa/fwl/core/ifwl_monthcalendar.cpp
index 3d7dbf5..10ce33a 100644
--- a/xfa/fwl/core/ifwl_monthcalendar.cpp
+++ b/xfa/fwl/core/ifwl_monthcalendar.cpp
@@ -13,9 +13,9 @@
 #include "third_party/base/ptr_util.h"
 #include "xfa/fde/tto/fde_textout.h"
 #include "xfa/fwl/core/cfwl_msgmouse.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_datetimepicker.h"
 #include "xfa/fwl/core/ifwl_formproxy.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
diff --git a/xfa/fwl/core/ifwl_picturebox.cpp b/xfa/fwl/core/ifwl_picturebox.cpp
index f1bec51..9cb3604 100644
--- a/xfa/fwl/core/ifwl_picturebox.cpp
+++ b/xfa/fwl/core/ifwl_picturebox.cpp
@@ -10,8 +10,8 @@
 #include <utility>
 
 #include "third_party/base/ptr_util.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_picturebox.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 
 IFWL_PictureBox::IFWL_PictureBox(
     const IFWL_App* app,
diff --git a/xfa/fwl/core/ifwl_pushbutton.cpp b/xfa/fwl/core/ifwl_pushbutton.cpp
index b189493..8ee0485 100644
--- a/xfa/fwl/core/ifwl_pushbutton.cpp
+++ b/xfa/fwl/core/ifwl_pushbutton.cpp
@@ -15,9 +15,9 @@
 #include "xfa/fwl/core/cfwl_evtmouse.h"
 #include "xfa/fwl/core/cfwl_msgkey.h"
 #include "xfa/fwl/core/cfwl_msgmouse.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 
 IFWL_PushButton::IFWL_PushButton(
diff --git a/xfa/fwl/core/ifwl_scrollbar.cpp b/xfa/fwl/core/ifwl_scrollbar.cpp
index 0de791f..b4d6b50 100644
--- a/xfa/fwl/core/ifwl_scrollbar.cpp
+++ b/xfa/fwl/core/ifwl_scrollbar.cpp
@@ -13,9 +13,9 @@
 #include "third_party/base/ptr_util.h"
 #include "xfa/fwl/core/cfwl_msgmouse.h"
 #include "xfa/fwl/core/cfwl_msgmousewheel.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_themepart.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 #include "xfa/fwl/core/ifwl_timerinfo.h"
 
diff --git a/xfa/fwl/core/ifwl_spinbutton.cpp b/xfa/fwl/core/ifwl_spinbutton.cpp
index fa063d6..b77c259 100644
--- a/xfa/fwl/core/ifwl_spinbutton.cpp
+++ b/xfa/fwl/core/ifwl_spinbutton.cpp
@@ -13,9 +13,9 @@
 #include "xfa/fwl/core/cfwl_evtclick.h"
 #include "xfa/fwl/core/cfwl_msgkey.h"
 #include "xfa/fwl/core/cfwl_msgmouse.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_widgetproperties.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 #include "xfa/fwl/core/ifwl_timerinfo.h"
 
diff --git a/xfa/fwl/core/ifwl_tooltip.cpp b/xfa/fwl/core/ifwl_tooltip.cpp
index a9a07c6..770527d 100644
--- a/xfa/fwl/core/ifwl_tooltip.cpp
+++ b/xfa/fwl/core/ifwl_tooltip.cpp
@@ -11,10 +11,10 @@
 
 #include "third_party/base/ptr_util.h"
 #include "xfa/fde/tto/fde_textout.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_themepart.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 #include "xfa/fwl/core/ifwl_timerinfo.h"
 #include "xfa/fwl/theme/cfwl_widgettp.h"
diff --git a/xfa/fwl/core/ifwl_widget.cpp b/xfa/fwl/core/ifwl_widget.cpp
index e9ee2a8..ca574b2 100644
--- a/xfa/fwl/core/ifwl_widget.cpp
+++ b/xfa/fwl/core/ifwl_widget.cpp
@@ -21,11 +21,11 @@
 #include "xfa/fwl/core/cfwl_msgmouse.h"
 #include "xfa/fwl/core/cfwl_msgmousewheel.h"
 #include "xfa/fwl/core/cfwl_msgsetfocus.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_themepart.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_combobox.h"
 #include "xfa/fwl/core/ifwl_form.h"
diff --git a/xfa/fwl/core/ifwl_widgetmgrdelegate.h b/xfa/fwl/core/ifwl_widgetmgrdelegate.h
new file mode 100644
index 0000000..c832692
--- /dev/null
+++ b/xfa/fwl/core/ifwl_widgetmgrdelegate.h
@@ -0,0 +1,24 @@
+// Copyright 2016 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_FWL_CORE_IFWL_WIDGETMGRDELEGATE_H_
+#define XFA_FWL_CORE_IFWL_WIDGETMGRDELEGATE_H_
+
+class CFWL_Message;
+class CFX_Graphics;
+class CFX_Matrix;
+class IFWL_Widget;
+
+class IFWL_WidgetMgrDelegate {
+ public:
+  virtual void OnSetCapability(uint32_t dwCapability) = 0;
+  virtual void OnProcessMessageToForm(CFWL_Message* pMessage) = 0;
+  virtual void OnDrawWidget(IFWL_Widget* pWidget,
+                            CFX_Graphics* pGraphics,
+                            const CFX_Matrix* pMatrix) = 0;
+};
+
+#endif  // XFA_FWL_CORE_IFWL_WIDGETMGRDELEGATE_H_
diff --git a/xfa/fxfa/app/xfa_ffapp.cpp b/xfa/fxfa/app/xfa_ffapp.cpp
index 3f01348..285194f 100644
--- a/xfa/fxfa/app/xfa_ffapp.cpp
+++ b/xfa/fxfa/app/xfa_ffapp.cpp
@@ -12,8 +12,8 @@
 #include <vector>
 
 #include "xfa/fgas/font/cfgas_fontmgr.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fxfa/app/xfa_fwladapter.h"
 #include "xfa/fxfa/app/xfa_fwltheme.h"
 #include "xfa/fxfa/xfa_ffdoc.h"
diff --git a/xfa/fxfa/app/xfa_ffbarcode.cpp b/xfa/fxfa/app/xfa_ffbarcode.cpp
index a971e95..bfa8097 100644
--- a/xfa/fxfa/app/xfa_ffbarcode.cpp
+++ b/xfa/fxfa/app/xfa_ffbarcode.cpp
@@ -8,7 +8,7 @@
 
 #include "core/fxcrt/fx_ext.h"
 #include "xfa/fwl/core/cfwl_barcode.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fxfa/app/xfa_fffield.h"
 #include "xfa/fxfa/app/xfa_fftextedit.h"
diff --git a/xfa/fxfa/app/xfa_ffcheckbutton.cpp b/xfa/fxfa/app/xfa_ffcheckbutton.cpp
index 39bfe50..a99b7b1 100644
--- a/xfa/fxfa/app/xfa_ffcheckbutton.cpp
+++ b/xfa/fxfa/app/xfa_ffcheckbutton.cpp
@@ -8,8 +8,8 @@
 
 #include "xfa/fwl/core/cfwl_checkbox.h"
 #include "xfa/fwl/core/cfwl_msgmouse.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fxfa/app/xfa_ffexclgroup.h"
 #include "xfa/fxfa/app/xfa_fffield.h"
 #include "xfa/fxfa/xfa_ffapp.h"
diff --git a/xfa/fxfa/app/xfa_ffchoicelist.cpp b/xfa/fxfa/app/xfa_ffchoicelist.cpp
index c9287b5..63ed7c4 100644
--- a/xfa/fxfa/app/xfa_ffchoicelist.cpp
+++ b/xfa/fxfa/app/xfa_ffchoicelist.cpp
@@ -9,7 +9,7 @@
 #include "xfa/fwl/core/cfwl_combobox.h"
 #include "xfa/fwl/core/cfwl_evtselectchanged.h"
 #include "xfa/fwl/core/cfwl_listbox.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_combobox.h"
 #include "xfa/fwl/core/ifwl_edit.h"
diff --git a/xfa/fxfa/app/xfa_ffdoc.cpp b/xfa/fxfa/app/xfa_ffdoc.cpp
index 3d1ead5..1b5665b 100644
--- a/xfa/fxfa/app/xfa_ffdoc.cpp
+++ b/xfa/fxfa/app/xfa_ffdoc.cpp
@@ -17,7 +17,7 @@
 #include "core/fxcrt/fx_ext.h"
 #include "core/fxcrt/fx_memory.h"
 #include "xfa/fde/xml/fde_xml_imp.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fxfa/app/xfa_ffnotify.h"
 #include "xfa/fxfa/parser/cxfa_dataexporter.h"
 #include "xfa/fxfa/parser/cxfa_dataimporter.h"
diff --git a/xfa/fxfa/app/xfa_ffimageedit.cpp b/xfa/fxfa/app/xfa_ffimageedit.cpp
index 1cbb9bc..b88ccb6 100644
--- a/xfa/fxfa/app/xfa_ffimageedit.cpp
+++ b/xfa/fxfa/app/xfa_ffimageedit.cpp
@@ -7,8 +7,8 @@
 #include "xfa/fxfa/app/xfa_ffimageedit.h"
 
 #include "xfa/fwl/core/cfwl_msgmouse.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_picturebox.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fxfa/app/xfa_fffield.h"
 #include "xfa/fxfa/xfa_ffdoc.h"
diff --git a/xfa/fxfa/app/xfa_ffpushbutton.cpp b/xfa/fxfa/app/xfa_ffpushbutton.cpp
index 12fabb5..ba0bdcf 100644
--- a/xfa/fxfa/app/xfa_ffpushbutton.cpp
+++ b/xfa/fxfa/app/xfa_ffpushbutton.cpp
@@ -6,9 +6,9 @@
 
 #include "xfa/fxfa/app/xfa_ffpushbutton.h"
 
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fwl/core/cfwl_pushbutton.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fxfa/app/xfa_fffield.h"
 #include "xfa/fxfa/app/xfa_ffwidgetacc.h"
 #include "xfa/fxfa/app/xfa_textlayout.h"
diff --git a/xfa/fxfa/app/xfa_fftextedit.cpp b/xfa/fxfa/app/xfa_fftextedit.cpp
index 6a2c611..d13e946 100644
--- a/xfa/fxfa/app/xfa_fftextedit.cpp
+++ b/xfa/fxfa/app/xfa_fftextedit.cpp
@@ -17,7 +17,7 @@
 #include "xfa/fwl/core/cfwl_msgkillfocus.h"
 #include "xfa/fwl/core/cfwl_msgmouse.h"
 #include "xfa/fwl/core/cfwl_msgsetfocus.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
+#include "xfa/fwl/core/cfwl_notedriver.h"
 #include "xfa/fxfa/app/xfa_fffield.h"
 #include "xfa/fxfa/app/xfa_fwladapter.h"
 #include "xfa/fxfa/app/xfa_textlayout.h"