| Index: chrome/browser/ui/omnibox/omnibox_view_browsertest.cc
|
| diff --git a/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc b/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc
|
| index 77447704611840c2bad82eb7c8a1c2ec51cb22c6..2083426b3a251a70e12ba289ecaf2b5816b27c3d 100644
|
| --- a/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc
|
| +++ b/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc
|
| @@ -1866,3 +1866,88 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewTest,
|
| omnibox_view->Update();
|
| EXPECT_EQ(url_c, omnibox_view->GetText());
|
| }
|
| +
|
| +namespace {
|
| +
|
| +// Returns the number of characters currently selected in |omnibox_view|.
|
| +size_t GetSelectionSize(OmniboxView* omnibox_view) {
|
| + size_t start, end;
|
| + omnibox_view->GetSelectionBounds(&start, &end);
|
| + if (end >= start)
|
| + return end - start;
|
| + return start - end;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +// Test that if the Omnibox has focus, and had everything selected before a
|
| +// non-user-initiated update, then it retains the selection after the update.
|
| +IN_PROC_BROWSER_TEST_F(OmniboxViewTest, SelectAllStaysAfterUpdate) {
|
| + OmniboxView* omnibox_view = nullptr;
|
| + ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view));
|
| + TestToolbarModel* test_toolbar_model = new TestToolbarModel;
|
| + scoped_ptr<ToolbarModel> toolbar_model(test_toolbar_model);
|
| + browser()->swap_toolbar_models(&toolbar_model);
|
| +
|
| + base::string16 url_a(ASCIIToUTF16("http://www.a.com/"));
|
| + base::string16 url_b(ASCIIToUTF16("http://www.b.com/"));
|
| + chrome::FocusLocationBar(browser());
|
| +
|
| + test_toolbar_model->set_text(url_a);
|
| + omnibox_view->Update();
|
| + EXPECT_EQ(url_a, omnibox_view->GetText());
|
| + EXPECT_TRUE(omnibox_view->IsSelectAll());
|
| +
|
| + // Updating while selected should retain SelectAll().
|
| + test_toolbar_model->set_text(url_b);
|
| + omnibox_view->Update();
|
| + EXPECT_EQ(url_b, omnibox_view->GetText());
|
| + EXPECT_TRUE(omnibox_view->IsSelectAll());
|
| +
|
| + // Select nothing, then switch back. Shouldn't gain a selection.
|
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RIGHT, 0));
|
| + test_toolbar_model->set_text(url_a);
|
| + omnibox_view->Update();
|
| + EXPECT_EQ(url_a, omnibox_view->GetText());
|
| + EXPECT_FALSE(omnibox_view->IsSelectAll());
|
| +
|
| + // Test behavior of the "reversed" attribute of OmniboxView::SelectAll().
|
| + test_toolbar_model->set_text(ASCIIToUTF16("AB"));
|
| + omnibox_view->Update();
|
| + // Should be at the end already. Shift+Left to select "reversed".
|
| + EXPECT_EQ(0u, GetSelectionSize(omnibox_view));
|
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, ui::EF_SHIFT_DOWN));
|
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, ui::EF_SHIFT_DOWN));
|
| + EXPECT_EQ(2u, GetSelectionSize(omnibox_view));
|
| + EXPECT_TRUE(omnibox_view->IsSelectAll());
|
| +
|
| + test_toolbar_model->set_text(ASCIIToUTF16("CD"));
|
| + omnibox_view->Update();
|
| + EXPECT_EQ(2u, GetSelectionSize(omnibox_view));
|
| +
|
| + // At the start, so Shift+Left should do nothing.
|
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, ui::EF_SHIFT_DOWN));
|
| + EXPECT_EQ(2u, GetSelectionSize(omnibox_view));
|
| +
|
| + // And Shift+Right should reduce by one character.
|
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RIGHT, ui::EF_SHIFT_DOWN));
|
| + EXPECT_EQ(1u, GetSelectionSize(omnibox_view));
|
| +
|
| + // No go to start and select all to the right (not reversed).
|
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0));
|
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0));
|
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RIGHT, ui::EF_SHIFT_DOWN));
|
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RIGHT, ui::EF_SHIFT_DOWN));
|
| + test_toolbar_model->set_text(ASCIIToUTF16("AB"));
|
| + omnibox_view->Update();
|
| + EXPECT_EQ(2u, GetSelectionSize(omnibox_view));
|
| +
|
| + // Now Shift+Right should do nothing, and Shift+Left should reduce.
|
| + // At the end, so Shift+Right should do nothing.
|
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RIGHT, ui::EF_SHIFT_DOWN));
|
| + EXPECT_EQ(2u, GetSelectionSize(omnibox_view));
|
| +
|
| + // And Left should reduce by one character.
|
| + ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, ui::EF_SHIFT_DOWN));
|
| + EXPECT_EQ(1u, GetSelectionSize(omnibox_view));
|
| +}
|
|
|