diff options
author | mathp <mathp@chromium.org> | 2015-02-19 16:10:05 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-20 00:10:37 +0000 |
commit | 880d328f729c6986b2502467a477e8fb093b8525 (patch) | |
tree | 3f5eb320c551bcffeae660f1337119f590133b36 /chrome/browser/ui/browser_instant_controller_unittest.cc | |
parent | 4ca14cb4922b883fde5419b9b176ef58b5296bf2 (diff) | |
download | chromium_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.cc | 85 |
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()); + } } } |