Chromium Code Reviews| Index: chrome/browser/ui/omnibox/omnibox_view_browsertest.cc |
| =================================================================== |
| --- chrome/browser/ui/omnibox/omnibox_view_browsertest.cc (revision 120442) |
| +++ chrome/browser/ui/omnibox/omnibox_view_browsertest.cc (working copy) |
| @@ -37,6 +37,10 @@ |
| #include "ui/base/events.h" |
| #include "ui/base/keycodes/keyboard_codes.h" |
| +#if defined(TOOLKIT_GTK) |
| +#include "chrome/browser/ui/gtk/browser_window_gtk.h" |
| +#endif |
| + |
| #if defined(TOOLKIT_USES_GTK) |
| #include <gdk/gdk.h> |
| #include <gtk/gtk.h> |
| @@ -157,6 +161,15 @@ |
| HistoryQuickProvider::set_disabled(true); |
| } |
| +#if defined(TOOLKIT_GTK) |
| + virtual void OnBeforeShowBrowser(Browser* browser) { |
|
Mike Mammarella
2012/02/04 01:47:57
FYI, this part should no longer be necessary.
|
| + // Disable the timer because it causes the browser to move, which results |
| + // in the popup closing before results are verified. |
| + static_cast<BrowserWindowGtk*>( |
| + browser->window())->DisableDebounceTimerForTests(true); |
| + } |
| +#endif |
| + |
| virtual void SetUpOnMainThread() { |
| ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| ASSERT_NO_FATAL_FAILURE(SetupComponents()); |
| @@ -747,7 +760,7 @@ |
| // Keyword should also be accepted by typing an ideographic space. |
| omnibox_view->OnBeforePossibleChange(); |
| omnibox_view->SetWindowTextAndCaretPos(text + WideToUTF16(L"\x3000"), |
| - text.length() + 1); |
| + text.length() + 1, false, false); |
| omnibox_view->OnAfterPossibleChange(); |
| ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); |
| ASSERT_EQ(text, omnibox_view->model()->keyword()); |
| @@ -762,7 +775,7 @@ |
| // Keyword shouldn't be accepted by pressing space with a trailing |
| // whitespace. |
| omnibox_view->SetWindowTextAndCaretPos( |
| - text + char16(' '), text.length() + 1); |
| + text + char16(' '), text.length() + 1, false, false); |
| ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_SPACE, 0)); |
| ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); |
| ASSERT_EQ(text, omnibox_view->model()->keyword()); |
| @@ -799,7 +812,7 @@ |
| omnibox_view->OnBeforePossibleChange(); |
| omnibox_view->model()->on_paste(); |
| omnibox_view->SetWindowTextAndCaretPos(text + ASCIIToUTF16(" bar"), |
| - text.length() + 4); |
| + text.length() + 4, false, false); |
| omnibox_view->OnAfterPossibleChange(); |
| ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); |
| ASSERT_TRUE(omnibox_view->model()->keyword().empty()); |
| @@ -1013,59 +1026,137 @@ |
| ASSERT_TRUE(omnibox_view->IsSelectAll()); |
| } |
| - void TabMoveCursorToEndTest() { |
| + void TabAcceptKeyword() { |
| OmniboxView* omnibox_view = NULL; |
| ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); |
| - omnibox_view->SetUserText(ASCIIToUTF16("Hello world")); |
| + string16 text = ASCIIToUTF16(kSearchKeyword); |
| - // Move cursor to the beginning. |
| + // Trigger keyword hint mode. |
| + ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchKeywordKeys)); |
| + ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); |
| + ASSERT_EQ(text, omnibox_view->model()->keyword()); |
| + ASSERT_EQ(text, omnibox_view->GetText()); |
| + |
| + // Trigger keyword mode by tab. |
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); |
| + ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); |
| + ASSERT_EQ(text, omnibox_view->model()->keyword()); |
| + ASSERT_TRUE(omnibox_view->GetText().empty()); |
| + |
| + // Revert to keyword hint mode. |
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); |
| + ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); |
| + ASSERT_EQ(text, omnibox_view->model()->keyword()); |
| + ASSERT_EQ(text, omnibox_view->GetText()); |
| + |
| + // The location bar should still have focus. |
| + ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), |
| + location_bar_focus_view_id_)); |
| + |
| + // Trigger keyword mode by tab. |
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); |
| + ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); |
| + ASSERT_EQ(text, omnibox_view->model()->keyword()); |
| + ASSERT_TRUE(omnibox_view->GetText().empty()); |
| + |
| + // Revert to keyword hint mode with SHIFT+TAB. |
| #if defined(OS_MACOSX) |
| - // Home doesn't work on Mac trybot. |
| - ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_A, ui::EF_CONTROL_DOWN)); |
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACKTAB, 0)); |
| #else |
| - ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_HOME, 0)); |
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN)); |
| #endif |
| + ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); |
| + ASSERT_EQ(text, omnibox_view->model()->keyword()); |
| + ASSERT_EQ(text, omnibox_view->GetText()); |
| - size_t start, end; |
| - omnibox_view->GetSelectionBounds(&start, &end); |
| - EXPECT_EQ(0U, start); |
| - EXPECT_EQ(0U, end); |
| + ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), |
| + location_bar_focus_view_id_)); |
| + } |
| - // Pressing tab should move cursor to the end. |
| + void TabTraverseResultsTest() { |
| + OmniboxView* omnibox_view = NULL; |
| + ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); |
| + AutocompletePopupModel* popup_model = omnibox_view->model()->popup_model(); |
| + ASSERT_TRUE(popup_model); |
| + |
| + // Input something to trigger results. |
| + ASSERT_NO_FATAL_FAILURE(SendKeySequence(kDesiredTLDKeys)); |
| + ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); |
| + ASSERT_TRUE(popup_model->IsOpen()); |
| + |
| + size_t old_selected_line = popup_model->selected_line(); |
| + EXPECT_EQ(0U, old_selected_line); |
| + |
| + // Move down the results. |
| + for (size_t size = popup_model->result().size(); |
| + popup_model->selected_line() < size - 1; |
| + old_selected_line = popup_model->selected_line()) { |
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); |
| + ASSERT_LT(old_selected_line, popup_model->selected_line()); |
| + } |
| + |
| + // Don't move past the end. |
| ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); |
| + ASSERT_EQ(old_selected_line, popup_model->selected_line()); |
| + ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), |
| + location_bar_focus_view_id_)); |
| - omnibox_view->GetSelectionBounds(&start, &end); |
| - EXPECT_EQ(omnibox_view->GetText().size(), start); |
| - EXPECT_EQ(omnibox_view->GetText().size(), end); |
| + // Move back up the results. |
| + for (; popup_model->selected_line() > 0U; |
| + old_selected_line = popup_model->selected_line()) { |
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN)); |
| + ASSERT_GT(old_selected_line, popup_model->selected_line()); |
| + } |
| - // The location bar should still have focus. |
| + // Don't move past the beginning. |
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN)); |
| + ASSERT_EQ(0U, popup_model->selected_line()); |
| ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), |
| location_bar_focus_view_id_)); |
| - // Select all text. |
| - omnibox_view->SelectAll(true); |
| - EXPECT_TRUE(omnibox_view->IsSelectAll()); |
| - omnibox_view->GetSelectionBounds(&start, &end); |
| - EXPECT_EQ(0U, start); |
| - EXPECT_EQ(omnibox_view->GetText().size(), end); |
| + const TestHistoryEntry kHistoryFoo = { |
| + "http://foo/", "Page foo", kSearchText, 1, 1, false |
| + }; |
| - // Pressing tab should move cursor to the end. |
| + // Add a history entry so "foo" gets multiple matches. |
| + ASSERT_NO_FATAL_FAILURE( |
| + AddHistoryEntry(kHistoryFoo, Time::Now() - TimeDelta::FromHours(1))); |
| + |
| + // Load results. |
| + ASSERT_NO_FATAL_FAILURE(omnibox_view->SelectAll(false)); |
| + ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchKeywordKeys)); |
| + ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); |
| + |
| + // Trigger keyword mode by tab. |
| + string16 text = ASCIIToUTF16(kSearchKeyword); |
| ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); |
| + ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); |
| + ASSERT_EQ(text, omnibox_view->model()->keyword()); |
| + ASSERT_TRUE(omnibox_view->GetText().empty()); |
| - omnibox_view->GetSelectionBounds(&start, &end); |
| - EXPECT_EQ(omnibox_view->GetText().size(), start); |
| - EXPECT_EQ(omnibox_view->GetText().size(), end); |
| - |
| // The location bar should still have focus. |
| ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), |
| location_bar_focus_view_id_)); |
| - // Pressing tab when cursor is at the end should change focus. |
| + // Pressing tab again should move to the next result and clear keyword |
| + // mode. |
| ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); |
| + ASSERT_EQ(1U, omnibox_view->model()->popup_model()->selected_line()); |
| + ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); |
| + ASSERT_NE(text, omnibox_view->model()->keyword()); |
| - ASSERT_FALSE(ui_test_utils::IsViewFocused(browser(), |
| - location_bar_focus_view_id_)); |
| + // The location bar should still have focus. |
| + ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), |
| + location_bar_focus_view_id_)); |
| + |
| + // Moving back up should not show keyword mode. |
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN)); |
| + ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); |
| + ASSERT_EQ(text, omnibox_view->model()->keyword()); |
| + |
| + ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), |
| + location_bar_focus_view_id_)); |
| } |
| void PersistKeywordModeOnTabSwitch() { |
| @@ -1191,10 +1282,17 @@ |
| DeleteItemTest(); |
| } |
| -IN_PROC_BROWSER_TEST_F(OmniboxViewTest, TabMoveCursorToEnd) { |
| - TabMoveCursorToEndTest(); |
| +IN_PROC_BROWSER_TEST_F(OmniboxViewTest, TabAcceptKeyword) { |
| + TabAcceptKeyword(); |
| } |
| +#if !defined(OS_MACOSX) |
| +// Mac intentionally does not support this behavior. |
| +IN_PROC_BROWSER_TEST_F(OmniboxViewTest, TabTraverseResultsTest) { |
| + TabTraverseResultsTest(); |
| +} |
| +#endif |
| + |
| IN_PROC_BROWSER_TEST_F(OmniboxViewTest, |
| PersistKeywordModeOnTabSwitch) { |
| PersistKeywordModeOnTabSwitch(); |