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

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

Issue 11233076: Fix spurious visibility events when committing Instant. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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 5948c7893f570948ba10d29436e1a031f416c2bd..576dc567e0c5a67920656d8c02c4e8bd5a73d6b4 100644
--- a/chrome/browser/instant/instant_browsertest.cc
+++ b/chrome/browser/instant/instant_browsertest.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/ui/omnibox/location_bar.h"
#include "chrome/browser/ui/omnibox/omnibox_view.h"
#include "chrome/browser/ui/tab_contents/tab_contents.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/test/base/in_process_browser_test.h"
@@ -143,7 +144,8 @@ class InstantTest : public InProcessBrowserTest {
bool UpdateSearchState(TabContents* tab) WARN_UNUSED_RESULT {
content::RenderViewHost* rvh = tab->web_contents()->GetRenderViewHost();
- return GetIntFromJS(rvh, "onchangecalls", &onchangecalls_) &&
+ return GetIntFromJS(rvh, "onvisibilitycalls", &onvisibilitycalls_) &&
+ GetIntFromJS(rvh, "onchangecalls", &onchangecalls_) &&
GetIntFromJS(rvh, "onsubmitcalls", &onsubmitcalls_) &&
GetIntFromJS(rvh, "oncancelcalls", &oncancelcalls_) &&
GetIntFromJS(rvh, "onresizecalls", &onresizecalls_) &&
@@ -169,6 +171,7 @@ class InstantTest : public InProcessBrowserTest {
actual == expected;
}
+ int onvisibilitycalls_;
int onchangecalls_;
int onsubmitcalls_;
int oncancelcalls_;
@@ -267,6 +270,7 @@ IN_PROC_BROWSER_TEST_F(InstantTest, OnSubmitEvent) {
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).
TabContents* active_tab = chrome::GetActiveTabContents(browser());
@@ -310,12 +314,14 @@ IN_PROC_BROWSER_TEST_F(InstantTest, OnSubmitEvent) {
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.
IN_PROC_BROWSER_TEST_F(InstantTest, OnCancelEvent) {
ASSERT_NO_FATAL_FAILURE(SetupInstant("instant.html"));
EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
+ FocusOmniboxAndWaitForInstantSupport();
SetOmniboxTextAndWaitForInstantToShow("search");
// Stash a reference to the preview, so we can refer to it after commit.
@@ -327,6 +333,7 @@ IN_PROC_BROWSER_TEST_F(InstantTest, OnCancelEvent) {
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).
TabContents* active_tab = chrome::GetActiveTabContents(browser());
@@ -370,6 +377,7 @@ IN_PROC_BROWSER_TEST_F(InstantTest, OnCancelEvent) {
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.
@@ -873,6 +881,7 @@ IN_PROC_BROWSER_TEST_F(InstantTest, History) {
IN_PROC_BROWSER_TEST_F(InstantTest, NewWindowDismissesInstant) {
ASSERT_NO_FATAL_FAILURE(SetupInstant("instant.html"));
EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
+ FocusOmniboxAndWaitForInstantSupport();
SetOmniboxTextAndWaitForInstantToShow("search");
Browser* previous_window = browser();
@@ -972,3 +981,65 @@ IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionsAreCaseInsensitive) {
SetOmniboxTextAndWaitForInstantToShow(WideToUTF8(L"\u1e0b\u0323"));
EXPECT_EQ(WideToUTF16(L"\u1e0b\u0323oh"), omnibox()->GetText());
}
+
+// Test that the preview can be committed onto a new tab.
+IN_PROC_BROWSER_TEST_F(InstantTest, CommitInNewTab) {
+ ASSERT_NO_FATAL_FAILURE(SetupInstant("instant.html"));
+ FocusOmniboxAndWaitForInstantSupport();
+ SetOmniboxTextAndWaitForInstantToShow("search");
+
+ // Stash a reference to the preview, so we can refer to it after commit.
+ TabContents* preview_tab = instant()->GetPreviewContents();
+ EXPECT_TRUE(preview_tab);
+
+ // The state of the searchbox before the commit.
+ EXPECT_TRUE(UpdateSearchState(preview_tab));
+ 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).
+ TabContents* active_tab = chrome::GetActiveTabContents(browser());
+ EXPECT_NE(preview_tab, active_tab);
+ EXPECT_EQ(1, active_tab->web_contents()->GetController().GetEntryCount());
+ EXPECT_EQ(std::string(chrome::kAboutBlankURL),
+ omnibox()->model()->PermanentURL().spec());
+
+ // Commit the search by pressing Alt-Enter.
+ omnibox()->model()->AcceptInput(NEW_FOREGROUND_TAB, false);
+
+ // After the commit, Instant should not be showing.
+ EXPECT_FALSE(instant()->IsCurrent());
+ EXPECT_FALSE(instant()->model()->is_ready());
+
+ // The old loader is deleted and a new one is created.
+ EXPECT_TRUE(instant()->GetPreviewContents());
+ EXPECT_NE(instant()->GetPreviewContents(), preview_tab);
+
+ // Check that we have two tabs and that the active tab is indeed what was once
+ // the preview. The preview 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, chrome::GetActiveTabContents(browser()));
+ EXPECT_EQ(1, preview_tab->web_contents()->GetController().GetEntryCount());
+
+ // Check that the omnibox contains the Instant URL we loaded.
+ std::string instant_url = TemplateURLServiceFactory::GetForProfile(
+ browser()->profile())->GetDefaultSearchProvider()->instant_url_ref().
+ ReplaceSearchTerms(TemplateURLRef::SearchTermsArgs(string16()));
+ EXPECT_EQ(instant_url, omnibox()->model()->PermanentURL().spec());
+
+ // Check that the searchbox API values have been reset.
+ std::string value;
+ EXPECT_TRUE(GetStringFromJS(preview_tab->web_contents()->GetRenderViewHost(),
+ "chrome.searchBox.value", &value));
+ EXPECT_EQ("", value);
+
+ // However, the page should've correctly received the committed query.
+ EXPECT_TRUE(UpdateSearchState(preview_tab));
+ EXPECT_EQ("search", value_);
+ EXPECT_TRUE(verbatim_);
+ EXPECT_EQ(1, onsubmitcalls_);
+ EXPECT_EQ(1, onvisibilitycalls_);
+}
« no previous file with comments | « no previous file | chrome/browser/instant/instant_controller.cc » ('j') | chrome/browser/instant/instant_controller.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698