| Index: chrome/browser/autofill/autofill_popup_view_browsertest.cc
|
| diff --git a/chrome/browser/autofill/autofill_popup_view_browsertest.cc b/chrome/browser/autofill/autofill_popup_view_browsertest.cc
|
| index 5dda01ad5ab670800ef698a80b47c5bf58f6f3ad..280577e546c6485b3470e3376cfab18ae0d2407f 100644
|
| --- a/chrome/browser/autofill/autofill_popup_view_browsertest.cc
|
| +++ b/chrome/browser/autofill/autofill_popup_view_browsertest.cc
|
| @@ -5,6 +5,7 @@
|
| #include "chrome/browser/autofill/autofill_popup_view.h"
|
|
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "chrome/browser/autofill/test_autofill_external_delegate.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/test/base/ui_test_utils.h"
|
| #include "content/public/browser/navigation_controller.h"
|
| @@ -18,38 +19,70 @@
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| using ::testing::AtLeast;
|
| +using testing::_;
|
| +
|
| +namespace {
|
| +
|
| +class MockAutofillExternalDelegate : public TestAutofillExternalDelegate {
|
| + public:
|
| + MockAutofillExternalDelegate() : TestAutofillExternalDelegate(NULL, NULL) {}
|
| + ~MockAutofillExternalDelegate() {}
|
| +
|
| + virtual void SelectAutofillSuggestionAtIndex(int unique_id, int list_index)
|
| + OVERRIDE {}
|
| +};
|
|
|
| class TestAutofillPopupView : public AutofillPopupView {
|
| public:
|
| - explicit TestAutofillPopupView(content::WebContents* web_contents)
|
| - : AutofillPopupView(web_contents) {}
|
| + explicit TestAutofillPopupView(
|
| + content::WebContents* web_contents,
|
| + AutofillExternalDelegate* autofill_external_delegate)
|
| + : AutofillPopupView(web_contents, autofill_external_delegate) {}
|
| virtual ~TestAutofillPopupView() {}
|
|
|
| MOCK_METHOD0(Hide, void());
|
|
|
| + MOCK_METHOD1(InvalidateRow, void(size_t));
|
| +
|
| + void SetSelectedLine(size_t selected_line) {
|
| + AutofillPopupView::SetSelectedLine(selected_line);
|
| + }
|
| +
|
| + protected:
|
| virtual void ShowInternal() OVERRIDE {}
|
| +
|
| + virtual void HideInternal() OVERRIDE {}
|
| };
|
|
|
| +} // namespace
|
| +
|
| class AutofillPopupViewBrowserTest : public InProcessBrowserTest {
|
| public:
|
| AutofillPopupViewBrowserTest() {}
|
| virtual ~AutofillPopupViewBrowserTest() {}
|
|
|
| + virtual void SetUpOnMainThread() OVERRIDE {
|
| + web_contents_ = browser()->GetSelectedWebContents();
|
| + ASSERT_TRUE(web_contents_ != NULL);
|
| +
|
| + autofill_popup_view_.reset(new TestAutofillPopupView(
|
| + web_contents_,
|
| + &autofill_external_delegate_));
|
| + }
|
| +
|
| protected:
|
| + content::WebContents* web_contents_;
|
| scoped_ptr<TestAutofillPopupView> autofill_popup_view_;
|
| + MockAutofillExternalDelegate autofill_external_delegate_;
|
| };
|
|
|
| -IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, SwitchTabAndHideAutofillPopup) {
|
| - content::WebContents* web_contents = browser()->GetSelectedWebContents();
|
| - TestAutofillPopupView autofill_popup_view(web_contents);
|
| -
|
| - // Using AtLeast here because current Hide is called once on Linux and Mac,
|
| - // and three times on Windows and ChromeOS. http://crbug.com/109269
|
| - EXPECT_CALL(autofill_popup_view, Hide()).Times(AtLeast(1));
|
| +IN_PROC_BROWSER_TEST_F(AutofillPopupViewBrowserTest,
|
| + SwitchTabAndHideAutofillPopup) {
|
| + EXPECT_CALL(*autofill_popup_view_, Hide()).Times(AtLeast(1));
|
|
|
| ui_test_utils::WindowedNotificationObserver observer(
|
| content::NOTIFICATION_WEB_CONTENTS_HIDDEN,
|
| - content::Source<content::WebContents>(web_contents));
|
| + content::Source<content::WebContents>(web_contents_));
|
| browser()->AddSelectedTabWithURL(GURL(chrome::kAboutBlankURL),
|
| content::PAGE_TRANSITION_START_PAGE);
|
| observer.Wait();
|
| @@ -57,16 +90,14 @@ IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, SwitchTabAndHideAutofillPopup) {
|
| // The mock verifies that the call was made.
|
| }
|
|
|
| -IN_PROC_BROWSER_TEST_F(InProcessBrowserTest,
|
| +IN_PROC_BROWSER_TEST_F(AutofillPopupViewBrowserTest,
|
| TestPageNavigationHidingAutofillPopup) {
|
| - content::WebContents* web_contents = browser()->GetSelectedWebContents();
|
| - TestAutofillPopupView autofill_popup_view(web_contents);
|
| - EXPECT_CALL(autofill_popup_view, Hide());
|
| + EXPECT_CALL(*autofill_popup_view_, Hide()).Times(AtLeast(1));
|
|
|
| ui_test_utils::WindowedNotificationObserver observer(
|
| content::NOTIFICATION_NAV_ENTRY_COMMITTED,
|
| content::Source<content::NavigationController>(
|
| - &(web_contents->GetController())));
|
| + &(web_contents_->GetController())));
|
| browser()->OpenURL(content::OpenURLParams(
|
| GURL(chrome::kAboutBlankURL), content::Referrer(),
|
| CURRENT_TAB, content::PAGE_TRANSITION_TYPED, false));
|
| @@ -77,3 +108,27 @@ IN_PROC_BROWSER_TEST_F(InProcessBrowserTest,
|
|
|
| // The mock verifies that the call was made.
|
| }
|
| +
|
| +IN_PROC_BROWSER_TEST_F(AutofillPopupViewBrowserTest,
|
| + SetSelectedAutofillLineAndCallInvalidate) {
|
| + std::vector<string16> autofill_values;
|
| + autofill_values.push_back(string16());
|
| + std::vector<int> autofill_ids;
|
| + autofill_ids.push_back(0);
|
| + autofill_popup_view_->Show(
|
| + autofill_values, autofill_values, autofill_values, autofill_ids, 0);
|
| +
|
| + // 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_view_, InvalidateRow(selected_line));
|
| + autofill_popup_view_->SetSelectedLine(selected_line);
|
| +
|
| + // Ensure that the row isn't invalidated if it didn't change.
|
| + EXPECT_CALL(*autofill_popup_view_, InvalidateRow(selected_line)).Times(0);
|
| + autofill_popup_view_->SetSelectedLine(selected_line);
|
| +
|
| + // Change back to no selection.
|
| + EXPECT_CALL(*autofill_popup_view_, InvalidateRow(selected_line));
|
| + autofill_popup_view_->SetSelectedLine(-1);
|
| +}
|
|
|