Only call AutofillPopupDelegate::OnPopupShown if popup was shown.

Prior to this change, AutofillPopupControllerImpl::Show does not return
early if AutofillPopupView::Show does not result in actually showing
the popup.

This means that AutofillPopupControllerImpl::Show will call
AutofillPopupDelegate::OnPopupShown even though
- The popup was never shown.
- AutofillPopupDelegate::OnPopupHidden was called just before it,
  since failure to show the popup results in PopupViewViews
  calling Hide() on the controller and the controller calls
  OnPopupHidden.

Bug: 1469871
Change-Id: I5b9be19c9659f34cc8ffe55d6a6c7690f8eb682e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4753574
Reviewed-by: Vasilii Sukhanov <[email protected]>
Code-Coverage: [email protected] <[email protected]>
Commit-Queue: Jan Keitel <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1182508}
diff --git a/chrome/browser/autofill/autofill_uitest_util.cc b/chrome/browser/autofill/autofill_uitest_util.cc
index fb5a01c..49ae2ab 100644
--- a/chrome/browser/autofill/autofill_uitest_util.cc
+++ b/chrome/browser/autofill/autofill_uitest_util.cc
@@ -128,13 +128,13 @@
 }
 
 void GenerateTestAutofillPopup(
-    AutofillExternalDelegate* autofill_external_delegate) {
+    AutofillExternalDelegate* autofill_external_delegate,
+    gfx::RectF element_bounds) {
   FormData form;
   form.url = GURL("https://foo.com/bar");
   form.fields.emplace_back();
   form.fields.front().is_focusable = true;
   form.fields.front().should_autocomplete = true;
-  gfx::RectF bounds(100.f, 100.f);
 
   ContentAutofillDriver* driver = static_cast<ContentAutofillDriver*>(
       absl::get<AutofillDriver*>(autofill_external_delegate->GetDriver()));
@@ -143,7 +143,7 @@
   TestAutofillManagerWaiter waiter(*manager,
                                    {AutofillManagerEvent::kAskForValuesToFill});
   mojo_driver->AskForValuesToFill(
-      form, form.fields.front(), bounds,
+      form, form.fields.front(), element_bounds,
       AutofillSuggestionTriggerSource::kTextFieldDidChange);
   ASSERT_TRUE(waiter.Wait());
   ASSERT_EQ(1u, manager->form_structures().size());
diff --git a/chrome/browser/autofill/autofill_uitest_util.h b/chrome/browser/autofill/autofill_uitest_util.h
index bfd2bc5b..84d24e0 100644
--- a/chrome/browser/autofill/autofill_uitest_util.h
+++ b/chrome/browser/autofill/autofill_uitest_util.h
@@ -7,6 +7,8 @@
 
 #include <vector>
 
+#include "ui/gfx/geometry/rect_f.h"
+
 class Profile;
 
 namespace autofill {
@@ -27,15 +29,17 @@
 void WaitForPersonalDataChange(Profile* base_profile);
 void WaitForPersonalDataManagerToBeLoaded(Profile* base_profile);
 
-// Displays an Autofill popup with a dummy suggestion.
-// Unlike autofill::test::GenerateTestAutofillPopup(), this function triggers
+// Displays an Autofill popup with a dummy suggestion for an element at
+// `element_bounds`.
+// Unlike `autofill::test::GenerateTestAutofillPopup()`, this function triggers
 // the popup through the `autofill_external_delegate->GetAutofillDriver()`'s
-// AskForValuesToFill(), instead of the |autofill_external_delegate|'s
-// OnQuery() event. This initializes the form's meta data and prepares
+// `AskForValuesToFill()`, instead of the `autofill_external_delegate`'s
+// `OnQuery()` event. This initializes the form's meta data and prepares
 // ContentAutofillDriver's and ContentAutofillRouter's state to process events
-// such as AutofillDriver::PopupHidden() triggered by the popup.
+// such as `AutofillDriver::PopupHidden()` triggered by the popup.
 void GenerateTestAutofillPopup(
-    AutofillExternalDelegate* autofill_external_delegate);
+    AutofillExternalDelegate* autofill_external_delegate,
+    gfx::RectF element_bounds = gfx::RectF(100.0f, 100.0f));
 
 }  // namespace autofill