Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Unified Diff: trunk/src/chrome/browser/ui/search/instant_extended_interactive_uitest.cc

Issue 17444007: Revert 207790 "InstantExtended: Don't create overlay, again." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: trunk/src/chrome/browser/ui/search/instant_extended_interactive_uitest.cc
===================================================================
--- trunk/src/chrome/browser/ui/search/instant_extended_interactive_uitest.cc (revision 207797)
+++ trunk/src/chrome/browser/ui/search/instant_extended_interactive_uitest.cc (working copy)
@@ -288,15 +288,499 @@
DISALLOW_COPY_AND_ASSIGN(InstantPolicyTest);
};
+#if defined(HTML_INSTANT_EXTENDED_POPUP)
+
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, ExtendedModeIsOn) {
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
EXPECT_TRUE(instant()->extended_enabled_);
}
+// Test that Instant is preloaded when the omnibox is focused.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OmniboxFocusLoadsInstant) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+
+ // Explicitly unfocus the omnibox.
+ EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
+ ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER);
+
+ EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER));
+ EXPECT_FALSE(omnibox()->model()->has_focus());
+
+ // Delete any existing overlay.
+ instant()->overlay_.reset();
+ EXPECT_FALSE(instant()->GetOverlayContents());
+
+ // Refocus the omnibox. The InstantController should've preloaded Instant.
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER));
+ EXPECT_TRUE(omnibox()->model()->has_focus());
+
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(overlay);
+
+ // Check that the page supports Instant, but it isn't showing.
+ EXPECT_TRUE(instant()->overlay_->supports_instant());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
+ EXPECT_TRUE(instant()->model()->mode().is_default());
+
+ // Adding a new tab shouldn't delete or recreate the overlay; otherwise,
+ // what's the point of preloading?
+ AddBlankTabAndShow(browser());
+ EXPECT_EQ(overlay, instant()->GetOverlayContents());
+
+ // Unfocusing and refocusing the omnibox should also preserve the overlay.
+ ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER);
+ EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER));
+
+ FocusOmnibox();
+ EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER));
+ EXPECT_EQ(overlay, instant()->GetOverlayContents());
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, InputShowsOverlay) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+
+ // Focus omnibox and confirm overlay isn't shown.
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(overlay);
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
+ EXPECT_TRUE(instant()->model()->mode().is_default());
+
+ // Typing in the omnibox should show the overlay.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("query"));
+ EXPECT_TRUE(instant()->model()->mode().is_search_suggestions());
+ EXPECT_EQ(overlay, instant()->GetOverlayContents());
+}
+
+// Flaky on Linux Tests bot.
+#if defined(OS_LINUX)
+#define MAYBE_UsesOverlayIfTabNotReady DISABLED_UsesOverlayIfTabNotReady
+#else
+#define MAYBE_UsesOverlayIfTabNotReady UsesOverlayIfTabNotReady
+#endif
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, MAYBE_UsesOverlayIfTabNotReady) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Open a new tab and navigate to instant URL. Start typing before InstantTab
+ // is properly hooked up. Should use the overlay.
+ ui_test_utils::NavigateToURLWithDisposition(
+ browser(),
+ instant_url(),
+ NEW_BACKGROUND_TAB,
+ ui_test_utils::BROWSER_TEST_NONE);
+ EXPECT_EQ(2, browser()->tab_strip_model()->count());
+ browser()->tab_strip_model()->ActivateTabAt(1, false);
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("query"));
+
+ // But Instant tab should still exist.
+ ASSERT_NE(static_cast<InstantTab*>(NULL), instant()->instant_tab());
+ EXPECT_FALSE(instant()->UseTabForSuggestions());
+
+ // Wait for Instant Tab support if it still hasn't finished loading.
+ if (!instant()->instant_tab()->supports_instant()) {
+ content::WindowedNotificationObserver instant_tab_observer(
+ chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
+ content::NotificationService::AllSources());
+ instant_tab_observer.Wait();
+ }
+
+ // Hide the overlay. Now, we should be using Instant tab for suggestions.
+ instant()->HideOverlay();
+ EXPECT_TRUE(instant()->UseTabForSuggestions());
+}
+
+// Flaky on Mac Tests bot. crbug.com/242415
+#if defined(OS_MACOSX)
+#define MAYBE_MiddleClickOnSuggestionOpensInNewTab DISABLED_MiddleClickOnSuggestionOpensInNewTab
+#else
+#define MAYBE_MiddleClickOnSuggestionOpensInNewTab MiddleClickOnSuggestionOpensInNewTab
+#endif
+
+// Test that middle clicking on a suggestion opens the result in a new tab.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ MAYBE_MiddleClickOnSuggestionOpensInNewTab) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
+
+ EXPECT_EQ(1, browser()->tab_strip_model()->count());
+
+ // Typing in the omnibox should show the overlay.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("http://www.example.com/"));
+
+ // Create an event listener that opens the top suggestion in a new tab.
+ EXPECT_TRUE(ExecuteScript(
+ "var rid = getApiHandle().nativeSuggestions[0].rid;"
+ "document.body.addEventListener('click', function() {"
+ "chrome.embeddedSearch.navigateContentWindow(rid, 2);"
+ "});"
+ ));
+
+ content::WindowedNotificationObserver observer(
+ chrome::NOTIFICATION_TAB_ADDED,
+ content::NotificationService::AllSources());
+
+ // Click to trigger the event listener.
+ ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER);
+
+ // Wait for the new tab to be added.
+ observer.Wait();
+
+ // Check that the new tab URL is as expected.
+ content::WebContents* new_tab_contents =
+ browser()->tab_strip_model()->GetWebContentsAt(1);
+ EXPECT_EQ("http://www.example.com/", new_tab_contents->GetURL().spec());
+
+ // Check that there are now two tabs.
+ EXPECT_EQ(2, browser()->tab_strip_model()->count());
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ UnfocusingOmniboxDoesNotChangeSuggestions) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
+
+ // Get a committed tab to work with.
+ content::WebContents* instant_tab = instant()->GetOverlayContents();
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("committed"));
+ browser()->window()->GetLocationBar()->AcceptInput();
+
+ // Put focus back into the omnibox, type, and wait for some gray text.
+ EXPECT_TRUE(content::ExecuteScript(instant_tab,
+ "suggestion = 'santa claus';"));
+ SetOmniboxTextAndWaitForSuggestion("santa ");
+ EXPECT_EQ(ASCIIToUTF16("claus"), GetGrayText());
+ EXPECT_TRUE(content::ExecuteScript(instant_tab,
+ "onChangeCalls = onNativeSuggestionsCalls = 0;"));
+
+ // Now unfocus the omnibox.
+ ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER);
+ EXPECT_TRUE(UpdateSearchState(instant_tab));
+ EXPECT_EQ(0, on_change_calls_);
+ EXPECT_EQ(0, on_native_suggestions_calls_);
+}
+
+// Test that omnibox text is correctly set when overlay is committed with Enter.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OmniboxTextUponEnterCommit) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // The page will autocomplete once we set the omnibox value.
+ EXPECT_TRUE(ExecuteScript("suggestion = 'santa claus';"));
+
+ // Set the text, and wait for suggestions to show up.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("santa"));
+ EXPECT_EQ(ASCIIToUTF16("santa"), omnibox()->GetText());
+
+ // Test that the current suggestion is correctly set.
+ EXPECT_EQ(ASCIIToUTF16(" claus"), GetGrayText());
+
+ // Commit the search by pressing Enter.
+ browser()->window()->GetLocationBar()->AcceptInput();
+
+ // 'Enter' commits the query as it was typed.
+ EXPECT_EQ(ASCIIToUTF16("santa"), omnibox()->GetText());
+
+ // Suggestion should be cleared at this point.
+ EXPECT_EQ(ASCIIToUTF16(""), GetGrayText());
+}
+
+// Test that omnibox text is correctly set when committed with focus lost.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OmniboxTextUponFocusLostCommit) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Set autocomplete text (grey text).
+ EXPECT_TRUE(ExecuteScript("suggestion = 'johnny depp';"));
+
+ // Set the text, and wait for suggestions to show up.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("johnny"));
+ EXPECT_EQ(ASCIIToUTF16("johnny"), omnibox()->GetText());
+
+ // Test that the current suggestion is correctly set.
+ EXPECT_EQ(ASCIIToUTF16(" depp"), GetGrayText());
+
+ // Commit the overlay by lost focus (e.g. clicking on the page).
+ instant()->CommitIfPossible(INSTANT_COMMIT_FOCUS_LOST);
+
+ // Omnibox text and suggestion should not be changed.
+ EXPECT_EQ(ASCIIToUTF16("johnny"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16(" depp"), GetGrayText());
+}
+
+// Test that omnibox text is correctly set when clicking on committed SERP.
+// Disabled on Mac because omnibox focus loss is not working correctly.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ OmniboxTextUponFocusedCommittedSERP) {
+ // Setup Instant.
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Create an observer to wait for the instant tab to support Instant.
+ content::WindowedNotificationObserver observer(
+ chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
+ content::NotificationService::AllSources());
+
+ // Do a search and commit it.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("hello k"));
+ EXPECT_EQ(ASCIIToUTF16("hello k"), omnibox()->GetText());
+ browser()->window()->GetLocationBar()->AcceptInput();
+ observer.Wait();
+
+ // With a committed results page, do a search by unfocusing the omnibox and
+ // focusing the contents.
+ SetOmniboxText("hello");
+ // Calling handleOnChange manually to make sure it is called before the
+ // Focus() call below.
+ EXPECT_TRUE(content::ExecuteScript(instant()->instant_tab()->contents(),
+ "suggestion = 'hello kitty';"
+ "handleOnChange();"));
+ instant()->instant_tab()->contents()->GetView()->Focus();
+
+ // Omnibox text and suggestion should not be changed.
+ EXPECT_EQ(ASCIIToUTF16("hello"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16(" kitty"), GetGrayText());
+}
+
+// Checks that a previous Navigation suggestion is not re-used when a search
+// suggestion comes in.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ NavigationSuggestionIsDiscardedUponSearchSuggestion) {
+ // Setup Instant.
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Tell the page to send a URL suggestion.
+ EXPECT_TRUE(ExecuteScript("suggestion = 'http://www.example.com';"
+ "behavior = 1;"));
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("exa"));
+ EXPECT_EQ(ASCIIToUTF16("example.com"), omnibox()->GetText());
+
+ // Now send a search suggestion and see that Navigation suggestion is no
+ // longer kept.
+ EXPECT_TRUE(ExecuteScript("suggestion = 'exams are great';"
+ "behavior = 2;"));
+ SetOmniboxText("exam");
+ // Wait for JavaScript to run handleOnChange by executing a blank script.
+ EXPECT_TRUE(ExecuteScript(std::string()));
+
+ instant()->overlay()->contents()->GetView()->Focus();
+ EXPECT_EQ(ASCIIToUTF16("exam"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16("s are great"), GetGrayText());
+
+ // TODO(jered): Remove this after fixing OnBlur().
+ omnibox()->RevertAll();
+}
+
+// This test simulates a search provider using the InstantExtended API to
+// navigate through the suggested results and back to the original user query.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NavigateSuggestionsWithArrowKeys) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("hello"));
+ EXPECT_EQ("hello", GetOmniboxText());
+
+ SendDownArrow();
+ EXPECT_EQ("result 1", GetOmniboxText());
+ SendDownArrow();
+ EXPECT_EQ("result 2", GetOmniboxText());
+ SendUpArrow();
+ EXPECT_EQ("result 1", GetOmniboxText());
+ SendUpArrow();
+ EXPECT_EQ("hello", GetOmniboxText());
+
+ // Ensure that the API's value is set correctly.
+ std::string result;
+ EXPECT_TRUE(GetStringFromJS(instant()->GetOverlayContents(),
+ "window.chrome.searchBox.value",
+ &result));
+ EXPECT_EQ("hello", result);
+
+ EXPECT_TRUE(HasUserInputInProgress());
+ // TODO(beaudoin): Figure out why this fails.
+ // EXPECT_FALSE(HasTemporaryText());
+
+ // Commit the search by pressing Enter.
+ browser()->window()->GetLocationBar()->AcceptInput();
+ EXPECT_EQ("hello", GetOmniboxText());
+}
+
+// Flaky on Linux Tests bot. See http://crbug.com/233090.
+#if defined(OS_LINUX)
+#define MAYBE_NavigateToURLSuggestionHitEnterAndLookForSubmit DISABLED_NavigateToURLSuggestionHitEnterAndLookForSubmit
+#else
+#define MAYBE_NavigateToURLSuggestionHitEnterAndLookForSubmit NavigateToURLSuggestionHitEnterAndLookForSubmit
+#endif
+
+// This test simulates a search provider using the InstantExtended API to
+// navigate through the suggested results and back to the original user query.
+// If this test starts to flake, it may be that the second call to AcceptInput
+// below causes instant()->instant_tab() to no longer be valid due to e.g. a
+// navigation. In that case, see https://codereview.chromium.org/12895007/#msg28
+// and onwards for possible alternatives.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ MAYBE_NavigateToURLSuggestionHitEnterAndLookForSubmit) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Create an observer to wait for the instant tab to support Instant.
+ content::WindowedNotificationObserver observer(
+ chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
+ content::NotificationService::AllSources());
+
+ // Do a search and commit it.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("hello k"));
+ EXPECT_EQ(ASCIIToUTF16("hello k"), omnibox()->GetText());
+ browser()->window()->GetLocationBar()->AcceptInput();
+ observer.Wait();
+
+ SetOmniboxText("http");
+ EXPECT_EQ("http", GetOmniboxText());
+
+ SendDownArrow();
+ EXPECT_EQ("result 1", GetOmniboxText());
+ SendDownArrow();
+ EXPECT_EQ("result 2", GetOmniboxText());
+
+ // Set the next suggestion to be of type INSTANT_SUGGESTION_URL.
+ EXPECT_TRUE(content::ExecuteScript(instant()->instant_tab()->contents(),
+ "suggestionType = 1;"));
+ SendDownArrow();
+ EXPECT_EQ("http://www.google.com", GetOmniboxText());
+
+ EXPECT_TRUE(HasUserInputInProgress());
+
+ EXPECT_TRUE(UpdateSearchState(instant()->instant_tab()->contents()));
+ // Note the commit count is initially 1 due to the AcceptInput() call above.
+ EXPECT_EQ(1, submit_count_);
+
+ std::string old_query_value(query_value_);
+
+ // Commit the search by pressing Enter.
+ browser()->window()->GetLocationBar()->AcceptInput();
+
+ // Make sure a submit message got sent.
+ EXPECT_TRUE(UpdateSearchState(instant()->instant_tab()->contents()));
+ EXPECT_EQ(2, submit_count_);
+ EXPECT_EQ(old_query_value, query_value_);
+}
+
+// This test simulates a search provider using the InstantExtended API to
+// navigate through the suggested results and hitting escape to get back to the
+// original user query.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NavigateSuggestionsAndHitEscape) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("hello"));
+ EXPECT_EQ("hello", GetOmniboxText());
+
+ SendDownArrow();
+ EXPECT_EQ("result 1", GetOmniboxText());
+ SendDownArrow();
+ EXPECT_EQ("result 2", GetOmniboxText());
+ SendEscape();
+ EXPECT_EQ("hello", GetOmniboxText());
+
+ // Ensure that the API's value is set correctly.
+ std::string result;
+ EXPECT_TRUE(GetStringFromJS(instant()->GetOverlayContents(),
+ "window.chrome.searchBox.value",
+ &result));
+ EXPECT_EQ("hello", result);
+
+ EXPECT_TRUE(HasUserInputInProgress());
+ EXPECT_FALSE(HasTemporaryText());
+
+ // Commit the search by pressing Enter.
+ browser()->window()->GetLocationBar()->AcceptInput();
+ EXPECT_EQ("hello", GetOmniboxText());
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, PressEscapeWithBlueText) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Set blue text completion.
+ EXPECT_TRUE(ExecuteScript("suggestion = 'chimichanga.com';"
+ "behavior = 1;"));
+
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("chimi"));
+
+ EXPECT_EQ(ASCIIToUTF16("chimichanga.com"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16("changa.com"), GetBlueText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetGrayText());
+
+ EXPECT_TRUE(ExecuteScript("onChangeCalls = onNativeSuggestionsCalls = 0;"));
+
+ SendDownArrow();
+
+ EXPECT_EQ(ASCIIToUTF16("result 1"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetBlueText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetGrayText());
+
+ content::WindowedNotificationObserver observer(
+ chrome::NOTIFICATION_INSTANT_SET_SUGGESTION,
+ content::NotificationService::AllSources());
+ SendEscape();
+ observer.Wait();
+
+ EXPECT_EQ(ASCIIToUTF16("chimichanga.com"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16("changa.com"), GetBlueText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetGrayText());
+
+ EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
+ EXPECT_EQ(0, on_native_suggestions_calls_);
+ EXPECT_EQ(0, on_change_calls_);
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, PressEscapeWithGrayText) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Set gray text completion.
+ EXPECT_TRUE(ExecuteScript("suggestion = 'cowabunga';"
+ "behavior = 2;"));
+
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("cowa"));
+
+ EXPECT_EQ(ASCIIToUTF16("cowa"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetBlueText());
+ EXPECT_EQ(ASCIIToUTF16("bunga"), GetGrayText());
+
+ EXPECT_TRUE(ExecuteScript("onChangeCalls = onNativeSuggestionsCalls = 0;"));
+
+ SendDownArrow();
+
+ EXPECT_EQ(ASCIIToUTF16("result 1"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetBlueText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetGrayText());
+
+ content::WindowedNotificationObserver observer(
+ chrome::NOTIFICATION_INSTANT_SET_SUGGESTION,
+ content::NotificationService::AllSources());
+ SendEscape();
+ observer.Wait();
+
+ EXPECT_EQ(ASCIIToUTF16("cowa"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetBlueText());
+ EXPECT_EQ(ASCIIToUTF16("bunga"), GetGrayText());
+
+ EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
+ EXPECT_EQ(0, on_native_suggestions_calls_);
+ EXPECT_EQ(0, on_change_calls_);
+}
+
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NTPIsPreloaded) {
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// NTP contents should be preloaded.
ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp());
@@ -311,7 +795,7 @@
// The second argument says to use only the local overlay and NTP.
instant()->SetInstantEnabled(false, true);
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// NTP contents should be preloaded.
ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp());
@@ -337,7 +821,7 @@
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, PreloadedNTPIsUsedInNewTab) {
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// NTP contents should be preloaded.
ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp());
@@ -359,7 +843,7 @@
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, PreloadedNTPIsUsedInSameTab) {
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// NTP contents should be preloaded.
ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp());
@@ -381,7 +865,7 @@
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, PreloadedNTPForWrongProvider) {
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// NTP contents should be preloaded.
ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp());
@@ -406,7 +890,7 @@
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, PreloadedNTPRenderViewGone) {
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// NTP contents should be preloaded.
ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp());
@@ -432,7 +916,7 @@
GURL instant_url = test_server()->GetURL("files/empty.html?strk=1");
InstantTestBase::Init(instant_url);
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// NTP contents should have fallen back to the local page.
ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp());
@@ -453,7 +937,7 @@
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_OmniboxHasFocusOnNewTab) {
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// Explicitly unfocus the omnibox.
EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
@@ -474,7 +958,7 @@
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OmniboxEmptyOnNewTabPage) {
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// Open new tab. Preloaded NTP contents should have been used.
ui_test_utils::NavigateToURLWithDisposition(
@@ -490,7 +974,7 @@
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NoFaviconOnNewTabPage) {
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// Open new tab. Preloaded NTP contents should have been used.
ui_test_utils::NavigateToURLWithDisposition(
@@ -513,8 +997,31 @@
EXPECT_TRUE(favicon_tab_helper->ShouldDisplayFavicon());
}
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, InputOnNTPDoesntShowOverlay) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+
+ // Focus omnibox and confirm overlay isn't shown.
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(overlay);
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
+ EXPECT_TRUE(instant()->model()->mode().is_default());
+
+ // Navigate to the NTP. Should use preloaded contents.
+ ui_test_utils::NavigateToURLWithDisposition(
+ browser(),
+ GURL(chrome::kChromeUINewTabURL),
+ CURRENT_TAB,
+ ui_test_utils::BROWSER_TEST_NONE);
+
+ // Typing in the omnibox should not show the overlay.
+ SetOmniboxText("query");
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
+ EXPECT_TRUE(instant()->model()->mode().is_default());
+}
+
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, ProcessIsolation) {
- // Prior to setup, Instant has an ntp with a failed "google.com" load in
+ // Prior to setup, Instant has an overlay with a failed "google.com" load in
// it, which is rendered in the dedicated Instant renderer process.
//
// TODO(sreeram): Fix this up when we stop doing crazy things on init.
@@ -529,11 +1036,15 @@
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// The registered Instant render process should still exist.
EXPECT_EQ(1, instant_service->GetInstantProcessCount());
- // And the Instant ntp should live inside it.
+
+ // And the Instant overlay and ntp should live inside it.
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(instant_service->IsInstantProcess(
+ overlay->GetRenderProcessHost()->GetID()));
content::WebContents* ntp_contents = instant()->ntp_->contents();
EXPECT_TRUE(instant_service->IsInstantProcess(
ntp_contents->GetRenderProcessHost()->GetID()));
@@ -555,24 +1066,235 @@
active_tab->GetRenderProcessHost()->GetID()));
}
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_MostVisited) {
+// Test that a search query will not be displayed for navsuggest queries.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ SearchQueryNotDisplayedForNavsuggest) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+
+ // The second argument indicates to use only the local overlay and NTP.
+ instant()->SetInstantEnabled(true, true);
+
+ // Focus omnibox and confirm overlay isn't shown.
+ FocusOmniboxAndWaitForInstantOverlaySupport();
+
+ // Typing in the omnibox should show the overlay.
+ SetOmniboxText("face");
+
+ content::WebContents* overlay = instant()->GetOverlayContents();
+
+ // Add a navsuggest suggestion.
+ instant()->SetSuggestions(
+ overlay,
+ std::vector<InstantSuggestion>(
+ 1,
+ InstantSuggestion(ASCIIToUTF16("http://facemash.com/"),
+ INSTANT_COMPLETE_NOW,
+ INSTANT_SUGGESTION_URL,
+ ASCIIToUTF16("face"),
+ kNoMatchIndex)));
+
+ while (!omnibox()->model()->autocomplete_controller()->done()) {
+ content::WindowedNotificationObserver autocomplete_observer(
+ chrome::NOTIFICATION_AUTOCOMPLETE_CONTROLLER_RESULT_READY,
+ content::NotificationService::AllSources());
+ autocomplete_observer.Wait();
+ }
+
+ EXPECT_TRUE(ExecuteScript(
+ "var sorted = chrome.embeddedSearch.searchBox.nativeSuggestions.sort("
+ "function (a,b) {"
+ "return b.rankingData.relevance - a.rankingData.relevance;"
+ "});"));
+
+ int suggestions_count = -1;
+ EXPECT_TRUE(GetIntFromJS(
+ overlay, "sorted.length", &suggestions_count));
+ ASSERT_GT(suggestions_count, 0);
+
+ std::string type;
+ EXPECT_TRUE(
+ GetStringFromJS(overlay, "sorted[0].type", &type));
+ ASSERT_EQ("navsuggest", type);
+
+ bool is_search;
+ EXPECT_TRUE(GetBoolFromJS(
+ overlay, "!!sorted[0].is_search", &is_search));
+ EXPECT_FALSE(is_search);
+}
+
+// Verification of fix for BUG=176365. Ensure that each Instant WebContents in
+// a tab uses a new BrowsingInstance, to avoid conflicts in the
+// NavigationController.
+// Flaky: http://crbug.com/177516
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_UnrelatedSiteInstance) {
+ // Setup Instant.
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Check that the uncommited ntp page and uncommited overlay have unrelated
+ // site instances.
+ // TODO(sreeram): |ntp_| is going away, so this check can be removed in the
+ // future.
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ content::WebContents* ntp_contents = instant()->ntp_->contents();
+ EXPECT_FALSE(overlay->GetSiteInstance()->IsRelatedSiteInstance(
+ ntp_contents->GetSiteInstance()));
+
+ // Type a query and hit enter to get a results page. The overlay becomes the
+ // active tab.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("hello"));
+ EXPECT_EQ("hello", GetOmniboxText());
+ browser()->window()->GetLocationBar()->AcceptInput();
+ content::WebContents* first_active_tab =
+ browser()->tab_strip_model()->GetActiveWebContents();
+ EXPECT_EQ(first_active_tab, overlay);
+ scoped_refptr<content::SiteInstance> first_site_instance =
+ first_active_tab->GetSiteInstance();
+ EXPECT_FALSE(first_site_instance->IsRelatedSiteInstance(
+ ntp_contents->GetSiteInstance()));
+
+ // Navigating elsewhere gets us off of the commited page. The next
+ // query will give us a new |overlay| which we will then commit.
+ ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL));
+
+ // Show and commit the new overlay.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("hello again"));
+ EXPECT_EQ("hello again", GetOmniboxText());
+ browser()->window()->GetLocationBar()->AcceptInput();
+ content::WebContents* second_active_tab =
+ browser()->tab_strip_model()->GetActiveWebContents();
+ EXPECT_NE(first_active_tab, second_active_tab);
+ scoped_refptr<content::SiteInstance> second_site_instance =
+ second_active_tab->GetSiteInstance();
+ EXPECT_NE(first_site_instance, second_site_instance);
+ EXPECT_FALSE(
+ first_site_instance->IsRelatedSiteInstance(second_site_instance.get()));
+}
+
+// Tests that suggestions are sanity checked.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, ValidatesSuggestions) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Do not set gray text that is not a suffix of the query.
+ EXPECT_TRUE(ExecuteScript("suggestion = 'potato';"
+ "behavior = 2;"));
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("query"));
+ EXPECT_EQ(ASCIIToUTF16("query"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetGrayText());
+
+ omnibox()->RevertAll();
+
+ // Do not set blue text that is not a valid URL completion.
+ EXPECT_TRUE(ExecuteScript("suggestion = 'this is not a url!';"
+ "behavior = 1;"));
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("this is"));
+ EXPECT_EQ(ASCIIToUTF16("this is"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetGrayText());
+
+ omnibox()->RevertAll();
+
+ // Do not set gray text when blue text is already set.
+ // First set up some blue text completion.
+ EXPECT_TRUE(ExecuteScript("suggestion = 'www.example.com';"
+ "behavior = 1;"));
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("http://www.ex"));
+ EXPECT_EQ(ASCIIToUTF16("http://www.example.com"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16("ample.com"), GetBlueText());
+
+ // Now try to set gray text for the same query.
+ EXPECT_TRUE(ExecuteScript("suggestion = 'www.example.com rocks';"
+ "behavior = 2;"));
+ SetOmniboxText("http://www.ex");
+ EXPECT_EQ(ASCIIToUTF16("http://www.example.com"), omnibox()->GetText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetGrayText());
+
+ omnibox()->RevertAll();
+
+ // Ignore an out-of-date blue text suggestion. (Simulates a laggy
+ // SetSuggestion IPC by directly calling into InstantController.)
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("http://www.example.com/"));
+ instant()->SetSuggestions(
+ instant()->overlay()->contents(),
+ std::vector<InstantSuggestion>(
+ 1,
+ InstantSuggestion(ASCIIToUTF16("www.exa"),
+ INSTANT_COMPLETE_NOW,
+ INSTANT_SUGGESTION_URL,
+ ASCIIToUTF16("www.exa"),
+ kNoMatchIndex)));
+ EXPECT_EQ(
+ "http://www.example.com/",
+ omnibox()->model()->result().default_match()->destination_url.spec());
+
+ omnibox()->RevertAll();
+
+ // TODO(samarth): uncomment after fixing crbug.com/191656.
+ // Use an out-of-date blue text suggestion, if the text typed by the user is
+ // contained in the suggestion.
+ // ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("ex"));
+ // instant()->SetSuggestions(
+ // instant()->overlay()->contents(),
+ // std::vector<InstantSuggestion>(
+ // 1,
+ // InstantSuggestion(ASCIIToUTF16("www.example.com"),
+ // INSTANT_COMPLETE_NOW,
+ // INSTANT_SUGGESTION_URL,
+ // ASCIIToUTF16("e"))));
+ // EXPECT_EQ(
+ // "http://www.example.com/",
+ // omnibox()->model()->result().default_match()->destination_url.spec());
+
+ // omnibox()->RevertAll();
+
+ // When asked to suggest blue text in verbatim mode, suggest the exact
+ // omnibox text rather than using the supplied suggestion text.
+ EXPECT_TRUE(ExecuteScript("suggestion = 'www.example.com/q';"
+ "behavior = 1;"));
+ SetOmniboxText("www.example.com/q");
+ omnibox()->OnBeforePossibleChange();
+ SetOmniboxText("www.example.com/");
+ omnibox()->OnAfterPossibleChange();
+ EXPECT_EQ(ASCIIToUTF16("www.example.com/"), omnibox()->GetText());
+}
+
+// Tests that a previous navigation suggestion is not discarded if it's not
+// stale.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ NavigationSuggestionIsNotDiscarded) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Tell the page to send a URL suggestion.
+ EXPECT_TRUE(ExecuteScript("suggestion = 'http://www.example.com';"
+ "behavior = 1;"));
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("exa"));
+ EXPECT_EQ(ASCIIToUTF16("example.com"), omnibox()->GetText());
+ SetOmniboxText("exam");
+ EXPECT_EQ(ASCIIToUTF16("example.com"), omnibox()->GetText());
+
+ // TODO(jered): Remove this after fixing OnBlur().
+ omnibox()->RevertAll();
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, MostVisited) {
content::WindowedNotificationObserver observer(
chrome::NOTIFICATION_INSTANT_SENT_MOST_VISITED_ITEMS,
content::NotificationService::AllSources());
// Initialize Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// Get a handle to the NTP and the current state of the JS.
ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp());
- content::WebContents* ntp = instant()->ntp_->contents();
- EXPECT_TRUE(ntp);
- EXPECT_TRUE(UpdateSearchState(ntp));
+ content::WebContents* overlay = instant()->ntp_->contents();
+ EXPECT_TRUE(overlay);
+ EXPECT_TRUE(UpdateSearchState(overlay));
// Wait for most visited data to be ready, if necessary.
if (on_most_visited_change_calls_ == 0) {
observer.Wait();
- EXPECT_TRUE(UpdateSearchState(ntp));
+ EXPECT_TRUE(UpdateSearchState(overlay));
}
EXPECT_EQ(1, on_most_visited_change_calls_);
@@ -588,11 +1310,11 @@
int rid = first_most_visited_item_id_;
std::ostringstream stream;
stream << "newTabPageHandle.deleteMostVisitedItem(" << rid << ");";
- EXPECT_TRUE(content::ExecuteScript(ntp, stream.str()));
+ EXPECT_TRUE(ExecuteScript(stream.str()));
observer.Wait();
// Update Most Visited state.
- EXPECT_TRUE(UpdateSearchState(ntp));
+ EXPECT_TRUE(UpdateSearchState(overlay));
// Make sure we have one less item in there.
EXPECT_EQ(most_visited_items_count_, old_most_visited_items_count - 1);
@@ -600,11 +1322,11 @@
// Undo the deletion of the fist Most Visited Item.
stream.str(std::string());
stream << "newTabPageHandle.undoMostVisitedDeletion(" << rid << ");";
- EXPECT_TRUE(content::ExecuteScript(ntp, stream.str()));
+ EXPECT_TRUE(ExecuteScript(stream.str()));
observer.Wait();
// Update Most Visited state.
- EXPECT_TRUE(UpdateSearchState(ntp));
+ EXPECT_TRUE(UpdateSearchState(overlay));
// Make sure we have the same number of items as before.
EXPECT_EQ(most_visited_items_count_, old_most_visited_items_count);
@@ -613,21 +1335,21 @@
rid = first_most_visited_item_id_;
stream.str(std::string());
stream << "newTabPageHandle.deleteMostVisitedItem(" << rid << ");";
- EXPECT_TRUE(content::ExecuteScript(ntp, stream.str()));
+ EXPECT_TRUE(ExecuteScript(stream.str()));
observer.Wait();
// Update Most Visited state.
- EXPECT_TRUE(UpdateSearchState(ntp));
+ EXPECT_TRUE(UpdateSearchState(overlay));
// Delete the second Most Visited Item.
rid = first_most_visited_item_id_;
stream.str(std::string());
stream << "newTabPageHandle.deleteMostVisitedItem(" << rid << ");";
- EXPECT_TRUE(content::ExecuteScript(ntp, stream.str()));
+ EXPECT_TRUE(ExecuteScript(stream.str()));
observer.Wait();
// Update Most Visited state.
- EXPECT_TRUE(UpdateSearchState(ntp));
+ EXPECT_TRUE(UpdateSearchState(overlay));
// Make sure we have two less items in there.
EXPECT_EQ(most_visited_items_count_, old_most_visited_items_count - 2);
@@ -635,11 +1357,11 @@
// Delete the second Most Visited Item.
stream.str(std::string());
stream << "newTabPageHandle.undoAllMostVisitedDeletions();";
- EXPECT_TRUE(content::ExecuteScript(ntp, stream.str()));
+ EXPECT_TRUE(ExecuteScript(stream.str()));
observer.Wait();
// Update Most Visited state.
- EXPECT_TRUE(UpdateSearchState(ntp));
+ EXPECT_TRUE(UpdateSearchState(overlay));
// Make sure we have the same number of items as before.
EXPECT_EQ(most_visited_items_count_, old_most_visited_items_count);
@@ -649,7 +1371,7 @@
InstallThemeSource();
ASSERT_NO_FATAL_FAILURE(InstallThemeAndVerify("theme", "camo theme"));
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// The "Instant" New Tab should have access to chrome-search: scheme but not
// chrome: scheme.
@@ -682,7 +1404,7 @@
EXPECT_TRUE(top_sites->SetPageThumbnail(url, thumbnail, high_score));
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// The "Instant" New Tab should have access to chrome-search: scheme but not
// chrome: scheme.
@@ -707,25 +1429,77 @@
EXPECT_TRUE(loaded) << search_favicon_url;
}
+// WebUIBindings should never be enabled on ANY Instant web contents.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NoWebUIBindingsOnNTP) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ ui_test_utils::NavigateToURLWithDisposition(
+ browser(),
+ GURL(chrome::kChromeUINewTabURL),
+ NEW_FOREGROUND_TAB,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
+ const content::WebContents* tab =
+ browser()->tab_strip_model()->GetActiveWebContents();
+
+ // Instant-provided NTP should not have any bindings enabled.
+ EXPECT_EQ(0, tab->GetRenderViewHost()->GetEnabledBindings());
+}
+
+// WebUIBindings should never be enabled on ANY Instant web contents.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NoWebUIBindingsOnPreview) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Typing in the omnibox shows the overlay.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("query"));
+ EXPECT_TRUE(instant()->model()->mode().is_search_suggestions());
+ content::WebContents* preview = instant()->GetOverlayContents();
+ ASSERT_NE(static_cast<content::WebContents*>(NULL), preview);
+
+ // Instant preview should not have any bindings enabled.
+ EXPECT_EQ(0, preview->GetRenderViewHost()->GetEnabledBindings());
+}
+
+// WebUIBindings should never be enabled on ANY Instant web contents.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NoWebUIBindingsOnResults) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Typing in the omnibox shows the overlay.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("query"));
+ content::WebContents* preview = instant()->GetOverlayContents();
+ EXPECT_TRUE(instant()->model()->mode().is_search_suggestions());
+ // Commit the search by pressing Enter.
+ browser()->window()->GetLocationBar()->AcceptInput();
+ EXPECT_TRUE(instant()->model()->mode().is_default());
+ const content::WebContents* tab =
+ browser()->tab_strip_model()->GetActiveWebContents();
+ EXPECT_EQ(preview, tab);
+
+ // The commited Instant page should not have any bindings enabled.
+ EXPECT_EQ(0, tab->GetRenderViewHost()->GetEnabledBindings());
+}
+
// Only implemented in Views and Mac currently: http://crbug.com/164723
#if defined(OS_WIN) || defined(OS_CHROMEOS) || defined(OS_MACOSX)
#define MAYBE_HomeButtonAffectsMargin HomeButtonAffectsMargin
#else
#define MAYBE_HomeButtonAffectsMargin DISABLED_HomeButtonAffectsMargin
#endif
-
// Check that toggling the state of the home button changes the start-edge
// margin and width.
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, MAYBE_HomeButtonAffectsMargin) {
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlaySupport();
// Get the current value of the start-edge margin and width.
int start_margin;
int width;
- content::WebContents* ntp = instant()->ntp_->contents();
- EXPECT_TRUE(GetIntFromJS(ntp, "chrome.searchBox.startMargin", &start_margin));
- EXPECT_TRUE(GetIntFromJS(ntp, "chrome.searchBox.width", &width));
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(GetIntFromJS(overlay, "chrome.searchBox.startMargin",
+ &start_margin));
+ EXPECT_TRUE(GetIntFromJS(overlay, "chrome.searchBox.width", &width));
// Toggle the home button visibility pref.
PrefService* profile_prefs = browser()->profile()->GetPrefs();
@@ -735,48 +1509,307 @@
// Make sure the margin and width changed.
int new_start_margin;
int new_width;
- EXPECT_TRUE(GetIntFromJS(ntp, "chrome.searchBox.startMargin",
+ EXPECT_TRUE(GetIntFromJS(overlay, "chrome.searchBox.startMargin",
&new_start_margin));
- EXPECT_TRUE(GetIntFromJS(ntp, "chrome.searchBox.width", &new_width));
+ EXPECT_TRUE(GetIntFromJS(overlay, "chrome.searchBox.width", &new_width));
EXPECT_NE(start_margin, new_start_margin);
EXPECT_NE(width, new_width);
EXPECT_EQ(new_width - width, start_margin - new_start_margin);
}
-// WebUIBindings should never be enabled on ANY Instant web contents.
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NoWebUIBindingsOnNTP) {
+// Commit does not happen on Mac: http://crbug.com/178520
+#if defined(OS_MACOSX)
+#define MAYBE_CommitWhenFocusLostInFullHeight \
+ DISABLED_CommitWhenFocusLostInFullHeight
+#else
+#define MAYBE_CommitWhenFocusLostInFullHeight CommitWhenFocusLostInFullHeight
+#endif
+// Test that the overlay is committed when the omnibox loses focus when it is
+// shown at 100% height.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ MAYBE_CommitWhenFocusLostInFullHeight) {
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
- ui_test_utils::NavigateToURLWithDisposition(
- browser(),
- GURL(chrome::kChromeUINewTabURL),
- NEW_FOREGROUND_TAB,
- ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
- const content::WebContents* tab =
+ // Focus omnibox and confirm overlay isn't shown.
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(overlay);
+ EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
+
+ // Typing in the omnibox should show the overlay.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("query"));
+ EXPECT_TRUE(instant()->IsOverlayingSearchResults());
+ EXPECT_EQ(overlay, instant()->GetOverlayContents());
+
+ // Explicitly unfocus the omnibox without triggering a click. Note that this
+ // doesn't actually change the focus state of the omnibox, only what the
+ // Instant controller sees it as.
+ omnibox()->model()->OnWillKillFocus(NULL);
+ omnibox()->model()->OnKillFocus();
+
+ // Confirm that the overlay has been committed.
+ content::WebContents* active_tab =
browser()->tab_strip_model()->GetActiveWebContents();
+ EXPECT_EQ(overlay, active_tab);
+}
- // Instant-provided NTP should not have any bindings enabled.
- EXPECT_EQ(0, tab->GetRenderViewHost()->GetEnabledBindings());
+#if defined(OS_MACOSX)
+// http://crbug.com/227076
+#define MAYBE_CommitWhenShownInFullHeightWithoutFocus \
+ DISABLED_CommitWhenShownInFullHeightWithoutFocus
+#else
+#define MAYBE_CommitWhenShownInFullHeightWithoutFocus \
+ CommitWhenShownInFullHeightWithoutFocus
+#endif
+
+// Test that the overlay is committed when shown at 100% height without focus
+// in the omnibox.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ MAYBE_CommitWhenShownInFullHeightWithoutFocus) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+
+ // Focus omnibox and confirm overlay isn't shown.
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(overlay);
+ EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
+
+ // Create an observer to wait for the commit.
+ content::WindowedNotificationObserver commit_observer(
+ chrome::NOTIFICATION_INSTANT_COMMITTED,
+ content::NotificationService::AllSources());
+
+ // Create an observer to wait for the autocomplete.
+ content::WindowedNotificationObserver autocomplete_observer(
+ chrome::NOTIFICATION_INSTANT_SENT_AUTOCOMPLETE_RESULTS,
+ content::NotificationService::AllSources());
+
+ // Typing in the omnibox should show the overlay. Don't wait for the overlay
+ // to show however.
+ SetOmniboxText("query");
+
+ autocomplete_observer.Wait();
+
+ // Explicitly unfocus the omnibox without triggering a click. Note that this
+ // doesn't actually change the focus state of the omnibox, only what the
+ // Instant controller sees it as.
+ omnibox()->model()->OnWillKillFocus(NULL);
+ omnibox()->model()->OnKillFocus();
+
+ // Wait for the overlay to show.
+ commit_observer.Wait();
+
+ // Confirm that the overlay has been committed.
+ content::WebContents* active_tab =
+ browser()->tab_strip_model()->GetActiveWebContents();
+ EXPECT_EQ(overlay, active_tab);
}
-// WebUIBindings should never be enabled on ANY Instant web contents.
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NoWebUIBindingsOnResults) {
+// Test that a transient entry is set properly when the overlay is committed
+// without a navigation.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, TransientEntrySet) {
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
- // Type a query and press enter to get results.
- SetOmniboxText("query");
- // Commit the search by pressing Enter.
+ // Focus omnibox and confirm overlay isn't shown.
+ FocusOmniboxAndWaitForInstantOverlaySupport();
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(overlay);
+ EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
+
+ // Commit the overlay without triggering a navigation.
+ content::WindowedNotificationObserver observer(
+ chrome::NOTIFICATION_INSTANT_COMMITTED,
+ content::NotificationService::AllSources());
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("query"));
browser()->window()->GetLocationBar()->AcceptInput();
+ observer.Wait();
+
+ // Confirm that the overlay has been committed.
+ content::WebContents* active_tab =
+ browser()->tab_strip_model()->GetActiveWebContents();
+ EXPECT_EQ(overlay, active_tab);
+
+ // The page hasn't navigated so there should be a transient entry with the
+ // same URL but different page ID as the last committed entry.
+ const content::NavigationEntry* transient_entry =
+ active_tab->GetController().GetTransientEntry();
+ const content::NavigationEntry* committed_entry =
+ active_tab->GetController().GetLastCommittedEntry();
+ EXPECT_EQ(transient_entry->GetURL(), committed_entry->GetURL());
+ EXPECT_NE(transient_entry->GetPageID(), committed_entry->GetPageID());
+}
+
+// Test that the a transient entry is cleared when the overlay is committed
+// with a navigation.
+// TODO(samarth) : this test fails, http://crbug.com/181070.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_TransientEntryRemoved) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+
+ // Focus omnibox and confirm overlay isn't shown.
+ FocusOmniboxAndWaitForInstantOverlaySupport();
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(overlay);
EXPECT_TRUE(instant()->model()->mode().is_default());
- const content::WebContents* tab =
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
+
+ // Create an observer to wait for the commit.
+ content::WindowedNotificationObserver observer(
+ chrome::NOTIFICATION_INSTANT_COMMITTED,
+ content::NotificationService::AllSources());
+
+ // Trigger a navigation on commit.
+ EXPECT_TRUE(ExecuteScript(
+ "getApiHandle().oncancel = function() {"
+ " location.replace(location.href + '#q=query');"
+ "};"
+ ));
+
+ // Commit the overlay.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("query"));
+ browser()->window()->GetLocationBar()->AcceptInput();
+ observer.Wait();
+
+ // Confirm that the overlay has been committed.
+ content::WebContents* active_tab =
browser()->tab_strip_model()->GetActiveWebContents();
+ EXPECT_EQ(overlay, active_tab);
- // The commited Instant page should not have any bindings enabled.
- EXPECT_EQ(0, tab->GetRenderViewHost()->GetEnabledBindings());
+ // The page has navigated so there should be no transient entry.
+ const content::NavigationEntry* transient_entry =
+ active_tab->GetController().GetTransientEntry();
+ EXPECT_EQ(NULL, transient_entry);
+
+ // The last committed entry should be the URL the page navigated to.
+ const content::NavigationEntry* committed_entry =
+ active_tab->GetController().GetLastCommittedEntry();
+ EXPECT_TRUE(EndsWith(committed_entry->GetURL().spec(), "#q=query", true));
}
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, RestrictedURLReading) {
+ std::string search_query;
+ bool is_undefined;
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlaySupport();
+
+ // Verify we can read out something ok.
+ const char kOKQuery[] = "santa";
+ SetOmniboxText(kOKQuery);
+ EXPECT_EQ(ASCIIToUTF16(kOKQuery), omnibox()->GetText());
+ // Must always assert the value is defined before trying to read it, as trying
+ // to read undefined values causes the test to hang.
+ EXPECT_TRUE(GetBoolFromJS(instant()->GetOverlayContents(),
+ "apiHandle.value === undefined",
+ &is_undefined));
+ ASSERT_FALSE(is_undefined);
+ EXPECT_TRUE(GetStringFromJS(instant()->GetOverlayContents(),
+ "apiHandle.value",
+ &search_query));
+ EXPECT_EQ(kOKQuery, search_query);
+
+ // Verify we can't read out something that should be restricted, like a https
+ // url with a path.
+ const char kHTTPSUrlWithPath[] = "https://www.example.com/foobar";
+ SetOmniboxText(kHTTPSUrlWithPath);
+ EXPECT_EQ(ASCIIToUTF16(kHTTPSUrlWithPath), omnibox()->GetText());
+ EXPECT_TRUE(GetBoolFromJS(instant()->GetOverlayContents(),
+ "apiHandle.value === undefined",
+ &is_undefined));
+ EXPECT_TRUE(is_undefined);
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, RestrictedItemReadback) {
+ // Initialize Instant.
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlaySupport();
+
+ // Get a handle to the NTP and the current state of the JS.
+ ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp());
+ content::WebContents* preview_tab = instant()->ntp()->contents();
+ EXPECT_TRUE(preview_tab);
+
+ // Manufacture a few autocomplete results and get them down to the page.
+ std::vector<InstantAutocompleteResult> autocomplete_results;
+ for (int i = 0; i < 3; ++i) {
+ std::string description(base::StringPrintf("Test Description %d", i));
+ std::string url(base::StringPrintf("http://www.testurl%d.com", i));
+
+ InstantAutocompleteResult res;
+ res.provider = ASCIIToUTF16(AutocompleteProvider::TypeToString(
+ AutocompleteProvider::TYPE_BUILTIN));
+ res.type = AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
+ res.description = ASCIIToUTF16(description);
+ res.destination_url = ASCIIToUTF16(url);
+ res.transition = content::PAGE_TRANSITION_TYPED;
+ res.relevance = 42 + i;
+
+ autocomplete_results.push_back(res);
+ }
+ instant()->overlay()->SendAutocompleteResults(autocomplete_results);
+
+ // Apparently, one needs to access nativeSuggestions before
+ // apiHandle.setRestrictedValue can work.
+ EXPECT_TRUE(ExecuteScript("var foo = apiHandle.nativeSuggestions;"));
+
+ const char kQueryString[] = "Hippos go berzerk!";
+
+ // First set the query text to a non restricted value and ensure it can be
+ // read back.
+ std::ostringstream stream;
+ stream << "apiHandle.setValue('" << kQueryString << "');";
+ EXPECT_TRUE(ExecuteScript(stream.str()));
+
+ std::string query_string;
+ bool is_undefined;
+ EXPECT_TRUE(GetStringFromJS(instant()->GetOverlayContents(),
+ "apiHandle.value",
+ &query_string));
+ EXPECT_EQ(kQueryString, query_string);
+
+ // Set the query text to the first restricted autocomplete item.
+ int rid = 1;
+ stream.str(std::string());
+ stream << "apiHandle.setRestrictedValue(" << rid << ");";
+ EXPECT_TRUE(ExecuteScript(stream.str()));
+
+ // Expect that we now receive undefined when reading the value back.
+ EXPECT_TRUE(GetBoolFromJS(
+ instant()->GetOverlayContents(),
+ "apiHandle.value === undefined",
+ &is_undefined));
+ EXPECT_TRUE(is_undefined);
+
+ // Now set the query text to a non restricted value and ensure that the
+ // visibility has been reset and the string can again be read back.
+ stream.str(std::string());
+ stream << "apiHandle.setValue('" << kQueryString << "');";
+ EXPECT_TRUE(ExecuteScript(stream.str()));
+
+ EXPECT_TRUE(GetStringFromJS(instant()->GetOverlayContents(),
+ "apiHandle.value",
+ &query_string));
+ EXPECT_EQ(kQueryString, query_string);
+}
+
+// Test that autocomplete results are sent to the page only when all the
+// providers are done.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, AutocompleteProvidersDone) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(UpdateSearchState(overlay));
+ EXPECT_EQ(0, on_native_suggestions_calls_);
+
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("railroad"));
+
+ EXPECT_EQ(overlay, instant()->GetOverlayContents());
+ EXPECT_TRUE(UpdateSearchState(overlay));
+ EXPECT_EQ(1, on_native_suggestions_calls_);
+}
+
// Test that the Bookmark provider is enabled, and returns results.
// TODO(sreeram): Convert this to a unit test.
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_HasBookmarkProvider) {
@@ -803,10 +1836,119 @@
EXPECT_TRUE(found_bookmark_match);
}
+// Test that the omnibox's temporary text is reset when the popup is closed.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, TemporaryTextResetWhenPopupClosed) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
+
+ // Show the overlay and arrow-down to a suggestion (this sets temporary text).
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("juju"));
+ SendDownArrow();
+
+ EXPECT_TRUE(HasTemporaryText());
+ EXPECT_EQ("result 1", GetOmniboxText());
+
+ // Click outside the omnibox (but not on the overlay), to make the omnibox
+ // lose focus. Close the popup explicitly, to workaround test/toolkit issues.
+ ui_test_utils::ClickOnView(browser(), VIEW_ID_TOOLBAR);
+ omnibox()->CloseOmniboxPopup();
+
+ // The temporary text should've been accepted as the user text.
+ EXPECT_FALSE(HasTemporaryText());
+ EXPECT_EQ("result 1", GetOmniboxText());
+
+ // Now refocus the omnibox and hit Escape. This shouldn't crash.
+ FocusOmnibox();
+ SendEscape();
+
+ // The omnibox should've reverted to the underlying permanent URL.
+ EXPECT_FALSE(HasTemporaryText());
+ EXPECT_EQ(std::string(content::kAboutBlankURL), GetOmniboxText());
+}
+
+// Test that autocomplete results aren't sent when the popup is closed.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ NoAutocompleteResultsWhenPopupClosed) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
+
+ // Show the overlay and arrow-down to a suggestion (this sets temporary text).
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("thangam"));
+ SendDownArrow();
+ EXPECT_TRUE(HasTemporaryText());
+
+ EXPECT_TRUE(ExecuteScript("onChangeCalls = onNativeSuggestionsCalls = 0;"));
+
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(UpdateSearchState(overlay));
+ EXPECT_EQ(0, on_change_calls_);
+ EXPECT_EQ(0, on_native_suggestions_calls_);
+
+ // Click outside the omnibox (but not on the overlay), to make the omnibox
+ // lose focus. Close the popup explicitly, to workaround test/toolkit issues.
+ ui_test_utils::ClickOnView(browser(), VIEW_ID_TOOLBAR);
+ omnibox()->CloseOmniboxPopup();
+ EXPECT_FALSE(HasTemporaryText());
+
+ EXPECT_EQ(overlay, instant()->GetOverlayContents());
+ EXPECT_TRUE(UpdateSearchState(overlay));
+ EXPECT_EQ(0, on_change_calls_);
+ EXPECT_EQ(0, on_native_suggestions_calls_);
+}
+
+// Test that suggestions are not accepted when unexpected.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, DeniesUnexpectedSuggestions) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("chip"));
+ SendDownArrow();
+
+ EXPECT_EQ("result 1", GetOmniboxText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetGrayText());
+
+ // Make the page send an unexpected suggestion.
+ EXPECT_TRUE(ExecuteScript("suggestion = 'chippies';"
+ "handleOnChange();"));
+
+ // Verify that the suggestion is ignored.
+ EXPECT_EQ("result 1", GetOmniboxText());
+ EXPECT_EQ(ASCIIToUTF16(""), GetGrayText());
+}
+
+// Test that autocomplete results are cleared when the query is cleared.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, EmptyAutocompleteResults) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Type a URL, so that there's at least one autocomplete result (a "URL what
+ // you typed" match).
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("http://upsamina/"));
+
+ content::WebContents* overlay = instant()->GetOverlayContents();
+
+ int num_autocomplete_results = 0;
+ EXPECT_TRUE(GetIntFromJS(
+ overlay,
+ "chrome.embeddedSearch.searchBox.nativeSuggestions.length",
+ &num_autocomplete_results));
+ EXPECT_LT(0, num_autocomplete_results);
+
+ // Erase the query in the omnibox.
+ SetOmniboxText("");
+
+ EXPECT_TRUE(GetIntFromJS(
+ overlay,
+ "chrome.embeddedSearch.searchBox.nativeSuggestions.length",
+ &num_autocomplete_results));
+ EXPECT_EQ(0, num_autocomplete_results);
+}
+
// Test that hitting Esc to clear the omnibox works. http://crbug.com/231744.
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_EscapeClearsOmnibox) {
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, EscapeClearsOmnibox) {
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// Navigate to the Instant NTP, and wait for it to be recognized.
content::WindowedNotificationObserver instant_tab_observer(
@@ -845,6 +1987,63 @@
EXPECT_LT(0, on_esc_key_press_event_calls_);
}
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, FocusApiRespondsToFocusChange) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
+ EXPECT_FALSE(is_focused_);
+ EXPECT_EQ(0, on_focus_changed_calls_);
+
+ // Focus the omnibox.
+ FocusOmniboxAndWaitForInstantOverlaySupport();
+ ASSERT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
+ EXPECT_TRUE(is_focused_);
+ EXPECT_EQ(1, on_focus_changed_calls_);
+
+ // Now unfocus the omnibox.
+ ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER);
+ ASSERT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
+ EXPECT_FALSE(is_focused_);
+ EXPECT_EQ(2, on_focus_changed_calls_);
+
+ // Focus the omnibox again.
+ // The first focus may have worked only due to initial-state anomalies.
+ FocusOmnibox();
+ ASSERT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
+ EXPECT_TRUE(is_focused_);
+ EXPECT_EQ(3, on_focus_changed_calls_);
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, FocusApiIgnoresRedundantFocus) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
+ EXPECT_FALSE(is_focused_);
+ EXPECT_EQ(0, on_focus_changed_calls_);
+
+ // Focus the Omnibox.
+ FocusOmniboxAndWaitForInstantOverlaySupport();
+ ASSERT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
+ EXPECT_TRUE(is_focused_);
+ EXPECT_EQ(1, on_focus_changed_calls_);
+
+ // When we focus the omnibox again, nothing should change.
+ FocusOmnibox();
+ ASSERT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
+ EXPECT_TRUE(is_focused_);
+ EXPECT_EQ(1, on_focus_changed_calls_);
+
+ // Now unfocus the omnibox.
+ ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER);
+ ASSERT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
+ EXPECT_FALSE(is_focused_);
+ EXPECT_EQ(2, on_focus_changed_calls_);
+
+ // When we unfocus again, nothing should change.
+ ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER);
+ ASSERT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
+ EXPECT_FALSE(is_focused_);
+ EXPECT_EQ(2, on_focus_changed_calls_);
+}
+
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OnDefaultSearchProviderChanged) {
InstantService* instant_service =
InstantServiceFactory::GetForProfile(browser()->profile());
@@ -852,7 +2051,7 @@
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
EXPECT_EQ(1, instant_service->GetInstantProcessCount());
// Navigating to the NTP should use the Instant render process.
@@ -905,19 +2104,109 @@
EXPECT_EQ(ntp_url, ntp_contents->GetURL());
}
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OverlayRenderViewGone) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ EXPECT_NE(static_cast<content::WebContents*>(NULL),
+ instant()->GetOverlayContents());
+
+ // Overlay is not reloaded after being killed.
+ EXPECT_FALSE(instant()->overlay()->IsLocal());
+ instant()->InstantPageRenderViewGone(instant()->GetOverlayContents());
+ EXPECT_EQ(NULL, instant()->GetOverlayContents());
+
+ // The local overlay is used on the next Update().
+ SetOmniboxText("query");
+ EXPECT_TRUE(instant()->overlay()->IsLocal());
+
+ // Switched back to the remote overlay when omnibox loses and regains focus.
+ instant()->HideOverlay();
+ browser()->tab_strip_model()->GetActiveWebContents()->GetView()->Focus();
+ FocusOmnibox();
+ EXPECT_FALSE(instant()->overlay()->IsLocal());
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OverlayDoesntSupportInstant) {
+ GURL instant_url = test_server()->GetURL("files/empty.html?strk=1");
+ InstantTestBase::Init(instant_url);
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+
+ // Focus the omnibox. When the support determination response comes back,
+ // Instant will destroy the non-Instant page and fall back to the local page.
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ ASSERT_NE(static_cast<InstantOverlay*>(NULL), instant()->overlay());
+ EXPECT_TRUE(instant()->overlay()->IsLocal());
+
+ // The local overlay is used on the next Update().
+ SetOmniboxText("query");
+ EXPECT_TRUE(instant()->overlay()->IsLocal());
+
+ // Switched back to the remote overlay when omnibox loses and regains focus.
+ instant()->HideOverlay();
+ browser()->tab_strip_model()->GetActiveWebContents()->GetView()->Focus();
+ FocusOmnibox();
+ EXPECT_FALSE(instant()->overlay()->IsLocal());
+
+ // Overlay falls back to local again after determining support.
+ FocusOmniboxAndWaitForInstantOverlaySupport();
+ ASSERT_NE(static_cast<InstantOverlay*>(NULL), instant()->overlay());
+ EXPECT_TRUE(instant()->overlay()->IsLocal());
+}
+
+// Test that if Instant alters the input from URL to search, it's respected.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, InputChangedFromURLToSearch) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(ExecuteScript("suggestions = ['mcqueen.com'];"));
+
+ SetOmniboxTextAndWaitForOverlayToShow("lightning");
+ EXPECT_EQ("lightning", GetOmniboxText());
+
+ SendDownArrow();
+ EXPECT_EQ("mcqueen.com", GetOmniboxText());
+
+ // Press Enter.
+ browser()->window()->GetLocationBar()->AcceptInput();
+
+ // Confirm that the Instant overlay was committed.
+ EXPECT_EQ(overlay, browser()->tab_strip_model()->GetActiveWebContents());
+}
+
+// Test that if Instant alters the input from search to URL, it's respected.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, InputChangedFromSearchToURL) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(ExecuteScript("suggestionType = 1;")); // INSTANT_SUGGESTION_URL
+
+ SetOmniboxTextAndWaitForOverlayToShow("mack.com");
+ EXPECT_EQ("mack.com", GetOmniboxText());
+
+ SendDownArrow();
+ EXPECT_EQ("result 1", GetOmniboxText());
+
+ // Press Enter.
+ browser()->window()->GetLocationBar()->AcceptInput();
+
+ // Confirm that the Instant overlay was NOT committed.
+ EXPECT_NE(overlay, browser()->tab_strip_model()->GetActiveWebContents());
+}
+
// Test that renderer initiated navigations to an instant URL from a non
// Instant page do not end up in an Instant process if they are bounced to the
// browser.
-IN_PROC_BROWSER_TEST_F(
- InstantExtendedTest,
- DISABLED_RendererInitiatedNavigationNotInInstantProcess) {
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ RendererInitiatedNavigationNotInInstantProcess) {
InstantService* instant_service =
InstantServiceFactory::GetForProfile(browser()->profile());
ASSERT_NE(static_cast<InstantService*>(NULL), instant_service);
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
EXPECT_EQ(1, browser()->tab_strip_model()->count());
@@ -982,7 +2271,7 @@
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
EXPECT_EQ(1, browser()->tab_strip_model()->count());
@@ -1020,11 +2309,159 @@
EXPECT_EQ(GURL(instant_url_with_query), contents->GetURL());
}
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, SearchProviderDoesntRun) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlaySupport();
+
+ // Add "query" to history.
+ ASSERT_TRUE(AddSearchToHistory(ASCIIToUTF16("query"), 10000));
+ BlockUntilHistoryProcessesPendingRequests();
+
+ SetOmniboxText("quer");
+
+ // Should get only SWYT from SearchProvider.
+ EXPECT_EQ(1, CountSearchProviderSuggestions());
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, SearchProviderRunsForLocalOnly) {
+ // Force local-only Instant.
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ instant()->SetInstantEnabled(true, true);
+ FocusOmniboxAndWaitForInstantOverlaySupport();
+
+ // Add "query" to history.
+ ASSERT_TRUE(AddSearchToHistory(ASCIIToUTF16("query"), 10000));
+ BlockUntilHistoryProcessesPendingRequests();
+
+ SetOmniboxText("quer");
+
+ // Should get 2 suggestions from SearchProvider:
+ // - SWYT for "quer"
+ // - Search history suggestion for "query"
+ EXPECT_EQ(2, CountSearchProviderSuggestions());
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, SearchProviderRunsForFallback) {
+ // Use an Instant URL that won't support Instant.
+ GURL instant_url = test_server()->GetURL("files/empty.html?strk=1");
+ InstantTestBase::Init(instant_url);
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlaySupport();
+ // Should fallback to the local overlay.
+ ASSERT_NE(static_cast<InstantOverlay*>(NULL), instant()->overlay());
+ EXPECT_TRUE(instant()->overlay()->IsLocal());
+
+ // Add "query" to history and wait for Instant support.
+ ASSERT_TRUE(AddSearchToHistory(ASCIIToUTF16("query"), 10000));
+ BlockUntilHistoryProcessesPendingRequests();
+
+ SetOmniboxText("quer");
+
+ // Should get 2 suggestions from SearchProvider:
+ // - SWYT for "quer"
+ // - Search history suggestion for "query"
+ EXPECT_EQ(2, CountSearchProviderSuggestions());
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, SearchProviderForLocalNTP) {
+ // Force local-only Instant.
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ instant()->SetInstantEnabled(true, true);
+
+ // Add "google" to history.
+ ASSERT_TRUE(AddSearchToHistory(ASCIIToUTF16("google"), 10000));
+ BlockUntilHistoryProcessesPendingRequests();
+
+ // Create an observer to wait for the autocomplete.
+ content::WindowedNotificationObserver autocomplete_observer(
+ chrome::NOTIFICATION_INSTANT_SENT_AUTOCOMPLETE_RESULTS,
+ content::NotificationService::AllSources());
+
+ SetOmniboxText("http://www.example.com");
+
+ autocomplete_observer.Wait();
+ ASSERT_TRUE(omnibox()->model()->autocomplete_controller()->
+ search_provider()->IsNonInstantSearchDone());
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OverlaySendsSearchWhatYouTyped) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // This input could be interpreted either as an URL or a query based on the
+ // relative ranking of search-what-you-typed or url-what-you-typed.
+ content::WindowedNotificationObserver autocomplete_observer(
+ chrome::NOTIFICATION_INSTANT_SENT_AUTOCOMPLETE_RESULTS,
+ content::NotificationService::AllSources());
+ SetOmniboxText("define:foo");
+ autocomplete_observer.Wait();
+
+ // In this case, we should treat [define:foo] as a query, so
+ // search-what-you-typed should be the top suggestion.
+ EXPECT_TRUE(ExecuteScript(
+ "var sorted = chrome.embeddedSearch.searchBox.nativeSuggestions.sort("
+ "function (a,b) {"
+ "return b.rankingData.relevance - a.rankingData.relevance;"
+ "});"));
+ std::string type;
+ EXPECT_TRUE(GetStringFromJS(instant()->GetOverlayContents(),
+ "sorted[0].type", &type));
+ ASSERT_EQ("search-what-you-typed", type);
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ OverlayDoesNotEchoSearchProviderNavsuggest) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Show the overlay so suggestions are allowed.
+ SetOmniboxTextAndWaitForOverlayToShow("www.");
+ content::WebContents* overlay = instant()->GetOverlayContents();
+
+ // Set a URL suggestion and wait for SearchProvider to echo it.
+ content::WindowedNotificationObserver autocomplete_observer(
+ chrome::NOTIFICATION_INSTANT_SENT_AUTOCOMPLETE_RESULTS,
+ content::NotificationService::AllSources());
+ instant()->SetSuggestions(
+ overlay,
+ std::vector<InstantSuggestion>(
+ 1,
+ InstantSuggestion(ASCIIToUTF16("http://www.example.com/"),
+ INSTANT_COMPLETE_NOW,
+ INSTANT_SUGGESTION_URL,
+ ASCIIToUTF16("www."),
+ kNoMatchIndex)));
+ autocomplete_observer.Wait();
+
+ // Check that SearchProvider set a NAVSUGGEST match.
+ bool have_navsuggest_match = false;
+ SearchProvider* search_provider =
+ omnibox()->model()->autocomplete_controller()->search_provider();
+ for (ACMatches::const_iterator match = search_provider->matches().begin();
+ match != search_provider->matches().end(); ++match) {
+ if (match->type == AutocompleteMatchType::NAVSUGGEST) {
+ have_navsuggest_match = true;
+ break;
+ }
+ }
+ ASSERT_TRUE(have_navsuggest_match);
+
+ // Check that InstantController did not send the NAVSUGGEST match.
+ bool sent_navsuggest_match = true;
+ EXPECT_TRUE(GetBoolFromJS(overlay,
+ "chrome.embeddedSearch.searchBox.nativeSuggestions.some("
+ "function (s) {"
+ "return s.type == 'navsuggest';"
+ "})", &sent_navsuggest_match));
+ EXPECT_FALSE(sent_navsuggest_match);
+}
+
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, AcceptingURLSearchDoesNotNavigate) {
// Get a committed Instant tab, which will be in the Instant process and thus
// support chrome::GetSearchTerms().
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmnibox();
+ FocusOmniboxAndWaitForInstantOverlaySupport();
// Create an observer to wait for the instant tab to support Instant.
content::WindowedNotificationObserver observer(
@@ -1032,7 +2469,7 @@
content::NotificationService::AllSources());
// Do a search and commit it.
- SetOmniboxText("foo");
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("foo"));
EXPECT_EQ(ASCIIToUTF16("foo"), omnibox()->GetText());
browser()->window()->GetLocationBar()->AcceptInput();
observer.Wait();
@@ -1056,13 +2493,11 @@
EXPECT_EQ(instant_tab_url, instant_tab->GetURL());
}
-// TODO(jered): Figure out why this test flakes and fix it.
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
- DISABLED_AcceptingJSSearchDoesNotRunJS) {
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, AcceptingJSSearchDoesNotRunJS) {
// Get a committed Instant tab, which will be in the Instant process and thus
// support chrome::GetSearchTerms().
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmnibox();
+ FocusOmniboxAndWaitForInstantOverlaySupport();
// Create an observer to wait for the instant tab to support Instant.
content::WindowedNotificationObserver observer(
@@ -1070,7 +2505,7 @@
content::NotificationService::AllSources());
// Do a search and commit it.
- SetOmniboxText("foo");
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("foo"));
EXPECT_EQ(ASCIIToUTF16("foo"), omnibox()->GetText());
browser()->window()->GetLocationBar()->AcceptInput();
observer.Wait();
@@ -1096,11 +2531,17 @@
EXPECT_NE(ASCIIToUTF16("evil"), instant_tab->GetTitle());
}
-IN_PROC_BROWSER_TEST_F(
- InstantExtendedTest,
- DISABLED_ReloadSearchAfterBackReloadsCorrectQuery) {
+// Flaky on mac: http://crbug.com/242164
+#if defined(OS_MACOSX)
+#define MAYBE_ReloadSearchAfterBackReloadsCorrectQuery DISABLED_ReloadSearchAfterBackReloadsCorrectQuery
+#else
+#define MAYBE_ReloadSearchAfterBackReloadsCorrectQuery ReloadSearchAfterBackReloadsCorrectQuery
+#endif
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ MAYBE_ReloadSearchAfterBackReloadsCorrectQuery) {
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmnibox();
+ FocusOmniboxAndWaitForInstantOverlaySupport();
// Create an observer to wait for the instant tab to support Instant.
content::WindowedNotificationObserver observer(
@@ -1108,7 +2549,7 @@
content::NotificationService::AllSources());
// Search for [foo].
- SetOmniboxText("foo");
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("foo"));
EXPECT_EQ(ASCIIToUTF16("foo"), omnibox()->GetText());
browser()->window()->GetLocationBar()->AcceptInput();
observer.Wait();
@@ -1118,6 +2559,7 @@
EXPECT_TRUE(content::ExecuteScript(instant_tab,
"suggestion = 'bart';"));
SetOmniboxTextAndWaitForSuggestion("bar");
+ EXPECT_EQ(ASCIIToUTF16("t"), GetGrayText());
// Accept the new query and wait for the page to navigate.
content::WindowedNotificationObserver nav_observer(
@@ -1169,7 +2611,7 @@
ASSERT_EQ(2u, native_browser_list->size());
set_browser(native_browser_list->get(1));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// Also make sure our instant_tab_ is loaded.
if (!instant()->instant_tab_) {
@@ -1183,11 +2625,69 @@
ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp());
EXPECT_TRUE(instant()->ntp()->IsLocal());
+ // Overlay contents should be preloaded.
+ ASSERT_NE(static_cast<InstantOverlay*>(NULL), instant()->overlay());
+ EXPECT_TRUE(instant()->overlay()->IsLocal());
+
// Instant tab contents should be preloaded.
ASSERT_NE(static_cast<InstantTab*>(NULL), instant()->instant_tab());
EXPECT_TRUE(instant()->instant_tab()->IsLocal());
}
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
+ PageVisibilityEventOnCommit) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+
+ // Set the text, and wait for suggestions to show up.
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("search"));
+
+ content::WebContents* overlay = instant()->GetOverlayContents();
+
+ // Before commiting, verify visibility calls.
+ int on_visibility_calls = -1;
+ EXPECT_TRUE(GetIntFromJS(overlay, "onvisibilitycalls", &on_visibility_calls));
+ EXPECT_EQ(1, on_visibility_calls);
+
+ // Commit the search by pressing Enter.
+ browser()->window()->GetLocationBar()->AcceptInput();
+
+ // After commiting, verify visibility calls.
+ on_visibility_calls = -1;
+ EXPECT_TRUE(GetIntFromJS(overlay, "onvisibilitycalls", &on_visibility_calls));
+ EXPECT_EQ(1, on_visibility_calls);
+}
+
+// Test that if the LogDropdownShown() call records a histogram value.
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, LogDropdownShown) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ int64 histogramValue = GetHistogramCount("Instant.TimeToFirstShowFromWeb");
+ ASSERT_TRUE(SetOmniboxTextAndWaitForOverlayToShow("a"));
+ EXPECT_EQ(histogramValue + 1,
+ GetHistogramCount("Instant.TimeToFirstShowFromWeb"));
+}
+
+IN_PROC_BROWSER_TEST_F(InstantExtendedTest, TaskManagerPrefix) {
+ TaskManagerModel* task_manager = TaskManager::GetInstance()->model();
+ task_manager->StartUpdating();
+
+ // There should be three renderers, the second being the Instant overlay,
+ // and the third being the preloaded NTP.
+ TaskManagerBrowserTestUtil::WaitForWebResourceChange(3);
+
+ string16 prefix = l10n_util::GetStringFUTF16(
+ IDS_TASK_MANAGER_INSTANT_OVERLAY_PREFIX, string16());
+
+ int instant_overlays = 0;
+ for (int i = 0; i < task_manager->ResourceCount(); ++i) {
+ string16 title = task_manager->GetResourceTitle(i);
+ if (StartsWith(title, prefix, true))
+ ++instant_overlays;
+ }
+ EXPECT_EQ(2, instant_overlays);
+}
+
// Broken on mac: http://crbug.com/247448
#if defined(OS_MACOSX)
#define MAYBE_KeyboardTogglesVoiceSearch DISABLED_KeyboardTogglesVoiceSearch
@@ -1196,19 +2696,23 @@
#endif
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, MAYBE_KeyboardTogglesVoiceSearch) {
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ // Test that toggle is not fired when no tab is open.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(), ui::VKEY_OEM_PERIOD,
+ true, true, false, false));
+ EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
+ EXPECT_EQ(0, on_toggle_voice_search_calls_);
+
// Open new tab and test that toggle is fired.
ui_test_utils::NavigateToURLWithDisposition(
browser(),
GURL(chrome::kChromeUINewTabURL),
- CURRENT_TAB,
- ui_test_utils::BROWSER_TEST_NONE);
- content::WebContents* active_tab =
- browser()->tab_strip_model()->GetActiveWebContents();
+ NEW_FOREGROUND_TAB,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(), ui::VKEY_OEM_PERIOD,
true, true, false, false));
- EXPECT_TRUE(UpdateSearchState(active_tab));
+ EXPECT_TRUE(UpdateSearchState(instant()->instant_tab()->contents()));
EXPECT_EQ(1, on_toggle_voice_search_calls_);
}
@@ -1217,10 +2721,18 @@
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, UpdateSearchQueryOnNavigation) {
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- // Focus omnibox.
- FocusOmniboxAndWaitForInstantNTPSupport();
- SetOmniboxText("flowers");
+ // Focus omnibox and confirm overlay isn't shown.
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(overlay);
+ EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
+ // Typing in the omnibox should show the overlay.
+ SetOmniboxTextAndWaitForOverlayToShow("flowers");
+ EXPECT_TRUE(instant()->IsOverlayingSearchResults());
+ EXPECT_EQ(overlay, instant()->GetOverlayContents());
+
// Commit the search by pressing 'Enter'.
PressEnterAndWaitForNavigation();
EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
@@ -1250,9 +2762,12 @@
EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
}
+#endif // HTML_INSTANT_EXTENDED_POPUP
+
+#if !defined(HTML_INSTANT_EXTENDED_POPUP)
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, SearchReusesInstantTab) {
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
content::WindowedNotificationObserver observer(
chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
@@ -1281,7 +2796,7 @@
IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
SearchDoesntReuseInstantTabWithoutSupport) {
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// Don't wait for the navigation to complete.
SetOmniboxText("flowers");
@@ -1299,7 +2814,7 @@
IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
TypedSearchURLDoesntReuseInstantTab) {
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// Create an observer to wait for the instant tab to support Instant.
content::WindowedNotificationObserver observer_1(
@@ -1331,7 +2846,7 @@
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OmniboxMarginSetForSearchURLs) {
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// Create an observer to wait for the instant tab to support Instant.
content::WindowedNotificationObserver observer(
@@ -1349,12 +2864,14 @@
EXPECT_THAT(url, HasSubstr("&es_sm="));
}
+#endif // if !defined(HTML_INSTANT_EXTENDED_POPUP)
+
// Test to verify that switching tabs should not dispatch onmostvisitedchanged
// events.
IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NoMostVisitedChangedOnTabSwitch) {
// Initialize Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
- FocusOmniboxAndWaitForInstantNTPSupport();
+ FocusOmniboxAndWaitForInstantOverlayAndNTPSupport();
// Open new tab. Preloaded NTP contents should have been used.
ui_test_utils::NavigateToURLWithDisposition(

Powered by Google App Engine
This is Rietveld 408576698