Avoid dangling pointer in Textfield unit test.

Bug: 1469136
Change-Id: I6ddffbccd261fe6fa5cfcc128b684a585b9a51b3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5010952
Auto-Submit: Jan Keitel <jkeitel@google.com>
Commit-Queue: Elly FJ <ellyjones@chromium.org>
Reviewed-by: Elly FJ <ellyjones@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1223754}
diff --git a/ui/views/controls/textfield/textfield_unittest.cc b/ui/views/controls/textfield/textfield_unittest.cc
index e55a6ff..6759687 100644
--- a/ui/views/controls/textfield/textfield_unittest.cc
+++ b/ui/views/controls/textfield/textfield_unittest.cc
@@ -131,7 +131,7 @@
   METADATA_HEADER(TextfieldFocuser, View)
 
  public:
-  explicit TextfieldFocuser(Textfield* textfield) : textfield_(textfield) {
+  explicit TextfieldFocuser(Textfield* textfield) : textfield_(*textfield) {
     SetFocusBehavior(FocusBehavior::ALWAYS);
   }
 
@@ -148,7 +148,7 @@
 
  private:
   bool consume_ = true;
-  raw_ptr<Textfield, DanglingUntriaged> textfield_;
+  const raw_ref<Textfield> textfield_;
 };
 
 BEGIN_METADATA(TextfieldFocuser)
@@ -4761,8 +4761,8 @@
 // command only results when the event is not consumed.
 TEST_F(TextfieldTest, SwitchFocusInKeyDown) {
   InitTextfield();
-  TextfieldFocuser* focuser = new TextfieldFocuser(textfield_);
-  widget_->GetContentsView()->AddChildView(focuser);
+  TextfieldFocuser* focuser = widget_->GetContentsView()->AddChildView(
+      std::make_unique<TextfieldFocuser>(textfield_));
 
   focuser->RequestFocus();
   EXPECT_EQ(focuser, GetFocusedView());
@@ -4776,6 +4776,8 @@
   SendKeyPress(ui::VKEY_SPACE, 0);
   EXPECT_EQ(textfield_, GetFocusedView());
   EXPECT_EQ(u" ", textfield_->GetText());
+  // Remove to ensure that the pointer in the focuser does not become dangling.
+  widget_->GetContentsView()->RemoveChildViewT(std::exchange(focuser, nullptr));
 }
 
 TEST_F(TextfieldTest, SendingDeletePreservesShiftFlag) {