Warn about stale |this| in CXFA_FFWidget::On*() methods
Change return types to boolean, but do not peform all possible
checks (yet).
Change-Id: Ibf9c38e403471b85539a3f494a05f61e44a83b53
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/64810
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp
index 47be2b7..e11e968 100644
--- a/xfa/fxfa/cxfa_fffield.cpp
+++ b/xfa/fxfa/cxfa_fffield.cpp
@@ -411,11 +411,12 @@
return true;
}
-void CXFA_FFField::OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
+bool CXFA_FFField::OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
SetButtonDown(true);
SendMessageToFWLWidget(pdfium::MakeUnique<CFWL_MessageMouse>(
GetNormalWidget(), FWL_MouseCommand::LeftButtonDown, dwFlags,
FWLToClient(point)));
+ return true;
}
bool CXFA_FFField::OnLButtonUp(uint32_t dwFlags, const CFX_PointF& point) {
@@ -461,11 +462,12 @@
return true;
}
-void CXFA_FFField::OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
+bool CXFA_FFField::OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
SetButtonDown(true);
SendMessageToFWLWidget(pdfium::MakeUnique<CFWL_MessageMouse>(
GetNormalWidget(), FWL_MouseCommand::RightButtonDown, dwFlags,
FWLToClient(point)));
+ return true;
}
bool CXFA_FFField::OnRButtonUp(uint32_t dwFlags, const CFX_PointF& point) {
diff --git a/xfa/fxfa/cxfa_fffield.h b/xfa/fxfa/cxfa_fffield.h
index 76cb0f8..47c0845 100644
--- a/xfa/fxfa/cxfa_fffield.h
+++ b/xfa/fxfa/cxfa_fffield.h
@@ -39,14 +39,14 @@
FWL_MouseCommand command) override;
bool OnMouseEnter() override;
bool OnMouseExit() override;
- void OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
+ bool OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnLButtonUp(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnLButtonDblClk(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnMouseMove(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnMouseWheel(uint32_t dwFlags,
int16_t zDelta,
const CFX_PointF& point) override;
- void OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
+ bool OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnRButtonUp(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnRButtonDblClk(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnSetFocus(CXFA_FFWidget* pOldWidget) override WARN_UNUSED_RESULT;
diff --git a/xfa/fxfa/cxfa_ffimageedit.cpp b/xfa/fxfa/cxfa_ffimageedit.cpp
index 1660f33..ce9a990 100644
--- a/xfa/fxfa/cxfa_ffimageedit.cpp
+++ b/xfa/fxfa/cxfa_ffimageedit.cpp
@@ -100,12 +100,13 @@
return true;
}
-void CXFA_FFImageEdit::OnLButtonDown(uint32_t dwFlags,
+bool CXFA_FFImageEdit::OnLButtonDown(uint32_t dwFlags,
const CFX_PointF& point) {
SetButtonDown(true);
SendMessageToFWLWidget(pdfium::MakeUnique<CFWL_MessageMouse>(
GetNormalWidget(), FWL_MouseCommand::LeftButtonDown, dwFlags,
FWLToClient(point)));
+ return true;
}
void CXFA_FFImageEdit::SetFWLRect() {
diff --git a/xfa/fxfa/cxfa_ffimageedit.h b/xfa/fxfa/cxfa_ffimageedit.h
index 839ad6e..f1233b3 100644
--- a/xfa/fxfa/cxfa_ffimageedit.h
+++ b/xfa/fxfa/cxfa_ffimageedit.h
@@ -23,7 +23,7 @@
bool AcceptsFocusOnButtonDown(uint32_t dwFlags,
const CFX_PointF& point,
FWL_MouseCommand command) override;
- void OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
+ bool OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
void OnProcessMessage(CFWL_Message* pMessage) override;
void OnProcessEvent(CFWL_Event* pEvent) override;
void OnDrawWidget(CXFA_Graphics* pGraphics,
diff --git a/xfa/fxfa/cxfa_ffsignature.cpp b/xfa/fxfa/cxfa_ffsignature.cpp
index 46ca02f..b138991 100644
--- a/xfa/fxfa/cxfa_ffsignature.cpp
+++ b/xfa/fxfa/cxfa_ffsignature.cpp
@@ -51,8 +51,10 @@
return false;
}
-void CXFA_FFSignature::OnLButtonDown(uint32_t dwFlags,
- const CFX_PointF& point) {}
+bool CXFA_FFSignature::OnLButtonDown(uint32_t dwFlags,
+ const CFX_PointF& point) {
+ return false;
+}
bool CXFA_FFSignature::OnLButtonUp(uint32_t dwFlags, const CFX_PointF& point) {
return false;
@@ -73,8 +75,10 @@
return false;
}
-void CXFA_FFSignature::OnRButtonDown(uint32_t dwFlags,
- const CFX_PointF& point) {}
+bool CXFA_FFSignature::OnRButtonDown(uint32_t dwFlags,
+ const CFX_PointF& point) {
+ return false;
+}
bool CXFA_FFSignature::OnRButtonUp(uint32_t dwFlags, const CFX_PointF& point) {
return false;
diff --git a/xfa/fxfa/cxfa_ffsignature.h b/xfa/fxfa/cxfa_ffsignature.h
index 1656127..1aa00b6 100644
--- a/xfa/fxfa/cxfa_ffsignature.h
+++ b/xfa/fxfa/cxfa_ffsignature.h
@@ -24,17 +24,16 @@
FWL_MouseCommand command) override;
bool OnMouseEnter() override;
bool OnMouseExit() override;
- void OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
+ bool OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnLButtonUp(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnLButtonDblClk(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnMouseMove(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnMouseWheel(uint32_t dwFlags,
int16_t zDelta,
const CFX_PointF& pointy) override;
- void OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
+ bool OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnRButtonUp(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnRButtonDblClk(uint32_t dwFlags, const CFX_PointF& point) override;
-
bool OnKeyDown(uint32_t dwKeyCode, uint32_t dwFlags) override;
bool OnKeyUp(uint32_t dwKeyCode, uint32_t dwFlags) override;
bool OnChar(uint32_t dwChar, uint32_t dwFlags) override;
diff --git a/xfa/fxfa/cxfa_fftext.cpp b/xfa/fxfa/cxfa_fftext.cpp
index b6e8e61..f4ddbe0 100644
--- a/xfa/fxfa/cxfa_fftext.cpp
+++ b/xfa/fxfa/cxfa_fftext.cpp
@@ -115,8 +115,9 @@
return true;
}
-void CXFA_FFText::OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
+bool CXFA_FFText::OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
SetButtonDown(true);
+ return true;
}
bool CXFA_FFText::OnMouseMove(uint32_t dwFlags, const CFX_PointF& point) {
diff --git a/xfa/fxfa/cxfa_fftext.h b/xfa/fxfa/cxfa_fftext.h
index abcb51a..92eafb1 100644
--- a/xfa/fxfa/cxfa_fftext.h
+++ b/xfa/fxfa/cxfa_fftext.h
@@ -18,7 +18,7 @@
bool AcceptsFocusOnButtonDown(uint32_t dwFlags,
const CFX_PointF& point,
FWL_MouseCommand command) override;
- void OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
+ bool OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnLButtonUp(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnMouseMove(uint32_t dwFlags, const CFX_PointF& point) override;
FWL_WidgetHit HitTest(const CFX_PointF& point) override;
diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp
index d9af369..d75bef8 100644
--- a/xfa/fxfa/cxfa_fftextedit.cpp
+++ b/xfa/fxfa/cxfa_fftextedit.cpp
@@ -120,7 +120,7 @@
return true;
}
-void CXFA_FFTextEdit::OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
+bool CXFA_FFTextEdit::OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
if (!IsFocused()) {
GetLayoutItem()->SetStatusBits(XFA_WidgetStatus_Focused);
UpdateFWLData();
@@ -130,9 +130,10 @@
SendMessageToFWLWidget(pdfium::MakeUnique<CFWL_MessageMouse>(
GetNormalWidget(), FWL_MouseCommand::LeftButtonDown, dwFlags,
FWLToClient(point)));
+ return true;
}
-void CXFA_FFTextEdit::OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
+bool CXFA_FFTextEdit::OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
if (!IsFocused()) {
GetLayoutItem()->SetStatusBits(XFA_WidgetStatus_Focused);
UpdateFWLData();
@@ -141,6 +142,7 @@
SetButtonDown(true);
SendMessageToFWLWidget(pdfium::MakeUnique<CFWL_MessageMouse>(
nullptr, FWL_MouseCommand::RightButtonDown, dwFlags, FWLToClient(point)));
+ return true;
}
bool CXFA_FFTextEdit::OnRButtonUp(uint32_t dwFlags, const CFX_PointF& point) {
diff --git a/xfa/fxfa/cxfa_fftextedit.h b/xfa/fxfa/cxfa_fftextedit.h
index ad49626..09b9434 100644
--- a/xfa/fxfa/cxfa_fftextedit.h
+++ b/xfa/fxfa/cxfa_fftextedit.h
@@ -30,8 +30,8 @@
bool AcceptsFocusOnButtonDown(uint32_t dwFlags,
const CFX_PointF& point,
FWL_MouseCommand command) override;
- void OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
- void OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
+ bool OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
+ bool OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnRButtonUp(uint32_t dwFlags, const CFX_PointF& point) override;
bool OnSetFocus(CXFA_FFWidget* pOldWidget) override WARN_UNUSED_RESULT;
bool OnKillFocus(CXFA_FFWidget* pNewWidget) override WARN_UNUSED_RESULT;
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index d134b0b..61cd5cc 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -384,7 +384,9 @@
return false;
}
-void CXFA_FFWidget::OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) {}
+bool CXFA_FFWidget::OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
+ return false;
+}
bool CXFA_FFWidget::OnLButtonUp(uint32_t dwFlags, const CFX_PointF& point) {
return false;
@@ -404,7 +406,9 @@
return false;
}
-void CXFA_FFWidget::OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) {}
+bool CXFA_FFWidget::OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
+ return false;
+}
bool CXFA_FFWidget::OnRButtonUp(uint32_t dwFlags, const CFX_PointF& point) {
return false;
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index e0f9ee3..c173f59 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -90,27 +90,35 @@
virtual bool AcceptsFocusOnButtonDown(uint32_t dwFlags,
const CFX_PointF& point,
FWL_MouseCommand command);
- virtual bool OnMouseEnter();
- virtual bool OnMouseExit();
- virtual void OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point);
- virtual bool OnLButtonUp(uint32_t dwFlags, const CFX_PointF& point);
- virtual bool OnLButtonDblClk(uint32_t dwFlags, const CFX_PointF& point);
- virtual bool OnMouseMove(uint32_t dwFlags, const CFX_PointF& point);
+
+ // Caution: Returning false from an On* method may mean |this| is destroyed.
+ virtual bool OnMouseEnter() WARN_UNUSED_RESULT;
+ virtual bool OnMouseExit() WARN_UNUSED_RESULT;
+ virtual bool OnLButtonDown(uint32_t dwFlags,
+ const CFX_PointF& point) WARN_UNUSED_RESULT;
+ virtual bool OnLButtonUp(uint32_t dwFlags,
+ const CFX_PointF& point) WARN_UNUSED_RESULT;
+ virtual bool OnLButtonDblClk(uint32_t dwFlags,
+ const CFX_PointF& point) WARN_UNUSED_RESULT;
+ virtual bool OnMouseMove(uint32_t dwFlags,
+ const CFX_PointF& point) WARN_UNUSED_RESULT;
virtual bool OnMouseWheel(uint32_t dwFlags,
int16_t zDelta,
- const CFX_PointF& point);
- virtual void OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point);
- virtual bool OnRButtonUp(uint32_t dwFlags, const CFX_PointF& point);
- virtual bool OnRButtonDblClk(uint32_t dwFlags, const CFX_PointF& point);
-
- // Returning false may imply |this| is gone, continue with caution.
+ const CFX_PointF& point) WARN_UNUSED_RESULT;
+ virtual bool OnRButtonDown(uint32_t dwFlags,
+ const CFX_PointF& point) WARN_UNUSED_RESULT;
+ virtual bool OnRButtonUp(uint32_t dwFlags,
+ const CFX_PointF& point) WARN_UNUSED_RESULT;
+ virtual bool OnRButtonDblClk(uint32_t dwFlags,
+ const CFX_PointF& point) WARN_UNUSED_RESULT;
virtual bool OnSetFocus(CXFA_FFWidget* pOldWidget) WARN_UNUSED_RESULT;
virtual bool OnKillFocus(CXFA_FFWidget* pNewWidget) WARN_UNUSED_RESULT;
+ virtual bool OnKeyDown(uint32_t dwKeyCode,
+ uint32_t dwFlags) WARN_UNUSED_RESULT;
+ virtual bool OnKeyUp(uint32_t dwKeyCode, uint32_t dwFlags) WARN_UNUSED_RESULT;
+ virtual bool OnChar(uint32_t dwChar, uint32_t dwFlags) WARN_UNUSED_RESULT;
+ virtual bool OnSetCursor(const CFX_PointF& point) WARN_UNUSED_RESULT;
- virtual bool OnKeyDown(uint32_t dwKeyCode, uint32_t dwFlags);
- virtual bool OnKeyUp(uint32_t dwKeyCode, uint32_t dwFlags);
- virtual bool OnChar(uint32_t dwChar, uint32_t dwFlags);
- virtual bool OnSetCursor(const CFX_PointF& point);
virtual FWL_WidgetHit HitTest(const CFX_PointF& point);
virtual bool CanUndo();
virtual bool CanRedo();
diff --git a/xfa/fxfa/cxfa_ffwidgethandler.cpp b/xfa/fxfa/cxfa_ffwidgethandler.cpp
index 29ea34e..aeb6a4a 100644
--- a/xfa/fxfa/cxfa_ffwidgethandler.cpp
+++ b/xfa/fxfa/cxfa_ffwidgethandler.cpp
@@ -54,7 +54,7 @@
m_pDocView->GetDoc()->GetDocEnvironment()->SetFocusWidget(
m_pDocView->GetDoc(), hWidget);
}
- hWidget->OnLButtonDown(dwFlags, hWidget->Rotate2Normal(point));
+ bRet = hWidget->OnLButtonDown(dwFlags, hWidget->Rotate2Normal(point));
}
m_pDocView->UnlockUpdate();
m_pDocView->UpdateDocView();
@@ -106,7 +106,7 @@
m_pDocView->GetDoc()->GetDocEnvironment()->SetFocusWidget(
m_pDocView->GetDoc(), hWidget);
}
- hWidget->OnRButtonDown(dwFlags, hWidget->Rotate2Normal(point));
+ bRet = hWidget->OnRButtonDown(dwFlags, hWidget->Rotate2Normal(point));
}
return bRet;
}