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

Side by Side Diff: chrome/browser/google/google_url_tracker_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698