Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4265)

Unified Diff: chrome/browser/ui/autofill/autofill_popup_controller_unittest.cc

Issue 2727233003: Uses child views in Autofill Popup so we can trigger (Closed)
Patch Set: (int) to NSInteger Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/autofill/autofill_popup_controller_unittest.cc
diff --git a/chrome/browser/ui/autofill/autofill_popup_controller_unittest.cc b/chrome/browser/ui/autofill/autofill_popup_controller_unittest.cc
index a6ef0406f1470abf07411f11d52bf338f4b68616..a8557401c3ec20622449c9675cb7a2512787ecd7 100644
--- a/chrome/browser/ui/autofill/autofill_popup_controller_unittest.cc
+++ b/chrome/browser/ui/autofill/autofill_popup_controller_unittest.cc
@@ -8,6 +8,7 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
+#include "base/optional.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "chrome/browser/ui/autofill/autofill_popup_controller_impl.h"
@@ -69,6 +70,21 @@ class MockAutofillClient : public autofill::TestAutofillClient {
DISALLOW_COPY_AND_ASSIGN(MockAutofillClient);
};
+class MockAutofillPopupView : public AutofillPopupView {
+ public:
+ MockAutofillPopupView() {}
+
+ MOCK_METHOD0(Show, void());
+ MOCK_METHOD0(Hide, void());
+ MOCK_METHOD2(OnSelectedRowChanged,
+ void(base::Optional<int> previous_row_selection,
+ base::Optional<int> current_row_selection));
+ MOCK_METHOD0(OnSuggestionsChanged, void());
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MockAutofillPopupView);
+};
+
class TestAutofillPopupController : public AutofillPopupControllerImpl {
public:
TestAutofillPopupController(
@@ -95,18 +111,16 @@ class TestAutofillPopupController : public AutofillPopupControllerImpl {
using AutofillPopupControllerImpl::element_bounds;
using AutofillPopupControllerImpl::SetValues;
using AutofillPopupControllerImpl::GetWeakPtr;
- MOCK_METHOD1(InvalidateRow, void(size_t));
- MOCK_METHOD0(UpdateBoundsAndRedrawPopup, void());
+ MOCK_METHOD0(OnSuggestionsChanged, void());
MOCK_METHOD0(Hide, void());
void DoHide() {
AutofillPopupControllerImpl::Hide();
}
-
- private:
- void ShowView() override {}
};
+static constexpr base::Optional<int> kNoSelection;
+
} // namespace
class AutofillPopupControllerUnitTest : public ChromeRenderViewHostTestHarness {
@@ -132,10 +146,10 @@ class AutofillPopupControllerUnitTest : public ChromeRenderViewHostTestHarness {
new NiceMock<MockAutofillExternalDelegate>(
driver->autofill_manager(),
driver));
-
- autofill_popup_controller_ =
- new testing::NiceMock<TestAutofillPopupController>(
- external_delegate_->GetWeakPtr(), gfx::RectF());
+ autofill_popup_view_.reset(new NiceMock<MockAutofillPopupView>());
+ autofill_popup_controller_ = new NiceMock<TestAutofillPopupController>(
+ external_delegate_->GetWeakPtr(), gfx::RectF());
+ autofill_popup_controller_->SetViewForTesting(autofill_popup_view());
}
void TearDown() override {
@@ -156,10 +170,15 @@ class AutofillPopupControllerUnitTest : public ChromeRenderViewHostTestHarness {
return external_delegate_.get();
}
+ MockAutofillPopupView* autofill_popup_view() {
+ return autofill_popup_view_.get();
+ }
+
protected:
std::unique_ptr<MockAutofillClient> autofill_client_;
std::unique_ptr<NiceMock<MockAutofillExternalDelegate>> external_delegate_;
- testing::NiceMock<TestAutofillPopupController>* autofill_popup_controller_;
+ std::unique_ptr<NiceMock<MockAutofillPopupView>> autofill_popup_view_;
+ NiceMock<TestAutofillPopupController>* autofill_popup_controller_;
};
TEST_F(AutofillPopupControllerUnitTest, ChangeSelectedLine) {
@@ -169,7 +188,7 @@ TEST_F(AutofillPopupControllerUnitTest, ChangeSelectedLine) {
suggestions.push_back(Suggestion("", "", "", 0));
autofill_popup_controller_->Show(suggestions);
- EXPECT_LT(autofill_popup_controller_->selected_line(), 0);
+ EXPECT_FALSE(autofill_popup_controller_->selected_line());
// Check that there are at least 2 values so that the first and last selection
// are different.
EXPECT_GE(2,
@@ -177,13 +196,12 @@ TEST_F(AutofillPopupControllerUnitTest, ChangeSelectedLine) {
// Test wrapping before the front.
autofill_popup_controller_->SelectPreviousLine();
- EXPECT_EQ(static_cast<int>(
- autofill_popup_controller_->GetLineCount() - 1),
- autofill_popup_controller_->selected_line());
+ EXPECT_EQ(autofill_popup_controller_->GetLineCount() - 1,
+ autofill_popup_controller_->selected_line().value());
// Test wrapping after the end.
autofill_popup_controller_->SelectNextLine();
- EXPECT_EQ(0, autofill_popup_controller_->selected_line());
+ EXPECT_EQ(0, *autofill_popup_controller_->selected_line());
}
TEST_F(AutofillPopupControllerUnitTest, RedrawSelectedLine) {
@@ -195,18 +213,21 @@ TEST_F(AutofillPopupControllerUnitTest, RedrawSelectedLine) {
// Make sure that when a new line is selected, it is invalidated so it can
// be updated to show it is selected.
- int selected_line = 0;
- EXPECT_CALL(*autofill_popup_controller_, InvalidateRow(selected_line));
+ base::Optional<int> selected_line = 0;
+ EXPECT_CALL(*autofill_popup_view_,
+ OnSelectedRowChanged(kNoSelection, selected_line));
+
autofill_popup_controller_->SetSelectedLine(selected_line);
// Ensure that the row isn't invalidated if it didn't change.
- EXPECT_CALL(*autofill_popup_controller_,
- InvalidateRow(selected_line)).Times(0);
+ EXPECT_CALL(*autofill_popup_view_, OnSelectedRowChanged(_, _)).Times(0);
autofill_popup_controller_->SetSelectedLine(selected_line);
// Change back to no selection.
- EXPECT_CALL(*autofill_popup_controller_, InvalidateRow(selected_line));
- autofill_popup_controller_->SetSelectedLine(-1);
+ EXPECT_CALL(*autofill_popup_view_,
+ OnSelectedRowChanged(selected_line, kNoSelection));
+
+ autofill_popup_controller_->SetSelectedLine(kNoSelection);
}
TEST_F(AutofillPopupControllerUnitTest, RemoveLine) {
@@ -227,7 +248,7 @@ TEST_F(AutofillPopupControllerUnitTest, RemoveLine) {
// Remove the first entry. The popup should be redrawn since its size has
// changed.
- EXPECT_CALL(*autofill_popup_controller_, UpdateBoundsAndRedrawPopup());
+ EXPECT_CALL(*autofill_popup_controller_, OnSuggestionsChanged());
autofill_popup_controller_->SetSelectedLine(0);
EXPECT_TRUE(autofill_popup_controller_->RemoveSelectedLine());
@@ -248,12 +269,17 @@ TEST_F(AutofillPopupControllerUnitTest, RemoveOnlyLine) {
autofill::GenerateTestAutofillPopup(external_delegate_.get());
// Select the only line.
- autofill_popup_controller_->SetSelectedLine(0);
+ base::Optional<int> selected_line(0);
+ autofill_popup_controller_->SetSelectedLine(selected_line);
+ EXPECT_CALL(*autofill_popup_view_,
+ OnSelectedRowChanged(kNoSelection, selected_line))
+ .Times(0);
- // Remove the only line. There should be no row invalidation and the popup
- // should then be hidden since there are no Autofill entries left.
+ // Remove the only line. The popup should then be hidden since there are no
+ // Autofill entries left.
EXPECT_CALL(*autofill_popup_controller_, Hide());
- EXPECT_CALL(*autofill_popup_controller_, InvalidateRow(_)).Times(0);
+ EXPECT_CALL(*autofill_popup_view_,
+ OnSelectedRowChanged(selected_line, kNoSelection));
EXPECT_TRUE(autofill_popup_controller_->RemoveSelectedLine());
}
@@ -269,11 +295,33 @@ TEST_F(AutofillPopupControllerUnitTest, SkipSeparator) {
// Make sure next skips the unselectable separator.
autofill_popup_controller_->SelectNextLine();
- EXPECT_EQ(2, autofill_popup_controller_->selected_line());
+ EXPECT_EQ(2, *autofill_popup_controller_->selected_line());
// Make sure previous skips the unselectable separator.
autofill_popup_controller_->SelectPreviousLine();
- EXPECT_EQ(0, autofill_popup_controller_->selected_line());
+ EXPECT_EQ(0, *autofill_popup_controller_->selected_line());
+}
+
+TEST_F(AutofillPopupControllerUnitTest, SkipInsecureFormWarning) {
+ std::vector<Suggestion> suggestions;
+ suggestions.push_back(Suggestion("", "", "", 1));
+ suggestions.push_back(Suggestion("", "", "", POPUP_ITEM_ID_SEPARATOR));
+ suggestions.push_back(Suggestion(
+ "", "", "", POPUP_ITEM_ID_INSECURE_CONTEXT_PAYMENT_DISABLED_MESSAGE));
+ autofill_popup_controller_->Show(suggestions);
+
+ // Make sure previous skips the unselectable form warning when there is no
+ // selection.
+ autofill_popup_controller_->SelectPreviousLine();
+ EXPECT_FALSE(autofill_popup_controller_->selected_line());
+
+ autofill_popup_controller_->SetSelectedLine(0);
+ EXPECT_EQ(0, *autofill_popup_controller_->selected_line());
+
+ // Make sure previous skips the unselectable form warning when there is a
+ // selection.
+ autofill_popup_controller_->SelectPreviousLine();
+ EXPECT_FALSE(autofill_popup_controller_->selected_line());
}
TEST_F(AutofillPopupControllerUnitTest, UpdateDataListValues) {
@@ -289,7 +337,7 @@ TEST_F(AutofillPopupControllerUnitTest, UpdateDataListValues) {
autofill_popup_controller_->UpdateDataListValues(data_list_values,
data_list_values);
- ASSERT_EQ(3u, autofill_popup_controller_->GetLineCount());
+ ASSERT_EQ(3, autofill_popup_controller_->GetLineCount());
Suggestion result0 = autofill_popup_controller_->GetSuggestionAt(0);
EXPECT_EQ(value1, result0.value);
@@ -314,7 +362,7 @@ TEST_F(AutofillPopupControllerUnitTest, UpdateDataListValues) {
autofill_popup_controller_->UpdateDataListValues(data_list_values,
data_list_values);
- ASSERT_EQ(4u, autofill_popup_controller_->GetLineCount());
+ ASSERT_EQ(4, autofill_popup_controller_->GetLineCount());
// Original one first, followed by new one, then separator.
EXPECT_EQ(value1, autofill_popup_controller_->GetSuggestionAt(0).value);
@@ -329,7 +377,7 @@ TEST_F(AutofillPopupControllerUnitTest, UpdateDataListValues) {
autofill_popup_controller_->UpdateDataListValues(data_list_values,
data_list_values);
- ASSERT_EQ(1u, autofill_popup_controller_->GetLineCount());
+ ASSERT_EQ(1, autofill_popup_controller_->GetLineCount());
EXPECT_EQ(1, autofill_popup_controller_->GetSuggestionAt(0).frontend_id);
}
@@ -347,7 +395,7 @@ TEST_F(AutofillPopupControllerUnitTest, PopupsWithOnlyDataLists) {
autofill_popup_controller_->UpdateDataListValues(data_list_values,
data_list_values);
- ASSERT_EQ(1u, autofill_popup_controller_->GetLineCount());
+ ASSERT_EQ(1, autofill_popup_controller_->GetLineCount());
EXPECT_EQ(value1, autofill_popup_controller_->GetSuggestionAt(0).value);
EXPECT_EQ(POPUP_ITEM_ID_DATALIST_ENTRY,
autofill_popup_controller_->GetSuggestionAt(0).frontend_id);
@@ -386,9 +434,9 @@ TEST_F(AutofillPopupControllerUnitTest, GetOrCreate) {
EXPECT_EQ(controller.get(), controller2.get());
controller->Hide();
- testing::NiceMock<TestAutofillPopupController>* test_controller =
- new testing::NiceMock<TestAutofillPopupController>(delegate.GetWeakPtr(),
- gfx::RectF());
+ NiceMock<TestAutofillPopupController>* test_controller =
+ new NiceMock<TestAutofillPopupController>(delegate.GetWeakPtr(),
+ gfx::RectF());
EXPECT_CALL(*test_controller, Hide());
gfx::RectF bounds(0.f, 0.f, 1.f, 2.f);
@@ -414,7 +462,7 @@ TEST_F(AutofillPopupControllerUnitTest, ProperlyResetController) {
std::vector<Suggestion> suggestions;
suggestions.push_back(Suggestion("", "", "", 0));
suggestions.push_back(Suggestion("", "", "", 0));
- popup_controller()->SetValues(suggestions);
+ popup_controller()->Show(suggestions);
popup_controller()->SetSelectedLine(0);
// Now show a new popup with the same controller, but with fewer items.
@@ -422,8 +470,8 @@ TEST_F(AutofillPopupControllerUnitTest, ProperlyResetController) {
AutofillPopupControllerImpl::GetOrCreate(
popup_controller()->GetWeakPtr(), delegate()->GetWeakPtr(), NULL,
NULL, gfx::RectF(), base::i18n::UNKNOWN_DIRECTION);
- EXPECT_NE(0, controller->selected_line());
- EXPECT_EQ(0u, controller->GetLineCount());
+ EXPECT_FALSE(controller->selected_line());
+ EXPECT_EQ(0, controller->GetLineCount());
}
#if !defined(OS_ANDROID)

Powered by Google App Engine
This is Rietveld 408576698