summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/browser_instant_controller_unittest.cc
diff options
context:
space:
mode:
authormathp <mathp@chromium.org>2015-02-19 16:10:05 -0800
committerCommit bot <commit-bot@chromium.org>2015-02-20 00:10:37 +0000
commit880d328f729c6986b2502467a477e8fb093b8525 (patch)
tree3f5eb320c551bcffeae660f1337119f590133b36 /chrome/browser/ui/browser_instant_controller_unittest.cc
parent4ca14cb4922b883fde5419b9b176ef58b5296bf2 (diff)
downloadchromium_src-880d328f729c6986b2502467a477e8fb093b8525.zip
chromium_src-880d328f729c6986b2502467a477e8fb093b8525.tar.gz
chromium_src-880d328f729c6986b2502467a477e8fb093b8525.tar.bz2
[Instant] Default Search Provider change redirects to local NTP in some cases
Previously, all instant renderers would reload if a search provider changed. With this patch, some of the renderers are redirected to the local NTP in the case that both the old and new search providers are google.<tld>. BUG=456681 TEST=BrowserInstantControllerTest*, InstantService* unit_tests Review URL: https://codereview.chromium.org/930853005 Cr-Commit-Position: refs/heads/master@{#317180}
Diffstat (limited to 'chrome/browser/ui/browser_instant_controller_unittest.cc')
-rw-r--r--chrome/browser/ui/browser_instant_controller_unittest.cc85
1 files changed, 63 insertions, 22 deletions
diff --git a/chrome/browser/ui/browser_instant_controller_unittest.cc b/chrome/browser/ui/browser_instant_controller_unittest.cc
index f4eaeee..077390c 100644
--- a/chrome/browser/ui/browser_instant_controller_unittest.cc
+++ b/chrome/browser/ui/browser_instant_controller_unittest.cc
@@ -36,23 +36,40 @@ class BrowserInstantControllerTest : public InstantUnitTestBase {
friend class FakeWebContentsObserver;
};
-const struct TabReloadTestCase {
+struct TabReloadTestCase {
const char* description;
const char* start_url;
bool start_in_instant_process;
bool should_reload;
+ bool end_in_local_ntp;
bool end_in_instant_process;
-} kTabReloadTestCases[] = {
+};
+
+// Test cases for when Google is the initial, but not final provider.
+const TabReloadTestCase kTabReloadTestCasesFinalProviderNotGoogle[] = {
+ {"Local Embedded NTP", chrome::kChromeSearchLocalNtpUrl,
+ true, true, true, true},
+ {"Remote Embedded NTP", "https://www.google.com/newtab",
+ true, true, false, false},
+ {"Remote Embedded SERP", "https://www.google.com/url?strk&bar=search+terms",
+ true, true, false, false},
+ {"Other NTP", "https://bar.com/newtab",
+ false, false, false, false}
+};
+
+// Test cases for when Google is both the initial and final provider.
+const TabReloadTestCase kTabReloadTestCasesFinalProviderGoogle[] = {
{"Local Embedded NTP", chrome::kChromeSearchLocalNtpUrl,
- true, true, true},
- {"Remote Embedded NTP", "https://www.google.com/instant?strk",
- true, true, false},
+ true, true, true, true},
+ {"Remote Embedded NTP", "https://www.google.com/newtab",
+ true, false, true, true},
{"Remote Embedded SERP", "https://www.google.com/url?strk&bar=search+terms",
- true, true, false},
- {"Other NTP", "https://bar.com/instant?strk",
- false, false, false}
+ true, true, false, false},
+ {"Other NTP", "https://bar.com/newtab",
+ false, false, false, false}
};
+
class FakeWebContentsObserver : public content::WebContentsObserver {
public:
explicit FakeWebContentsObserver(content::WebContents* contents)
@@ -66,16 +83,25 @@ class FakeWebContentsObserver : public content::WebContentsObserver {
content::NavigationController::ReloadType reload_type) override {
if (url_ == url)
num_reloads_++;
+ current_url_ = url;
}
const GURL url() const {
return url_;
}
+ const GURL current_url() const {
+ return contents_->GetURL();
+ }
+
int num_reloads() const {
return num_reloads_;
}
+ bool can_go_back() const {
+ return contents_->GetController().CanGoBack();
+ }
+
protected:
friend class BrowserInstantControllerTest;
FRIEND_TEST_ALL_PREFIXES(BrowserInstantControllerTest,
@@ -86,14 +112,16 @@ class FakeWebContentsObserver : public content::WebContentsObserver {
private:
content::WebContents* contents_;
const GURL& url_;
+ GURL current_url_;
int num_reloads_;
};
TEST_F(BrowserInstantControllerTest, DefaultSearchProviderChanged) {
- size_t num_tests = arraysize(kTabReloadTestCases);
+ size_t num_tests = arraysize(kTabReloadTestCasesFinalProviderNotGoogle);
ScopedVector<FakeWebContentsObserver> observers;
for (size_t i = 0; i < num_tests; ++i) {
- const TabReloadTestCase& test = kTabReloadTestCases[i];
+ const TabReloadTestCase& test =
+ kTabReloadTestCasesFinalProviderNotGoogle[i];
AddTab(browser(), GURL(test.start_url));
content::WebContents* contents =
browser()->tab_strip_model()->GetActiveWebContents();
@@ -112,27 +140,34 @@ TEST_F(BrowserInstantControllerTest, DefaultSearchProviderChanged) {
for (size_t i = 0; i < num_tests; ++i) {
FakeWebContentsObserver* observer = observers[i];
- const TabReloadTestCase& test = kTabReloadTestCases[i];
+ const TabReloadTestCase& test =
+ kTabReloadTestCasesFinalProviderNotGoogle[i];
if (test.should_reload) {
// Validate final instant state.
EXPECT_EQ(
test.end_in_instant_process,
- chrome::ShouldAssignURLToInstantRenderer(observer->url(), profile()))
+ chrome::ShouldAssignURLToInstantRenderer(
+ observer->current_url(), profile()))
<< test.description;
}
// Ensure only the expected tabs(contents) reloaded.
EXPECT_EQ(test.should_reload ? 1 : 0, observer->num_reloads())
<< test.description;
+
+ if (test.end_in_local_ntp) {
+ EXPECT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), observer->current_url())
+ << test.description;
+ }
}
}
TEST_F(BrowserInstantControllerTest, GoogleBaseURLUpdated) {
- const size_t num_tests = arraysize(kTabReloadTestCases);
+ const size_t num_tests = arraysize(kTabReloadTestCasesFinalProviderGoogle);
ScopedVector<FakeWebContentsObserver> observers;
for (size_t i = 0; i < num_tests; ++i) {
- const TabReloadTestCase& test = kTabReloadTestCases[i];
+ const TabReloadTestCase& test = kTabReloadTestCasesFinalProviderGoogle[i];
AddTab(browser(), GURL(test.start_url));
content::WebContents* contents =
browser()->tab_strip_model()->GetActiveWebContents();
@@ -150,20 +185,26 @@ TEST_F(BrowserInstantControllerTest, GoogleBaseURLUpdated) {
NotifyGoogleBaseURLUpdate("https://www.google.es/");
for (size_t i = 0; i < num_tests; ++i) {
- const TabReloadTestCase& test = kTabReloadTestCases[i];
+ const TabReloadTestCase& test = kTabReloadTestCasesFinalProviderGoogle[i];
FakeWebContentsObserver* observer = observers[i];
- if (test.should_reload) {
- // Validate final instant state.
- EXPECT_EQ(
- test.end_in_instant_process,
- chrome::ShouldAssignURLToInstantRenderer(observer->url(), profile()))
- << test.description;
- }
+ // Validate final instant state.
+ EXPECT_EQ(
+ test.end_in_instant_process,
+ chrome::ShouldAssignURLToInstantRenderer(
+ observer->current_url(), profile()))
+ << test.description;
// Ensure only the expected tabs(contents) reloaded.
EXPECT_EQ(test.should_reload ? 1 : 0, observer->num_reloads())
<< test.description;
+
+ if (test.end_in_local_ntp) {
+ EXPECT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), observer->current_url())
+ << test.description;
+ // The navigation to Local NTP should be definitive i.e. can't go back.
+ EXPECT_FALSE(observer->can_go_back());
+ }
}
}