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

Side by Side Diff: components/google/core/browser/google_url_tracker_unittest.cc

Issue 808253006: Remove the GoogleURLTracker infobar functionality entirely. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix size_t -> int conversion (since I turned off the warning disable for it) Created 6 years 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "components/google/core/browser/google_url_tracker.h" 5 #include "components/google/core/browser/google_url_tracker.h"
6 6
7 #include <set>
8 #include <string> 7 #include <string>
9 8
10 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
11 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
12 #include "base/prefs/pref_registry_simple.h" 11 #include "base/prefs/pref_registry_simple.h"
13 #include "base/prefs/pref_service.h" 12 #include "base/prefs/pref_service.h"
14 #include "base/prefs/testing_pref_service.h" 13 #include "base/prefs/testing_pref_service.h"
15 #include "components/google/core/browser/google_pref_names.h" 14 #include "components/google/core/browser/google_pref_names.h"
16 #include "components/google/core/browser/google_url_tracker_client.h" 15 #include "components/google/core/browser/google_url_tracker_client.h"
17 #include "components/google/core/browser/google_url_tracker_infobar_delegate.h"
18 #include "components/google/core/browser/google_url_tracker_navigation_helper.h"
19 #include "components/infobars/core/infobar.h"
20 #include "components/infobars/core/infobar_delegate.h"
21 #include "net/url_request/test_url_fetcher_factory.h" 16 #include "net/url_request/test_url_fetcher_factory.h"
22 #include "net/url_request/url_fetcher.h" 17 #include "net/url_request/url_fetcher.h"
23 #include "net/url_request/url_request_test_util.h" 18 #include "net/url_request/url_request_test_util.h"
24 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
25 20
26 namespace { 21 namespace {
27 22
28 // TestCallbackListener --------------------------------------------------- 23 // TestCallbackListener ---------------------------------------------------
29 24
30 class TestCallbackListener { 25 class TestCallbackListener {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 } 62 }
68 63
69 64
70 // TestGoogleURLTrackerClient ------------------------------------------------- 65 // TestGoogleURLTrackerClient -------------------------------------------------
71 66
72 class TestGoogleURLTrackerClient : public GoogleURLTrackerClient { 67 class TestGoogleURLTrackerClient : public GoogleURLTrackerClient {
73 public: 68 public:
74 explicit TestGoogleURLTrackerClient(PrefService* prefs_); 69 explicit TestGoogleURLTrackerClient(PrefService* prefs_);
75 ~TestGoogleURLTrackerClient() override; 70 ~TestGoogleURLTrackerClient() override;
76 71
77 void SetListeningForNavigationStart(bool listen) override;
78 bool IsListeningForNavigationStart() override;
79 bool IsBackgroundNetworkingEnabled() override; 72 bool IsBackgroundNetworkingEnabled() override;
80 PrefService* GetPrefs() override; 73 PrefService* GetPrefs() override;
81 net::URLRequestContextGetter* GetRequestContext() override; 74 net::URLRequestContextGetter* GetRequestContext() override;
82 75
83 private: 76 private:
84 PrefService* prefs_; 77 PrefService* prefs_;
85 scoped_refptr<net::TestURLRequestContextGetter> request_context_; 78 scoped_refptr<net::TestURLRequestContextGetter> request_context_;
86 bool observe_nav_start_;
87 79
88 DISALLOW_COPY_AND_ASSIGN(TestGoogleURLTrackerClient); 80 DISALLOW_COPY_AND_ASSIGN(TestGoogleURLTrackerClient);
89 }; 81 };
90 82
91 TestGoogleURLTrackerClient::TestGoogleURLTrackerClient(PrefService* prefs) 83 TestGoogleURLTrackerClient::TestGoogleURLTrackerClient(PrefService* prefs)
92 : prefs_(prefs), 84 : prefs_(prefs),
93 request_context_(new net::TestURLRequestContextGetter( 85 request_context_(new net::TestURLRequestContextGetter(
94 base::MessageLoopProxy::current())), 86 base::MessageLoopProxy::current())) {
95 observe_nav_start_(false) {
96 } 87 }
97 88
98 TestGoogleURLTrackerClient::~TestGoogleURLTrackerClient() { 89 TestGoogleURLTrackerClient::~TestGoogleURLTrackerClient() {
99 } 90 }
100 91
101 void TestGoogleURLTrackerClient::SetListeningForNavigationStart(bool listen) {
102 observe_nav_start_ = listen;
103 }
104
105 bool TestGoogleURLTrackerClient::IsListeningForNavigationStart() {
106 return observe_nav_start_;
107 }
108
109 bool TestGoogleURLTrackerClient::IsBackgroundNetworkingEnabled() { 92 bool TestGoogleURLTrackerClient::IsBackgroundNetworkingEnabled() {
110 return true; 93 return true;
111 } 94 }
112 95
113 PrefService* TestGoogleURLTrackerClient::GetPrefs() { 96 PrefService* TestGoogleURLTrackerClient::GetPrefs() {
114 return prefs_; 97 return prefs_;
115 } 98 }
116 99
117 net::URLRequestContextGetter* TestGoogleURLTrackerClient::GetRequestContext() { 100 net::URLRequestContextGetter* TestGoogleURLTrackerClient::GetRequestContext() {
118 return request_context_.get(); 101 return request_context_.get();
119 } 102 }
120 103
121 104
122 // TestGoogleURLTrackerNavigationHelper ---------------------------------------
123
124 class TestGoogleURLTrackerNavigationHelper
125 : public GoogleURLTrackerNavigationHelper {
126 public:
127 explicit TestGoogleURLTrackerNavigationHelper(GoogleURLTracker* tracker);
128 ~TestGoogleURLTrackerNavigationHelper() override;
129
130 void SetListeningForNavigationCommit(bool listen) override;
131 bool IsListeningForNavigationCommit() override;
132 void SetListeningForTabDestruction(bool listen) override;
133 bool IsListeningForTabDestruction() override;
134 void OpenURL(GURL url,
135 WindowOpenDisposition disposition,
136 bool user_clicked_on_link) override;
137
138 private:
139 bool listening_for_nav_commit_;
140 bool listening_for_tab_destruction_;
141
142 DISALLOW_COPY_AND_ASSIGN(TestGoogleURLTrackerNavigationHelper);
143 };
144
145 TestGoogleURLTrackerNavigationHelper::TestGoogleURLTrackerNavigationHelper(
146 GoogleURLTracker* tracker)
147 : GoogleURLTrackerNavigationHelper(tracker),
148 listening_for_nav_commit_(false),
149 listening_for_tab_destruction_(false) {
150 }
151
152 TestGoogleURLTrackerNavigationHelper::~TestGoogleURLTrackerNavigationHelper() {
153 }
154
155 void TestGoogleURLTrackerNavigationHelper::SetListeningForNavigationCommit(
156 bool listen) {
157 listening_for_nav_commit_ = listen;
158 }
159
160 bool TestGoogleURLTrackerNavigationHelper::IsListeningForNavigationCommit() {
161 return listening_for_nav_commit_;
162 }
163
164 void TestGoogleURLTrackerNavigationHelper::SetListeningForTabDestruction(
165 bool listen) {
166 listening_for_tab_destruction_ = listen;
167 }
168
169 bool TestGoogleURLTrackerNavigationHelper::IsListeningForTabDestruction() {
170 return listening_for_tab_destruction_;
171 }
172
173 void TestGoogleURLTrackerNavigationHelper::OpenURL(
174 GURL url,
175 WindowOpenDisposition disposition,
176 bool user_clicked_on_link) {
177 }
178
179 // TestInfoBarManager ---------------------------------------------------------
180
181 class TestInfoBarManager : public infobars::InfoBarManager {
182 public:
183 explicit TestInfoBarManager(int unique_id);
184 ~TestInfoBarManager() override;
185 int GetActiveEntryID() override;
186
187 private:
188 int unique_id_;
189 DISALLOW_COPY_AND_ASSIGN(TestInfoBarManager);
190 };
191
192 TestInfoBarManager::TestInfoBarManager(int unique_id) : unique_id_(unique_id) {
193 }
194
195 TestInfoBarManager::~TestInfoBarManager() {
196 ShutDown();
197 }
198
199 int TestInfoBarManager::GetActiveEntryID() {
200 return unique_id_;
201 }
202
203 } // namespace 105 } // namespace
204 106
205 // GoogleURLTrackerTest ------------------------------------------------------- 107 // GoogleURLTrackerTest -------------------------------------------------------
206 108
207 class GoogleURLTrackerTest : public testing::Test { 109 class GoogleURLTrackerTest : public testing::Test {
208 protected: 110 protected:
209 GoogleURLTrackerTest(); 111 GoogleURLTrackerTest();
210 ~GoogleURLTrackerTest() override; 112 ~GoogleURLTrackerTest() override;
211 113
212 // testing::Test 114 // testing::Test
213 void SetUp() override; 115 void SetUp() override;
214 void TearDown() override; 116 void TearDown() override;
215 117
216 net::TestURLFetcher* GetFetcher(); 118 net::TestURLFetcher* GetFetcher();
217 void MockSearchDomainCheckResponse(const std::string& domain); 119 void MockSearchDomainCheckResponse(const std::string& domain);
218 void RequestServerCheck(); 120 void RequestServerCheck();
219 void FinishSleep(); 121 void FinishSleep();
220 void NotifyNetworkChanged(); 122 void NotifyNetworkChanged();
221 GURL fetched_google_url() const {
222 return google_url_tracker_->fetched_google_url();
223 }
224 void set_google_url(const GURL& url) { 123 void set_google_url(const GURL& url) {
225 google_url_tracker_->google_url_ = url; 124 google_url_tracker_->google_url_ = url;
226 } 125 }
227 GURL google_url() const { return google_url_tracker_->google_url(); } 126 GURL google_url() const { return google_url_tracker_->google_url(); }
228 void SetLastPromptedGoogleURL(const GURL& url);
229 GURL GetLastPromptedGoogleURL();
230 void SetNavigationPending(infobars::InfoBarManager* infobar_manager,
231 bool is_search);
232 void CommitNonSearch(infobars::InfoBarManager* infobar_manager);
233 void CommitSearch(infobars::InfoBarManager* infobar_manager,
234 const GURL& search_url);
235 void CloseTab(infobars::InfoBarManager* infobar_manager);
236 GoogleURLTrackerMapEntry* GetMapEntry(
237 infobars::InfoBarManager* infobar_manager);
238 GoogleURLTrackerInfoBarDelegate* GetInfoBarDelegate(
239 infobars::InfoBarManager* infobar_manager);
240 GoogleURLTrackerNavigationHelper* GetNavigationHelper(
241 infobars::InfoBarManager* infobar_manager);
242 void ExpectDefaultURLs() const;
243 void ExpectListeningForCommit(infobars::InfoBarManager* infobar_manager,
244 bool listening);
245 bool listener_notified() const { return listener_.notified(); } 127 bool listener_notified() const { return listener_.notified(); }
246 void clear_listener_notified() { listener_.clear_notified(); } 128 void clear_listener_notified() { listener_.clear_notified(); }
247 129
248 private: 130 private:
249 base::MessageLoop message_loop_; 131 base::MessageLoop message_loop_;
250 TestingPrefServiceSimple prefs_; 132 TestingPrefServiceSimple prefs_;
251 133
252 // Creating this allows us to call 134 // Creating this allows us to call
253 // net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(). 135 // net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests().
254 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; 136 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
255 net::TestURLFetcherFactory fetcher_factory_; 137 net::TestURLFetcherFactory fetcher_factory_;
256 GoogleURLTrackerClient* client_; 138 GoogleURLTrackerClient* client_;
257 scoped_ptr<GoogleURLTracker> google_url_tracker_; 139 scoped_ptr<GoogleURLTracker> google_url_tracker_;
258 TestCallbackListener listener_; 140 TestCallbackListener listener_;
259 // This tracks the different "tabs" a test has "opened", so we can close them
260 // properly before shutting down |google_url_tracker_|, which expects that.
261 std::set<infobars::InfoBarManager*> infobar_managers_seen_;
262 }; 141 };
263 142
264 GoogleURLTrackerTest::GoogleURLTrackerTest() { 143 GoogleURLTrackerTest::GoogleURLTrackerTest() {
265 prefs_.registry()->RegisterStringPref( 144 prefs_.registry()->RegisterStringPref(
266 prefs::kLastKnownGoogleURL, 145 prefs::kLastKnownGoogleURL,
267 GoogleURLTracker::kDefaultGoogleHomepage); 146 GoogleURLTracker::kDefaultGoogleHomepage);
268 prefs_.registry()->RegisterStringPref(
269 prefs::kLastPromptedGoogleURL,
270 std::string());
271 } 147 }
272 148
273 GoogleURLTrackerTest::~GoogleURLTrackerTest() { 149 GoogleURLTrackerTest::~GoogleURLTrackerTest() {
274 } 150 }
275 151
276 void GoogleURLTrackerTest::SetUp() { 152 void GoogleURLTrackerTest::SetUp() {
277 network_change_notifier_.reset(net::NetworkChangeNotifier::CreateMock()); 153 network_change_notifier_.reset(net::NetworkChangeNotifier::CreateMock());
278 // Ownership is passed to google_url_tracker_, but a weak pointer is kept; 154 // Ownership is passed to google_url_tracker_, but a weak pointer is kept;
279 // this is safe since GoogleURLTracker keeps the client for its lifetime. 155 // this is safe since GoogleURLTracker keeps the client for its lifetime.
280 client_ = new TestGoogleURLTrackerClient(&prefs_); 156 client_ = new TestGoogleURLTrackerClient(&prefs_);
281 scoped_ptr<GoogleURLTrackerClient> client(client_); 157 scoped_ptr<GoogleURLTrackerClient> client(client_);
282 google_url_tracker_.reset(new GoogleURLTracker( 158 google_url_tracker_.reset(new GoogleURLTracker(
283 client.Pass(), GoogleURLTracker::UNIT_TEST_MODE)); 159 client.Pass(), GoogleURLTracker::UNIT_TEST_MODE));
284 } 160 }
285 161
286 void GoogleURLTrackerTest::TearDown() { 162 void GoogleURLTrackerTest::TearDown() {
287 while (!infobar_managers_seen_.empty())
288 CloseTab(*infobar_managers_seen_.begin());
289 google_url_tracker_->Shutdown(); 163 google_url_tracker_->Shutdown();
290 } 164 }
291 165
292 net::TestURLFetcher* GoogleURLTrackerTest::GetFetcher() { 166 net::TestURLFetcher* GoogleURLTrackerTest::GetFetcher() {
293 // This will return the last fetcher created. If no fetchers have been 167 // This will return the last fetcher created. If no fetchers have been
294 // created, we'll pass GetFetcherByID() "-1", and it will return NULL. 168 // created, we'll pass GetFetcherByID() "-1", and it will return NULL.
295 return fetcher_factory_.GetFetcherByID(google_url_tracker_->fetcher_id_ - 1); 169 return fetcher_factory_.GetFetcherByID(google_url_tracker_->fetcher_id_ - 1);
296 } 170 }
297 171
298 void GoogleURLTrackerTest::MockSearchDomainCheckResponse( 172 void GoogleURLTrackerTest::MockSearchDomainCheckResponse(
(...skipping 20 matching lines...) Expand all
319 } 193 }
320 194
321 void GoogleURLTrackerTest::NotifyNetworkChanged() { 195 void GoogleURLTrackerTest::NotifyNetworkChanged() {
322 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests( 196 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
323 net::NetworkChangeNotifier::CONNECTION_UNKNOWN); 197 net::NetworkChangeNotifier::CONNECTION_UNKNOWN);
324 // For thread safety, the NCN queues tasks to do the actual notifications, so 198 // For thread safety, the NCN queues tasks to do the actual notifications, so
325 // we need to spin the message loop so the tracker will actually be notified. 199 // we need to spin the message loop so the tracker will actually be notified.
326 base::MessageLoop::current()->RunUntilIdle(); 200 base::MessageLoop::current()->RunUntilIdle();
327 } 201 }
328 202
329 void GoogleURLTrackerTest::SetLastPromptedGoogleURL(const GURL& url) {
330 prefs_.SetString(prefs::kLastPromptedGoogleURL, url.spec());
331 }
332
333 GURL GoogleURLTrackerTest::GetLastPromptedGoogleURL() {
334 return GURL(prefs_.GetString(prefs::kLastPromptedGoogleURL));
335 }
336
337 void GoogleURLTrackerTest::SetNavigationPending(
338 infobars::InfoBarManager* infobar_manager,
339 bool is_search) {
340 if (is_search) {
341 google_url_tracker_->SearchCommitted();
342 // Note that the call above might not have actually registered a listener
343 // for navigation starts if the searchdomaincheck response was bogus.
344 }
345 infobar_managers_seen_.insert(infobar_manager);
346 if (client_->IsListeningForNavigationStart()) {
347 google_url_tracker_->OnNavigationPending(
348 scoped_ptr<GoogleURLTrackerNavigationHelper>(
349 new TestGoogleURLTrackerNavigationHelper(
350 google_url_tracker_.get())),
351 infobar_manager,
352 infobar_manager->GetActiveEntryID());
353 }
354 }
355
356 void GoogleURLTrackerTest::CommitNonSearch(
357 infobars::InfoBarManager* infobar_manager) {
358 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
359 if (!map_entry)
360 return;
361
362 ExpectListeningForCommit(infobar_manager, false);
363
364 // The infobar should be showing; otherwise the pending non-search should
365 // have closed it.
366 ASSERT_TRUE(map_entry->has_infobar_delegate());
367
368 // The pending_id should have been reset to 0 when the non-search became
369 // pending.
370 EXPECT_EQ(0, map_entry->infobar_delegate()->pending_id());
371
372 // Committing the navigation would close the infobar.
373 map_entry->infobar_delegate()->Close(false);
374 }
375
376 void GoogleURLTrackerTest::CommitSearch(
377 infobars::InfoBarManager* infobar_manager,
378 const GURL& search_url) {
379 DCHECK(search_url.is_valid());
380 GoogleURLTrackerNavigationHelper* nav_helper =
381 GetNavigationHelper(infobar_manager);
382 if (nav_helper && nav_helper->IsListeningForNavigationCommit()) {
383 google_url_tracker_->OnNavigationCommitted(infobar_manager, search_url);
384 }
385 }
386
387 void GoogleURLTrackerTest::CloseTab(infobars::InfoBarManager* infobar_manager) {
388 infobar_managers_seen_.erase(infobar_manager);
389 GoogleURLTrackerNavigationHelper* nav_helper =
390 GetNavigationHelper(infobar_manager);
391 if (nav_helper && nav_helper->IsListeningForTabDestruction()) {
392 google_url_tracker_->OnTabClosed(nav_helper);
393 } else {
394 // Closing a tab with an infobar showing would close the infobar.
395 GoogleURLTrackerInfoBarDelegate* delegate =
396 GetInfoBarDelegate(infobar_manager);
397 if (delegate)
398 delegate->Close(false);
399 }
400 }
401
402 GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry(
403 infobars::InfoBarManager* infobar_manager) {
404 GoogleURLTracker::EntryMap::const_iterator i =
405 google_url_tracker_->entry_map_.find(infobar_manager);
406 return (i == google_url_tracker_->entry_map_.end()) ? NULL : i->second;
407 }
408
409 GoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::GetInfoBarDelegate(
410 infobars::InfoBarManager* infobar_manager) {
411 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
412 return map_entry ? map_entry->infobar_delegate() : NULL;
413 }
414
415 GoogleURLTrackerNavigationHelper* GoogleURLTrackerTest::GetNavigationHelper(
416 infobars::InfoBarManager* infobar_manager) {
417 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
418 return map_entry ? map_entry->navigation_helper() : NULL;
419 }
420
421 void GoogleURLTrackerTest::ExpectDefaultURLs() const {
422 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
423 EXPECT_EQ(GURL(), fetched_google_url());
424 }
425
426 void GoogleURLTrackerTest::ExpectListeningForCommit(
427 infobars::InfoBarManager* infobar_manager,
428 bool listening) {
429 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
430 if (map_entry) {
431 EXPECT_EQ(listening,
432 map_entry->navigation_helper()->IsListeningForNavigationCommit());
433 } else {
434 EXPECT_FALSE(listening);
435 }
436 }
437
438 // Tests ---------------------------------------------------------------------- 203 // Tests ----------------------------------------------------------------------
439 204
440 TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) { 205 TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) {
441 ExpectDefaultURLs(); 206 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
442 FinishSleep(); 207 FinishSleep();
443 // No one called RequestServerCheck() so nothing should have happened. 208 // No one called RequestServerCheck() so nothing should have happened.
444 EXPECT_FALSE(GetFetcher()); 209 EXPECT_FALSE(GetFetcher());
445 MockSearchDomainCheckResponse("http://www.google.co.uk/"); 210 MockSearchDomainCheckResponse("http://www.google.co.uk/");
446 ExpectDefaultURLs(); 211 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
447 EXPECT_FALSE(listener_notified()); 212 EXPECT_FALSE(listener_notified());
448 } 213 }
449 214
450 TEST_F(GoogleURLTrackerTest, UpdateOnFirstRun) { 215 TEST_F(GoogleURLTrackerTest, Update) {
451 RequestServerCheck(); 216 RequestServerCheck();
452 EXPECT_FALSE(GetFetcher()); 217 EXPECT_FALSE(GetFetcher());
453 ExpectDefaultURLs(); 218 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
454 EXPECT_FALSE(listener_notified()); 219 EXPECT_FALSE(listener_notified());
455 220
456 FinishSleep(); 221 FinishSleep();
457 MockSearchDomainCheckResponse("http://www.google.co.uk/"); 222 MockSearchDomainCheckResponse("http://www.google.co.uk/");
458 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
459 // GoogleURL should be updated, becase there was no last prompted URL.
460 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); 223 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
461 EXPECT_TRUE(listener_notified()); 224 EXPECT_TRUE(listener_notified());
462 } 225 }
463 226
464 TEST_F(GoogleURLTrackerTest, DontUpdateWhenUnchanged) { 227 TEST_F(GoogleURLTrackerTest, DontUpdateWhenUnchanged) {
465 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); 228 GURL original_google_url("http://www.google.co.uk/");
229 set_google_url(original_google_url);
466 230
467 RequestServerCheck(); 231 RequestServerCheck();
468 EXPECT_FALSE(GetFetcher()); 232 EXPECT_FALSE(GetFetcher());
469 ExpectDefaultURLs(); 233 EXPECT_EQ(original_google_url, google_url());
470 EXPECT_FALSE(listener_notified()); 234 EXPECT_FALSE(listener_notified());
471 235
472 FinishSleep(); 236 FinishSleep();
473 MockSearchDomainCheckResponse("http://www.google.co.uk/"); 237 MockSearchDomainCheckResponse(original_google_url.spec());
474 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); 238 EXPECT_EQ(original_google_url, google_url());
475 // GoogleURL should not be updated, because the fetched and prompted URLs 239 // No one should be notified, because the new URL matches the old.
476 // match.
477 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
478 EXPECT_FALSE(listener_notified()); 240 EXPECT_FALSE(listener_notified());
479 } 241 }
480 242
481 TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { 243 TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) {
482 TestInfoBarManager infobar_manager(1); 244 GURL original_google_url("http://www.google.co.uk/");
483 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); 245 set_google_url(original_google_url);
484 246
485 RequestServerCheck(); 247 RequestServerCheck();
486 EXPECT_FALSE(GetFetcher()); 248 EXPECT_FALSE(GetFetcher());
487 ExpectDefaultURLs(); 249 EXPECT_EQ(original_google_url, google_url());
488 EXPECT_FALSE(listener_notified()); 250 EXPECT_FALSE(listener_notified());
489 251
490 // Old-style domain string. 252 // Old-style domain string.
491 FinishSleep(); 253 FinishSleep();
492 MockSearchDomainCheckResponse(".google.co.in"); 254 MockSearchDomainCheckResponse(".google.co.in");
493 EXPECT_EQ(GURL(), fetched_google_url()); 255 EXPECT_EQ(original_google_url, google_url());
494 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
495 EXPECT_FALSE(listener_notified()); 256 EXPECT_FALSE(listener_notified());
496 SetNavigationPending(&infobar_manager, true);
497 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
498 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
499 257
500 // Bad subdomain. 258 // Bad subdomain.
501 NotifyNetworkChanged(); 259 NotifyNetworkChanged();
502 MockSearchDomainCheckResponse("http://mail.google.com/"); 260 MockSearchDomainCheckResponse("http://mail.google.com/");
503 EXPECT_EQ(GURL(), fetched_google_url()); 261 EXPECT_EQ(original_google_url, google_url());
504 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
505 EXPECT_FALSE(listener_notified()); 262 EXPECT_FALSE(listener_notified());
506 SetNavigationPending(&infobar_manager, true);
507 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
508 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
509 263
510 // Non-empty path. 264 // Non-empty path.
511 NotifyNetworkChanged(); 265 NotifyNetworkChanged();
512 MockSearchDomainCheckResponse("http://www.google.com/search"); 266 MockSearchDomainCheckResponse("http://www.google.com/search");
513 EXPECT_EQ(GURL(), fetched_google_url()); 267 EXPECT_EQ(original_google_url, google_url());
514 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
515 EXPECT_FALSE(listener_notified()); 268 EXPECT_FALSE(listener_notified());
516 SetNavigationPending(&infobar_manager, true);
517 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
518 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
519 269
520 // Non-empty query. 270 // Non-empty query.
521 NotifyNetworkChanged(); 271 NotifyNetworkChanged();
522 MockSearchDomainCheckResponse("http://www.google.com/?q=foo"); 272 MockSearchDomainCheckResponse("http://www.google.com/?q=foo");
523 EXPECT_EQ(GURL(), fetched_google_url()); 273 EXPECT_EQ(original_google_url, google_url());
524 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
525 EXPECT_FALSE(listener_notified()); 274 EXPECT_FALSE(listener_notified());
526 SetNavigationPending(&infobar_manager, true);
527 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
528 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
529 275
530 // Non-empty ref. 276 // Non-empty ref.
531 NotifyNetworkChanged(); 277 NotifyNetworkChanged();
532 MockSearchDomainCheckResponse("http://www.google.com/#anchor"); 278 MockSearchDomainCheckResponse("http://www.google.com/#anchor");
533 EXPECT_EQ(GURL(), fetched_google_url()); 279 EXPECT_EQ(original_google_url, google_url());
534 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
535 EXPECT_FALSE(listener_notified()); 280 EXPECT_FALSE(listener_notified());
536 SetNavigationPending(&infobar_manager, true);
537 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
538 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
539 281
540 // Complete garbage. 282 // Complete garbage.
541 NotifyNetworkChanged(); 283 NotifyNetworkChanged();
542 MockSearchDomainCheckResponse("HJ)*qF)_*&@f1"); 284 MockSearchDomainCheckResponse("HJ)*qF)_*&@f1");
543 EXPECT_EQ(GURL(), fetched_google_url()); 285 EXPECT_EQ(original_google_url, google_url());
544 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
545 EXPECT_FALSE(listener_notified()); 286 EXPECT_FALSE(listener_notified());
546 SetNavigationPending(&infobar_manager, true);
547 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
548 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
549 }
550
551 TEST_F(GoogleURLTrackerTest, UpdatePromptedURLOnReturnToPreviousLocation) {
552 SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/"));
553 set_google_url(GURL("http://www.google.co.uk/"));
554 RequestServerCheck();
555 FinishSleep();
556 MockSearchDomainCheckResponse("http://www.google.co.uk/");
557 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
558 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
559 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
560 EXPECT_FALSE(listener_notified());
561 }
562
563 TEST_F(GoogleURLTrackerTest, SilentlyAcceptSchemeChange) {
564 // We should auto-accept changes to the current Google URL that merely change
565 // the scheme, regardless of what the last prompted URL was.
566 SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/"));
567 set_google_url(GURL("http://www.google.co.uk/"));
568 RequestServerCheck();
569 FinishSleep();
570 MockSearchDomainCheckResponse("https://www.google.co.uk/");
571 EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url());
572 EXPECT_EQ(GURL("https://www.google.co.uk/"), google_url());
573 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL());
574 EXPECT_TRUE(listener_notified());
575
576 NotifyNetworkChanged();
577 MockSearchDomainCheckResponse("http://www.google.co.uk/");
578 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
579 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
580 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
581 EXPECT_TRUE(listener_notified());
582 } 287 }
583 288
584 TEST_F(GoogleURLTrackerTest, RefetchOnNetworkChange) { 289 TEST_F(GoogleURLTrackerTest, RefetchOnNetworkChange) {
585 RequestServerCheck(); 290 RequestServerCheck();
586 FinishSleep(); 291 FinishSleep();
587 MockSearchDomainCheckResponse("http://www.google.co.uk/"); 292 MockSearchDomainCheckResponse("http://www.google.co.uk/");
588 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
589 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); 293 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
590 EXPECT_TRUE(listener_notified()); 294 EXPECT_TRUE(listener_notified());
591 clear_listener_notified(); 295 clear_listener_notified();
592 296
593 NotifyNetworkChanged(); 297 NotifyNetworkChanged();
594 MockSearchDomainCheckResponse("http://www.google.co.in/"); 298 MockSearchDomainCheckResponse("http://www.google.co.in/");
595 EXPECT_EQ(GURL("http://www.google.co.in/"), fetched_google_url()); 299 EXPECT_EQ(GURL("http://www.google.co.in/"), google_url());
596 // Just fetching a new URL shouldn't reset things without a prompt. 300 EXPECT_TRUE(listener_notified());
597 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
598 EXPECT_FALSE(listener_notified());
599 } 301 }
600 302
601 TEST_F(GoogleURLTrackerTest, DontRefetchWhenNoOneRequestsCheck) { 303 TEST_F(GoogleURLTrackerTest, DontRefetchWhenNoOneRequestsCheck) {
602 FinishSleep(); 304 FinishSleep();
603 NotifyNetworkChanged(); 305 NotifyNetworkChanged();
604 // No one called RequestServerCheck() so nothing should have happened. 306 // No one called RequestServerCheck() so nothing should have happened.
605 EXPECT_FALSE(GetFetcher()); 307 EXPECT_FALSE(GetFetcher());
606 MockSearchDomainCheckResponse("http://www.google.co.uk/"); 308 MockSearchDomainCheckResponse("http://www.google.co.uk/");
607 ExpectDefaultURLs(); 309 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
608 EXPECT_FALSE(listener_notified()); 310 EXPECT_FALSE(listener_notified());
609 } 311 }
610 312
611 TEST_F(GoogleURLTrackerTest, FetchOnLateRequest) { 313 TEST_F(GoogleURLTrackerTest, FetchOnLateRequest) {
612 FinishSleep(); 314 FinishSleep();
613 NotifyNetworkChanged(); 315 NotifyNetworkChanged();
614 MockSearchDomainCheckResponse("http://www.google.co.jp/"); 316 MockSearchDomainCheckResponse("http://www.google.co.jp/");
615 317
616 RequestServerCheck(); 318 RequestServerCheck();
617 // The first request for a check should trigger a fetch if it hasn't happened 319 // The first request for a check should trigger a fetch if it hasn't happened
618 // already. 320 // already.
619 MockSearchDomainCheckResponse("http://www.google.co.uk/"); 321 MockSearchDomainCheckResponse("http://www.google.co.uk/");
620 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
621 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); 322 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
622 EXPECT_TRUE(listener_notified()); 323 EXPECT_TRUE(listener_notified());
623 } 324 }
624 325
625 TEST_F(GoogleURLTrackerTest, DontFetchTwiceOnLateRequests) { 326 TEST_F(GoogleURLTrackerTest, DontFetchTwiceOnLateRequests) {
626 FinishSleep(); 327 FinishSleep();
627 NotifyNetworkChanged(); 328 NotifyNetworkChanged();
628 MockSearchDomainCheckResponse("http://www.google.co.jp/"); 329 MockSearchDomainCheckResponse("http://www.google.co.jp/");
629 330
630 RequestServerCheck(); 331 RequestServerCheck();
631 // The first request for a check should trigger a fetch if it hasn't happened 332 // The first request for a check should trigger a fetch if it hasn't happened
632 // already. 333 // already.
633 MockSearchDomainCheckResponse("http://www.google.co.uk/"); 334 MockSearchDomainCheckResponse("http://www.google.co.uk/");
634 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
635 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); 335 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
636 EXPECT_TRUE(listener_notified()); 336 EXPECT_TRUE(listener_notified());
637 clear_listener_notified(); 337 clear_listener_notified();
638 338
639 RequestServerCheck(); 339 RequestServerCheck();
640 // The second request should be ignored. 340 // The second request should be ignored.
641 EXPECT_FALSE(GetFetcher()); 341 EXPECT_FALSE(GetFetcher());
642 MockSearchDomainCheckResponse("http://www.google.co.in/"); 342 MockSearchDomainCheckResponse("http://www.google.co.in/");
643 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
644 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); 343 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
645 EXPECT_FALSE(listener_notified()); 344 EXPECT_FALSE(listener_notified());
646 } 345 }
647
648 TEST_F(GoogleURLTrackerTest, SearchingDoesNothingIfNoNeedToPrompt) {
649 TestInfoBarManager infobar_manager(1);
650 RequestServerCheck();
651 FinishSleep();
652 MockSearchDomainCheckResponse("http://www.google.co.uk/");
653 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
654 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
655 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
656 EXPECT_TRUE(listener_notified());
657 clear_listener_notified();
658
659 SetNavigationPending(&infobar_manager, true);
660 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
661 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
662 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
663 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
664 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
665 EXPECT_FALSE(listener_notified());
666 }
667
668 TEST_F(GoogleURLTrackerTest, TabClosedOnPendingSearch) {
669 TestInfoBarManager infobar_manager(1);
670 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
671 RequestServerCheck();
672 FinishSleep();
673 MockSearchDomainCheckResponse("http://www.google.co.jp/");
674 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
675 EXPECT_EQ(GURL("http://www.google.co.jp/"), fetched_google_url());
676 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
677 EXPECT_FALSE(listener_notified());
678
679 SetNavigationPending(&infobar_manager, true);
680 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager);
681 ASSERT_FALSE(map_entry == NULL);
682 EXPECT_FALSE(map_entry->has_infobar_delegate());
683 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
684 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
685 EXPECT_FALSE(listener_notified());
686
687 CloseTab(&infobar_manager);
688 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
689 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
690 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
691 EXPECT_FALSE(listener_notified());
692 }
693
694 TEST_F(GoogleURLTrackerTest, TabClosedOnCommittedSearch) {
695 TestInfoBarManager infobar_manager(1);
696 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
697 RequestServerCheck();
698 FinishSleep();
699 MockSearchDomainCheckResponse("http://www.google.co.jp/");
700
701 SetNavigationPending(&infobar_manager, true);
702 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
703 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
704
705 CloseTab(&infobar_manager);
706 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
707 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
708 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
709 EXPECT_FALSE(listener_notified());
710 }
711
712 TEST_F(GoogleURLTrackerTest, InfoBarClosed) {
713 TestInfoBarManager infobar_manager(1);
714 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
715 RequestServerCheck();
716 FinishSleep();
717 MockSearchDomainCheckResponse("http://www.google.co.jp/");
718
719 SetNavigationPending(&infobar_manager, true);
720 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
721 GoogleURLTrackerInfoBarDelegate* infobar =
722 GetInfoBarDelegate(&infobar_manager);
723 ASSERT_FALSE(infobar == NULL);
724
725 infobar->Close(false);
726 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
727 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
728 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
729 EXPECT_FALSE(listener_notified());
730 }
731
732 TEST_F(GoogleURLTrackerTest, InfoBarRefused) {
733 TestInfoBarManager infobar_manager(1);
734 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
735 RequestServerCheck();
736 FinishSleep();
737 MockSearchDomainCheckResponse("http://www.google.co.jp/");
738
739 SetNavigationPending(&infobar_manager, true);
740 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
741 GoogleURLTrackerInfoBarDelegate* infobar =
742 GetInfoBarDelegate(&infobar_manager);
743 ASSERT_FALSE(infobar == NULL);
744
745 infobar->Cancel();
746 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
747 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
748 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL());
749 EXPECT_FALSE(listener_notified());
750 }
751
752 TEST_F(GoogleURLTrackerTest, InfoBarAccepted) {
753 TestInfoBarManager infobar_manager(1);
754 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
755 RequestServerCheck();
756 FinishSleep();
757 MockSearchDomainCheckResponse("http://www.google.co.jp/");
758
759 SetNavigationPending(&infobar_manager, true);
760 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
761 GoogleURLTrackerInfoBarDelegate* infobar =
762 GetInfoBarDelegate(&infobar_manager);
763 ASSERT_FALSE(infobar == NULL);
764
765 infobar->Accept();
766 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
767 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url());
768 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL());
769 EXPECT_TRUE(listener_notified());
770 }
771
772 TEST_F(GoogleURLTrackerTest, FetchesCanAutomaticallyCloseInfoBars) {
773 TestInfoBarManager infobar_manager(1);
774 RequestServerCheck();
775 FinishSleep();
776 MockSearchDomainCheckResponse(google_url().spec());
777
778 // Re-fetching the accepted URL after showing an infobar for another URL
779 // should close the infobar.
780 NotifyNetworkChanged();
781 MockSearchDomainCheckResponse("http://www.google.co.uk/");
782 SetNavigationPending(&infobar_manager, true);
783 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
784 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
785 NotifyNetworkChanged();
786 MockSearchDomainCheckResponse(google_url().spec());
787 EXPECT_EQ(google_url(), GetLastPromptedGoogleURL());
788 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
789
790 // As should fetching a URL that differs from the accepted only by the scheme.
791 NotifyNetworkChanged();
792 MockSearchDomainCheckResponse("http://www.google.co.uk/");
793 SetNavigationPending(&infobar_manager, true);
794 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
795 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
796 NotifyNetworkChanged();
797 url::Replacements<char> replacements;
798 const std::string& scheme("https");
799 replacements.SetScheme(scheme.data(), url::Component(0, scheme.length()));
800 GURL new_google_url(google_url().ReplaceComponents(replacements));
801 MockSearchDomainCheckResponse(new_google_url.spec());
802 EXPECT_EQ(new_google_url, GetLastPromptedGoogleURL());
803 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
804
805 // As should re-fetching the last prompted URL.
806 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
807 NotifyNetworkChanged();
808 MockSearchDomainCheckResponse("http://www.google.co.jp/");
809 SetNavigationPending(&infobar_manager, true);
810 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
811 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
812 NotifyNetworkChanged();
813 MockSearchDomainCheckResponse("http://www.google.co.uk/");
814 EXPECT_EQ(new_google_url, google_url());
815 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
816 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
817
818 // And one that differs from the last prompted URL only by the scheme.
819 NotifyNetworkChanged();
820 MockSearchDomainCheckResponse("http://www.google.co.jp/");
821 SetNavigationPending(&infobar_manager, true);
822 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
823 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
824 NotifyNetworkChanged();
825 MockSearchDomainCheckResponse("https://www.google.co.uk/");
826 EXPECT_EQ(new_google_url, google_url());
827 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL());
828 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
829
830 // And fetching a different URL entirely.
831 NotifyNetworkChanged();
832 MockSearchDomainCheckResponse("http://www.google.co.jp/");
833 SetNavigationPending(&infobar_manager, true);
834 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
835 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
836 NotifyNetworkChanged();
837 MockSearchDomainCheckResponse("https://www.google.co.in/");
838 EXPECT_EQ(new_google_url, google_url());
839 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL());
840 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
841 }
842
843 TEST_F(GoogleURLTrackerTest, ResetInfoBarGoogleURLs) {
844 TestInfoBarManager infobar_manager(1);
845 RequestServerCheck();
846 FinishSleep();
847 MockSearchDomainCheckResponse(google_url().spec());
848
849 NotifyNetworkChanged();
850 MockSearchDomainCheckResponse("http://www.google.co.uk/");
851 SetNavigationPending(&infobar_manager, true);
852 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
853 GoogleURLTrackerInfoBarDelegate* delegate =
854 GetInfoBarDelegate(&infobar_manager);
855 ASSERT_FALSE(delegate == NULL);
856 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
857
858 // If while an infobar is showing we fetch a new URL that differs from the
859 // infobar's only by scheme, the infobar should stay showing.
860 NotifyNetworkChanged();
861 MockSearchDomainCheckResponse("https://www.google.co.uk/");
862 EXPECT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
863 EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url());
864 }
865
866 TEST_F(GoogleURLTrackerTest, NavigationsAfterPendingSearch) {
867 TestInfoBarManager infobar_manager(1);
868 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
869 RequestServerCheck();
870 FinishSleep();
871 MockSearchDomainCheckResponse("http://www.google.co.jp/");
872
873 // A pending non-search after a pending search should delete the map entry.
874 SetNavigationPending(&infobar_manager, true);
875 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager);
876 ASSERT_FALSE(map_entry == NULL);
877 EXPECT_FALSE(map_entry->has_infobar_delegate());
878 SetNavigationPending(&infobar_manager, false);
879 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
880
881 // A pending search after a pending search should leave the map entry alive.
882 SetNavigationPending(&infobar_manager, true);
883 map_entry = GetMapEntry(&infobar_manager);
884 ASSERT_FALSE(map_entry == NULL);
885 EXPECT_FALSE(map_entry->has_infobar_delegate());
886 SetNavigationPending(&infobar_manager, true);
887 ASSERT_EQ(map_entry, GetMapEntry(&infobar_manager));
888 EXPECT_FALSE(map_entry->has_infobar_delegate());
889 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
890
891 // Committing this search should show an infobar.
892 CommitSearch(&infobar_manager,
893 GURL("http://www.google.co.uk/search?q=test2"));
894 EXPECT_TRUE(map_entry->has_infobar_delegate());
895 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
896 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
897 EXPECT_FALSE(listener_notified());
898 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
899 }
900
901 TEST_F(GoogleURLTrackerTest, NavigationsAfterCommittedSearch) {
902 TestInfoBarManager infobar_manager(1);
903 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
904 RequestServerCheck();
905 FinishSleep();
906 MockSearchDomainCheckResponse("http://www.google.co.jp/");
907 SetNavigationPending(&infobar_manager, true);
908 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
909 GoogleURLTrackerInfoBarDelegate* delegate =
910 GetInfoBarDelegate(&infobar_manager);
911 ASSERT_FALSE(delegate == NULL);
912 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
913
914 // A pending non-search on a visible infobar should basically do nothing.
915 SetNavigationPending(&infobar_manager, false);
916 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
917 EXPECT_EQ(0, delegate->pending_id());
918 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
919
920 // As should another pending non-search after the first.
921 SetNavigationPending(&infobar_manager, false);
922 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
923 EXPECT_EQ(0, delegate->pending_id());
924 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
925
926 // Committing this non-search should close the infobar. The control flow in
927 // these tests is not really comparable to in the real browser, but at least a
928 // few sanity-checks will be performed.
929 ASSERT_NO_FATAL_FAILURE(CommitNonSearch(&infobar_manager));
930 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
931
932 // A pending search on a visible infobar should cause the infobar to listen
933 // for the search to commit.
934 SetNavigationPending(&infobar_manager, true);
935 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
936 delegate = GetInfoBarDelegate(&infobar_manager);
937 ASSERT_FALSE(delegate == NULL);
938 SetNavigationPending(&infobar_manager, true);
939 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
940 EXPECT_EQ(1, delegate->pending_id());
941 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
942
943 // But a non-search after this should cancel that state.
944 SetNavigationPending(&infobar_manager, false);
945 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
946 EXPECT_EQ(0, delegate->pending_id());
947 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
948
949 // Another pending search after the non-search should put us back into
950 // "waiting for commit" mode.
951 SetNavigationPending(&infobar_manager, true);
952 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
953 EXPECT_EQ(1, delegate->pending_id());
954 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
955
956 // A second pending search after the first should not really change anything.
957 SetNavigationPending(&infobar_manager, true);
958 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
959 EXPECT_EQ(1, delegate->pending_id());
960 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
961
962 // Committing this search should change the visible infobar's search_url.
963 CommitSearch(&infobar_manager,
964 GURL("http://www.google.co.uk/search?q=test2"));
965 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
966 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"),
967 delegate->search_url());
968 EXPECT_EQ(0, delegate->pending_id());
969 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
970 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
971 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
972 EXPECT_FALSE(listener_notified());
973 }
974
975 TEST_F(GoogleURLTrackerTest, MultipleMapEntries) {
976 TestInfoBarManager infobar_manager(1);
977 TestInfoBarManager infobar_manager2(2);
978 TestInfoBarManager infobar_manager3(3);
979 TestInfoBarManager infobar_manager4(4);
980 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
981 RequestServerCheck();
982 FinishSleep();
983 MockSearchDomainCheckResponse("http://www.google.co.jp/");
984
985 SetNavigationPending(&infobar_manager, true);
986 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager);
987 ASSERT_FALSE(map_entry == NULL);
988 EXPECT_FALSE(map_entry->has_infobar_delegate());
989
990 SetNavigationPending(&infobar_manager2, true);
991 CommitSearch(&infobar_manager2,
992 GURL("http://www.google.co.uk/search?q=test2"));
993 GoogleURLTrackerInfoBarDelegate* delegate2 =
994 GetInfoBarDelegate(&infobar_manager2);
995 ASSERT_FALSE(delegate2 == NULL);
996 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"),
997 delegate2->search_url());
998
999 SetNavigationPending(&infobar_manager3, true);
1000 GoogleURLTrackerMapEntry* map_entry3 = GetMapEntry(&infobar_manager3);
1001 ASSERT_FALSE(map_entry3 == NULL);
1002 EXPECT_FALSE(map_entry3->has_infobar_delegate());
1003
1004 SetNavigationPending(&infobar_manager4, true);
1005 CommitSearch(&infobar_manager4,
1006 GURL("http://www.google.co.uk/search?q=test4"));
1007 GoogleURLTrackerInfoBarDelegate* delegate4 =
1008 GetInfoBarDelegate(&infobar_manager4);
1009 ASSERT_FALSE(delegate4 == NULL);
1010 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test4"),
1011 delegate4->search_url());
1012
1013 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
1014 EXPECT_TRUE(map_entry->has_infobar_delegate());
1015
1016 delegate2->Close(false);
1017 EXPECT_TRUE(GetMapEntry(&infobar_manager2) == NULL);
1018 EXPECT_FALSE(listener_notified());
1019
1020 delegate4->Accept();
1021 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
1022 EXPECT_TRUE(GetMapEntry(&infobar_manager3) == NULL);
1023 EXPECT_TRUE(GetMapEntry(&infobar_manager4) == NULL);
1024 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url());
1025 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL());
1026 EXPECT_TRUE(listener_notified());
1027 }
1028
1029 TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantNavigation) {
1030 TestInfoBarManager infobar_manager(1);
1031 TestInfoBarManager infobar_manager2(2);
1032 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
1033 RequestServerCheck();
1034 FinishSleep();
1035 MockSearchDomainCheckResponse("http://www.google.co.jp/");
1036
1037 // This tests a particularly gnarly sequence of events that used to cause us
1038 // to erroneously listen for a non-search navigation to commit.
1039 SetNavigationPending(&infobar_manager, true);
1040 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
1041 SetNavigationPending(&infobar_manager2, true);
1042 CommitSearch(&infobar_manager2,
1043 GURL("http://www.google.co.uk/search?q=test2"));
1044 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
1045 GoogleURLTrackerInfoBarDelegate* delegate2 =
1046 GetInfoBarDelegate(&infobar_manager2);
1047 ASSERT_FALSE(delegate2 == NULL);
1048 SetNavigationPending(&infobar_manager, true);
1049 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
1050 delegate2->Close(false);
1051 SetNavigationPending(&infobar_manager, false);
1052 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
1053 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698