Pass owning reference to CFWL_Message to OnProcessMessageToForm()

As a consequence, we can avoid a Clone() call of a previously
stack-based object just to get an owning reference. In turn,
this makes Clone() unused, so remove it. In turn, this makes
the copy constructor unused, so remove it.

-- delete copy-assign operator while were at it for symmetry.

Change-Id: I7901f0bc4f29bce508e1e5227bbeb7688955d3bd
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/59830
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fwl/cfwl_message.cpp b/xfa/fwl/cfwl_message.cpp
index 998966c..f330a08 100644
--- a/xfa/fwl/cfwl_message.cpp
+++ b/xfa/fwl/cfwl_message.cpp
@@ -11,6 +11,4 @@
                            CFWL_Widget* pDstTarget)
     : m_type(type), m_pSrcTarget(pSrcTarget), m_pDstTarget(pDstTarget) {}
 
-CFWL_Message::CFWL_Message(const CFWL_Message& that) = default;
-
 CFWL_Message::~CFWL_Message() = default;
diff --git a/xfa/fwl/cfwl_message.h b/xfa/fwl/cfwl_message.h
index 227b758..2242831 100644
--- a/xfa/fwl/cfwl_message.h
+++ b/xfa/fwl/cfwl_message.h
@@ -19,11 +19,8 @@
  public:
   enum class Type { Key, KillFocus, Mouse, MouseWheel, SetFocus };
 
-  CFWL_Message(Type type, CFWL_Widget* pSrcTarget, CFWL_Widget* pDstTarget);
   virtual ~CFWL_Message();
 
-  virtual std::unique_ptr<CFWL_Message> Clone() = 0;
-
   Type GetType() const { return m_type; }
   CFWL_Widget* GetSrcTarget() const { return m_pSrcTarget.Get(); }
   CFWL_Widget* GetDstTarget() const { return m_pDstTarget.Get(); }
@@ -31,7 +28,9 @@
   void SetDstTarget(CFWL_Widget* pWidget) { m_pDstTarget = pWidget; }
 
  protected:
-  CFWL_Message(const CFWL_Message& that);
+  CFWL_Message(Type type, CFWL_Widget* pSrcTarget, CFWL_Widget* pDstTarget);
+  CFWL_Message(const CFWL_Message& that) = delete;
+  CFWL_Message& operator=(const CFWL_Message& that) = delete;
 
  private:
   const Type m_type;
diff --git a/xfa/fwl/cfwl_messagekey.cpp b/xfa/fwl/cfwl_messagekey.cpp
index 12464fa..9abb0c1 100644
--- a/xfa/fwl/cfwl_messagekey.cpp
+++ b/xfa/fwl/cfwl_messagekey.cpp
@@ -19,10 +19,4 @@
       m_dwFlags(flags),
       m_dwKeyCode(keycode) {}
 
-CFWL_MessageKey::CFWL_MessageKey(const CFWL_MessageKey& that) = default;
-
 CFWL_MessageKey::~CFWL_MessageKey() = default;
-
-std::unique_ptr<CFWL_Message> CFWL_MessageKey::Clone() {
-  return pdfium::MakeUnique<CFWL_MessageKey>(*this);
-}
diff --git a/xfa/fwl/cfwl_messagekey.h b/xfa/fwl/cfwl_messagekey.h
index 4b54509..3b46531 100644
--- a/xfa/fwl/cfwl_messagekey.h
+++ b/xfa/fwl/cfwl_messagekey.h
@@ -19,12 +19,8 @@
                   FWL_KeyCommand cmd,
                   uint32_t flags,
                   uint32_t keycode);
-  CFWL_MessageKey(const CFWL_MessageKey& that);
   ~CFWL_MessageKey() override;
 
-  // CFWL_Message
-  std::unique_ptr<CFWL_Message> Clone() override;
-
   FWL_KeyCommand m_dwCmd;
   uint32_t m_dwFlags;
   uint32_t m_dwKeyCode;
diff --git a/xfa/fwl/cfwl_messagekillfocus.cpp b/xfa/fwl/cfwl_messagekillfocus.cpp
index 34c4c05..15fe562 100644
--- a/xfa/fwl/cfwl_messagekillfocus.cpp
+++ b/xfa/fwl/cfwl_messagekillfocus.cpp
@@ -17,11 +17,4 @@
                                              CFWL_Widget* pDstTarget)
     : CFWL_Message(CFWL_Message::Type::KillFocus, pSrcTarget, pDstTarget) {}
 
-CFWL_MessageKillFocus::CFWL_MessageKillFocus(
-    const CFWL_MessageKillFocus& that) = default;
-
 CFWL_MessageKillFocus::~CFWL_MessageKillFocus() = default;
-
-std::unique_ptr<CFWL_Message> CFWL_MessageKillFocus::Clone() {
-  return pdfium::MakeUnique<CFWL_MessageKillFocus>(*this);
-}
diff --git a/xfa/fwl/cfwl_messagekillfocus.h b/xfa/fwl/cfwl_messagekillfocus.h
index b94fc3f..18e64f9 100644
--- a/xfa/fwl/cfwl_messagekillfocus.h
+++ b/xfa/fwl/cfwl_messagekillfocus.h
@@ -16,12 +16,8 @@
  public:
   explicit CFWL_MessageKillFocus(CFWL_Widget* pSrcTarget);
   CFWL_MessageKillFocus(CFWL_Widget* pSrcTarget, CFWL_Widget* pDstTarget);
-  CFWL_MessageKillFocus(const CFWL_MessageKillFocus& that);
   ~CFWL_MessageKillFocus() override;
 
-  // CFWL_Message:
-  std::unique_ptr<CFWL_Message> Clone() override;
-
   bool IsFocusedOnWidget(const CFWL_Widget* pWidget) const {
     return pWidget == m_pSetFocus;
   }
diff --git a/xfa/fwl/cfwl_messagemouse.cpp b/xfa/fwl/cfwl_messagemouse.cpp
index fdeee99..395c9e6 100644
--- a/xfa/fwl/cfwl_messagemouse.cpp
+++ b/xfa/fwl/cfwl_messagemouse.cpp
@@ -24,10 +24,4 @@
       m_dwFlags(flags),
       m_pos(pos) {}
 
-CFWL_MessageMouse::CFWL_MessageMouse(const CFWL_MessageMouse& other) = default;
-
 CFWL_MessageMouse::~CFWL_MessageMouse() = default;
-
-std::unique_ptr<CFWL_Message> CFWL_MessageMouse::Clone() {
-  return pdfium::MakeUnique<CFWL_MessageMouse>(*this);
-}
diff --git a/xfa/fwl/cfwl_messagemouse.h b/xfa/fwl/cfwl_messagemouse.h
index a38f60c..b0cea2a 100644
--- a/xfa/fwl/cfwl_messagemouse.h
+++ b/xfa/fwl/cfwl_messagemouse.h
@@ -32,12 +32,8 @@
                     FWL_MouseCommand cmd,
                     uint32_t flags,
                     CFX_PointF pos);
-  CFWL_MessageMouse(const CFWL_MessageMouse& other);
   ~CFWL_MessageMouse() override;
 
-  // CFWL_Message
-  std::unique_ptr<CFWL_Message> Clone() override;
-
   FWL_MouseCommand m_dwCmd;
   uint32_t m_dwFlags = 0;
   CFX_PointF m_pos;
diff --git a/xfa/fwl/cfwl_messagemousewheel.cpp b/xfa/fwl/cfwl_messagemousewheel.cpp
index fd6e69d..3331179 100644
--- a/xfa/fwl/cfwl_messagemousewheel.cpp
+++ b/xfa/fwl/cfwl_messagemousewheel.cpp
@@ -19,11 +19,4 @@
       m_pos(pos),
       m_delta(delta) {}
 
-CFWL_MessageMouseWheel::CFWL_MessageMouseWheel(const CFWL_MessageMouseWheel&) =
-    default;
-
 CFWL_MessageMouseWheel::~CFWL_MessageMouseWheel() = default;
-
-std::unique_ptr<CFWL_Message> CFWL_MessageMouseWheel::Clone() {
-  return pdfium::MakeUnique<CFWL_MessageMouseWheel>(*this);
-}
diff --git a/xfa/fwl/cfwl_messagemousewheel.h b/xfa/fwl/cfwl_messagemousewheel.h
index 5385458..8eb4be7 100644
--- a/xfa/fwl/cfwl_messagemousewheel.h
+++ b/xfa/fwl/cfwl_messagemousewheel.h
@@ -18,12 +18,8 @@
                          uint32_t flags,
                          CFX_PointF pos,
                          CFX_PointF delta);
-  CFWL_MessageMouseWheel(const CFWL_MessageMouseWheel&);
   ~CFWL_MessageMouseWheel() override;
 
-  // CFWL_Message
-  std::unique_ptr<CFWL_Message> Clone() override;
-
   uint32_t m_dwFlags;
   CFX_PointF m_pos;
   CFX_PointF m_delta;
diff --git a/xfa/fwl/cfwl_messagesetfocus.cpp b/xfa/fwl/cfwl_messagesetfocus.cpp
index d797781..ec0c27a 100644
--- a/xfa/fwl/cfwl_messagesetfocus.cpp
+++ b/xfa/fwl/cfwl_messagesetfocus.cpp
@@ -14,11 +14,5 @@
                                            CFWL_Widget* pDstTarget)
     : CFWL_Message(CFWL_Message::Type::SetFocus, pSrcTarget, pDstTarget) {}
 
-CFWL_MessageSetFocus::CFWL_MessageSetFocus(const CFWL_MessageSetFocus& that) =
-    default;
-
 CFWL_MessageSetFocus::~CFWL_MessageSetFocus() = default;
 
-std::unique_ptr<CFWL_Message> CFWL_MessageSetFocus::Clone() {
-  return pdfium::MakeUnique<CFWL_MessageSetFocus>(*this);
-}
diff --git a/xfa/fwl/cfwl_messagesetfocus.h b/xfa/fwl/cfwl_messagesetfocus.h
index 410d26b..67e0035 100644
--- a/xfa/fwl/cfwl_messagesetfocus.h
+++ b/xfa/fwl/cfwl_messagesetfocus.h
@@ -14,11 +14,7 @@
 class CFWL_MessageSetFocus final : public CFWL_Message {
  public:
   CFWL_MessageSetFocus(CFWL_Widget* pSrcTarget, CFWL_Widget* pDstTarget);
-  CFWL_MessageSetFocus(const CFWL_MessageSetFocus& that);
   ~CFWL_MessageSetFocus() override;
-
-  // CFWL_Message
-  std::unique_ptr<CFWL_Message> Clone() override;
 };
 
 #endif  // XFA_FWL_CFWL_MESSAGESETFOCUS_H_
diff --git a/xfa/fwl/cfwl_widgetmgr.cpp b/xfa/fwl/cfwl_widgetmgr.cpp
index 184b403..1eefe37 100644
--- a/xfa/fwl/cfwl_widgetmgr.cpp
+++ b/xfa/fwl/cfwl_widgetmgr.cpp
@@ -309,16 +309,14 @@
                           pPopupRect);
 }
 
-void CFWL_WidgetMgr::OnProcessMessageToForm(CFWL_Message* pMessage) {
-  if (!pMessage)
-    return;
-
+void CFWL_WidgetMgr::OnProcessMessageToForm(
+    std::unique_ptr<CFWL_Message> pMessage) {
   CFWL_Widget* pDstWidget = pMessage->GetDstTarget();
   if (!pDstWidget)
     return;
 
   CFWL_NoteDriver* pNoteDriver = pDstWidget->GetOwnerApp()->GetNoteDriver();
-  pNoteDriver->ProcessMessage(pMessage->Clone());
+  pNoteDriver->ProcessMessage(std::move(pMessage));
 }
 
 void CFWL_WidgetMgr::OnDrawWidget(CFWL_Widget* pWidget,
diff --git a/xfa/fwl/cfwl_widgetmgr.h b/xfa/fwl/cfwl_widgetmgr.h
index 75b7250..a401e22 100644
--- a/xfa/fwl/cfwl_widgetmgr.h
+++ b/xfa/fwl/cfwl_widgetmgr.h
@@ -37,7 +37,7 @@
 
   static CFWL_Widget* NextTab(CFWL_Widget* parent, CFWL_Widget* focus);
 
-  void OnProcessMessageToForm(CFWL_Message* pMessage);
+  void OnProcessMessageToForm(std::unique_ptr<CFWL_Message> pMessage);
   void OnDrawWidget(CFWL_Widget* pWidget,
                     CXFA_Graphics* pGraphics,
                     const CFX_Matrix& matrix);
diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp
index 10f146e..e4c3fab 100644
--- a/xfa/fxfa/cxfa_fffield.cpp
+++ b/xfa/fxfa/cxfa_fffield.cpp
@@ -698,7 +698,7 @@
 
 void CXFA_FFField::SendMessageToFWLWidget(
     std::unique_ptr<CFWL_Message> pMessage) {
-  GetApp()->GetFWLWidgetMgr()->OnProcessMessageToForm(pMessage.get());
+  GetApp()->GetFWLWidgetMgr()->OnProcessMessageToForm(std::move(pMessage));
 }
 
 void CXFA_FFField::OnProcessMessage(CFWL_Message* pMessage) {}