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

Unified Diff: chrome/browser/instant/instant_browsertest.cc

Issue 12386019: Instant: Use only one hidden WebContents per profile. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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: chrome/browser/instant/instant_browsertest.cc
diff --git a/chrome/browser/instant/instant_browsertest.cc b/chrome/browser/instant/instant_browsertest.cc
index d5cb8c84ee71541c3a180afc5db4bc4e17964a0f..055043c9cdd3e02ba217f90926de748bc57d8a51 100644
--- a/chrome/browser/instant/instant_browsertest.cc
+++ b/chrome/browser/instant/instant_browsertest.cc
@@ -2,44 +2,52 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/prefs/pref_service.h"
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/history/history_service_factory.h"
-#include "chrome/browser/instant/instant_overlay.h"
+#include "chrome/browser/instant/instant_controller.h"
+#include "chrome/browser/instant/instant_loader.h"
+#include "chrome/browser/instant/instant_model.h"
#include "chrome/browser/instant/instant_service.h"
-#include "chrome/browser/instant/instant_service_factory.h"
#include "chrome/browser/instant/instant_test_utils.h"
-#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search_engines/template_url_service.h"
#include "chrome/browser/search_engines/template_url_service_factory.h"
#include "chrome/browser/task_manager/task_manager.h"
#include "chrome/browser/task_manager/task_manager_browsertest_util.h"
-#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
-#include "chrome/browser/ui/host_desktop.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/omnibox/location_bar.h"
+#include "chrome/browser/ui/omnibox/omnibox_view.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
+#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/interactive_test_utils.h"
-#include "chrome/test/base/ui_test_utils.h"
-#include "content/public/browser/notification_service.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/web_contents.h"
+#include "content/public/test/browser_test_utils.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
-class InstantTest : public InstantTestBase {
+class InstantTest : public InProcessBrowserTest,
+ public InstantTestBase {
protected:
virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
ASSERT_TRUE(test_server()->Start());
- instant_url_ = test_server()->GetURL("files/instant.html?");
+ set_instant_url(test_server()->GetURL("files/instant.html"));
}
- void FocusOmniboxAndWaitForInstantSupport() {
- content::WindowedNotificationObserver observer(
- chrome::NOTIFICATION_INSTANT_OVERLAY_SUPPORT_DETERMINED,
- content::NotificationService::AllSources());
- FocusOmnibox();
- observer.Wait();
+ virtual void SetUpOnMainThread() OVERRIDE {
+ set_browser(browser());
+ }
+
+ void SetupInstant() {
+ TemplateURLData template_data;
+ template_data.SetURL("http://does/not/exist?q={searchTerms}");
+ template_data.instant_url = instant_url().spec();
+ SetupDefaultSearchProvider(template_data);
+
+ browser()->profile()->GetPrefs()->SetBoolean(prefs::kInstantEnabled, true);
}
bool UpdateSearchState(content::WebContents* contents) WARN_UNUSED_RESULT {
@@ -66,8 +74,6 @@ class InstantTest : public InstantTestBase {
// Test that Instant is preloaded when the omnibox is focused.
IN_PROC_BROWSER_TEST_F(InstantTest, OmniboxFocusLoadsInstant) {
- ASSERT_NO_FATAL_FAILURE(SetupInstant());
-
// Explicitly unfocus the omnibox.
EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER);
@@ -75,58 +81,51 @@ IN_PROC_BROWSER_TEST_F(InstantTest, OmniboxFocusLoadsInstant) {
EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER));
EXPECT_FALSE(omnibox()->model()->has_focus());
- // Delete any existing preview.
- instant()->overlay_.reset();
- EXPECT_FALSE(instant()->GetPreviewContents());
+ ASSERT_NO_FATAL_FAILURE(SetupInstant());
+ EXPECT_FALSE(service()->loader()->contents());
- // Refocus the omnibox. The InstantController should've preloaded Instant.
+ // Refocus the omnibox. The InstantLoader should preload an Instant page.
FocusOmniboxAndWaitForInstantSupport();
EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER));
EXPECT_TRUE(omnibox()->model()->has_focus());
- content::WebContents* preview_tab = instant()->GetPreviewContents();
- EXPECT_TRUE(preview_tab);
+ content::WebContents* overlay = service()->loader()->contents();
+ EXPECT_TRUE(overlay);
// Check that the page supports Instant, but it isn't showing.
- EXPECT_TRUE(instant()->overlay_->supports_instant());
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_TRUE(service()->loader()->supports_instant());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
+ EXPECT_FALSE(instant()->GetOverlayContents());
- // Adding a new tab shouldn't delete or recreate the preview; otherwise,
+ // Adding a new tab shouldn't delete or recreate the overlay; otherwise,
// what's the point of preloading?
AddBlankTabAndShow(browser());
- EXPECT_EQ(preview_tab, instant()->GetPreviewContents());
+ EXPECT_EQ(overlay, service()->loader()->contents());
- // Unfocusing and refocusing the omnibox should also preserve the preview.
+ // 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(preview_tab, instant()->GetPreviewContents());
+ EXPECT_EQ(overlay, service()->loader()->contents());
// Doing a search should also use the same preloaded page.
- SetOmniboxTextAndWaitForInstantToShow("query");
- EXPECT_TRUE(instant()->model()->mode().is_search_suggestions());
- EXPECT_EQ(preview_tab, instant()->GetPreviewContents());
+ SetOmniboxTextAndWaitForOverlayToShow("query");
+ EXPECT_TRUE(instant()->IsOverlayingSearchResults());
+ EXPECT_EQ(overlay, instant()->GetOverlayContents());
}
-// Flakes on Windows and Mac: http://crbug.com/170677
-#if defined(OS_WIN) || defined(OS_MACOSX)
-#define MAYBE_OnChangeEvent DISABLED_OnChangeEvent
-#else
-#define MAYBE_OnChangeEvent OnChangeEvent
-#endif
// Test that the onchange event is dispatched upon typing in the omnibox.
-IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_OnChangeEvent) {
+IN_PROC_BROWSER_TEST_F(InstantTest, OnChangeEvent) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
FocusOmniboxAndWaitForInstantSupport();
// Use the Instant page as the active tab, so we can exploit its visibility
// handler to check visibility transitions.
- ui_test_utils::NavigateToURL(browser(), instant_url_);
+ ui_test_utils::NavigateToURL(browser(), instant_url());
content::WebContents* active_tab =
browser()->tab_strip_model()->GetActiveWebContents();
@@ -135,25 +134,24 @@ IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_OnChangeEvent) {
&active_tab_onvisibilitycalls));
EXPECT_EQ(0, active_tab_onvisibilitycalls);
- // Typing "query" into the omnibox causes one or more onchange events. The
- // page suggested "query suggestion" is inline autocompleted into the omnibox,
- // causing another onchange event.
- SetOmniboxTextAndWaitForInstantToShow("query");
+ // Typing "query" into the omnibox causes the first onchange event. The page
+ // suggested "query suggestion" is inline autocompleted into the omnibox,
+ // causing the second onchange event.
+ SetOmniboxTextAndWaitForOverlayToShow("query");
EXPECT_EQ(ASCIIToUTF16("query suggestion"), omnibox()->GetText());
- int min_onchangecalls = 2;
- EXPECT_TRUE(UpdateSearchState(instant()->GetPreviewContents()));
- EXPECT_LE(min_onchangecalls, onchangecalls_);
- min_onchangecalls = onchangecalls_;
+ EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
+ EXPECT_EQ(2, onchangecalls_);
- // Change the query and confirm more onchange events are sent.
+ // Change the query and confirm that a third onchange event is sent. The
+ // hardcoded "query suggestion" doesn't start with "search", so no inline
+ // autocompletion or fourth onchange event happens.
SetOmniboxText("search");
- ++min_onchangecalls;
- EXPECT_TRUE(UpdateSearchState(instant()->GetPreviewContents()));
- EXPECT_LE(min_onchangecalls, onchangecalls_);
+ EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
+ EXPECT_EQ(3, onchangecalls_);
- // The preview was shown once, and the active tab was never hidden.
+ // The overlay was shown once, and the active tab was never hidden.
EXPECT_EQ(1, onvisibilitycalls_);
active_tab_onvisibilitycalls = -1;
EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls",
@@ -165,23 +163,23 @@ IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_OnChangeEvent) {
IN_PROC_BROWSER_TEST_F(InstantTest, OnSubmitEvent) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
FocusOmniboxAndWaitForInstantSupport();
- SetOmniboxTextAndWaitForInstantToShow("search");
+ SetOmniboxTextAndWaitForOverlayToShow("search");
- // Stash a reference to the preview, so we can refer to it after commit.
- content::WebContents* preview_tab = instant()->GetPreviewContents();
- EXPECT_TRUE(preview_tab);
+ // Stash a reference to the overlay, so we can refer to it after commit.
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(overlay);
// The state of the searchbox before the commit.
- EXPECT_TRUE(UpdateSearchState(preview_tab));
+ EXPECT_TRUE(UpdateSearchState(overlay));
EXPECT_EQ("search", value_);
EXPECT_FALSE(verbatim_);
EXPECT_EQ(0, onsubmitcalls_);
EXPECT_EQ(1, onvisibilitycalls_);
- // Before the commit, the active tab is the NTP (i.e., not Instant).
+ // Before the commit, the active tab is a blank page (i.e., not Instant).
content::WebContents* active_tab =
browser()->tab_strip_model()->GetActiveWebContents();
- EXPECT_NE(preview_tab, active_tab);
+ EXPECT_NE(overlay, active_tab);
EXPECT_EQ(1, active_tab->GetController().GetEntryCount());
EXPECT_EQ(std::string(chrome::kAboutBlankURL),
omnibox()->model()->PermanentURL().spec());
@@ -190,113 +188,92 @@ IN_PROC_BROWSER_TEST_F(InstantTest, OnSubmitEvent) {
browser()->window()->GetLocationBar()->AcceptInput();
// After the commit, Instant should not be showing.
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
-
- // The old overlay is deleted and a new one is created.
- EXPECT_TRUE(instant()->GetPreviewContents());
- EXPECT_NE(instant()->GetPreviewContents(), preview_tab);
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
- // Check that the current active tab is indeed what was once the preview.
- EXPECT_EQ(preview_tab, browser()->tab_strip_model()->GetActiveWebContents());
+ // Check that the current active tab is indeed what was once the overlay.
+ EXPECT_EQ(overlay, browser()->tab_strip_model()->GetActiveWebContents());
- // We should have two navigation entries, one for the NTP, and one for the
- // Instant search that was committed.
- EXPECT_EQ(2, preview_tab->GetController().GetEntryCount());
+ // We should have two navigation entries, one for the blank page, and one for
+ // the Instant search that was committed.
+ EXPECT_EQ(2, overlay->GetController().GetEntryCount());
// Check that the omnibox contains the Instant URL we loaded.
- EXPECT_EQ(instant_url_, omnibox()->model()->PermanentURL());
+ EXPECT_EQ(instant_url(), omnibox()->model()->PermanentURL());
- // Check that the searchbox API values have been reset.
- std::string value;
- EXPECT_TRUE(GetStringFromJS(preview_tab,
- "chrome.embeddedSearch.searchBox.value", &value));
- EXPECT_EQ("", value);
-
- // However, the page should've correctly received the committed query.
- EXPECT_TRUE(UpdateSearchState(preview_tab));
+ // The page should've correctly received the committed query.
+ EXPECT_TRUE(UpdateSearchState(overlay));
EXPECT_EQ("search", value_);
EXPECT_TRUE(verbatim_);
EXPECT_EQ(1, onsubmitcalls_);
EXPECT_EQ(1, onvisibilitycalls_);
}
-// Test that the oncancel event is dispatched upon clicking on the preview.
+// Test that the oncancel event is dispatched upon clicking on the overlay.
IN_PROC_BROWSER_TEST_F(InstantTest, OnCancelEvent) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
FocusOmniboxAndWaitForInstantSupport();
- SetOmniboxTextAndWaitForInstantToShow("search");
+ SetOmniboxTextAndWaitForOverlayToShow("search");
- // Stash a reference to the preview, so we can refer to it after commit.
- content::WebContents* preview_tab = instant()->GetPreviewContents();
- EXPECT_TRUE(preview_tab);
+ // Stash a reference to the overlay, so we can refer to it after commit.
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(overlay);
// The state of the searchbox before the commit.
- EXPECT_TRUE(UpdateSearchState(preview_tab));
+ EXPECT_TRUE(UpdateSearchState(overlay));
EXPECT_EQ("search", value_);
EXPECT_FALSE(verbatim_);
EXPECT_EQ(0, oncancelcalls_);
EXPECT_EQ(1, onvisibilitycalls_);
- // Before the commit, the active tab is the NTP (i.e., not Instant).
+ // Before the commit, the active tab is a blank page (i.e., not Instant).
content::WebContents* active_tab =
browser()->tab_strip_model()->GetActiveWebContents();
- EXPECT_NE(preview_tab, active_tab);
+ EXPECT_NE(overlay, active_tab);
EXPECT_EQ(1, active_tab->GetController().GetEntryCount());
EXPECT_EQ(std::string(chrome::kAboutBlankURL),
omnibox()->model()->PermanentURL().spec());
- // Commit the search by clicking on the preview.
+ // Commit the search by clicking on the overlay.
ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER);
// After the commit, Instant should not be showing.
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
-
- // The old overlay is deleted and a new one is created.
- EXPECT_TRUE(instant()->GetPreviewContents());
- EXPECT_NE(instant()->GetPreviewContents(), preview_tab);
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
- // Check that the current active tab is indeed what was once the preview.
- EXPECT_EQ(preview_tab, browser()->tab_strip_model()->GetActiveWebContents());
+ // Check that the current active tab is indeed what was once the overlay.
+ EXPECT_EQ(overlay, browser()->tab_strip_model()->GetActiveWebContents());
- // We should have two navigation entries, one for the NTP, and one for the
- // Instant search that was committed.
- EXPECT_EQ(2, preview_tab->GetController().GetEntryCount());
+ // We should have two navigation entries, one for the blank page, and one for
+ // the Instant search that was committed.
+ EXPECT_EQ(2, overlay->GetController().GetEntryCount());
// Check that the omnibox contains the Instant URL we loaded.
- EXPECT_EQ(instant_url_, omnibox()->model()->PermanentURL());
+ EXPECT_EQ(instant_url(), omnibox()->model()->PermanentURL());
- // Check that the searchbox API values have been reset.
- std::string value;
- EXPECT_TRUE(GetStringFromJS(preview_tab,
- "chrome.embeddedSearch.searchBox.value", &value));
- EXPECT_EQ("", value);
-
- // However, the page should've correctly received the committed query.
- EXPECT_TRUE(UpdateSearchState(preview_tab));
+ // The page should've correctly received the committed query.
+ EXPECT_TRUE(UpdateSearchState(overlay));
EXPECT_EQ("search", value_);
EXPECT_TRUE(verbatim_);
EXPECT_EQ(1, oncancelcalls_);
EXPECT_EQ(1, onvisibilitycalls_);
}
-// Test that the onreisze event is dispatched upon typing in the omnibox.
+// Test that the onresize event is dispatched upon typing in the omnibox.
IN_PROC_BROWSER_TEST_F(InstantTest, OnResizeEvent) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
-
FocusOmniboxAndWaitForInstantSupport();
+ content::WebContents* overlay = service()->loader()->contents();
- EXPECT_TRUE(UpdateSearchState(instant()->GetPreviewContents()));
+ EXPECT_TRUE(UpdateSearchState(overlay));
EXPECT_EQ(0, onresizecalls_);
EXPECT_EQ(0, height_);
// Type a query into the omnibox. This should cause an onresize() event, with
// a valid (non-zero) height.
- SetOmniboxTextAndWaitForInstantToShow("search");
+ SetOmniboxTextAndWaitForOverlayToShow("search");
+ EXPECT_EQ(overlay, instant()->GetOverlayContents());
- EXPECT_TRUE(UpdateSearchState(instant()->GetPreviewContents()));
+ EXPECT_TRUE(UpdateSearchState(overlay));
EXPECT_EQ(1, onresizecalls_);
EXPECT_LT(0, height_);
}
@@ -306,11 +283,8 @@ IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsCompletedNow) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
FocusOmniboxAndWaitForInstantSupport();
- // Tell the JS to request the given behavior.
- EXPECT_TRUE(ExecuteScript("behavior = 'now'"));
-
// Type a query, causing the hardcoded "query suggestion" to be returned.
- SetOmniboxTextAndWaitForInstantToShow("query");
+ SetOmniboxTextAndWaitForOverlayToShow("query");
// Get what's showing in the omnibox, and what's highlighted.
string16 text = omnibox()->GetText();
@@ -324,39 +298,17 @@ IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsCompletedNow) {
EXPECT_EQ(ASCIIToUTF16(""), omnibox()->GetInstantSuggestion());
}
-// Test that the INSTANT_COMPLETE_NEVER behavior works as expected.
-IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsCompletedNever) {
- ASSERT_NO_FATAL_FAILURE(SetupInstant());
- FocusOmniboxAndWaitForInstantSupport();
-
- // Tell the JS to request the given behavior.
- EXPECT_TRUE(ExecuteScript("behavior = 'never'"));
-
- // Type a query, causing the hardcoded "query suggestion" to be returned.
- SetOmniboxTextAndWaitForInstantToShow("query");
-
- // Get what's showing in the omnibox, and what's highlighted.
- string16 text = omnibox()->GetText();
- size_t start = 0, end = 0;
- omnibox()->GetSelectionBounds(&start, &end);
- if (start > end)
- std::swap(start, end);
-
- EXPECT_EQ(ASCIIToUTF16("query"), text);
- EXPECT_EQ(ASCIIToUTF16(""), text.substr(start, end - start));
- EXPECT_EQ(ASCIIToUTF16(" suggestion"), omnibox()->GetInstantSuggestion());
-}
-
// Test that a valid suggestion is accepted.
IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsValidObject) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
FocusOmniboxAndWaitForInstantSupport();
// Tell the JS to use the given suggestion.
- EXPECT_TRUE(ExecuteScript("suggestion = [ { value: 'query completion' } ]"));
+ EXPECT_TRUE(content::ExecuteScript(service()->loader()->contents(),
+ "suggestion = { suggestions: [ { value: 'query completion' } ] }"));
// Type a query, causing "query completion" to be returned as the suggestion.
- SetOmniboxTextAndWaitForInstantToShow("query");
+ SetOmniboxTextAndWaitForOverlayToShow("query");
EXPECT_EQ(ASCIIToUTF16("query completion"), omnibox()->GetText());
}
@@ -366,32 +318,38 @@ IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsInvalidObject) {
FocusOmniboxAndWaitForInstantSupport();
// Tell the JS to use an object in an invalid format.
- EXPECT_TRUE(ExecuteScript("suggestion = { value: 'query completion' }"));
+ EXPECT_TRUE(content::ExecuteScript(service()->loader()->contents(),
+ "suggestion = { suggestions: { value: 'query completion' } }"));
// Type a query, but expect no suggestion.
- SetOmniboxTextAndWaitForInstantToShow("query");
+ SetOmniboxTextAndWaitForOverlayToShow("query");
EXPECT_EQ(ASCIIToUTF16("query"), omnibox()->GetText());
}
// Test that various forms of empty suggestions are rejected.
IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsEmpty) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
- FocusOmniboxAndWaitForInstantSupport();
- EXPECT_TRUE(ExecuteScript("suggestion = {}"));
- SetOmniboxTextAndWaitForInstantToShow("query");
+ FocusOmniboxAndWaitForInstantSupport();
+ EXPECT_TRUE(content::ExecuteScript(service()->loader()->contents(),
+ "suggestion = {}"));
+ SetOmniboxTextAndWaitForOverlayToShow("query");
EXPECT_EQ(ASCIIToUTF16("query"), omnibox()->GetText());
omnibox()->RevertAll();
- EXPECT_TRUE(ExecuteScript("suggestion = []"));
- SetOmniboxTextAndWaitForInstantToShow("query sugg");
+ FocusOmniboxAndWaitForInstantSupport();
+ EXPECT_TRUE(content::ExecuteScript(service()->loader()->contents(),
+ "suggestion = []"));
+ SetOmniboxTextAndWaitForOverlayToShow("query sugg");
EXPECT_EQ(ASCIIToUTF16("query sugg"), omnibox()->GetText());
omnibox()->RevertAll();
- EXPECT_TRUE(ExecuteScript("suggestion = [{}]"));
- SetOmniboxTextAndWaitForInstantToShow("query suggest");
+ FocusOmniboxAndWaitForInstantSupport();
+ EXPECT_TRUE(content::ExecuteScript(service()->loader()->contents(),
+ "suggestion = [{}]"));
+ SetOmniboxTextAndWaitForOverlayToShow("query suggest");
EXPECT_EQ(ASCIIToUTF16("query suggest"), omnibox()->GetText());
}
@@ -404,20 +362,15 @@ IN_PROC_BROWSER_TEST_F(InstantTest, RejectsURLs) {
// typing them into the omnibox (without pressing Enter) and checking that
// Instant doesn't try to process them.
SetOmniboxText(chrome::kChromeUICrashURL);
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
SetOmniboxText(chrome::kChromeUIHangURL);
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
SetOmniboxText(chrome::kChromeUIKillURL);
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
- // Make sure that the URLs were never sent to the preview page.
- EXPECT_TRUE(UpdateSearchState(instant()->GetPreviewContents()));
- EXPECT_EQ("", value_);
+ EXPECT_FALSE(instant()->GetOverlayContents());
}
// Test that Instant doesn't fire for intranet paths that look like searches.
@@ -431,9 +384,8 @@ IN_PROC_BROWSER_TEST_F(InstantTest, IntranetPathLooksLikeSearch) {
ui_test_utils::NavigateToURL(browser(), GURL("http://baby/beluga"));
EXPECT_EQ(ASCIIToUTF16("baby/beluga"), omnibox()->GetText());
- EXPECT_TRUE(instant()->GetPreviewContents());
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
+ EXPECT_FALSE(instant()->GetOverlayContents());
}
// Test that transitions between searches and non-searches work as expected.
@@ -442,98 +394,68 @@ IN_PROC_BROWSER_TEST_F(InstantTest, TransitionsBetweenSearchAndURL) {
FocusOmniboxAndWaitForInstantSupport();
// Type a search, and immediately a URL, without waiting for Instant to show.
- // The page is told about the search. Though the page isn't told about the
- // subsequent URL, it invalidates the search, so a blank query is sent in its
- // place to indicate that the search is "out of date".
+ // This should cause the overlay to be discarded.
SetOmniboxText("query");
- SetOmniboxText("http://monstrous/nightmare");
- int min_onchangecalls = 2;
+ EXPECT_TRUE(instant()->GetOverlayContents());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
- EXPECT_TRUE(UpdateSearchState(instant()->GetPreviewContents()));
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
- EXPECT_EQ("", value_);
- EXPECT_LE(min_onchangecalls, onchangecalls_);
- min_onchangecalls = onchangecalls_;
+ SetOmniboxText("http://monstrous/nightmare");
+ EXPECT_FALSE(instant()->GetOverlayContents());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
// Type a search. Instant should show.
- SetOmniboxTextAndWaitForInstantToShow("search");
- ++min_onchangecalls;
+ FocusOmniboxAndWaitForInstantSupport();
+ SetOmniboxTextAndWaitForOverlayToShow("search");
+ EXPECT_TRUE(instant()->IsOverlayingSearchResults());
- EXPECT_TRUE(UpdateSearchState(instant()->GetPreviewContents()));
- EXPECT_TRUE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_search_suggestions());
+ EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents()));
EXPECT_EQ("search", value_);
- EXPECT_LE(min_onchangecalls, onchangecalls_);
- min_onchangecalls = onchangecalls_;
- // Type another URL. The preview should be hidden.
+ // Type another URL. The overlay should be hidden.
SetOmniboxText("http://terrible/terror");
- ++min_onchangecalls;
-
- EXPECT_TRUE(UpdateSearchState(instant()->GetPreviewContents()));
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
- EXPECT_EQ("", value_);
- EXPECT_LE(min_onchangecalls, onchangecalls_);
- min_onchangecalls = onchangecalls_;
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
// Type the same search as before.
- SetOmniboxTextAndWaitForInstantToShow("search");
- min_onchangecalls++;
-
- EXPECT_TRUE(UpdateSearchState(instant()->GetPreviewContents()));
- EXPECT_TRUE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_search_suggestions());
- EXPECT_EQ("search", value_);
- EXPECT_LE(min_onchangecalls, onchangecalls_);
- min_onchangecalls = onchangecalls_;
+ FocusOmniboxAndWaitForInstantSupport();
+ SetOmniboxTextAndWaitForOverlayToShow("search");
+ EXPECT_TRUE(instant()->IsOverlayingSearchResults());
// Revert the omnibox.
omnibox()->RevertAll();
- min_onchangecalls++;
-
- EXPECT_TRUE(UpdateSearchState(instant()->GetPreviewContents()));
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
- EXPECT_EQ("", value_);
- EXPECT_LE(min_onchangecalls, onchangecalls_);
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
}
// Test that Instant can't be fooled into committing a URL.
IN_PROC_BROWSER_TEST_F(InstantTest, DoesNotCommitURLsOne) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
+ FocusOmniboxAndWaitForInstantSupport();
EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
- // Type a URL. The Instant preview shouldn't be showing.
+ content::WebContents* overlay = service()->loader()->contents();
+
+ // Type a URL. The Instant overlay shouldn't be showing.
SetOmniboxText("http://deadly/nadder");
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
// Unfocus and refocus the omnibox.
ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER);
EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER));
FocusOmnibox();
- content::WebContents* preview_tab = instant()->GetPreviewContents();
- EXPECT_TRUE(preview_tab);
-
// The omnibox text hasn't changed, so Instant still shouldn't be showing.
EXPECT_EQ(ASCIIToUTF16("http://deadly/nadder"), omnibox()->GetText());
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
// Commit the URL. The omnibox should reflect the URL minus the scheme.
browser()->window()->GetLocationBar()->AcceptInput();
content::WebContents* active_tab =
browser()->tab_strip_model()->GetActiveWebContents();
- EXPECT_NE(preview_tab, active_tab);
+ EXPECT_NE(overlay, active_tab);
EXPECT_EQ(ASCIIToUTF16("deadly/nadder"), omnibox()->GetText());
// Instant shouldn't have done anything.
- EXPECT_EQ(preview_tab, instant()->GetPreviewContents());
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_EQ(overlay, service()->loader()->contents());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
}
// Test that Instant can't be fooled into committing a URL.
@@ -541,16 +463,14 @@ IN_PROC_BROWSER_TEST_F(InstantTest, DoesNotCommitURLsTwo) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
FocusOmniboxAndWaitForInstantSupport();
- // Type a query. This causes the preview to be shown.
- SetOmniboxTextAndWaitForInstantToShow("query");
+ // Type a query. This causes the overlay to be shown.
+ SetOmniboxTextAndWaitForOverlayToShow("query");
- content::WebContents* preview_tab = instant()->GetPreviewContents();
- EXPECT_TRUE(preview_tab);
+ content::WebContents* overlay = instant()->GetOverlayContents();
- // Type a URL. This causes the preview to be hidden.
+ // Type a URL. This causes the overlay to be hidden.
SetOmniboxText("http://hideous/zippleback");
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
// Pretend the omnibox got focus. It already had focus, so we are just trying
// to tickle a different code path.
@@ -561,26 +481,25 @@ IN_PROC_BROWSER_TEST_F(InstantTest, DoesNotCommitURLsTwo) {
browser()->window()->GetLocationBar()->AcceptInput();
content::WebContents* active_tab =
browser()->tab_strip_model()->GetActiveWebContents();
- EXPECT_NE(preview_tab, active_tab);
+ EXPECT_NE(overlay, active_tab);
EXPECT_EQ(ASCIIToUTF16("hideous/zippleback"), omnibox()->GetText());
// As before, Instant shouldn't have done anything.
- EXPECT_EQ(preview_tab, instant()->GetPreviewContents());
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
}
-// Test that a non-Instant search provider shows no previews.
+// Test that a non-Instant search provider shows no overlays.
IN_PROC_BROWSER_TEST_F(InstantTest, NonInstantSearchProvider) {
- instant_url_ = test_server()->GetURL("files/empty.html");
+ set_instant_url(test_server()->GetURL("files/empty.html"));
ASSERT_NO_FATAL_FAILURE(SetupInstant());
// Focus the omnibox. When the support determination response comes back,
- // Instant will destroy the non-Instant page, and attempt to recreate it.
- // We can know this happened by looking at the blacklist.
- EXPECT_EQ(0, instant()->blacklisted_urls_[instant_url_.spec()]);
+ // Instant will destroy the non-Instant page.
+ FocusOmnibox();
+ EXPECT_TRUE(service()->loader()->contents());
+
FocusOmniboxAndWaitForInstantSupport();
- EXPECT_EQ(1, instant()->blacklisted_urls_[instant_url_.spec()]);
+ EXPECT_FALSE(service()->loader()->contents());
}
// Test that the renderer doesn't crash if JavaScript is blocked.
@@ -592,43 +511,47 @@ IN_PROC_BROWSER_TEST_F(InstantTest, NoCrashOnBlockedJS) {
// Wait for notification that the Instant API has been determined. As long as
// we get the notification we're good (the renderer didn't crash).
FocusOmniboxAndWaitForInstantSupport();
+ EXPECT_FALSE(service()->loader()->contents());
}
-// Test that the preview and active tab's visibility states are set correctly.
+// Test that the overlay and active tab's visibility states are set correctly.
IN_PROC_BROWSER_TEST_F(InstantTest, PageVisibility) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
FocusOmniboxAndWaitForInstantSupport();
content::WebContents* active_tab =
browser()->tab_strip_model()->GetActiveWebContents();
- content::WebContents* preview_tab = instant()->GetPreviewContents();
+ content::WebContents* overlay = service()->loader()->contents();
- // Inititally, the active tab is showing; the preview is not.
+ // Inititally, the active tab is showing; the overlay is not.
EXPECT_TRUE(CheckVisibilityIs(active_tab, true));
- EXPECT_TRUE(CheckVisibilityIs(preview_tab, false));
+ EXPECT_TRUE(CheckVisibilityIs(overlay, false));
// Type a query and wait for Instant to show.
- SetOmniboxTextAndWaitForInstantToShow("query");
+ SetOmniboxTextAndWaitForOverlayToShow("query");
EXPECT_TRUE(CheckVisibilityIs(active_tab, true));
- EXPECT_TRUE(CheckVisibilityIs(preview_tab, true));
+ EXPECT_TRUE(CheckVisibilityIs(overlay, true));
- // Deleting the omnibox text should hide the preview.
+ // Deleting the omnibox text should hide the overlay.
SetOmniboxText("");
EXPECT_TRUE(CheckVisibilityIs(active_tab, true));
- EXPECT_TRUE(CheckVisibilityIs(preview_tab, false));
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
- // Typing a query should show the preview again.
- SetOmniboxTextAndWaitForInstantToShow("query");
+ // Typing a query should show the overlay again.
+ FocusOmniboxAndWaitForInstantSupport();
+ overlay = service()->loader()->contents();
+
+ SetOmniboxTextAndWaitForOverlayToShow("query");
EXPECT_TRUE(CheckVisibilityIs(active_tab, true));
- EXPECT_TRUE(CheckVisibilityIs(preview_tab, true));
+ EXPECT_TRUE(CheckVisibilityIs(overlay, true));
- // Commit the preview.
+ // Commit the overlay.
browser()->window()->GetLocationBar()->AcceptInput();
- EXPECT_EQ(preview_tab, browser()->tab_strip_model()->GetActiveWebContents());
- EXPECT_TRUE(CheckVisibilityIs(preview_tab, true));
+ EXPECT_EQ(overlay, browser()->tab_strip_model()->GetActiveWebContents());
+ EXPECT_TRUE(CheckVisibilityIs(overlay, true));
}
-// Test that the task manager identifies Instant's preview tab correctly.
+// Test that the task manager identifies Instant's overlay tab correctly.
IN_PROC_BROWSER_TEST_F(InstantTest, TaskManagerPrefix) {
// The browser starts with a new tab, so there's just one renderer initially.
TaskManagerModel* task_manager = TaskManager::GetInstance()->model();
@@ -636,27 +559,66 @@ IN_PROC_BROWSER_TEST_F(InstantTest, TaskManagerPrefix) {
TaskManagerBrowserTestUtil::WaitForWebResourceChange(1);
string16 prefix = l10n_util::GetStringFUTF16(
- IDS_TASK_MANAGER_INSTANT_PREVIEW_PREFIX, string16());
+ IDS_TASK_MANAGER_INSTANT_OVERLAY_PREFIX, string16());
- // There should be no Instant preview yet.
+ // There should be no Instant overlay yet.
for (int i = 0; i < task_manager->ResourceCount(); ++i) {
string16 title = task_manager->GetResourceTitle(i);
EXPECT_FALSE(StartsWith(title, prefix, true)) << title << " vs " << prefix;
}
ASSERT_NO_FATAL_FAILURE(SetupInstant());
- FocusOmnibox();
+ FocusOmniboxAndWaitForInstantSupport();
+ content::WebContents* overlay = service()->loader()->contents();
- // Now there should be two renderers, the second being the Instant preview.
+ // Now there should be two renderers, the second being the Instant overlay.
TaskManagerBrowserTestUtil::WaitForWebResourceChange(2);
- int instant_previews = 0;
+ 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(1, instant_overlays);
+
+ // Type something into the omnibox. This causes the overlay to be shown and
+ // another Instant page to be spun up in the background.
+ SetOmniboxTextAndWaitForOverlayToShow("query");
+
+ // So now there are three renderers, two of which are Instant.
+ TaskManagerBrowserTestUtil::WaitForWebResourceChange(3);
+
+ 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);
+
+ // Commit the overlay. It should now be considered a regular tab.
+ browser()->window()->GetLocationBar()->AcceptInput();
+
+ // The task manager caches titles, so we need to force the cache to clear.
+ task_manager->StopUpdating();
+ task_manager->StartUpdating();
+
+ int overlay_index = -1;
+ instant_overlays = 0;
for (int i = 0; i < task_manager->ResourceCount(); ++i) {
string16 title = task_manager->GetResourceTitle(i);
if (StartsWith(title, prefix, true))
- ++instant_previews;
+ ++instant_overlays;
+ if (task_manager->GetResourceWebContents(i) == overlay)
+ overlay_index = i;
}
- EXPECT_EQ(1, instant_previews);
+ EXPECT_EQ(1, instant_overlays);
+
+ // We should've found the overlay (which is now a committed tab).
+ EXPECT_LE(0, overlay_index);
+ string16 title = task_manager->GetResourceTitle(overlay_index);
+ EXPECT_FALSE(StartsWith(title, prefix, true)) << title << " vs " << prefix;
}
void HistoryQueryDone(base::RunLoop* run_loop,
@@ -696,7 +658,7 @@ IN_PROC_BROWSER_TEST_F(InstantTest, History) {
ui_test_utils::WaitForHistoryToLoad(history);
// Perform a search.
- SetOmniboxTextAndWaitForInstantToShow("search");
+ SetOmniboxTextAndWaitForOverlayToShow("search");
// Commit the search.
browser()->window()->GetLocationBar()->AcceptInput();
@@ -713,7 +675,7 @@ IN_PROC_BROWSER_TEST_F(InstantTest, History) {
// The Instant URL should not be in history.
base::RunLoop run_loop2;
- history->QueryURL(instant_url_, false, &consumer,
+ history->QueryURL(instant_url(), false, &consumer,
base::Bind(&HistoryQueryDone, &run_loop2, &found));
run_loop2.Run();
EXPECT_FALSE(found);
@@ -729,140 +691,128 @@ IN_PROC_BROWSER_TEST_F(InstantTest, History) {
EXPECT_EQ(ASCIIToUTF16("search"), queries[0]);
}
-// TODO(jered): Fix this test on Mac. It fails currently, but the behavior is
-// actually closer to what we'd like.
-#if defined(OS_MACOSX)
-#define MAYBE_NewWindowDismissesInstant DISABLED_NewWindowDismissesInstant
-#else
-#define MAYBE_NewWindowDismissesInstant NewWindowDismissesInstant
-#endif
-// Test that creating a new window hides any currently showing Instant preview.
-IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_NewWindowDismissesInstant) {
+// Test that creating a new window hides any currently showing Instant overlay.
+IN_PROC_BROWSER_TEST_F(InstantTest, NewWindowDismissesInstant) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
FocusOmniboxAndWaitForInstantSupport();
- SetOmniboxTextAndWaitForInstantToShow("search");
+ SetOmniboxTextAndWaitForOverlayToShow("search");
Browser* previous_window = browser();
- EXPECT_TRUE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_search_suggestions());
+ EXPECT_TRUE(instant()->IsOverlayingSearchResults());
- InstantTestModelObserver observer(instant()->model(),
- chrome::search::Mode::MODE_DEFAULT);
chrome::NewEmptyWindow(browser()->profile(),
chrome::HOST_DESKTOP_TYPE_NATIVE);
- observer.WaitUntilDesiredPreviewState();
// Even though we just created a new Browser object (for the new window), the
// browser() accessor should still give us the first window's Browser object.
EXPECT_EQ(previous_window, browser());
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
}
-// Test that the Instant overlay is recreated when all these conditions are met:
-// - The stale overlay timer has fired.
-// - The preview is not showing.
-// - The omnibox doesn't have focus.
-IN_PROC_BROWSER_TEST_F(InstantTest, InstantOverlayRefresh) {
+// Test that the Instant overlay is recreated when the stale page timer fires.
+IN_PROC_BROWSER_TEST_F(InstantTest, InstantLoaderRefresh) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
FocusOmniboxAndWaitForInstantSupport();
- // The preview is refreshed only after all three conditions above are met.
- SetOmniboxTextAndWaitForInstantToShow("query");
- instant()->overlay_->is_stale_ = true;
- instant()->ReloadOverlayIfStale();
- EXPECT_TRUE(instant()->overlay_->supports_instant());
- instant()->HideOverlay();
- EXPECT_TRUE(instant()->overlay_->supports_instant());
- instant()->OmniboxFocusChanged(OMNIBOX_FOCUS_NONE,
- OMNIBOX_FOCUS_CHANGE_EXPLICIT, NULL);
- EXPECT_FALSE(instant()->overlay_->supports_instant());
-
- // Try with a different ordering.
- SetOmniboxTextAndWaitForInstantToShow("query");
- instant()->overlay_->is_stale_ = true;
- instant()->ReloadOverlayIfStale();
- EXPECT_TRUE(instant()->overlay_->supports_instant());
- instant()->OmniboxFocusChanged(OMNIBOX_FOCUS_NONE,
- OMNIBOX_FOCUS_CHANGE_EXPLICIT, NULL);
- // TODO(sreeram): Currently, OmniboxLostFocus() calls HideOverlay(). When it
- // stops hiding the preview eventually, uncomment these two lines:
- // EXPECT_TRUE(instant()->overlay_->supports_instant());
- // instant()->HideOverlay();
- EXPECT_FALSE(instant()->overlay_->supports_instant());
+ // The timer should be running, with a non-zero delay.
+ base::Timer* timer = &service()->loader()->stale_page_timer_;
+ EXPECT_TRUE(service()->loader()->supports_instant());
+ EXPECT_TRUE(timer->IsRunning());
+ EXPECT_LT(base::TimeDelta(), timer->GetCurrentDelay());
+
+ // Restart the timer at zero delay, and wait for it to fire.
+ timer->Start(FROM_HERE, base::TimeDelta(), timer->user_task());
+ EXPECT_EQ(base::TimeDelta(), timer->GetCurrentDelay());
+ content::RunAllPendingInMessageLoop();
+
+ // The overlay was deleted and recreated, so its Instant support hasn't been
+ // determined yet. The timer would've been reset as usual.
+ EXPECT_FALSE(service()->loader()->supports_instant());
+ EXPECT_TRUE(timer->IsRunning());
+ EXPECT_LT(base::TimeDelta(), timer->GetCurrentDelay());
}
// Test that suggestions are case insensitive. http://crbug.com/150728
-IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionsAreCaseInsensitive) {
+IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionsAreCaseInsensitiveOne) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
- FocusOmniboxAndWaitForInstantSupport();
- EXPECT_TRUE(ExecuteScript("suggestion = [ { value: 'INSTANT' } ]"));
-
- SetOmniboxTextAndWaitForInstantToShow("in");
- EXPECT_EQ(ASCIIToUTF16("instant"), omnibox()->GetText());
+ const std::string script =
+ "suggestion = { suggestions: [ { value: 'INSTANT' } ] }";
+
+ const struct {
+ const char* const user_text;
+ const string16 omnibox_text;
+ } kTestCases[] = {
+ {"in", ASCIIToUTF16("instant")},
+ {"IN", ASCIIToUTF16("INSTANT")},
+ };
+
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
+ FocusOmniboxAndWaitForInstantSupport();
+ EXPECT_TRUE(content::ExecuteScript(service()->loader()->contents(),
+ script));
+ SetOmniboxTextAndWaitForOverlayToShow(kTestCases[i].user_text);
+ EXPECT_EQ(kTestCases[i].omnibox_text, omnibox()->GetText());
+ omnibox()->RevertAll();
+ }
+}
- omnibox()->RevertAll();
- SetOmniboxTextAndWaitForInstantToShow("IN");
- EXPECT_EQ(ASCIIToUTF16("INSTANT"), omnibox()->GetText());
+// Test that suggestions are case insensitive. http://crbug.com/150728
+IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionsAreCaseInsensitiveTwo) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant());
// U+0130 == LATIN CAPITAL LETTER I WITH DOT ABOVE
- EXPECT_TRUE(ExecuteScript("suggestion = [ { value: '\\u0130NSTANT' } ]"));
-
- omnibox()->RevertAll();
- SetOmniboxTextAndWaitForInstantToShow("i");
- EXPECT_EQ(WideToUTF16(L"i\u0307nstant"), omnibox()->GetText());
-
- omnibox()->RevertAll();
- SetOmniboxTextAndWaitForInstantToShow("I");
- EXPECT_EQ(WideToUTF16(L"I\u0307nstant"), omnibox()->GetText());
-
- omnibox()->RevertAll();
- SetOmniboxTextAndWaitForInstantToShow(WideToUTF8(L"i\u0307"));
- EXPECT_EQ(WideToUTF16(L"i\u0307nstant"), omnibox()->GetText());
-
- omnibox()->RevertAll();
- SetOmniboxTextAndWaitForInstantToShow(WideToUTF8(L"I\u0307"));
- EXPECT_EQ(WideToUTF16(L"I\u0307nstant"), omnibox()->GetText());
-
- omnibox()->RevertAll();
- SetOmniboxTextAndWaitForInstantToShow(WideToUTF8(L"\u0130"));
- EXPECT_EQ(WideToUTF16(L"\u0130NSTANT"), omnibox()->GetText());
-
- omnibox()->RevertAll();
- SetOmniboxTextAndWaitForInstantToShow("in");
- EXPECT_EQ(ASCIIToUTF16("in"), omnibox()->GetText());
+ const std::string script =
+ "suggestion = { suggestions: [ { value: '\\u0130NSTANT' } ] }";
+
+ const struct {
+ const std::string user_text;
+ const string16 omnibox_text;
+ } kTestCases[] = {
+ {std::string("i"), WideToUTF16(L"i\u0307nstant")},
+ {std::string("I"), WideToUTF16(L"I\u0307nstant")},
+ {WideToUTF8(L"i\u0307"), WideToUTF16(L"i\u0307nstant")},
+ {WideToUTF8(L"I\u0307"), WideToUTF16(L"I\u0307nstant")},
+ {WideToUTF8(L"\u0130"), WideToUTF16(L"\u0130NSTANT")},
+ {std::string("in"), ASCIIToUTF16("in")},
+ {std::string("IN"), ASCIIToUTF16("IN")},
+ };
+
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
+ FocusOmniboxAndWaitForInstantSupport();
+ EXPECT_TRUE(content::ExecuteScript(service()->loader()->contents(),
+ script));
+ SetOmniboxTextAndWaitForOverlayToShow(kTestCases[i].user_text);
+ EXPECT_EQ(kTestCases[i].omnibox_text, omnibox()->GetText());
+ omnibox()->RevertAll();
+ }
+}
- omnibox()->RevertAll();
- SetOmniboxTextAndWaitForInstantToShow("IN");
- EXPECT_EQ(ASCIIToUTF16("IN"), omnibox()->GetText());
+// Test that suggestions are case insensitive. http://crbug.com/150728
+IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionsAreCaseInsensitiveThree) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant());
+ FocusOmniboxAndWaitForInstantSupport();
// Check that a d with a dot above and below it is completed regardless of
// how that is encoded.
// U+1E0D = LATIN SMALL LETTER D WITH DOT BELOW
// U+1E0B = LATIN SMALL LETTER D WITH DOT ABOVE
- EXPECT_TRUE(ExecuteScript("suggestion = [ { value: '\\u1e0d\\u0307oh' } ]"));
-
- omnibox()->RevertAll();
- SetOmniboxTextAndWaitForInstantToShow(WideToUTF8(L"\u1e0b\u0323"));
+ EXPECT_TRUE(content::ExecuteScript(service()->loader()->contents(),
+ "suggestion = { suggestions: [ { value: '\\u1e0d\\u0307oh' } ] }"));
+ SetOmniboxTextAndWaitForOverlayToShow(WideToUTF8(L"\u1e0b\u0323"));
EXPECT_EQ(WideToUTF16(L"\u1e0b\u0323oh"), omnibox()->GetText());
}
-// Flakes on Windows and Mac: http://crbug.com/170677
-#if defined(OS_WIN) || defined(OS_MACOSX)
-#define MAYBE_CommitInNewTab DISABLED_CommitInNewTab
-#else
-#define MAYBE_CommitInNewTab CommitInNewTab
-#endif
-// Test that the preview can be committed onto a new tab.
-IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_CommitInNewTab) {
+// Test that the overlay can be committed onto a new tab.
+IN_PROC_BROWSER_TEST_F(InstantTest, CommitInNewTab) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
FocusOmniboxAndWaitForInstantSupport();
// Use the Instant page as the active tab, so we can exploit its visibility
// handler to check visibility transitions.
- ui_test_utils::NavigateToURL(browser(), instant_url_);
+ EXPECT_EQ(1, browser()->tab_strip_model()->count());
+ ui_test_utils::NavigateToURL(browser(), instant_url());
content::WebContents* active_tab =
browser()->tab_strip_model()->GetActiveWebContents();
@@ -871,23 +821,23 @@ IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_CommitInNewTab) {
&active_tab_onvisibilitycalls));
EXPECT_EQ(0, active_tab_onvisibilitycalls);
- SetOmniboxTextAndWaitForInstantToShow("search");
+ SetOmniboxTextAndWaitForOverlayToShow("search");
- // Stash a reference to the preview, so we can refer to it after commit.
- content::WebContents* preview_tab = instant()->GetPreviewContents();
- EXPECT_TRUE(preview_tab);
+ // Stash a reference to the overlay, so we can refer to it after commit.
+ content::WebContents* overlay = instant()->GetOverlayContents();
+ EXPECT_TRUE(overlay);
// The state of the searchbox before the commit.
- EXPECT_TRUE(UpdateSearchState(preview_tab));
+ EXPECT_TRUE(UpdateSearchState(overlay));
EXPECT_EQ("search", value_);
EXPECT_FALSE(verbatim_);
EXPECT_EQ(0, onsubmitcalls_);
EXPECT_EQ(1, onvisibilitycalls_);
// The state of the active tab before the commit.
- EXPECT_NE(preview_tab, active_tab);
+ EXPECT_NE(overlay, active_tab);
EXPECT_EQ(2, active_tab->GetController().GetEntryCount());
- EXPECT_EQ(instant_url_, omnibox()->model()->PermanentURL());
+ EXPECT_EQ(instant_url(), omnibox()->model()->PermanentURL());
active_tab_onvisibilitycalls = -1;
EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls",
&active_tab_onvisibilitycalls));
@@ -897,113 +847,90 @@ IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_CommitInNewTab) {
omnibox()->model()->AcceptInput(NEW_FOREGROUND_TAB, false);
// After the commit, Instant should not be showing.
- EXPECT_FALSE(instant()->IsPreviewingSearchResults());
- EXPECT_TRUE(instant()->model()->mode().is_default());
-
- // The old overlay is deleted and a new one is created.
- EXPECT_TRUE(instant()->GetPreviewContents());
- EXPECT_NE(instant()->GetPreviewContents(), preview_tab);
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
// Check that we have two tabs and that the new active tab is indeed what was
- // once the preview. The preview tab should have just one navigation entry,
+ // once the overlay. The overlay tab should have just one navigation entry,
// for the Instant search that was committed.
EXPECT_EQ(2, browser()->tab_strip_model()->count());
- EXPECT_EQ(preview_tab, browser()->tab_strip_model()->GetActiveWebContents());
- EXPECT_EQ(1, preview_tab->GetController().GetEntryCount());
+ EXPECT_EQ(overlay, browser()->tab_strip_model()->GetActiveWebContents());
+ EXPECT_EQ(1, overlay->GetController().GetEntryCount());
// Check that the omnibox contains the Instant URL we loaded.
- EXPECT_EQ(instant_url_, omnibox()->model()->PermanentURL());
+ EXPECT_EQ(instant_url(), omnibox()->model()->PermanentURL());
- // Check that the searchbox API values have been reset.
- std::string value;
- EXPECT_TRUE(GetStringFromJS(preview_tab,
- "chrome.embeddedSearch.searchBox.value", &value));
- EXPECT_EQ("", value);
-
- // However, the page should've correctly received the committed query.
- EXPECT_TRUE(UpdateSearchState(preview_tab));
+ // The page should've correctly received the committed query.
+ EXPECT_TRUE(UpdateSearchState(overlay));
EXPECT_EQ("search", value_);
EXPECT_TRUE(verbatim_);
EXPECT_EQ(1, onsubmitcalls_);
EXPECT_EQ(1, onvisibilitycalls_);
// The ex-active tab should've gotten a visibility change marking it hidden.
- EXPECT_NE(active_tab, preview_tab);
+ EXPECT_NE(overlay, active_tab);
EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls",
&active_tab_onvisibilitycalls));
EXPECT_EQ(1, active_tab_onvisibilitycalls);
}
-// Test that suggestions are reusable.
-IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionsAreReusable) {
+// Test that the Instant overlay is recreated if it gets destroyed.
+IN_PROC_BROWSER_TEST_F(InstantTest, InstantRenderViewGone) {
ASSERT_NO_FATAL_FAILURE(SetupInstant());
- FocusOmniboxAndWaitForInstantSupport();
-
- EXPECT_TRUE(ExecuteScript("suggestion = [ { value: 'instant' } ];"
- "behavior = 'never';"));
- SetOmniboxTextAndWaitForInstantToShow("in");
- EXPECT_EQ(ASCIIToUTF16("stant"), omnibox()->GetInstantSuggestion());
+ // Get the overlay to show.
+ FocusOmniboxAndWaitForInstantSupport();
+ SetOmniboxTextAndWaitForOverlayToShow("search");
+ EXPECT_TRUE(instant()->IsOverlayingSearchResults());
- SetOmniboxText("ins");
- EXPECT_EQ(ASCIIToUTF16("tant"), omnibox()->GetInstantSuggestion());
+ InstantModel desired_model(service());
+ desired_model.SetOverlayState(NULL, 0, false);
+ InstantTestModelObserver observer(instant(), &desired_model);
- SetOmniboxText("in");
- EXPECT_EQ(ASCIIToUTF16("stant"), omnibox()->GetInstantSuggestion());
+ // Kill the overlay's renderer.
+ KillOverlayRenderView();
- SetOmniboxText("insane");
- EXPECT_EQ(ASCIIToUTF16(""), omnibox()->GetInstantSuggestion());
-}
-
-// Test that instant overlay is recreated if it gets destroyed.
-IN_PROC_BROWSER_TEST_F(InstantTest, InstantRenderViewGone) {
- ASSERT_NO_FATAL_FAILURE(SetupInstant());
- FocusOmniboxAndWaitForInstantSupport();
-
- // Type partial query, get suggestion to show.
- SetOmniboxTextAndWaitForInstantToShow("q");
- EXPECT_EQ(ASCIIToUTF16("query suggestion"), omnibox()->GetText());
+ // Wait for the overlay to disappear.
+ observer.WaitForDesiredOverlayState();
+ EXPECT_FALSE(instant()->IsOverlayingSearchResults());
+ EXPECT_FALSE(instant()->GetOverlayContents());
- // Kill the instant renderer and wait for instant support again.
- KillInstantRenderView();
+ // Tickle the loader into recreating an overlay.
FocusOmniboxAndWaitForInstantSupport();
- SetOmniboxTextAndWaitForInstantToShow("qu");
+ // Continue typing. The overlay should show again, and set suggestions.
+ SetOmniboxTextAndWaitForOverlayToShow("query");
+ EXPECT_TRUE(instant()->IsOverlayingSearchResults());
EXPECT_EQ(ASCIIToUTF16("query suggestion"), omnibox()->GetText());
}
IN_PROC_BROWSER_TEST_F(InstantTest, ProcessIsolation) {
// Prior to setup no render process is dedicated to Instant.
- InstantService* instant_service =
- InstantServiceFactory::GetForProfile(browser()->profile());
- ASSERT_NE(static_cast<InstantService*>(NULL), instant_service);
- EXPECT_EQ(0, instant_service->GetInstantProcessCount());
+ EXPECT_EQ(0, service()->GetInstantProcessCount());
// Setup Instant.
ASSERT_NO_FATAL_FAILURE(SetupInstant());
FocusOmniboxAndWaitForInstantSupport();
// Now there should be a registered Instant render process.
- EXPECT_LT(0, instant_service->GetInstantProcessCount());
+ EXPECT_EQ(1, service()->GetInstantProcessCount());
- // And the Instant preview should live inside it.
- content::WebContents* preview = instant()->GetPreviewContents();
- EXPECT_TRUE(instant_service->IsInstantProcess(
- preview->GetRenderProcessHost()->GetID()));
+ // And the Instant overlay should live inside it.
+ content::WebContents* overlay = service()->loader()->contents();
+ EXPECT_TRUE(
+ service()->IsInstantProcess(overlay->GetRenderProcessHost()->GetID()));
// Search and commit the search by pressing Alt-Enter.
- SetOmniboxTextAndWaitForInstantToShow("tractor");
+ SetOmniboxTextAndWaitForOverlayToShow("tractor");
omnibox()->model()->AcceptInput(NEW_FOREGROUND_TAB, false);
- // The committed search results page should also live inside the
- // Instant process.
+ // The committed results page should also live inside the Instant process.
content::WebContents* active_tab =
browser()->tab_strip_model()->GetActiveWebContents();
- EXPECT_TRUE(instant_service->IsInstantProcess(
- active_tab->GetRenderProcessHost()->GetID()));
+ EXPECT_TRUE(
+ service()->IsInstantProcess(active_tab->GetRenderProcessHost()->GetID()));
// Navigating away should change the process.
ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL));
- EXPECT_FALSE(instant_service->IsInstantProcess(
- active_tab->GetRenderProcessHost()->GetID()));
+ EXPECT_FALSE(
+ service()->IsInstantProcess(active_tab->GetRenderProcessHost()->GetID()));
}

Powered by Google App Engine
This is Rietveld 408576698