Index: chrome/browser/ui/omnibox/omnibox_view_browsertest.cc |
=================================================================== |
--- chrome/browser/ui/omnibox/omnibox_view_browsertest.cc (revision 119905) |
+++ 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) { |
+ // 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(); |