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

Side by Side Diff: chrome/browser/ui/browser_instant_controller_unittest.cc

Issue 930853005: [Instant] Default Search Provider change redirects to local NTP in some cases (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: now replaces navigation entry Created 5 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/memory/scoped_vector.h" 8 #include "base/memory/scoped_vector.h"
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "chrome/browser/chrome_notification_types.h" 10 #include "chrome/browser/chrome_notification_types.h"
(...skipping 18 matching lines...) Expand all
29 void SetUp() override { 29 void SetUp() override {
30 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( 30 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
31 "EmbeddedSearch", "Group1 use_cacheable_ntp:1")); 31 "EmbeddedSearch", "Group1 use_cacheable_ntp:1"));
32 InstantUnitTestBase::SetUp(); 32 InstantUnitTestBase::SetUp();
33 } 33 }
34 34
35 protected: 35 protected:
36 friend class FakeWebContentsObserver; 36 friend class FakeWebContentsObserver;
37 }; 37 };
38 38
39 const struct TabReloadTestCase { 39 struct TabReloadTestCase {
40 const char* description; 40 const char* description;
41 const char* start_url; 41 const char* start_url;
42 bool start_in_instant_process; 42 bool start_in_instant_process;
43 bool should_reload; 43 bool should_reload;
44 bool end_in_local_ntp;
44 bool end_in_instant_process; 45 bool end_in_instant_process;
45 } kTabReloadTestCases[] = { 46 };
47
48 // Test cases for when Google is the initial, but not final provider.
49 const TabReloadTestCase kTabReloadTestCasesFinalProviderNotGoogle[] = {
46 {"Local Embedded NTP", chrome::kChromeSearchLocalNtpUrl, 50 {"Local Embedded NTP", chrome::kChromeSearchLocalNtpUrl,
47 true, true, true}, 51 true, true, true, true},
48 {"Remote Embedded NTP", "https://www.google.com/instant?strk", 52 {"Remote Embedded NTP", "https://www.google.com/newtab",
49 true, true, false}, 53 true, true, false, false},
50 {"Remote Embedded SERP", "https://www.google.com/url?strk&bar=search+terms", 54 {"Remote Embedded SERP", "https://www.google.com/url?strk&bar=search+terms",
51 true, true, false}, 55 true, true, false, false},
52 {"Other NTP", "https://bar.com/instant?strk", 56 {"Other NTP", "https://bar.com/newtab",
53 false, false, false} 57 false, false, false, false}
54 }; 58 };
55 59
60 // Test cases for when Google is both the initial and final provider.
61 const TabReloadTestCase kTabReloadTestCasesFinalProviderGoogle[] = {
62 {"Local Embedded NTP", chrome::kChromeSearchLocalNtpUrl,
63 true, true, true, true},
64 {"Remote Embedded NTP", "https://www.google.com/newtab",
65 true, false, true, true},
66 {"Remote Embedded SERP", "https://www.google.com/url?strk&bar=search+terms",
67 true, true, false, false},
68 {"Other NTP", "https://bar.com/newtab",
69 false, false, false, false}
70 };
71
72
56 class FakeWebContentsObserver : public content::WebContentsObserver { 73 class FakeWebContentsObserver : public content::WebContentsObserver {
57 public: 74 public:
58 explicit FakeWebContentsObserver(content::WebContents* contents) 75 explicit FakeWebContentsObserver(content::WebContents* contents)
59 : WebContentsObserver(contents), 76 : WebContentsObserver(contents),
60 contents_(contents), 77 contents_(contents),
61 url_(contents->GetURL()), 78 url_(contents->GetURL()),
62 num_reloads_(0) {} 79 num_reloads_(0) {}
63 80
64 void DidStartNavigationToPendingEntry( 81 void DidStartNavigationToPendingEntry(
65 const GURL& url, 82 const GURL& url,
66 content::NavigationController::ReloadType reload_type) override { 83 content::NavigationController::ReloadType reload_type) override {
67 if (url_ == url) 84 if (url_ == url)
68 num_reloads_++; 85 num_reloads_++;
86 current_url_ = url;
69 } 87 }
70 88
71 const GURL url() const { 89 const GURL url() const {
72 return url_; 90 return url_;
73 } 91 }
74 92
93 const GURL current_url() const {
94 return contents_->GetURL();
95 }
96
75 int num_reloads() const { 97 int num_reloads() const {
76 return num_reloads_; 98 return num_reloads_;
77 } 99 }
78 100
101 bool can_go_back() const {
102 return contents_->GetController().CanGoBack();
103 }
104
79 protected: 105 protected:
80 friend class BrowserInstantControllerTest; 106 friend class BrowserInstantControllerTest;
81 FRIEND_TEST_ALL_PREFIXES(BrowserInstantControllerTest, 107 FRIEND_TEST_ALL_PREFIXES(BrowserInstantControllerTest,
82 DefaultSearchProviderChanged); 108 DefaultSearchProviderChanged);
83 FRIEND_TEST_ALL_PREFIXES(BrowserInstantControllerTest, 109 FRIEND_TEST_ALL_PREFIXES(BrowserInstantControllerTest,
84 GoogleBaseURLUpdated); 110 GoogleBaseURLUpdated);
85 111
86 private: 112 private:
87 content::WebContents* contents_; 113 content::WebContents* contents_;
88 const GURL& url_; 114 const GURL& url_;
115 GURL current_url_;
89 int num_reloads_; 116 int num_reloads_;
90 }; 117 };
91 118
92 TEST_F(BrowserInstantControllerTest, DefaultSearchProviderChanged) { 119 TEST_F(BrowserInstantControllerTest, DefaultSearchProviderChanged) {
93 size_t num_tests = arraysize(kTabReloadTestCases); 120 size_t num_tests = arraysize(kTabReloadTestCasesFinalProviderNotGoogle);
94 ScopedVector<FakeWebContentsObserver> observers; 121 ScopedVector<FakeWebContentsObserver> observers;
95 for (size_t i = 0; i < num_tests; ++i) { 122 for (size_t i = 0; i < num_tests; ++i) {
96 const TabReloadTestCase& test = kTabReloadTestCases[i]; 123 const TabReloadTestCase& test =
124 kTabReloadTestCasesFinalProviderNotGoogle[i];
97 AddTab(browser(), GURL(test.start_url)); 125 AddTab(browser(), GURL(test.start_url));
98 content::WebContents* contents = 126 content::WebContents* contents =
99 browser()->tab_strip_model()->GetActiveWebContents(); 127 browser()->tab_strip_model()->GetActiveWebContents();
100 128
101 // Validate initial instant state. 129 // Validate initial instant state.
102 EXPECT_EQ(test.start_in_instant_process, 130 EXPECT_EQ(test.start_in_instant_process,
103 instant_service_->IsInstantProcess( 131 instant_service_->IsInstantProcess(
104 contents->GetRenderProcessHost()->GetID())) 132 contents->GetRenderProcessHost()->GetID()))
105 << test.description; 133 << test.description;
106 134
107 // Setup an observer to verify reload or absence thereof. 135 // Setup an observer to verify reload or absence thereof.
108 observers.push_back(new FakeWebContentsObserver(contents)); 136 observers.push_back(new FakeWebContentsObserver(contents));
109 } 137 }
110 138
111 SetUserSelectedDefaultSearchProvider("https://bar.com/"); 139 SetUserSelectedDefaultSearchProvider("https://bar.com/");
112 140
113 for (size_t i = 0; i < num_tests; ++i) { 141 for (size_t i = 0; i < num_tests; ++i) {
114 FakeWebContentsObserver* observer = observers[i]; 142 FakeWebContentsObserver* observer = observers[i];
115 const TabReloadTestCase& test = kTabReloadTestCases[i]; 143 const TabReloadTestCase& test =
144 kTabReloadTestCasesFinalProviderNotGoogle[i];
116 145
117 if (test.should_reload) { 146 if (test.should_reload) {
118 // Validate final instant state. 147 // Validate final instant state.
119 EXPECT_EQ( 148 EXPECT_EQ(
120 test.end_in_instant_process, 149 test.end_in_instant_process,
121 chrome::ShouldAssignURLToInstantRenderer(observer->url(), profile())) 150 chrome::ShouldAssignURLToInstantRenderer(
151 observer->current_url(), profile()))
122 << test.description; 152 << test.description;
123 } 153 }
124 154
125 // Ensure only the expected tabs(contents) reloaded. 155 // Ensure only the expected tabs(contents) reloaded.
126 EXPECT_EQ(test.should_reload ? 1 : 0, observer->num_reloads()) 156 EXPECT_EQ(test.should_reload ? 1 : 0, observer->num_reloads())
127 << test.description; 157 << test.description;
158
159 if (test.end_in_local_ntp) {
160 EXPECT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), observer->current_url())
161 << test.description;
162 }
128 } 163 }
129 } 164 }
130 165
131 TEST_F(BrowserInstantControllerTest, GoogleBaseURLUpdated) { 166 TEST_F(BrowserInstantControllerTest, GoogleBaseURLUpdated) {
132 const size_t num_tests = arraysize(kTabReloadTestCases); 167 const size_t num_tests = arraysize(kTabReloadTestCasesFinalProviderGoogle);
133 ScopedVector<FakeWebContentsObserver> observers; 168 ScopedVector<FakeWebContentsObserver> observers;
134 for (size_t i = 0; i < num_tests; ++i) { 169 for (size_t i = 0; i < num_tests; ++i) {
135 const TabReloadTestCase& test = kTabReloadTestCases[i]; 170 const TabReloadTestCase& test = kTabReloadTestCasesFinalProviderGoogle[i];
136 AddTab(browser(), GURL(test.start_url)); 171 AddTab(browser(), GURL(test.start_url));
137 content::WebContents* contents = 172 content::WebContents* contents =
138 browser()->tab_strip_model()->GetActiveWebContents(); 173 browser()->tab_strip_model()->GetActiveWebContents();
139 174
140 // Validate initial instant state. 175 // Validate initial instant state.
141 EXPECT_EQ(test.start_in_instant_process, 176 EXPECT_EQ(test.start_in_instant_process,
142 instant_service_->IsInstantProcess( 177 instant_service_->IsInstantProcess(
143 contents->GetRenderProcessHost()->GetID())) 178 contents->GetRenderProcessHost()->GetID()))
144 << test.description; 179 << test.description;
145 180
146 // Setup an observer to verify reload or absence thereof. 181 // Setup an observer to verify reload or absence thereof.
147 observers.push_back(new FakeWebContentsObserver(contents)); 182 observers.push_back(new FakeWebContentsObserver(contents));
148 } 183 }
149 184
150 NotifyGoogleBaseURLUpdate("https://www.google.es/"); 185 NotifyGoogleBaseURLUpdate("https://www.google.es/");
151 186
152 for (size_t i = 0; i < num_tests; ++i) { 187 for (size_t i = 0; i < num_tests; ++i) {
153 const TabReloadTestCase& test = kTabReloadTestCases[i]; 188 const TabReloadTestCase& test = kTabReloadTestCasesFinalProviderGoogle[i];
154 FakeWebContentsObserver* observer = observers[i]; 189 FakeWebContentsObserver* observer = observers[i];
155 190
156 if (test.should_reload) { 191 // Validate final instant state.
157 // Validate final instant state. 192 EXPECT_EQ(
158 EXPECT_EQ( 193 test.end_in_instant_process,
159 test.end_in_instant_process, 194 chrome::ShouldAssignURLToInstantRenderer(
160 chrome::ShouldAssignURLToInstantRenderer(observer->url(), profile())) 195 observer->current_url(), profile()))
161 << test.description; 196 << test.description;
162 }
163 197
164 // Ensure only the expected tabs(contents) reloaded. 198 // Ensure only the expected tabs(contents) reloaded.
165 EXPECT_EQ(test.should_reload ? 1 : 0, observer->num_reloads()) 199 EXPECT_EQ(test.should_reload ? 1 : 0, observer->num_reloads())
166 << test.description; 200 << test.description;
201
202 if (test.end_in_local_ntp) {
203 EXPECT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), observer->current_url())
204 << test.description;
205 // The navigation to Local NTP should be definitive i.e. can't go back.
206 EXPECT_FALSE(observer->can_go_back());
207 }
167 } 208 }
168 } 209 }
169 210
170 TEST_F(BrowserInstantControllerTest, BrowserWindowLifecycle) { 211 TEST_F(BrowserInstantControllerTest, BrowserWindowLifecycle) {
171 scoped_ptr<BrowserWindow> window(CreateBrowserWindow()); 212 scoped_ptr<BrowserWindow> window(CreateBrowserWindow());
172 Browser::CreateParams params(profile(), chrome::HOST_DESKTOP_TYPE_NATIVE); 213 Browser::CreateParams params(profile(), chrome::HOST_DESKTOP_TYPE_NATIVE);
173 params.window = window.get(); 214 params.window = window.get();
174 scoped_ptr<Browser> browser(new Browser(params)); 215 scoped_ptr<Browser> browser(new Browser(params));
175 InstantServiceObserver* bic; 216 InstantServiceObserver* bic;
176 bic = browser->instant_controller(); 217 bic = browser->instant_controller();
177 EXPECT_TRUE(IsInstantServiceObserver(bic)) 218 EXPECT_TRUE(IsInstantServiceObserver(bic))
178 << "New BrowserInstantController should register as InstantServiceObserver"; 219 << "New BrowserInstantController should register as InstantServiceObserver";
179 220
180 browser.reset(NULL); 221 browser.reset(NULL);
181 window.reset(NULL); 222 window.reset(NULL);
182 EXPECT_FALSE(IsInstantServiceObserver(bic)) 223 EXPECT_FALSE(IsInstantServiceObserver(bic))
183 << "New BrowserInstantController should register as InstantServiceObserver"; 224 << "New BrowserInstantController should register as InstantServiceObserver";
184 } 225 }
185 226
186 } // namespace 227 } // namespace
187 228
188 } // namespace chrome 229 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698