| Index: chrome/browser/ui/browser_instant_controller_unittest.cc
|
| diff --git a/chrome/browser/ui/browser_instant_controller_unittest.cc b/chrome/browser/ui/browser_instant_controller_unittest.cc
|
| index f4eaeee6b480d1e7fc53b240a2c405e3d5459b71..077390c76bce9aa369ca23d001dc7988ce0cd16b 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());
|
| + }
|
| }
|
| }
|
|
|
|
|