Prevent duplicate string creation in CFWL_ComboBox::AddString()

Change-Id: Id2baf98c52aa5fcc9e1dd744187318bcb67ac081
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/61770
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fwl/cfwl_combobox.cpp b/xfa/fwl/cfwl_combobox.cpp
index 808c8c2..2ed36b8 100644
--- a/xfa/fwl/cfwl_combobox.cpp
+++ b/xfa/fwl/cfwl_combobox.cpp
@@ -43,7 +43,7 @@
   return FWL_Type::ComboBox;
 }
 
-void CFWL_ComboBox::AddString(WideStringView wsText) {
+void CFWL_ComboBox::AddString(const WideString& wsText) {
   m_pListBox->AddString(wsText);
 }
 
diff --git a/xfa/fwl/cfwl_combobox.h b/xfa/fwl/cfwl_combobox.h
index 4142b83..ce3414b 100644
--- a/xfa/fwl/cfwl_combobox.h
+++ b/xfa/fwl/cfwl_combobox.h
@@ -59,7 +59,7 @@
   int32_t GetCurSel() const { return m_iCurSel; }
   void SetCurSel(int32_t iSel);
 
-  void AddString(WideStringView wsText);
+  void AddString(const WideString& wsText);
   void RemoveAt(int32_t iIndex);
   void RemoveAll();
 
diff --git a/xfa/fwl/cfwl_listbox.cpp b/xfa/fwl/cfwl_listbox.cpp
index 4de06db..b2b0f2e 100644
--- a/xfa/fwl/cfwl_listbox.cpp
+++ b/xfa/fwl/cfwl_listbox.cpp
@@ -901,9 +901,8 @@
   return it != m_ItemArray.end() ? it - m_ItemArray.begin() : -1;
 }
 
-CFWL_ListItem* CFWL_ListBox::AddString(WideStringView wsAdd) {
-  m_ItemArray.emplace_back(
-      pdfium::MakeUnique<CFWL_ListItem>(WideString(wsAdd)));
+CFWL_ListItem* CFWL_ListBox::AddString(const WideString& wsAdd) {
+  m_ItemArray.emplace_back(pdfium::MakeUnique<CFWL_ListItem>(wsAdd));
   return m_ItemArray.back().get();
 }
 
diff --git a/xfa/fwl/cfwl_listbox.h b/xfa/fwl/cfwl_listbox.h
index 9d3a21a..178e49a 100644
--- a/xfa/fwl/cfwl_listbox.h
+++ b/xfa/fwl/cfwl_listbox.h
@@ -53,7 +53,7 @@
   CFWL_ListItem* GetItem(const CFWL_Widget* pWidget, int32_t nIndex) const;
   int32_t GetItemIndex(CFWL_Widget* pWidget, CFWL_ListItem* pItem);
 
-  CFWL_ListItem* AddString(WideStringView wsAdd);
+  CFWL_ListItem* AddString(const WideString& wsAdd);
   void RemoveAt(int32_t iIndex);
   void DeleteString(CFWL_ListItem* pItem);
   void DeleteAll();
diff --git a/xfa/fxfa/cxfa_ffcombobox.cpp b/xfa/fxfa/cxfa_ffcombobox.cpp
index 2efbdf8..6093bb1 100644
--- a/xfa/fxfa/cxfa_ffcombobox.cpp
+++ b/xfa/fxfa/cxfa_ffcombobox.cpp
@@ -56,7 +56,7 @@
   m_pNormalWidget->LockUpdate();
 
   for (const auto& label : m_pNode->GetChoiceListItems(false))
-    pComboBox->AddString(label.AsStringView());
+    pComboBox->AddString(label);
 
   std::vector<int32_t> iSelArray = m_pNode->GetSelectedItems();
   if (iSelArray.empty())
@@ -280,7 +280,7 @@
   InvalidateRect();
 }
 
-void CXFA_FFComboBox::InsertItem(WideStringView wsLabel, int32_t nIndex) {
+void CXFA_FFComboBox::InsertItem(const WideString& wsLabel, int32_t nIndex) {
   ToComboBox(m_pNormalWidget.get())->AddString(wsLabel);
   m_pNormalWidget->Update();
   InvalidateRect();
diff --git a/xfa/fxfa/cxfa_ffcombobox.h b/xfa/fxfa/cxfa_ffcombobox.h
index 78b7eb5..5396cdf 100644
--- a/xfa/fxfa/cxfa_ffcombobox.h
+++ b/xfa/fxfa/cxfa_ffcombobox.h
@@ -48,7 +48,7 @@
                     const CFX_Matrix& matrix) override;
 
   // CXFA_FFDropDown
-  void InsertItem(WideStringView wsLabel, int32_t nIndex) override;
+  void InsertItem(const WideString& wsLabel, int32_t nIndex) override;
   void DeleteItem(int32_t nIndex) override;
 
   void OpenDropDownList();
diff --git a/xfa/fxfa/cxfa_ffdropdown.h b/xfa/fxfa/cxfa_ffdropdown.h
index f2288df..26446bc 100644
--- a/xfa/fxfa/cxfa_ffdropdown.h
+++ b/xfa/fxfa/cxfa_ffdropdown.h
@@ -7,13 +7,14 @@
 #ifndef XFA_FXFA_CXFA_FFDROPDOWN_H_
 #define XFA_FXFA_CXFA_FFDROPDOWN_H_
 
+#include "core/fxcrt/widestring.h"
 #include "xfa/fxfa/cxfa_fffield.h"
 
 class CXFA_FFDropDown : public CXFA_FFField {
  public:
   ~CXFA_FFDropDown() override;
 
-  virtual void InsertItem(WideStringView wsLabel, int32_t nIndex) = 0;
+  virtual void InsertItem(const WideString& wsLabel, int32_t nIndex) = 0;
   virtual void DeleteItem(int32_t nIndex) = 0;
 
  protected:
diff --git a/xfa/fxfa/cxfa_fflistbox.cpp b/xfa/fxfa/cxfa_fflistbox.cpp
index 4643de3..349f749 100644
--- a/xfa/fxfa/cxfa_fflistbox.cpp
+++ b/xfa/fxfa/cxfa_fflistbox.cpp
@@ -56,7 +56,7 @@
   m_pNormalWidget->LockUpdate();
 
   for (const auto& label : m_pNode->GetChoiceListItems(false))
-    pListBox->AddString(label.AsStringView());
+    pListBox->AddString(label);
 
   uint32_t dwExtendedStyle = FWL_STYLEEXT_LTB_ShowScrollBarFocus;
   if (m_pNode->IsChoiceListMultiSelect())
@@ -164,9 +164,8 @@
   InvalidateRect();
 }
 
-void CXFA_FFListBox::InsertItem(WideStringView wsLabel, int32_t nIndex) {
-  WideString wsTemp(wsLabel);
-  ToListBox(m_pNormalWidget.get())->AddString(wsTemp.AsStringView());
+void CXFA_FFListBox::InsertItem(const WideString& wsLabel, int32_t nIndex) {
+  ToListBox(m_pNormalWidget.get())->AddString(wsLabel);
   m_pNormalWidget->Update();
   InvalidateRect();
 }
diff --git a/xfa/fxfa/cxfa_fflistbox.h b/xfa/fxfa/cxfa_fflistbox.h
index f9fa801..896ee61 100644
--- a/xfa/fxfa/cxfa_fflistbox.h
+++ b/xfa/fxfa/cxfa_fflistbox.h
@@ -25,7 +25,7 @@
   FormFieldType GetFormFieldType() override;
 
   // CXFA_FFDropDown
-  void InsertItem(WideStringView wsLabel, int32_t nIndex) override;
+  void InsertItem(const WideString& wsLabel, int32_t nIndex) override;
   void DeleteItem(int32_t nIndex) override;
 
   void OnSelectChanged(CFWL_Widget* pWidget);
diff --git a/xfa/fxfa/cxfa_ffnotify.cpp b/xfa/fxfa/cxfa_ffnotify.cpp
index e034dc9..a71a3a5 100644
--- a/xfa/fxfa/cxfa_ffnotify.cpp
+++ b/xfa/fxfa/cxfa_ffnotify.cpp
@@ -75,7 +75,7 @@
   CXFA_FFWidget* pWidget = m_pDoc->GetDocView()->GetWidgetForNode(pSender);
   for (; pWidget; pWidget = pSender->GetNextWidget(pWidget)) {
     if (pWidget->IsLoaded())
-      ToDropDown(pWidget)->InsertItem(wsLabel.AsStringView(), iIndex);
+      ToDropDown(pWidget)->InsertItem(wsLabel, iIndex);
   }
 }