diff --git a/fpdfsdk/formfiller/cffl_checkbox.cpp b/fpdfsdk/formfiller/cffl_checkbox.cpp
index c37e452..ff280eb 100644
--- a/fpdfsdk/formfiller/cffl_checkbox.cpp
+++ b/fpdfsdk/formfiller/cffl_checkbox.cpp
@@ -63,7 +63,7 @@
 
       CFFL_FormField::OnChar(pAnnot, nChar, nFlags);
 
-      CPWL_CheckBox* pWnd = GetCheckBox(pPageView, true);
+      CPWL_CheckBox* pWnd = CreateOrUpdateCheckBox(pPageView);
       if (pWnd && !pWnd->IsReadOnly()) {
         CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
         pWnd->SetCheck(!pWidget->IsChecked());
@@ -85,7 +85,7 @@
   if (!IsValid())
     return true;
 
-  CPWL_CheckBox* pWnd = GetCheckBox(pPageView, true);
+  CPWL_CheckBox* pWnd = CreateOrUpdateCheckBox(pPageView);
   if (pWnd) {
     CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
     pWnd->SetCheck(!pWidget->IsChecked());
@@ -95,12 +95,12 @@
 }
 
 bool CFFL_CheckBox::IsDataChanged(CPDFSDK_PageView* pPageView) {
-  CPWL_CheckBox* pWnd = GetCheckBox(pPageView, false);
+  CPWL_CheckBox* pWnd = GetCheckBox(pPageView);
   return pWnd && pWnd->IsChecked() != m_pWidget->IsChecked();
 }
 
 void CFFL_CheckBox::SaveData(CPDFSDK_PageView* pPageView) {
-  CPWL_CheckBox* pWnd = GetCheckBox(pPageView, false);
+  CPWL_CheckBox* pWnd = GetCheckBox(pPageView);
   if (!pWnd)
     return;
 
@@ -128,7 +128,11 @@
   SetChangeMark();
 }
 
-CPWL_CheckBox* CFFL_CheckBox::GetCheckBox(CPDFSDK_PageView* pPageView,
-                                          bool bNew) {
-  return static_cast<CPWL_CheckBox*>(GetPWLWindow(pPageView, bNew));
+CPWL_CheckBox* CFFL_CheckBox::GetCheckBox(CPDFSDK_PageView* pPageView) const {
+  return static_cast<CPWL_CheckBox*>(GetPWLWindow(pPageView));
+}
+
+CPWL_CheckBox* CFFL_CheckBox::CreateOrUpdateCheckBox(
+    CPDFSDK_PageView* pPageView) {
+  return static_cast<CPWL_CheckBox*>(CreateOrUpdatePWLWindow(pPageView));
 }
diff --git a/fpdfsdk/formfiller/cffl_checkbox.h b/fpdfsdk/formfiller/cffl_checkbox.h
index aff2762..fbf4a9a 100644
--- a/fpdfsdk/formfiller/cffl_checkbox.h
+++ b/fpdfsdk/formfiller/cffl_checkbox.h
@@ -33,7 +33,8 @@
   void SaveData(CPDFSDK_PageView* pPageView) override;
 
  private:
-  CPWL_CheckBox* GetCheckBox(CPDFSDK_PageView* pPageView, bool bNew);
+  CPWL_CheckBox* GetCheckBox(CPDFSDK_PageView* pPageView) const;
+  CPWL_CheckBox* CreateOrUpdateCheckBox(CPDFSDK_PageView* pPageView);
 };
 
 #endif  // FPDFSDK_FORMFILLER_CFFL_CHECKBOX_H_
diff --git a/fpdfsdk/formfiller/cffl_combobox.cpp b/fpdfsdk/formfiller/cffl_combobox.cpp
index e4e0867..77f3685 100644
--- a/fpdfsdk/formfiller/cffl_combobox.cpp
+++ b/fpdfsdk/formfiller/cffl_combobox.cpp
@@ -70,7 +70,7 @@
 }
 
 bool CFFL_ComboBox::IsDataChanged(CPDFSDK_PageView* pPageView) {
-  auto* pWnd = GetComboBox(pPageView, false);
+  auto* pWnd = GetComboBox(pPageView);
   if (!pWnd)
     return false;
 
@@ -85,7 +85,7 @@
 }
 
 void CFFL_ComboBox::SaveData(CPDFSDK_PageView* pPageView) {
-  CPWL_ComboBox* pWnd = GetComboBox(pPageView, false);
+  CPWL_ComboBox* pWnd = GetComboBox(pPageView);
   if (!pWnd)
     return;
 
@@ -119,7 +119,7 @@
                                   CPDFSDK_FieldAction& fa) {
   switch (type) {
     case CPDF_AAction::kKeyStroke:
-      if (CPWL_ComboBox* pComboBox = GetComboBox(pPageView, false)) {
+      if (CPWL_ComboBox* pComboBox = GetComboBox(pPageView)) {
         if (CPWL_Edit* pEdit = pComboBox->GetEdit()) {
           fa.bFieldFull = pEdit->IsTextFull();
           std::tie(fa.nSelStart, fa.nSelEnd) = pEdit->GetSelection();
@@ -134,7 +134,7 @@
       }
       break;
     case CPDF_AAction::kValidate:
-      if (CPWL_ComboBox* pComboBox = GetComboBox(pPageView, false)) {
+      if (CPWL_ComboBox* pComboBox = GetComboBox(pPageView)) {
         if (CPWL_Edit* pEdit = pComboBox->GetEdit()) {
           fa.sValue = pEdit->GetText();
         }
@@ -154,7 +154,7 @@
                                   const CPDFSDK_FieldAction& fa) {
   switch (type) {
     case CPDF_AAction::kKeyStroke:
-      if (CPWL_ComboBox* pComboBox = GetComboBox(pPageView, false)) {
+      if (CPWL_ComboBox* pComboBox = GetComboBox(pPageView)) {
         if (CPWL_Edit* pEdit = pComboBox->GetEdit()) {
           pEdit->SetSelection(fa.nSelStart, fa.nSelEnd);
           pEdit->ReplaceSelection(fa.sChange);
@@ -167,7 +167,7 @@
 }
 
 void CFFL_ComboBox::SaveState(CPDFSDK_PageView* pPageView) {
-  CPWL_ComboBox* pComboBox = GetComboBox(pPageView, false);
+  CPWL_ComboBox* pComboBox = GetComboBox(pPageView);
   if (!pComboBox)
     return;
 
@@ -182,7 +182,7 @@
 }
 
 void CFFL_ComboBox::RestoreState(CPDFSDK_PageView* pPageView) {
-  CPWL_ComboBox* pComboBox = GetComboBox(pPageView, true);
+  CPWL_ComboBox* pComboBox = CreateOrUpdateComboBox(pPageView);
   if (!pComboBox)
     return;
 
@@ -206,7 +206,7 @@
   if (index < 0 || index >= m_pWidget->CountOptions())
     return false;
 
-  CPWL_ComboBox* pWnd = GetComboBox(GetCurPageView(), false);
+  CPWL_ComboBox* pWnd = GetComboBox(GetCurPageView());
   if (!pWnd)
     return false;
 
@@ -221,13 +221,13 @@
   if (index < 0 || index >= m_pWidget->CountOptions())
     return false;
 
-  CPWL_ComboBox* pWnd = GetComboBox(GetCurPageView(), false);
+  CPWL_ComboBox* pWnd = GetComboBox(GetCurPageView());
   return pWnd && index == pWnd->GetSelect();
 }
 
 #ifdef PDF_ENABLE_XFA
 bool CFFL_ComboBox::IsFieldFull(CPDFSDK_PageView* pPageView) {
-  CPWL_ComboBox* pComboBox = GetComboBox(pPageView, false);
+  CPWL_ComboBox* pComboBox = GetComboBox(pPageView);
   if (!pComboBox)
     return false;
 
@@ -250,7 +250,7 @@
 WideString CFFL_ComboBox::GetSelectExportText() {
   WideString swRet;
 
-  CPWL_ComboBox* pComboBox = GetComboBox(GetCurPageView(), false);
+  CPWL_ComboBox* pComboBox = GetComboBox(GetCurPageView());
   int nExport = pComboBox ? pComboBox->GetSelect() : -1;
 
   if (nExport >= 0) {
@@ -264,7 +264,11 @@
   return swRet;
 }
 
-CPWL_ComboBox* CFFL_ComboBox::GetComboBox(CPDFSDK_PageView* pPageView,
-                                          bool bNew) {
-  return static_cast<CPWL_ComboBox*>(GetPWLWindow(pPageView, bNew));
+CPWL_ComboBox* CFFL_ComboBox::GetComboBox(CPDFSDK_PageView* pPageView) const {
+  return static_cast<CPWL_ComboBox*>(GetPWLWindow(pPageView));
+}
+
+CPWL_ComboBox* CFFL_ComboBox::CreateOrUpdateComboBox(
+    CPDFSDK_PageView* pPageView) {
+  return static_cast<CPWL_ComboBox*>(CreateOrUpdatePWLWindow(pPageView));
 }
diff --git a/fpdfsdk/formfiller/cffl_combobox.h b/fpdfsdk/formfiller/cffl_combobox.h
index 250dba7..02ba37c 100644
--- a/fpdfsdk/formfiller/cffl_combobox.h
+++ b/fpdfsdk/formfiller/cffl_combobox.h
@@ -55,7 +55,8 @@
 
  private:
   WideString GetSelectExportText();
-  CPWL_ComboBox* GetComboBox(CPDFSDK_PageView* pPageView, bool bNew);
+  CPWL_ComboBox* GetComboBox(CPDFSDK_PageView* pPageView) const;
+  CPWL_ComboBox* CreateOrUpdateComboBox(CPDFSDK_PageView* pPageView);
 
   FFL_ComboBoxState m_State;
 };
diff --git a/fpdfsdk/formfiller/cffl_formfield.cpp b/fpdfsdk/formfiller/cffl_formfield.cpp
index 3db3e8b..90ba187 100644
--- a/fpdfsdk/formfiller/cffl_formfield.cpp
+++ b/fpdfsdk/formfiller/cffl_formfield.cpp
@@ -38,7 +38,7 @@
 }
 
 FX_RECT CFFL_FormField::GetViewBBox(CPDFSDK_PageView* pPageView) {
-  CPWL_Wnd* pWnd = GetPWLWindow(pPageView, false);
+  CPWL_Wnd* pWnd = GetPWLWindow(pPageView);
   CFX_FloatRect rcAnnot =
       pWnd ? PWLtoFFL(pWnd->GetWindowRect()) : m_pWidget->GetRect();
   CFX_FloatRect rcFocus = GetFocusBox(pPageView);
@@ -58,7 +58,7 @@
                             CPDFSDK_Annot* pAnnot,
                             CFX_RenderDevice* pDevice,
                             const CFX_Matrix& mtUser2Device) {
-  CPWL_Wnd* pWnd = GetPWLWindow(pPageView, false);
+  CPWL_Wnd* pWnd = GetPWLWindow(pPageView);
   if (pWnd) {
     pWnd->DrawAppearance(pDevice, GetCurMatrix() * mtUser2Device);
     return;
@@ -90,7 +90,7 @@
                                    CPDFSDK_Annot* pAnnot,
                                    uint32_t nFlags,
                                    const CFX_PointF& point) {
-  CPWL_Wnd* pWnd = GetPWLWindow(pPageView, true);
+  CPWL_Wnd* pWnd = CreateOrUpdatePWLWindow(pPageView);
   if (!pWnd)
     return false;
 
@@ -106,7 +106,7 @@
                                  CPDFSDK_Annot* pAnnot,
                                  uint32_t nFlags,
                                  const CFX_PointF& point) {
-  CPWL_Wnd* pWnd = GetPWLWindow(pPageView, false);
+  CPWL_Wnd* pWnd = GetPWLWindow(pPageView);
   if (!pWnd)
     return false;
 
@@ -118,7 +118,7 @@
 bool CFFL_FormField::OnLButtonDblClk(CPDFSDK_PageView* pPageView,
                                      uint32_t nFlags,
                                      const CFX_PointF& point) {
-  CPWL_Wnd* pWnd = GetPWLWindow(pPageView, false);
+  CPWL_Wnd* pWnd = GetPWLWindow(pPageView);
   if (!pWnd)
     return false;
 
@@ -129,7 +129,7 @@
 bool CFFL_FormField::OnMouseMove(CPDFSDK_PageView* pPageView,
                                  uint32_t nFlags,
                                  const CFX_PointF& point) {
-  CPWL_Wnd* pWnd = GetPWLWindow(pPageView, false);
+  CPWL_Wnd* pWnd = GetPWLWindow(pPageView);
   if (!pWnd)
     return false;
 
@@ -144,21 +144,21 @@
   if (!IsValid())
     return false;
 
-  CPWL_Wnd* pWnd = GetPWLWindow(pPageView, true);
+  CPWL_Wnd* pWnd = CreateOrUpdatePWLWindow(pPageView);
   return pWnd && pWnd->OnMouseWheel(nFlags, FFLtoPWL(point), delta);
 }
 
 bool CFFL_FormField::OnRButtonDown(CPDFSDK_PageView* pPageView,
                                    uint32_t nFlags,
                                    const CFX_PointF& point) {
-  CPWL_Wnd* pWnd = GetPWLWindow(pPageView, true);
+  CPWL_Wnd* pWnd = CreateOrUpdatePWLWindow(pPageView);
   return pWnd && pWnd->OnRButtonDown(nFlags, FFLtoPWL(point));
 }
 
 bool CFFL_FormField::OnRButtonUp(CPDFSDK_PageView* pPageView,
                                  uint32_t nFlags,
                                  const CFX_PointF& point) {
-  CPWL_Wnd* pWnd = GetPWLWindow(pPageView, false);
+  CPWL_Wnd* pWnd = GetPWLWindow(pPageView);
   return pWnd && pWnd->OnRButtonUp(nFlags, FFLtoPWL(point));
 }
 
@@ -166,7 +166,7 @@
   if (!IsValid())
     return false;
 
-  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView(), false);
+  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView());
   return pWnd && pWnd->OnKeyDown(nKeyCode, nFlags);
 }
 
@@ -176,7 +176,7 @@
   if (!IsValid())
     return false;
 
-  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView(), false);
+  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView());
   return pWnd && pWnd->OnChar(nChar, nFlags);
 }
 
@@ -192,7 +192,7 @@
   if (!IsValid())
     return WideString();
 
-  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView(), false);
+  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView());
   return pWnd ? pWnd->GetText() : WideString();
 }
 
@@ -200,7 +200,7 @@
   if (!IsValid())
     return WideString();
 
-  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView(), false);
+  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView());
   return pWnd ? pWnd->GetSelectedText() : WideString();
 }
 
@@ -208,7 +208,7 @@
   if (!IsValid())
     return;
 
-  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView(), false);
+  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView());
   if (!pWnd)
     return;
 
@@ -219,7 +219,7 @@
   if (!IsValid())
     return false;
 
-  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView(), false);
+  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView());
   return pWnd && pWnd->SelectAllText();
 }
 
@@ -227,7 +227,7 @@
   if (!IsValid())
     return false;
 
-  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView(), false);
+  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView());
   return pWnd && pWnd->CanUndo();
 }
 
@@ -235,7 +235,7 @@
   if (!IsValid())
     return false;
 
-  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView(), false);
+  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView());
   return pWnd && pWnd->CanRedo();
 }
 
@@ -243,7 +243,7 @@
   if (!IsValid())
     return false;
 
-  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView(), false);
+  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView());
   return pWnd && pWnd->Undo();
 }
 
@@ -251,7 +251,7 @@
   if (!IsValid())
     return false;
 
-  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView(), false);
+  CPWL_Wnd* pWnd = GetPWLWindow(GetCurPageView());
   return pWnd && pWnd->Redo();
 }
 
@@ -259,7 +259,7 @@
   CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
   IPDF_Page* pPage = pWidget->GetPage();
   CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(pPage, true);
-  if (CPWL_Wnd* pWnd = GetPWLWindow(pPageView, true))
+  if (CPWL_Wnd* pWnd = CreateOrUpdatePWLWindow(pPageView))
     pWnd->SetFocus();
 
   m_bValid = true;
@@ -274,7 +274,7 @@
       m_pFormFillEnv->GetPageView(m_pWidget->GetPage(), false);
   if (!pPageView || !CommitData(pPageView, nFlag))
     return;
-  if (CPWL_Wnd* pWnd = GetPWLWindow(pPageView, false))
+  if (CPWL_Wnd* pWnd = GetPWLWindow(pPageView))
     pWnd->KillFocus();
 
   bool bDestroyPWLWindow;
@@ -343,13 +343,16 @@
   return cp;
 }
 
-CPWL_Wnd* CFFL_FormField::GetPWLWindow(CPDFSDK_PageView* pPageView, bool bNew) {
+CPWL_Wnd* CFFL_FormField::GetPWLWindow(CPDFSDK_PageView* pPageView) const {
   DCHECK(pPageView);
   auto it = m_Maps.find(pPageView);
-  if (it == m_Maps.end()) {
-    if (!bNew)
-      return nullptr;
+  return it != m_Maps.end() ? it->second.get() : nullptr;
+}
 
+CPWL_Wnd* CFFL_FormField::CreateOrUpdatePWLWindow(CPDFSDK_PageView* pPageView) {
+  DCHECK(pPageView);
+  CPWL_Wnd* pWnd = GetPWLWindow(pPageView);
+  if (!pWnd) {
     CPWL_Wnd::CreateParams cp = GetCreateParam();
     // TODO(tsepez): maybe pass widget's value age as 4th arg.
     auto pPrivateData = std::make_unique<CFFL_PrivateData>(
@@ -357,11 +360,6 @@
     m_Maps[pPageView] = NewPWLWindow(cp, std::move(pPrivateData));
     return m_Maps[pPageView].get();
   }
-
-  CPWL_Wnd* pWnd = it->second.get();
-  if (!bNew)
-    return pWnd;
-
   const auto* pPrivateData =
       static_cast<const CFFL_PrivateData*>(pWnd->GetAttachedData());
   if (pPrivateData->AppearanceAgeEquals(m_pWidget->GetAppearanceAge()))
@@ -434,7 +432,7 @@
 }
 
 CFX_FloatRect CFFL_FormField::GetFocusBox(CPDFSDK_PageView* pPageView) {
-  CPWL_Wnd* pWnd = GetPWLWindow(pPageView, false);
+  CPWL_Wnd* pWnd = GetPWLWindow(pPageView);
   if (!pWnd)
     return CFX_FloatRect();
 
@@ -533,7 +531,7 @@
 
 CPWL_Wnd* CFFL_FormField::ResetPWLWindow(CPDFSDK_PageView* pPageView,
                                          bool bRestoreValue) {
-  return GetPWLWindow(pPageView, false);
+  return GetPWLWindow(pPageView);
 }
 
 void CFFL_FormField::OnTimerFired() {}
diff --git a/fpdfsdk/formfiller/cffl_formfield.h b/fpdfsdk/formfiller/cffl_formfield.h
index aa8dae3..2359970 100644
--- a/fpdfsdk/formfiller/cffl_formfield.h
+++ b/fpdfsdk/formfiller/cffl_formfield.h
@@ -123,7 +123,8 @@
   virtual bool IsFieldFull(CPDFSDK_PageView* pPageView);
 #endif  // PDF_ENABLE_XFA
 
-  CPWL_Wnd* GetPWLWindow(CPDFSDK_PageView* pPageView, bool bNew);
+  CPWL_Wnd* GetPWLWindow(CPDFSDK_PageView* pPageView) const;
+  CPWL_Wnd* CreateOrUpdatePWLWindow(CPDFSDK_PageView* pPageView);
   void DestroyPWLWindow(CPDFSDK_PageView* pPageView);
   void EscapeFiller(CPDFSDK_PageView* pPageView, bool bDestroyPWLWindow);
 
diff --git a/fpdfsdk/formfiller/cffl_listbox.cpp b/fpdfsdk/formfiller/cffl_listbox.cpp
index ef60ab1..546eb3c 100644
--- a/fpdfsdk/formfiller/cffl_listbox.cpp
+++ b/fpdfsdk/formfiller/cffl_listbox.cpp
@@ -220,6 +220,6 @@
   return pListBox && pListBox->IsItemSelected(index);
 }
 
-CPWL_ListBox* CFFL_ListBox::GetListBox(CPDFSDK_PageView* pPageView) {
-  return static_cast<CPWL_ListBox*>(GetPWLWindow(pPageView, /*bNew=*/false));
+CPWL_ListBox* CFFL_ListBox::GetListBox(CPDFSDK_PageView* pPageView) const {
+  return static_cast<CPWL_ListBox*>(GetPWLWindow(pPageView));
 }
diff --git a/fpdfsdk/formfiller/cffl_listbox.h b/fpdfsdk/formfiller/cffl_listbox.h
index 7f39f5a..7553de4 100644
--- a/fpdfsdk/formfiller/cffl_listbox.h
+++ b/fpdfsdk/formfiller/cffl_listbox.h
@@ -38,7 +38,7 @@
   bool IsIndexSelected(int index) override;
 
  private:
-  CPWL_ListBox* GetListBox(CPDFSDK_PageView* pPageView);
+  CPWL_ListBox* GetListBox(CPDFSDK_PageView* pPageView) const;
 
   std::set<int> m_OriginSelections;
   std::vector<int> m_State;
diff --git a/fpdfsdk/formfiller/cffl_radiobutton.cpp b/fpdfsdk/formfiller/cffl_radiobutton.cpp
index cd283e0..52fc5ec 100644
--- a/fpdfsdk/formfiller/cffl_radiobutton.cpp
+++ b/fpdfsdk/formfiller/cffl_radiobutton.cpp
@@ -58,7 +58,7 @@
       }
 
       CFFL_FormField::OnChar(pAnnot, nChar, nFlags);
-      CPWL_RadioButton* pWnd = GetRadioButton(pPageView, true);
+      CPWL_RadioButton* pWnd = CreateOrUpdateRadioButton(pPageView);
       if (pWnd && !pWnd->IsReadOnly())
         pWnd->SetCheck(true);
       return CommitData(pPageView, nFlags);
@@ -77,7 +77,7 @@
   if (!IsValid())
     return true;
 
-  CPWL_RadioButton* pWnd = GetRadioButton(pPageView, true);
+  CPWL_RadioButton* pWnd = CreateOrUpdateRadioButton(pPageView);
   if (pWnd)
     pWnd->SetCheck(true);
 
@@ -85,12 +85,12 @@
 }
 
 bool CFFL_RadioButton::IsDataChanged(CPDFSDK_PageView* pPageView) {
-  CPWL_RadioButton* pWnd = GetRadioButton(pPageView, false);
+  CPWL_RadioButton* pWnd = GetRadioButton(pPageView);
   return pWnd && pWnd->IsChecked() != m_pWidget->IsChecked();
 }
 
 void CFFL_RadioButton::SaveData(CPDFSDK_PageView* pPageView) {
-  CPWL_RadioButton* pWnd = GetRadioButton(pPageView, false);
+  CPWL_RadioButton* pWnd = GetRadioButton(pPageView);
   if (!pWnd)
     return;
 
@@ -117,7 +117,12 @@
   SetChangeMark();
 }
 
-CPWL_RadioButton* CFFL_RadioButton::GetRadioButton(CPDFSDK_PageView* pPageView,
-                                                   bool bNew) {
-  return static_cast<CPWL_RadioButton*>(GetPWLWindow(pPageView, bNew));
+CPWL_RadioButton* CFFL_RadioButton::GetRadioButton(
+    CPDFSDK_PageView* pPageView) const {
+  return static_cast<CPWL_RadioButton*>(GetPWLWindow(pPageView));
+}
+
+CPWL_RadioButton* CFFL_RadioButton::CreateOrUpdateRadioButton(
+    CPDFSDK_PageView* pPageView) {
+  return static_cast<CPWL_RadioButton*>(CreateOrUpdatePWLWindow(pPageView));
 }
diff --git a/fpdfsdk/formfiller/cffl_radiobutton.h b/fpdfsdk/formfiller/cffl_radiobutton.h
index 8ba2f28..c077208 100644
--- a/fpdfsdk/formfiller/cffl_radiobutton.h
+++ b/fpdfsdk/formfiller/cffl_radiobutton.h
@@ -33,7 +33,8 @@
   void SaveData(CPDFSDK_PageView* pPageView) override;
 
  private:
-  CPWL_RadioButton* GetRadioButton(CPDFSDK_PageView* pPageView, bool bNew);
+  CPWL_RadioButton* GetRadioButton(CPDFSDK_PageView* pPageView) const;
+  CPWL_RadioButton* CreateOrUpdateRadioButton(CPDFSDK_PageView* pPageView);
 };
 
 #endif  // FPDFSDK_FORMFILLER_CFFL_RADIOBUTTON_H_
diff --git a/fpdfsdk/formfiller/cffl_textfield.cpp b/fpdfsdk/formfiller/cffl_textfield.cpp
index 2a223d6..28236ce 100644
--- a/fpdfsdk/formfiller/cffl_textfield.cpp
+++ b/fpdfsdk/formfiller/cffl_textfield.cpp
@@ -119,7 +119,7 @@
                                  pAnnot->GetRect().GetOuterRect());
 
       if (m_bValid) {
-        if (CPWL_Wnd* pWnd = GetPWLWindow(pPageView, true))
+        if (CPWL_Wnd* pWnd = CreateOrUpdatePWLWindow(pPageView))
           pWnd->SetFocus();
         break;
       }
@@ -142,12 +142,12 @@
 }
 
 bool CFFL_TextField::IsDataChanged(CPDFSDK_PageView* pPageView) {
-  CPWL_Edit* pEdit = GetEdit(pPageView, false);
+  CPWL_Edit* pEdit = GetEdit(pPageView);
   return pEdit && pEdit->GetText() != m_pWidget->GetValue();
 }
 
 void CFFL_TextField::SaveData(CPDFSDK_PageView* pPageView) {
-  CPWL_Edit* pWnd = GetEdit(pPageView, false);
+  CPWL_Edit* pWnd = GetEdit(pPageView);
   if (!pWnd)
     return;
 
@@ -175,7 +175,7 @@
                                    CPDFSDK_FieldAction& fa) {
   switch (type) {
     case CPDF_AAction::kKeyStroke:
-      if (CPWL_Edit* pWnd = GetEdit(pPageView, false)) {
+      if (CPWL_Edit* pWnd = GetEdit(pPageView)) {
         fa.bFieldFull = pWnd->IsTextFull();
 
         fa.sValue = pWnd->GetText();
@@ -187,7 +187,7 @@
       }
       break;
     case CPDF_AAction::kValidate:
-      if (CPWL_Edit* pWnd = GetEdit(pPageView, false)) {
+      if (CPWL_Edit* pWnd = GetEdit(pPageView)) {
         fa.sValue = pWnd->GetText();
       }
       break;
@@ -205,7 +205,7 @@
                                    const CPDFSDK_FieldAction& fa) {
   switch (type) {
     case CPDF_AAction::kKeyStroke:
-      if (CPWL_Edit* pEdit = GetEdit(pPageView, false)) {
+      if (CPWL_Edit* pEdit = GetEdit(pPageView)) {
         pEdit->SetFocus();
         pEdit->SetSelection(fa.nSelStart, fa.nSelEnd);
         pEdit->ReplaceSelection(fa.sChange);
@@ -217,7 +217,7 @@
 }
 
 void CFFL_TextField::SaveState(CPDFSDK_PageView* pPageView) {
-  CPWL_Edit* pWnd = GetEdit(pPageView, false);
+  CPWL_Edit* pWnd = GetEdit(pPageView);
   if (!pWnd)
     return;
 
@@ -226,7 +226,7 @@
 }
 
 void CFFL_TextField::RestoreState(CPDFSDK_PageView* pPageView) {
-  CPWL_Edit* pWnd = GetEdit(pPageView, true);
+  CPWL_Edit* pWnd = CreateOrUpdateEdit(pPageView);
   if (!pWnd)
     return;
 
@@ -236,7 +236,7 @@
 
 #ifdef PDF_ENABLE_XFA
 bool CFFL_TextField::IsFieldFull(CPDFSDK_PageView* pPageView) {
-  CPWL_Edit* pWnd = GetEdit(pPageView, false);
+  CPWL_Edit* pWnd = GetEdit(pPageView);
   return pWnd && pWnd->IsTextFull();
 }
 #endif  // PDF_ENABLE_XFA
@@ -252,6 +252,10 @@
   m_pFormFillEnv->OnSetFieldInputFocus(pBuffer, nCharacters, true);
 }
 
-CPWL_Edit* CFFL_TextField::GetEdit(CPDFSDK_PageView* pPageView, bool bNew) {
-  return static_cast<CPWL_Edit*>(GetPWLWindow(pPageView, bNew));
+CPWL_Edit* CFFL_TextField::GetEdit(CPDFSDK_PageView* pPageView) const {
+  return static_cast<CPWL_Edit*>(GetPWLWindow(pPageView));
+}
+
+CPWL_Edit* CFFL_TextField::CreateOrUpdateEdit(CPDFSDK_PageView* pPageView) {
+  return static_cast<CPWL_Edit*>(CreateOrUpdatePWLWindow(pPageView));
 }
diff --git a/fpdfsdk/formfiller/cffl_textfield.h b/fpdfsdk/formfiller/cffl_textfield.h
index 5941b42..4ae5b2a 100644
--- a/fpdfsdk/formfiller/cffl_textfield.h
+++ b/fpdfsdk/formfiller/cffl_textfield.h
@@ -50,7 +50,8 @@
   void OnSetFocus(CPWL_Edit* pEdit) override;
 
  private:
-  CPWL_Edit* GetEdit(CPDFSDK_PageView* pPageView, bool bNew);
+  CPWL_Edit* GetEdit(CPDFSDK_PageView* pPageView) const;
+  CPWL_Edit* CreateOrUpdateEdit(CPDFSDK_PageView* pPageView);
 
   FFL_TextFieldState m_State;
 };
diff --git a/fpdfsdk/formfiller/cffl_textobject.cpp b/fpdfsdk/formfiller/cffl_textobject.cpp
index 7d5f293..d4f5430 100644
--- a/fpdfsdk/formfiller/cffl_textobject.cpp
+++ b/fpdfsdk/formfiller/cffl_textobject.cpp
@@ -18,7 +18,9 @@
   if (bRestoreValue)
     RestoreState(pPageView);
 
-  ObservedPtr<CPWL_Wnd> pRet(GetPWLWindow(pPageView, !bRestoreValue));
+  ObservedPtr<CPWL_Wnd> pRet(bRestoreValue
+                                 ? GetPWLWindow(pPageView)
+                                 : CreateOrUpdatePWLWindow(pPageView));
   m_pWidget->UpdateField();  // May invoke JS, invalidating |pRet|.
   return pRet.Get();
 }
diff --git a/fpdfsdk/pwl/cpwl_combo_box_embeddertest.cpp b/fpdfsdk/pwl/cpwl_combo_box_embeddertest.cpp
index 33ac34f..f5e10b8 100644
--- a/fpdfsdk/pwl/cpwl_combo_box_embeddertest.cpp
+++ b/fpdfsdk/pwl/cpwl_combo_box_embeddertest.cpp
@@ -64,8 +64,8 @@
         pInteractiveFormFiller->GetFormFieldForTesting(pAnnotCombobox);
     ASSERT_TRUE(m_pFormFiller);
 
-    CPWL_Wnd* pWindow = m_pFormFiller->GetPWLWindow(
-        m_pFormFillEnv->GetPageViewAtIndex(0), false);
+    CPWL_Wnd* pWindow =
+        m_pFormFiller->GetPWLWindow(m_pFormFillEnv->GetPageViewAtIndex(0));
     ASSERT_TRUE(pWindow);
     m_pComboBox = static_cast<CPWL_ComboBox*>(pWindow);
   }
diff --git a/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp b/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
index 8f566ea..ac217ce 100644
--- a/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
+++ b/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
@@ -70,8 +70,8 @@
         pInteractiveFormFiller->GetFormFieldForTesting(pAnnotTextField);
     ASSERT_TRUE(m_pFormFiller);
 
-    CPWL_Wnd* pWindow = m_pFormFiller->GetPWLWindow(
-        m_pFormFillEnv->GetPageViewAtIndex(0), false);
+    CPWL_Wnd* pWindow =
+        m_pFormFiller->GetPWLWindow(m_pFormFillEnv->GetPageViewAtIndex(0));
     ASSERT_TRUE(pWindow);
     m_pEdit = static_cast<CPWL_Edit*>(pWindow);
   }
diff --git a/fpdfsdk/pwl/cpwl_special_button_embeddertest.cpp b/fpdfsdk/pwl/cpwl_special_button_embeddertest.cpp
index 55238df..ed2ab15 100644
--- a/fpdfsdk/pwl/cpwl_special_button_embeddertest.cpp
+++ b/fpdfsdk/pwl/cpwl_special_button_embeddertest.cpp
@@ -74,8 +74,8 @@
     form_filler_ = interactive_formfiller->GetFormFieldForTesting(annot);
     ASSERT_TRUE(form_filler_);
 
-    window_ =
-        form_filler_->GetPWLWindow(formfill_env_->GetPageViewAtIndex(0), true);
+    window_ = form_filler_->CreateOrUpdatePWLWindow(
+        formfill_env_->GetPageViewAtIndex(0));
     ASSERT_TRUE(window_);
   }
 
