| Index: chrome/browser/instant/instant_browsertest.cc
|
| diff --git a/chrome/browser/instant/instant_browsertest.cc b/chrome/browser/instant/instant_browsertest.cc
|
| index f362158d8662849d4659af10ac2bf029c4eabdb2..8fb61f8b0f4c6ae2c2e5490307032fb8af2fa3db 100644
|
| --- a/chrome/browser/instant/instant_browsertest.cc
|
| +++ b/chrome/browser/instant/instant_browsertest.cc
|
| @@ -66,22 +66,36 @@ class InstantTest : public InProcessBrowserTest {
|
| ASSERT_TRUE(location_bar_);
|
| }
|
|
|
| + TabContentsWrapper* GetPendingPreviewContents() {
|
| + return browser()->instant()->GetPendingPreviewContents();
|
| + }
|
| +
|
| // Type a character to get instant to trigger.
|
| void SetupLocationBar() {
|
| FindLocationBar();
|
| location_bar_->location_entry()->SetUserText(L"a");
|
| }
|
|
|
| - // Wait for instant to load and ensure it is in the state we expect.
|
| - void SetupPreview() {
|
| - preview_ = browser()->instant()->GetPreviewContents()->tab_contents();
|
| + // Waits for preview to be shown.
|
| + void WaitForPreviewToNavigate(bool use_current) {
|
| + InstantController* instant = browser()->instant();
|
| + ASSERT_TRUE(instant);
|
| + TabContentsWrapper* tab = use_current ?
|
| + instant->GetPreviewContents() : GetPendingPreviewContents();
|
| + ASSERT_TRUE(tab);
|
| + preview_ = tab->tab_contents();
|
| ASSERT_TRUE(preview_);
|
| ui_test_utils::WaitForNavigation(&preview_->controller());
|
| + }
|
| +
|
| + // Wait for instant to load and ensure it is in the state we expect.
|
| + void SetupPreview() {
|
| + // Wait for the preview to navigate.
|
| + WaitForPreviewToNavigate(true);
|
|
|
| - // Verify the initial setup of the search box.
|
| - ASSERT_TRUE(browser()->instant());
|
| EXPECT_TRUE(browser()->instant()->IsShowingInstant());
|
| - EXPECT_FALSE(browser()->instant()->is_active());
|
| + EXPECT_FALSE(browser()->instant()->is_displayable());
|
| + EXPECT_TRUE(browser()->instant()->is_active());
|
|
|
| // When the page loads, the initial searchBox values are set and only a
|
| // resize will have been sent.
|
| @@ -152,6 +166,13 @@ class InstantTest : public InProcessBrowserTest {
|
| EXPECT_EQ(expected, result);
|
| }
|
|
|
| + // Sends a message to the renderer and waits for the response to come back to
|
| + // the browser.
|
| + void WaitForMessageToBeProcessedByRenderer(TabContentsWrapper* tab) {
|
| + ASSERT_NO_FATAL_FAILURE(
|
| + CheckBoolValueFromJavascript(true, "true", tab->tab_contents()));
|
| + }
|
| +
|
| protected:
|
| virtual void SetUpCommandLine(CommandLine* command_line) {
|
| command_line->AppendSwitch(switches::kEnablePredictiveInstant);
|
| @@ -185,6 +206,94 @@ IN_PROC_BROWSER_TEST_F(InstantTest, OnChangeEvent) {
|
| 1, "window.onchangecalls", preview_));
|
| }
|
|
|
| +// Verify instant preview is shown correctly for a non-search query.
|
| +IN_PROC_BROWSER_TEST_F(InstantTest, ShowPreviewNonSearch) {
|
| + ASSERT_TRUE(test_server()->Start());
|
| + GURL url(test_server()->GetURL("files/instant/empty.html"));
|
| + ASSERT_NO_FATAL_FAILURE(SetLocationBarText(UTF8ToWide(url.spec())));
|
| + // The preview should be active and showing.
|
| + ASSERT_TRUE(browser()->instant()->is_active());
|
| + ASSERT_TRUE(browser()->instant()->is_displayable());
|
| + ASSERT_TRUE(browser()->instant()->IsCurrent());
|
| + ASSERT_TRUE(browser()->instant()->GetPreviewContents());
|
| + RenderWidgetHostView* rwhv =
|
| + browser()->instant()->GetPreviewContents()->tab_contents()->
|
| + GetRenderWidgetHostView();
|
| + ASSERT_TRUE(rwhv);
|
| + ASSERT_TRUE(rwhv->IsShowing());
|
| +}
|
| +
|
| +// Transition from non-search to search and make sure everything is shown
|
| +// correctly.
|
| +IN_PROC_BROWSER_TEST_F(InstantTest, NonSearchToSearch) {
|
| + ASSERT_TRUE(test_server()->Start());
|
| + GURL url(test_server()->GetURL("files/instant/empty.html"));
|
| + ASSERT_NO_FATAL_FAILURE(SetLocationBarText(UTF8ToWide(url.spec())));
|
| + // The preview should be active and showing.
|
| + ASSERT_TRUE(browser()->instant()->is_active());
|
| + ASSERT_TRUE(browser()->instant()->is_displayable());
|
| + TabContentsWrapper* initial_tab = browser()->instant()->GetPreviewContents();
|
| + ASSERT_TRUE(initial_tab);
|
| + RenderWidgetHostView* rwhv =
|
| + initial_tab->tab_contents()->GetRenderWidgetHostView();
|
| + ASSERT_TRUE(rwhv);
|
| + ASSERT_TRUE(rwhv->IsShowing());
|
| +
|
| + // Now type in some search text.
|
| + ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html"));
|
| + location_bar_->location_entry()->SetUserText(L"abc");
|
| +
|
| + // Wait for the preview to navigate.
|
| + ASSERT_NO_FATAL_FAILURE(WaitForPreviewToNavigate(false));
|
| +
|
| + // The controller is still determining if the provider really supports
|
| + // instant. As a result the tabcontents should not have changed.
|
| + TabContentsWrapper* current_tab = browser()->instant()->GetPreviewContents();
|
| + ASSERT_EQ(current_tab, initial_tab);
|
| + // The preview should still be showing.
|
| + rwhv = current_tab->tab_contents()->GetRenderWidgetHostView();
|
| + ASSERT_TRUE(rwhv);
|
| + ASSERT_TRUE(rwhv->IsShowing());
|
| +
|
| + // Use MightSupportInstant as the controller is still determining if the
|
| + // page supports instant and hasn't actually commited yet.
|
| + EXPECT_TRUE(browser()->instant()->MightSupportInstant());
|
| +
|
| + // Instant should still be active.
|
| + EXPECT_TRUE(browser()->instant()->is_active());
|
| + EXPECT_TRUE(browser()->instant()->is_displayable());
|
| +
|
| + // Because we're waiting on the page, instant isn't current.
|
| + ASSERT_FALSE(browser()->instant()->IsCurrent());
|
| +
|
| + // Bounce a message to the renderer so that we know the instant has gotten a
|
| + // response back from the renderer as to whether the page supports instant.
|
| + ASSERT_NO_FATAL_FAILURE(
|
| + WaitForMessageToBeProcessedByRenderer(GetPendingPreviewContents()));
|
| +
|
| + // Reset the user text so that the page is told the text changed. We should be
|
| + // able to nuke this once 66104 is fixed.
|
| + location_bar_->location_entry()->SetUserText(L"abcd");
|
| +
|
| + // Wait for the renderer to process it.
|
| + ASSERT_NO_FATAL_FAILURE(
|
| + WaitForMessageToBeProcessedByRenderer(GetPendingPreviewContents()));
|
| +
|
| + // We should have gotten a response back from the renderer that resulted in
|
| + // committing.
|
| + ASSERT_FALSE(GetPendingPreviewContents());
|
| + ASSERT_TRUE(browser()->instant()->is_active());
|
| + ASSERT_TRUE(browser()->instant()->is_displayable());
|
| + TabContentsWrapper* new_tab = browser()->instant()->GetPreviewContents();
|
| + ASSERT_TRUE(new_tab);
|
| + ASSERT_NE(new_tab, initial_tab);
|
| + RenderWidgetHostView* new_rwhv =
|
| + new_tab->tab_contents()->GetRenderWidgetHostView();
|
| + ASSERT_TRUE(new_rwhv);
|
| + ASSERT_NE(new_rwhv, rwhv);
|
| + ASSERT_TRUE(new_rwhv->IsShowing());
|
| +}
|
| +
|
| // Makes sure that if the server doesn't support the instant API we don't show
|
| // anything.
|
| IN_PROC_BROWSER_TEST_F(InstantTest, SearchServerDoesntSupportInstant) {
|
| @@ -198,26 +307,29 @@ IN_PROC_BROWSER_TEST_F(InstantTest, SearchServerDoesntSupportInstant) {
|
| EXPECT_TRUE(browser()->instant()->IsShowingInstant());
|
| // But because we're waiting to determine if the page really supports instant
|
| // we shouldn't be showing the preview.
|
| - EXPECT_FALSE(browser()->instant()->is_active());
|
| + EXPECT_FALSE(browser()->instant()->is_displayable());
|
| + // But instant should still be active.
|
| + EXPECT_TRUE(browser()->instant()->is_active());
|
|
|
| // When the response comes back that the page doesn't support instant the tab
|
| // should be closed.
|
| ui_test_utils::WaitForNotification(NotificationType::TAB_CLOSED);
|
| EXPECT_FALSE(browser()->instant()->IsShowingInstant());
|
| - EXPECT_FALSE(browser()->instant()->is_active());
|
| + EXPECT_FALSE(browser()->instant()->is_displayable());
|
| + EXPECT_TRUE(browser()->instant()->is_active());
|
| + EXPECT_FALSE(browser()->instant()->IsCurrent());
|
| }
|
|
|
| // Verifies transitioning from loading a non-search string to a search string
|
| // with the provider not supporting instant works (meaning we don't display
|
| // anything).
|
| -// Flaky, http://crbug.com/66539.
|
| -IN_PROC_BROWSER_TEST_F(InstantTest,
|
| - FLAKY_NonSearchToSearchDoesntSupportInstant) {
|
| +IN_PROC_BROWSER_TEST_F(InstantTest, NonSearchToSearchDoesntSupportInstant) {
|
| ASSERT_TRUE(test_server()->Start());
|
| ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("empty.html"));
|
| GURL url(test_server()->GetURL("files/instant/empty.html"));
|
| ASSERT_NO_FATAL_FAILURE(SetLocationBarText(UTF8ToWide(url.spec())));
|
| // The preview should be active and showing.
|
| + ASSERT_TRUE(browser()->instant()->is_displayable());
|
| ASSERT_TRUE(browser()->instant()->is_active());
|
| TabContentsWrapper* initial_tab = browser()->instant()->GetPreviewContents();
|
| ASSERT_TRUE(initial_tab);
|
| @@ -230,6 +342,7 @@ IN_PROC_BROWSER_TEST_F(InstantTest,
|
| location_bar_->location_entry()->SetUserText(L"a");
|
|
|
| // Instant should still be live.
|
| + ASSERT_TRUE(browser()->instant()->is_displayable());
|
| ASSERT_TRUE(browser()->instant()->is_active());
|
| // Because we typed in a search string we should think we're showing instant
|
| // results.
|
| @@ -241,7 +354,9 @@ IN_PROC_BROWSER_TEST_F(InstantTest,
|
| // should be closed.
|
| ui_test_utils::WaitForNotification(NotificationType::TAB_CLOSED);
|
| EXPECT_FALSE(browser()->instant()->IsShowingInstant());
|
| - EXPECT_FALSE(browser()->instant()->is_active());
|
| + EXPECT_FALSE(browser()->instant()->is_displayable());
|
| + // But because the omnibox is still open, instant should be active.
|
| + ASSERT_TRUE(browser()->instant()->is_active());
|
| }
|
|
|
| // Verifies the page was told a non-zero height.
|
| @@ -252,7 +367,7 @@ IN_PROC_BROWSER_TEST_F(InstantTest, ValidHeight) {
|
| ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("old_api.html"));
|
| ASSERT_NO_FATAL_FAILURE(SetLocationBarText(L"a"));
|
| // The preview should be active.
|
| - ASSERT_TRUE(browser()->instant()->is_active());
|
| + ASSERT_TRUE(browser()->instant()->is_displayable());
|
| // And the height should be valid.
|
| TabContents* tab = browser()->instant()->GetPreviewContents()->tab_contents();
|
| ASSERT_NO_FATAL_FAILURE(
|
| @@ -267,6 +382,33 @@ IN_PROC_BROWSER_TEST_F(InstantTest, ValidHeight) {
|
| EXPECT_GT(height, 0);
|
| }
|
|
|
| +// Verifies that if the server returns a 403 we don't show the preview and
|
| +// query the host again.
|
| +IN_PROC_BROWSER_TEST_F(InstantTest, HideOn403) {
|
| + ASSERT_TRUE(test_server()->Start());
|
| + GURL url(test_server()->GetURL("files/instant/403.html"));
|
| + ASSERT_NO_FATAL_FAILURE(FindLocationBar());
|
| + location_bar_->location_entry()->SetUserText(UTF8ToWide(url.spec()));
|
| + // The preview shouldn't be showing, but it should be loading.
|
| + ASSERT_TRUE(browser()->instant()->GetPreviewContents());
|
| + ASSERT_TRUE(browser()->instant()->is_active());
|
| + ASSERT_FALSE(browser()->instant()->is_displayable());
|
| +
|
| + // When instant sees the 403, it should close the tab.
|
| + ui_test_utils::WaitForNotification(NotificationType::TAB_CLOSED);
|
| + ASSERT_FALSE(browser()->instant()->GetPreviewContents());
|
| + ASSERT_TRUE(browser()->instant()->is_active());
|
| + ASSERT_FALSE(browser()->instant()->is_displayable());
|
| +
|
| + // Try loading another url on the server. Instant shouldn't create a new tab
|
| + // as the server returned 403.
|
| + GURL url2(test_server()->GetURL("files/instant/empty.html"));
|
| + location_bar_->location_entry()->SetUserText(UTF8ToWide(url2.spec()));
|
| + ASSERT_FALSE(browser()->instant()->GetPreviewContents());
|
| + ASSERT_TRUE(browser()->instant()->is_active());
|
| + ASSERT_FALSE(browser()->instant()->is_displayable());
|
| +}
|
| +
|
| // Verify that the onsubmit event is dispatched upon pressing enter.
|
| // TODO(sky): Disabled, http://crbug.com/62940.
|
| IN_PROC_BROWSER_TEST_F(InstantTest, DISABLED_OnSubmitEvent) {
|
|
|