Commit adfe6fa7 authored by msw@chromium.org's avatar msw@chromium.org

Suggest about:blank autocompletion from BuiltinProvider.

Add support for [inline] autocomplete of about:blank.
The support handles fixup of the scheme separator.
Add BuiltinProviderTest.AboutBlank and do related cleanup.
Update OmniboxViewTest.UndoRedo and do related cleanup.

BUG=92577
TEST=about:blank is suggested in the omnibox; unit tests.
R=mpearson@chromium.org,pkasting@chromium.org

Review URL: https://codereview.chromium.org/290333015

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@274083 0039d316-1c4b-4281-b951-d872f2087c98
parent 6aa07482
...@@ -69,6 +69,7 @@ void BuiltinProvider::Start(const AutocompleteInput& input, ...@@ -69,6 +69,7 @@ void BuiltinProvider::Start(const AutocompleteInput& input,
(input.type() == AutocompleteInput::QUERY)) (input.type() == AutocompleteInput::QUERY))
return; return;
const size_t kAboutSchemeLength = strlen(content::kAboutScheme);
const base::string16 kAbout = base::ASCIIToUTF16(content::kAboutScheme) + const base::string16 kAbout = base::ASCIIToUTF16(content::kAboutScheme) +
base::ASCIIToUTF16(content::kStandardSchemeSeparator); base::ASCIIToUTF16(content::kStandardSchemeSeparator);
const base::string16 kChrome = base::ASCIIToUTF16(content::kChromeUIScheme) + const base::string16 kChrome = base::ASCIIToUTF16(content::kChromeUIScheme) +
...@@ -83,7 +84,6 @@ void BuiltinProvider::Start(const AutocompleteInput& input, ...@@ -83,7 +84,6 @@ void BuiltinProvider::Start(const AutocompleteInput& input,
ACMatchClassifications styles; ACMatchClassifications styles;
// Highlight the input portion matching "chrome://"; or if the user has // Highlight the input portion matching "chrome://"; or if the user has
// input "about:" (with optional slashes), highlight the whole "chrome://". // input "about:" (with optional slashes), highlight the whole "chrome://".
const size_t kAboutSchemeLength = strlen(content::kAboutScheme);
bool highlight = starting_chrome || text.length() > kAboutSchemeLength; bool highlight = starting_chrome || text.length() > kAboutSchemeLength;
styles.push_back(ACMatchClassification(0, highlight ? kMatch : kUrl)); styles.push_back(ACMatchClassification(0, highlight ? kMatch : kUrl));
size_t offset = starting_chrome ? text.length() : kChrome.length(); size_t offset = starting_chrome ? text.length() : kChrome.length();
...@@ -105,6 +105,23 @@ void BuiltinProvider::Start(const AutocompleteInput& input, ...@@ -105,6 +105,23 @@ void BuiltinProvider::Start(const AutocompleteInput& input,
// extensions to chrome: URLs. // extensions to chrome: URLs.
if (url.SchemeIs(content::kChromeUIScheme) && url.has_host() && if (url.SchemeIs(content::kChromeUIScheme) && url.has_host() &&
!url.has_query() && !url.has_ref()) { !url.has_query() && !url.has_ref()) {
// Suggest about:blank for substrings, taking URL fixup into account.
// Chrome does not support trailing slashes or paths for about:blank.
const base::string16 blank_host = base::ASCIIToUTF16("blank");
const base::string16 host = base::UTF8ToUTF16(url.host());
if (StartsWith(text, base::ASCIIToUTF16(content::kAboutScheme), false) &&
StartsWith(blank_host, host, false) && (url.path().length() <= 1) &&
!EndsWith(text, base::ASCIIToUTF16("/"), false)) {
ACMatchClassifications styles;
styles.push_back(ACMatchClassification(0, kMatch));
base::string16 match = base::ASCIIToUTF16(content::kAboutBlankURL);
// Measure the length of the matching host after the "about:" scheme.
const size_t corrected_length = kAboutSchemeLength + 1 + host.length();
if (blank_host.length() > host.length())
styles.push_back(ACMatchClassification(corrected_length, kUrl));
AddMatch(match, match.substr(corrected_length), styles);
}
// Include the path for sub-pages (e.g. "chrome://settings/browser"). // Include the path for sub-pages (e.g. "chrome://settings/browser").
base::string16 host_and_path = base::UTF8ToUTF16(url.host() + url.path()); base::string16 host_and_path = base::UTF8ToUTF16(url.host() + url.path());
base::TrimString(host_and_path, base::ASCIIToUTF16("/"), &host_and_path); base::TrimString(host_and_path, base::ASCIIToUTF16("/"), &host_and_path);
......
...@@ -1402,10 +1402,11 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewTest, UndoRedo) { ...@@ -1402,10 +1402,11 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewTest, UndoRedo) {
EXPECT_EQ(old_text.size(), start); EXPECT_EQ(old_text.size(), start);
EXPECT_EQ(old_text.size(), end); EXPECT_EQ(old_text.size(), end);
// Delete two characters. // Delete three characters; "about:bl" should not trigger inline autocomplete.
ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0));
ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0));
EXPECT_EQ(old_text.substr(0, old_text.size() - 2), omnibox_view->GetText()); ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0));
EXPECT_EQ(old_text.substr(0, old_text.size() - 3), omnibox_view->GetText());
// Undo delete. // Undo delete.
ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN)); ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN));
...@@ -1414,7 +1415,7 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewTest, UndoRedo) { ...@@ -1414,7 +1415,7 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewTest, UndoRedo) {
// Redo delete. // Redo delete.
ASSERT_NO_FATAL_FAILURE( ASSERT_NO_FATAL_FAILURE(
SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN)); SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN));
EXPECT_EQ(old_text.substr(0, old_text.size() - 2), omnibox_view->GetText()); EXPECT_EQ(old_text.substr(0, old_text.size() - 3), omnibox_view->GetText());
// Delete everything. // Delete everything.
omnibox_view->SelectAll(true); omnibox_view->SelectAll(true);
...@@ -1423,16 +1424,14 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewTest, UndoRedo) { ...@@ -1423,16 +1424,14 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewTest, UndoRedo) {
// Undo delete everything. // Undo delete everything.
ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN)); ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN));
EXPECT_EQ(old_text.substr(0, old_text.size() - 2), omnibox_view->GetText()); EXPECT_EQ(old_text.substr(0, old_text.size() - 3), omnibox_view->GetText());
// Undo delete two characters. // Undo delete two characters.
ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN)); ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN));
EXPECT_EQ(old_text, omnibox_view->GetText()); EXPECT_EQ(old_text, omnibox_view->GetText());
} }
// See http://crosbug.com/10306 IN_PROC_BROWSER_TEST_F(OmniboxViewTest, BackspaceDeleteHalfWidthKatakana) {
IN_PROC_BROWSER_TEST_F(OmniboxViewTest,
BackspaceDeleteHalfWidthKatakana) {
OmniboxView* omnibox_view = NULL; OmniboxView* omnibox_view = NULL;
ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view));
// Insert text: ダ // Insert text: ダ
...@@ -1500,10 +1499,7 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewTest, Paste) { ...@@ -1500,10 +1499,7 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewTest, Paste) {
ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_V, kCtrlOrCmdMask)); ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_V, kCtrlOrCmdMask));
ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone());
EXPECT_EQ(ASCIIToUTF16(kSearchText), omnibox_view->GetText()); EXPECT_EQ(ASCIIToUTF16(kSearchText), omnibox_view->GetText());
// This fails on GTK, see http://crbug.com/131179
#if !defined(TOOLKIT_GTK)
EXPECT_TRUE(popup_model->IsOpen()); EXPECT_TRUE(popup_model->IsOpen());
#endif
omnibox_view->CloseOmniboxPopup(); omnibox_view->CloseOmniboxPopup();
EXPECT_FALSE(popup_model->IsOpen()); EXPECT_FALSE(popup_model->IsOpen());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment