Convert CFWL_Edit Cut & Copy out param to return

Change-Id: I99776deb809609f69275848ddb81706e2cc82c82
Reviewed-on: https://pdfium-review.googlesource.com/22370
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
diff --git a/fpdfsdk/fpdfformfill.cpp b/fpdfsdk/fpdfformfill.cpp
index d70b678..3d61336 100644
--- a/fpdfsdk/fpdfformfill.cpp
+++ b/fpdfsdk/fpdfformfill.cpp
@@ -500,8 +500,8 @@
   if (!pContext->ContainsXFAForm())
     return;
 
-  WideString wsCpText;
-  static_cast<CXFA_FFWidget*>(hWidget)->Copy(wsCpText);
+  WideString wsCpText =
+      static_cast<CXFA_FFWidget*>(hWidget)->Copy().value_or(WideString());
 
   ByteString bsCpText = wsCpText.UTF16LE_Encode();
   uint32_t len = bsCpText.GetLength() / sizeof(unsigned short);
@@ -531,8 +531,8 @@
   if (!pContext->ContainsXFAForm())
     return;
 
-  WideString wsCpText;
-  static_cast<CXFA_FFWidget*>(hWidget)->Cut(wsCpText);
+  WideString wsCpText =
+      static_cast<CXFA_FFWidget*>(hWidget)->Cut().value_or(WideString());
 
   ByteString bsCpText = wsCpText.UTF16LE_Encode();
   uint32_t len = bsCpText.GetLength() / sizeof(unsigned short);
diff --git a/xfa/fwl/cfwl_combobox.h b/xfa/fwl/cfwl_combobox.h
index 923e2d8..a9dc635 100644
--- a/xfa/fwl/cfwl_combobox.h
+++ b/xfa/fwl/cfwl_combobox.h
@@ -83,8 +83,8 @@
     return EditCanCopy();
   }
   bool EditCanSelectAll() const { return m_pEdit->GetTextLength() > 0; }
-  bool EditCopy(WideString& wsCopy) const { return m_pEdit->Copy(wsCopy); }
-  bool EditCut(WideString& wsCut) { return m_pEdit->Cut(wsCut); }
+  Optional<WideString> EditCopy() const { return m_pEdit->Copy(); }
+  Optional<WideString> EditCut() { return m_pEdit->Cut(); }
   bool EditPaste(const WideString& wsPaste) { return m_pEdit->Paste(wsPaste); }
   void EditSelectAll() { m_pEdit->SelectAll(); }
   void EditDelete() { m_pEdit->ClearText(); }
diff --git a/xfa/fwl/cfwl_edit.cpp b/xfa/fwl/cfwl_edit.cpp
index cdbca2c..960ec99 100644
--- a/xfa/fwl/cfwl_edit.cpp
+++ b/xfa/fwl/cfwl_edit.cpp
@@ -322,20 +322,18 @@
   m_EdtEngine.SetAliasChar(wAlias);
 }
 
-bool CFWL_Edit::Copy(WideString& wsCopy) {
+Optional<WideString> CFWL_Edit::Copy() {
   if (!m_EdtEngine.HasSelection())
-    return false;
+    return {};
 
-  wsCopy = m_EdtEngine.GetSelectedText();
-  return true;
+  return {m_EdtEngine.GetSelectedText()};
 }
 
-bool CFWL_Edit::Cut(WideString& wsCut) {
+Optional<WideString> CFWL_Edit::Cut() {
   if (!m_EdtEngine.HasSelection())
-    return false;
+    return {};
 
-  wsCut = m_EdtEngine.DeleteSelectedText();
-  return true;
+  return {m_EdtEngine.DeleteSelectedText()};
 }
 
 bool CFWL_Edit::Paste(const WideString& wsPaste) {
diff --git a/xfa/fwl/cfwl_edit.h b/xfa/fwl/cfwl_edit.h
index 6aedca8..9c667f5 100644
--- a/xfa/fwl/cfwl_edit.h
+++ b/xfa/fwl/cfwl_edit.h
@@ -80,8 +80,8 @@
   int32_t GetLimit() const;
   void SetLimit(int32_t nLimit);
   void SetAliasChar(wchar_t wAlias);
-  bool Copy(WideString& wsCopy);
-  bool Cut(WideString& wsCut);
+  Optional<WideString> Copy();
+  Optional<WideString> Cut();
   bool Paste(const WideString& wsPaste);
   bool Undo();
   bool Redo();
diff --git a/xfa/fxfa/cxfa_ffcombobox.cpp b/xfa/fxfa/cxfa_ffcombobox.cpp
index 58a0f94..13bda7a 100644
--- a/xfa/fxfa/cxfa_ffcombobox.cpp
+++ b/xfa/fxfa/cxfa_ffcombobox.cpp
@@ -232,13 +232,15 @@
   return ToComboBox(m_pNormalWidget.get())->EditCanSelectAll();
 }
 
-bool CXFA_FFComboBox::Copy(WideString& wsCopy) {
-  return ToComboBox(m_pNormalWidget.get())->EditCopy(wsCopy);
+Optional<WideString> CXFA_FFComboBox::Copy() {
+  return ToComboBox(m_pNormalWidget.get())->EditCopy();
 }
 
-bool CXFA_FFComboBox::Cut(WideString& wsCut) {
-  return m_pDataAcc->IsChoiceListAllowTextEntry() &&
-         ToComboBox(m_pNormalWidget.get())->EditCut(wsCut);
+Optional<WideString> CXFA_FFComboBox::Cut() {
+  if (!m_pDataAcc->IsChoiceListAllowTextEntry())
+    return {};
+
+  return ToComboBox(m_pNormalWidget.get())->EditCut();
 }
 
 bool CXFA_FFComboBox::Paste(const WideString& wsPaste) {
diff --git a/xfa/fxfa/cxfa_ffcombobox.h b/xfa/fxfa/cxfa_ffcombobox.h
index 81da2c2..727e1ba 100644
--- a/xfa/fxfa/cxfa_ffcombobox.h
+++ b/xfa/fxfa/cxfa_ffcombobox.h
@@ -29,8 +29,8 @@
   bool CanCut() override;
   bool CanPaste() override;
   bool CanSelectAll() override;
-  bool Copy(WideString& wsCopy) override;
-  bool Cut(WideString& wsCut) override;
+  Optional<WideString> Copy() override;
+  Optional<WideString> Cut() override;
   bool Paste(const WideString& wsPaste) override;
   void SelectAll() override;
   void Delete() override;
diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp
index b97b218..3f4260c 100644
--- a/xfa/fxfa/cxfa_fftextedit.cpp
+++ b/xfa/fxfa/cxfa_fftextedit.cpp
@@ -398,12 +398,12 @@
   return ToEdit(m_pNormalWidget.get())->GetTextLength() > 0;
 }
 
-bool CXFA_FFTextEdit::Copy(WideString& wsCopy) {
-  return ToEdit(m_pNormalWidget.get())->Copy(wsCopy);
+Optional<WideString> CXFA_FFTextEdit::Copy() {
+  return ToEdit(m_pNormalWidget.get())->Copy();
 }
 
-bool CXFA_FFTextEdit::Cut(WideString& wsCut) {
-  return ToEdit(m_pNormalWidget.get())->Copy(wsCut);
+Optional<WideString> CXFA_FFTextEdit::Cut() {
+  return ToEdit(m_pNormalWidget.get())->Cut();
 }
 
 bool CXFA_FFTextEdit::Paste(const WideString& wsPaste) {
diff --git a/xfa/fxfa/cxfa_fftextedit.h b/xfa/fxfa/cxfa_fftextedit.h
index dd3801b..404d35e 100644
--- a/xfa/fxfa/cxfa_fftextedit.h
+++ b/xfa/fxfa/cxfa_fftextedit.h
@@ -51,8 +51,8 @@
   bool CanCut() override;
   bool CanPaste() override;
   bool CanSelectAll() override;
-  bool Copy(WideString& wsCopy) override;
-  bool Cut(WideString& wsCut) override;
+  Optional<WideString> Copy() override;
+  Optional<WideString> Cut() override;
   bool Paste(const WideString& wsPaste) override;
   void SelectAll() override;
   void Delete() override;
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index 1314b8a..2a844bb 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -1166,12 +1166,12 @@
   return CanCopy();
 }
 
-bool CXFA_FFWidget::Copy(WideString& wsCopy) {
-  return false;
+Optional<WideString> CXFA_FFWidget::Copy() {
+  return {};
 }
 
-bool CXFA_FFWidget::Cut(WideString& wsCut) {
-  return false;
+Optional<WideString> CXFA_FFWidget::Cut() {
+  return {};
 }
 
 bool CXFA_FFWidget::Paste(const WideString& wsPaste) {
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index 1337232..f520983 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -127,8 +127,8 @@
   virtual bool CanSelectAll();
   virtual bool CanDelete();
   virtual bool CanDeSelect();
-  virtual bool Copy(WideString& wsCopy);
-  virtual bool Cut(WideString& wsCut);
+  virtual Optional<WideString> Copy();
+  virtual Optional<WideString> Cut();
   virtual bool Paste(const WideString& wsPaste);
   virtual void SelectAll();
   virtual void Delete();
diff --git a/xfa/fxfa/cxfa_ffwidgethandler.cpp b/xfa/fxfa/cxfa_ffwidgethandler.cpp
index 8988cf1..79e48ba 100644
--- a/xfa/fxfa/cxfa_ffwidgethandler.cpp
+++ b/xfa/fxfa/cxfa_ffwidgethandler.cpp
@@ -150,9 +150,7 @@
   if (!widget->CanCopy())
     return WideString();
 
-  WideString val;
-  widget->Copy(val);
-  return val;
+  return widget->Copy().value_or(WideString());
 }
 
 void CXFA_FFWidgetHandler::PasteText(CXFA_FFWidget* widget,