Update mojo surfaces bindings and mojo/cc/ glue
[chromium-blink-merge.git] / chrome / browser / google / google_url_tracker_unittest.cc
blob06bb385bbe0aa20cc4d2fddbb9b083d8ce6c7e74
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.
5 #include "components/google/core/browser/google_url_tracker.h"
7 #include <set>
8 #include <string>
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"
26 namespace {
28 // TestCallbackListener ---------------------------------------------------
30 class TestCallbackListener {
31 public:
32 TestCallbackListener();
33 virtual ~TestCallbackListener();
35 bool HasRegisteredCallback();
36 void RegisterCallback(GoogleURLTracker* google_url_tracker);
38 bool notified() const { return notified_; }
39 void clear_notified() { notified_ = false; }
41 private:
42 void OnGoogleURLUpdated();
44 bool notified_;
45 scoped_ptr<GoogleURLTracker::Subscription> google_url_updated_subscription_;
48 TestCallbackListener::TestCallbackListener() : notified_(false) {
51 TestCallbackListener::~TestCallbackListener() {
54 void TestCallbackListener::OnGoogleURLUpdated() {
55 notified_ = true;
58 bool TestCallbackListener::HasRegisteredCallback() {
59 return google_url_updated_subscription_.get();
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)));
70 // TestGoogleURLTrackerClient -------------------------------------------------
72 class TestGoogleURLTrackerClient : public GoogleURLTrackerClient {
73 public:
74 explicit TestGoogleURLTrackerClient(Profile* profile_);
75 virtual ~TestGoogleURLTrackerClient();
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;
83 private:
84 Profile* profile_;
85 bool observe_nav_start_;
87 DISALLOW_COPY_AND_ASSIGN(TestGoogleURLTrackerClient);
90 TestGoogleURLTrackerClient::TestGoogleURLTrackerClient(Profile* profile)
91 : profile_(profile),
92 observe_nav_start_(false) {
95 TestGoogleURLTrackerClient::~TestGoogleURLTrackerClient() {
98 void TestGoogleURLTrackerClient::SetListeningForNavigationStart(bool listen) {
99 observe_nav_start_ = listen;
102 bool TestGoogleURLTrackerClient::IsListeningForNavigationStart() {
103 return observe_nav_start_;
106 bool TestGoogleURLTrackerClient::IsBackgroundNetworkingEnabled() {
107 return true;
110 PrefService* TestGoogleURLTrackerClient::GetPrefs() {
111 return profile_->GetPrefs();
114 net::URLRequestContextGetter* TestGoogleURLTrackerClient::GetRequestContext() {
115 return profile_->GetRequestContext();
119 // TestGoogleURLTrackerNavigationHelper ---------------------------------------
121 class TestGoogleURLTrackerNavigationHelper
122 : public GoogleURLTrackerNavigationHelper {
123 public:
124 explicit TestGoogleURLTrackerNavigationHelper(GoogleURLTracker* tracker);
125 virtual ~TestGoogleURLTrackerNavigationHelper();
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;
135 private:
136 bool listening_for_nav_commit_;
137 bool listening_for_tab_destruction_;
139 DISALLOW_COPY_AND_ASSIGN(TestGoogleURLTrackerNavigationHelper);
142 TestGoogleURLTrackerNavigationHelper::TestGoogleURLTrackerNavigationHelper(
143 GoogleURLTracker* tracker)
144 : GoogleURLTrackerNavigationHelper(tracker),
145 listening_for_nav_commit_(false),
146 listening_for_tab_destruction_(false) {
149 TestGoogleURLTrackerNavigationHelper::~TestGoogleURLTrackerNavigationHelper() {
152 void TestGoogleURLTrackerNavigationHelper::SetListeningForNavigationCommit(
153 bool listen) {
154 listening_for_nav_commit_ = listen;
157 bool TestGoogleURLTrackerNavigationHelper::IsListeningForNavigationCommit() {
158 return listening_for_nav_commit_;
161 void TestGoogleURLTrackerNavigationHelper::SetListeningForTabDestruction(
162 bool listen) {
163 listening_for_tab_destruction_ = listen;
166 bool TestGoogleURLTrackerNavigationHelper::IsListeningForTabDestruction() {
167 return listening_for_tab_destruction_;
170 void TestGoogleURLTrackerNavigationHelper::OpenURL(
171 GURL url,
172 WindowOpenDisposition disposition,
173 bool user_clicked_on_link) {
176 // TestInfoBarManager ---------------------------------------------------------
178 class TestInfoBarManager : public infobars::InfoBarManager {
179 public:
180 explicit TestInfoBarManager(int unique_id);
181 virtual ~TestInfoBarManager();
182 virtual int GetActiveEntryID() OVERRIDE;
184 private:
185 int unique_id_;
186 DISALLOW_COPY_AND_ASSIGN(TestInfoBarManager);
189 TestInfoBarManager::TestInfoBarManager(int unique_id) : unique_id_(unique_id) {
192 TestInfoBarManager::~TestInfoBarManager() {
193 ShutDown();
196 int TestInfoBarManager::GetActiveEntryID() {
197 return unique_id_;
200 } // namespace
202 // GoogleURLTrackerTest -------------------------------------------------------
204 class GoogleURLTrackerTest : public testing::Test {
205 protected:
206 GoogleURLTrackerTest();
207 virtual ~GoogleURLTrackerTest();
209 // testing::Test
210 virtual void SetUp() OVERRIDE;
211 virtual void TearDown() OVERRIDE;
213 net::TestURLFetcher* GetFetcher();
214 void MockSearchDomainCheckResponse(const std::string& domain);
215 void RequestServerCheck();
216 void FinishSleep();
217 void NotifyIPAddressChanged();
218 GURL fetched_google_url() const {
219 return google_url_tracker_->fetched_google_url();
221 void set_google_url(const GURL& url) {
222 google_url_tracker_->google_url_ = url;
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(); }
245 private:
246 // These are required by the TestURLFetchers GoogleURLTracker will create (see
247 // test_url_fetcher_factory.h).
248 content::TestBrowserThreadBundle thread_bundle_;
250 // Creating this allows us to call
251 // net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests().
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_;
263 GoogleURLTrackerTest::GoogleURLTrackerTest()
264 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {
265 GoogleURLTrackerFactory::GetInstance()->
266 RegisterUserPrefsOnBrowserContextForTest(&profile_);
269 GoogleURLTrackerTest::~GoogleURLTrackerTest() {
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));
282 void GoogleURLTrackerTest::TearDown() {
283 while (!infobar_managers_seen_.empty())
284 CloseTab(*infobar_managers_seen_.begin());
285 google_url_tracker_->Shutdown();
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);
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.
307 void GoogleURLTrackerTest::RequestServerCheck() {
308 if (!listener_.HasRegisteredCallback())
309 listener_.RegisterCallback(google_url_tracker_.get());
310 google_url_tracker_->SetNeedToFetch();
313 void GoogleURLTrackerTest::FinishSleep() {
314 google_url_tracker_->FinishSleep();
317 void GoogleURLTrackerTest::NotifyIPAddressChanged() {
318 net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
319 // For thread safety, the NCN queues tasks to do the actual notifications, so
320 // we need to spin the message loop so the tracker will actually be notified.
321 base::MessageLoop::current()->RunUntilIdle();
324 void GoogleURLTrackerTest::SetLastPromptedGoogleURL(const GURL& url) {
325 profile_.GetPrefs()->SetString(prefs::kLastPromptedGoogleURL, url.spec());
328 GURL GoogleURLTrackerTest::GetLastPromptedGoogleURL() {
329 return GURL(profile_.GetPrefs()->GetString(prefs::kLastPromptedGoogleURL));
332 void GoogleURLTrackerTest::SetNavigationPending(
333 infobars::InfoBarManager* infobar_manager,
334 bool is_search) {
335 if (is_search) {
336 google_url_tracker_->SearchCommitted();
337 // Note that the call above might not have actually registered a listener
338 // for navigation starts if the searchdomaincheck response was bogus.
340 infobar_managers_seen_.insert(infobar_manager);
341 if (client_->IsListeningForNavigationStart()) {
342 google_url_tracker_->OnNavigationPending(
343 scoped_ptr<GoogleURLTrackerNavigationHelper>(
344 new TestGoogleURLTrackerNavigationHelper(
345 google_url_tracker_.get())),
346 infobar_manager,
347 infobar_manager->GetActiveEntryID());
351 void GoogleURLTrackerTest::CommitNonSearch(
352 infobars::InfoBarManager* infobar_manager) {
353 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
354 if (!map_entry)
355 return;
357 ExpectListeningForCommit(infobar_manager, false);
359 // The infobar should be showing; otherwise the pending non-search should
360 // have closed it.
361 ASSERT_TRUE(map_entry->has_infobar_delegate());
363 // The pending_id should have been reset to 0 when the non-search became
364 // pending.
365 EXPECT_EQ(0, map_entry->infobar_delegate()->pending_id());
367 // Committing the navigation would close the infobar.
368 map_entry->infobar_delegate()->Close(false);
371 void GoogleURLTrackerTest::CommitSearch(
372 infobars::InfoBarManager* infobar_manager,
373 const GURL& search_url) {
374 DCHECK(search_url.is_valid());
375 GoogleURLTrackerNavigationHelper* nav_helper =
376 GetNavigationHelper(infobar_manager);
377 if (nav_helper && nav_helper->IsListeningForNavigationCommit()) {
378 google_url_tracker_->OnNavigationCommitted(infobar_manager, search_url);
382 void GoogleURLTrackerTest::CloseTab(infobars::InfoBarManager* infobar_manager) {
383 infobar_managers_seen_.erase(infobar_manager);
384 GoogleURLTrackerNavigationHelper* nav_helper =
385 GetNavigationHelper(infobar_manager);
386 if (nav_helper && nav_helper->IsListeningForTabDestruction()) {
387 google_url_tracker_->OnTabClosed(nav_helper);
388 } else {
389 // Closing a tab with an infobar showing would close the infobar.
390 GoogleURLTrackerInfoBarDelegate* delegate =
391 GetInfoBarDelegate(infobar_manager);
392 if (delegate)
393 delegate->Close(false);
397 GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry(
398 infobars::InfoBarManager* infobar_manager) {
399 GoogleURLTracker::EntryMap::const_iterator i =
400 google_url_tracker_->entry_map_.find(infobar_manager);
401 return (i == google_url_tracker_->entry_map_.end()) ? NULL : i->second;
404 GoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::GetInfoBarDelegate(
405 infobars::InfoBarManager* infobar_manager) {
406 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
407 return map_entry ? map_entry->infobar_delegate() : NULL;
410 GoogleURLTrackerNavigationHelper* GoogleURLTrackerTest::GetNavigationHelper(
411 infobars::InfoBarManager* infobar_manager) {
412 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
413 return map_entry ? map_entry->navigation_helper() : NULL;
416 void GoogleURLTrackerTest::ExpectDefaultURLs() const {
417 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
418 EXPECT_EQ(GURL(), fetched_google_url());
421 void GoogleURLTrackerTest::ExpectListeningForCommit(
422 infobars::InfoBarManager* infobar_manager,
423 bool listening) {
424 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
425 if (map_entry) {
426 EXPECT_EQ(listening,
427 map_entry->navigation_helper()->IsListeningForNavigationCommit());
428 } else {
429 EXPECT_FALSE(listening);
433 // Tests ----------------------------------------------------------------------
435 TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) {
436 ExpectDefaultURLs();
437 FinishSleep();
438 // No one called RequestServerCheck() so nothing should have happened.
439 EXPECT_FALSE(GetFetcher());
440 MockSearchDomainCheckResponse("http://www.google.co.uk/");
441 ExpectDefaultURLs();
442 EXPECT_FALSE(listener_notified());
445 TEST_F(GoogleURLTrackerTest, UpdateOnFirstRun) {
446 RequestServerCheck();
447 EXPECT_FALSE(GetFetcher());
448 ExpectDefaultURLs();
449 EXPECT_FALSE(listener_notified());
451 FinishSleep();
452 MockSearchDomainCheckResponse("http://www.google.co.uk/");
453 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
454 // GoogleURL should be updated, becase there was no last prompted URL.
455 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
456 EXPECT_TRUE(listener_notified());
459 TEST_F(GoogleURLTrackerTest, DontUpdateWhenUnchanged) {
460 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
462 RequestServerCheck();
463 EXPECT_FALSE(GetFetcher());
464 ExpectDefaultURLs();
465 EXPECT_FALSE(listener_notified());
467 FinishSleep();
468 MockSearchDomainCheckResponse("http://www.google.co.uk/");
469 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
470 // GoogleURL should not be updated, because the fetched and prompted URLs
471 // match.
472 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
473 EXPECT_FALSE(listener_notified());
476 TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) {
477 TestInfoBarManager infobar_manager(1);
478 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
480 RequestServerCheck();
481 EXPECT_FALSE(GetFetcher());
482 ExpectDefaultURLs();
483 EXPECT_FALSE(listener_notified());
485 // Old-style domain string.
486 FinishSleep();
487 MockSearchDomainCheckResponse(".google.co.in");
488 EXPECT_EQ(GURL(), fetched_google_url());
489 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
490 EXPECT_FALSE(listener_notified());
491 SetNavigationPending(&infobar_manager, true);
492 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
493 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
495 // Bad subdomain.
496 NotifyIPAddressChanged();
497 MockSearchDomainCheckResponse("http://mail.google.com/");
498 EXPECT_EQ(GURL(), fetched_google_url());
499 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
500 EXPECT_FALSE(listener_notified());
501 SetNavigationPending(&infobar_manager, true);
502 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
503 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
505 // Non-empty path.
506 NotifyIPAddressChanged();
507 MockSearchDomainCheckResponse("http://www.google.com/search");
508 EXPECT_EQ(GURL(), fetched_google_url());
509 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
510 EXPECT_FALSE(listener_notified());
511 SetNavigationPending(&infobar_manager, true);
512 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
513 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
515 // Non-empty query.
516 NotifyIPAddressChanged();
517 MockSearchDomainCheckResponse("http://www.google.com/?q=foo");
518 EXPECT_EQ(GURL(), fetched_google_url());
519 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
520 EXPECT_FALSE(listener_notified());
521 SetNavigationPending(&infobar_manager, true);
522 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
523 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
525 // Non-empty ref.
526 NotifyIPAddressChanged();
527 MockSearchDomainCheckResponse("http://www.google.com/#anchor");
528 EXPECT_EQ(GURL(), fetched_google_url());
529 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
530 EXPECT_FALSE(listener_notified());
531 SetNavigationPending(&infobar_manager, true);
532 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
533 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
535 // Complete garbage.
536 NotifyIPAddressChanged();
537 MockSearchDomainCheckResponse("HJ)*qF)_*&@f1");
538 EXPECT_EQ(GURL(), fetched_google_url());
539 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
540 EXPECT_FALSE(listener_notified());
541 SetNavigationPending(&infobar_manager, true);
542 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
543 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
546 TEST_F(GoogleURLTrackerTest, UpdatePromptedURLOnReturnToPreviousLocation) {
547 SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/"));
548 set_google_url(GURL("http://www.google.co.uk/"));
549 RequestServerCheck();
550 FinishSleep();
551 MockSearchDomainCheckResponse("http://www.google.co.uk/");
552 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
553 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
554 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
555 EXPECT_FALSE(listener_notified());
558 TEST_F(GoogleURLTrackerTest, SilentlyAcceptSchemeChange) {
559 // We should auto-accept changes to the current Google URL that merely change
560 // the scheme, regardless of what the last prompted URL was.
561 SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/"));
562 set_google_url(GURL("http://www.google.co.uk/"));
563 RequestServerCheck();
564 FinishSleep();
565 MockSearchDomainCheckResponse("https://www.google.co.uk/");
566 EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url());
567 EXPECT_EQ(GURL("https://www.google.co.uk/"), google_url());
568 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL());
569 EXPECT_TRUE(listener_notified());
571 NotifyIPAddressChanged();
572 MockSearchDomainCheckResponse("http://www.google.co.uk/");
573 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
574 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
575 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
576 EXPECT_TRUE(listener_notified());
579 TEST_F(GoogleURLTrackerTest, RefetchOnIPAddressChange) {
580 RequestServerCheck();
581 FinishSleep();
582 MockSearchDomainCheckResponse("http://www.google.co.uk/");
583 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
584 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
585 EXPECT_TRUE(listener_notified());
586 clear_listener_notified();
588 NotifyIPAddressChanged();
589 MockSearchDomainCheckResponse("http://www.google.co.in/");
590 EXPECT_EQ(GURL("http://www.google.co.in/"), fetched_google_url());
591 // Just fetching a new URL shouldn't reset things without a prompt.
592 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
593 EXPECT_FALSE(listener_notified());
596 TEST_F(GoogleURLTrackerTest, DontRefetchWhenNoOneRequestsCheck) {
597 FinishSleep();
598 NotifyIPAddressChanged();
599 // No one called RequestServerCheck() so nothing should have happened.
600 EXPECT_FALSE(GetFetcher());
601 MockSearchDomainCheckResponse("http://www.google.co.uk/");
602 ExpectDefaultURLs();
603 EXPECT_FALSE(listener_notified());
606 TEST_F(GoogleURLTrackerTest, FetchOnLateRequest) {
607 FinishSleep();
608 NotifyIPAddressChanged();
609 MockSearchDomainCheckResponse("http://www.google.co.jp/");
611 RequestServerCheck();
612 // The first request for a check should trigger a fetch if it hasn't happened
613 // already.
614 MockSearchDomainCheckResponse("http://www.google.co.uk/");
615 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
616 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
617 EXPECT_TRUE(listener_notified());
620 TEST_F(GoogleURLTrackerTest, DontFetchTwiceOnLateRequests) {
621 FinishSleep();
622 NotifyIPAddressChanged();
623 MockSearchDomainCheckResponse("http://www.google.co.jp/");
625 RequestServerCheck();
626 // The first request for a check should trigger a fetch if it hasn't happened
627 // already.
628 MockSearchDomainCheckResponse("http://www.google.co.uk/");
629 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
630 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
631 EXPECT_TRUE(listener_notified());
632 clear_listener_notified();
634 RequestServerCheck();
635 // The second request should be ignored.
636 EXPECT_FALSE(GetFetcher());
637 MockSearchDomainCheckResponse("http://www.google.co.in/");
638 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
639 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
640 EXPECT_FALSE(listener_notified());
643 TEST_F(GoogleURLTrackerTest, SearchingDoesNothingIfNoNeedToPrompt) {
644 TestInfoBarManager infobar_manager(1);
645 RequestServerCheck();
646 FinishSleep();
647 MockSearchDomainCheckResponse("http://www.google.co.uk/");
648 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
649 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
650 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
651 EXPECT_TRUE(listener_notified());
652 clear_listener_notified();
654 SetNavigationPending(&infobar_manager, true);
655 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
656 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
657 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
658 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
659 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
660 EXPECT_FALSE(listener_notified());
663 TEST_F(GoogleURLTrackerTest, TabClosedOnPendingSearch) {
664 TestInfoBarManager infobar_manager(1);
665 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
666 RequestServerCheck();
667 FinishSleep();
668 MockSearchDomainCheckResponse("http://www.google.co.jp/");
669 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
670 EXPECT_EQ(GURL("http://www.google.co.jp/"), fetched_google_url());
671 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
672 EXPECT_FALSE(listener_notified());
674 SetNavigationPending(&infobar_manager, true);
675 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager);
676 ASSERT_FALSE(map_entry == NULL);
677 EXPECT_FALSE(map_entry->has_infobar_delegate());
678 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
679 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
680 EXPECT_FALSE(listener_notified());
682 CloseTab(&infobar_manager);
683 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
684 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
685 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
686 EXPECT_FALSE(listener_notified());
689 TEST_F(GoogleURLTrackerTest, TabClosedOnCommittedSearch) {
690 TestInfoBarManager infobar_manager(1);
691 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
692 RequestServerCheck();
693 FinishSleep();
694 MockSearchDomainCheckResponse("http://www.google.co.jp/");
696 SetNavigationPending(&infobar_manager, true);
697 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
698 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
700 CloseTab(&infobar_manager);
701 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
702 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
703 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
704 EXPECT_FALSE(listener_notified());
707 TEST_F(GoogleURLTrackerTest, InfoBarClosed) {
708 TestInfoBarManager infobar_manager(1);
709 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
710 RequestServerCheck();
711 FinishSleep();
712 MockSearchDomainCheckResponse("http://www.google.co.jp/");
714 SetNavigationPending(&infobar_manager, true);
715 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
716 GoogleURLTrackerInfoBarDelegate* infobar =
717 GetInfoBarDelegate(&infobar_manager);
718 ASSERT_FALSE(infobar == NULL);
720 infobar->Close(false);
721 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
722 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
723 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
724 EXPECT_FALSE(listener_notified());
727 TEST_F(GoogleURLTrackerTest, InfoBarRefused) {
728 TestInfoBarManager infobar_manager(1);
729 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
730 RequestServerCheck();
731 FinishSleep();
732 MockSearchDomainCheckResponse("http://www.google.co.jp/");
734 SetNavigationPending(&infobar_manager, true);
735 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
736 GoogleURLTrackerInfoBarDelegate* infobar =
737 GetInfoBarDelegate(&infobar_manager);
738 ASSERT_FALSE(infobar == NULL);
740 infobar->Cancel();
741 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
742 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
743 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL());
744 EXPECT_FALSE(listener_notified());
747 TEST_F(GoogleURLTrackerTest, InfoBarAccepted) {
748 TestInfoBarManager infobar_manager(1);
749 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
750 RequestServerCheck();
751 FinishSleep();
752 MockSearchDomainCheckResponse("http://www.google.co.jp/");
754 SetNavigationPending(&infobar_manager, true);
755 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
756 GoogleURLTrackerInfoBarDelegate* infobar =
757 GetInfoBarDelegate(&infobar_manager);
758 ASSERT_FALSE(infobar == NULL);
760 infobar->Accept();
761 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
762 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url());
763 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL());
764 EXPECT_TRUE(listener_notified());
767 TEST_F(GoogleURLTrackerTest, FetchesCanAutomaticallyCloseInfoBars) {
768 TestInfoBarManager infobar_manager(1);
769 RequestServerCheck();
770 FinishSleep();
771 MockSearchDomainCheckResponse(google_url().spec());
773 // Re-fetching the accepted URL after showing an infobar for another URL
774 // should close the infobar.
775 NotifyIPAddressChanged();
776 MockSearchDomainCheckResponse("http://www.google.co.uk/");
777 SetNavigationPending(&infobar_manager, true);
778 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
779 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
780 NotifyIPAddressChanged();
781 MockSearchDomainCheckResponse(google_url().spec());
782 EXPECT_EQ(google_url(), GetLastPromptedGoogleURL());
783 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
785 // As should fetching a URL that differs from the accepted only by the scheme.
786 NotifyIPAddressChanged();
787 MockSearchDomainCheckResponse("http://www.google.co.uk/");
788 SetNavigationPending(&infobar_manager, true);
789 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
790 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
791 NotifyIPAddressChanged();
792 url::Replacements<char> replacements;
793 const std::string& scheme("https");
794 replacements.SetScheme(scheme.data(), url::Component(0, scheme.length()));
795 GURL new_google_url(google_url().ReplaceComponents(replacements));
796 MockSearchDomainCheckResponse(new_google_url.spec());
797 EXPECT_EQ(new_google_url, GetLastPromptedGoogleURL());
798 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
800 // As should re-fetching the last prompted URL.
801 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
802 NotifyIPAddressChanged();
803 MockSearchDomainCheckResponse("http://www.google.co.jp/");
804 SetNavigationPending(&infobar_manager, true);
805 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
806 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
807 NotifyIPAddressChanged();
808 MockSearchDomainCheckResponse("http://www.google.co.uk/");
809 EXPECT_EQ(new_google_url, google_url());
810 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
811 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
813 // And one that differs from the last prompted URL only by the scheme.
814 NotifyIPAddressChanged();
815 MockSearchDomainCheckResponse("http://www.google.co.jp/");
816 SetNavigationPending(&infobar_manager, true);
817 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
818 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
819 NotifyIPAddressChanged();
820 MockSearchDomainCheckResponse("https://www.google.co.uk/");
821 EXPECT_EQ(new_google_url, google_url());
822 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL());
823 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
825 // And fetching a different URL entirely.
826 NotifyIPAddressChanged();
827 MockSearchDomainCheckResponse("http://www.google.co.jp/");
828 SetNavigationPending(&infobar_manager, true);
829 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
830 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
831 NotifyIPAddressChanged();
832 MockSearchDomainCheckResponse("https://www.google.co.in/");
833 EXPECT_EQ(new_google_url, google_url());
834 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL());
835 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
838 TEST_F(GoogleURLTrackerTest, ResetInfoBarGoogleURLs) {
839 TestInfoBarManager infobar_manager(1);
840 RequestServerCheck();
841 FinishSleep();
842 MockSearchDomainCheckResponse(google_url().spec());
844 NotifyIPAddressChanged();
845 MockSearchDomainCheckResponse("http://www.google.co.uk/");
846 SetNavigationPending(&infobar_manager, true);
847 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
848 GoogleURLTrackerInfoBarDelegate* delegate =
849 GetInfoBarDelegate(&infobar_manager);
850 ASSERT_FALSE(delegate == NULL);
851 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
853 // If while an infobar is showing we fetch a new URL that differs from the
854 // infobar's only by scheme, the infobar should stay showing.
855 NotifyIPAddressChanged();
856 MockSearchDomainCheckResponse("https://www.google.co.uk/");
857 EXPECT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
858 EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url());
861 TEST_F(GoogleURLTrackerTest, NavigationsAfterPendingSearch) {
862 TestInfoBarManager infobar_manager(1);
863 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
864 RequestServerCheck();
865 FinishSleep();
866 MockSearchDomainCheckResponse("http://www.google.co.jp/");
868 // A pending non-search after a pending search should delete the map entry.
869 SetNavigationPending(&infobar_manager, true);
870 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager);
871 ASSERT_FALSE(map_entry == NULL);
872 EXPECT_FALSE(map_entry->has_infobar_delegate());
873 SetNavigationPending(&infobar_manager, false);
874 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
876 // A pending search after a pending search should leave the map entry alive.
877 SetNavigationPending(&infobar_manager, true);
878 map_entry = GetMapEntry(&infobar_manager);
879 ASSERT_FALSE(map_entry == NULL);
880 EXPECT_FALSE(map_entry->has_infobar_delegate());
881 SetNavigationPending(&infobar_manager, true);
882 ASSERT_EQ(map_entry, GetMapEntry(&infobar_manager));
883 EXPECT_FALSE(map_entry->has_infobar_delegate());
884 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
886 // Committing this search should show an infobar.
887 CommitSearch(&infobar_manager,
888 GURL("http://www.google.co.uk/search?q=test2"));
889 EXPECT_TRUE(map_entry->has_infobar_delegate());
890 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
891 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
892 EXPECT_FALSE(listener_notified());
893 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
896 TEST_F(GoogleURLTrackerTest, NavigationsAfterCommittedSearch) {
897 TestInfoBarManager infobar_manager(1);
898 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
899 RequestServerCheck();
900 FinishSleep();
901 MockSearchDomainCheckResponse("http://www.google.co.jp/");
902 SetNavigationPending(&infobar_manager, true);
903 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
904 GoogleURLTrackerInfoBarDelegate* delegate =
905 GetInfoBarDelegate(&infobar_manager);
906 ASSERT_FALSE(delegate == NULL);
907 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
909 // A pending non-search on a visible infobar should basically do nothing.
910 SetNavigationPending(&infobar_manager, false);
911 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
912 EXPECT_EQ(0, delegate->pending_id());
913 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
915 // As should another pending non-search after the first.
916 SetNavigationPending(&infobar_manager, false);
917 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
918 EXPECT_EQ(0, delegate->pending_id());
919 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
921 // Committing this non-search should close the infobar. The control flow in
922 // these tests is not really comparable to in the real browser, but at least a
923 // few sanity-checks will be performed.
924 ASSERT_NO_FATAL_FAILURE(CommitNonSearch(&infobar_manager));
925 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
927 // A pending search on a visible infobar should cause the infobar to listen
928 // for the search to commit.
929 SetNavigationPending(&infobar_manager, true);
930 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
931 delegate = GetInfoBarDelegate(&infobar_manager);
932 ASSERT_FALSE(delegate == NULL);
933 SetNavigationPending(&infobar_manager, true);
934 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
935 EXPECT_EQ(1, delegate->pending_id());
936 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
938 // But a non-search after this should cancel that state.
939 SetNavigationPending(&infobar_manager, false);
940 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
941 EXPECT_EQ(0, delegate->pending_id());
942 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
944 // Another pending search after the non-search should put us back into
945 // "waiting for commit" mode.
946 SetNavigationPending(&infobar_manager, true);
947 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
948 EXPECT_EQ(1, delegate->pending_id());
949 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
951 // A second pending search after the first should not really change anything.
952 SetNavigationPending(&infobar_manager, true);
953 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
954 EXPECT_EQ(1, delegate->pending_id());
955 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
957 // Committing this search should change the visible infobar's search_url.
958 CommitSearch(&infobar_manager,
959 GURL("http://www.google.co.uk/search?q=test2"));
960 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
961 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"),
962 delegate->search_url());
963 EXPECT_EQ(0, delegate->pending_id());
964 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
965 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
966 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
967 EXPECT_FALSE(listener_notified());
970 TEST_F(GoogleURLTrackerTest, MultipleMapEntries) {
971 TestInfoBarManager infobar_manager(1);
972 TestInfoBarManager infobar_manager2(2);
973 TestInfoBarManager infobar_manager3(3);
974 TestInfoBarManager infobar_manager4(4);
975 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
976 RequestServerCheck();
977 FinishSleep();
978 MockSearchDomainCheckResponse("http://www.google.co.jp/");
980 SetNavigationPending(&infobar_manager, true);
981 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager);
982 ASSERT_FALSE(map_entry == NULL);
983 EXPECT_FALSE(map_entry->has_infobar_delegate());
985 SetNavigationPending(&infobar_manager2, true);
986 CommitSearch(&infobar_manager2,
987 GURL("http://www.google.co.uk/search?q=test2"));
988 GoogleURLTrackerInfoBarDelegate* delegate2 =
989 GetInfoBarDelegate(&infobar_manager2);
990 ASSERT_FALSE(delegate2 == NULL);
991 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"),
992 delegate2->search_url());
994 SetNavigationPending(&infobar_manager3, true);
995 GoogleURLTrackerMapEntry* map_entry3 = GetMapEntry(&infobar_manager3);
996 ASSERT_FALSE(map_entry3 == NULL);
997 EXPECT_FALSE(map_entry3->has_infobar_delegate());
999 SetNavigationPending(&infobar_manager4, true);
1000 CommitSearch(&infobar_manager4,
1001 GURL("http://www.google.co.uk/search?q=test4"));
1002 GoogleURLTrackerInfoBarDelegate* delegate4 =
1003 GetInfoBarDelegate(&infobar_manager4);
1004 ASSERT_FALSE(delegate4 == NULL);
1005 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test4"),
1006 delegate4->search_url());
1008 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
1009 EXPECT_TRUE(map_entry->has_infobar_delegate());
1011 delegate2->Close(false);
1012 EXPECT_TRUE(GetMapEntry(&infobar_manager2) == NULL);
1013 EXPECT_FALSE(listener_notified());
1015 delegate4->Accept();
1016 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
1017 EXPECT_TRUE(GetMapEntry(&infobar_manager3) == NULL);
1018 EXPECT_TRUE(GetMapEntry(&infobar_manager4) == NULL);
1019 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url());
1020 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL());
1021 EXPECT_TRUE(listener_notified());
1024 TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantNavigation) {
1025 TestInfoBarManager infobar_manager(1);
1026 TestInfoBarManager infobar_manager2(2);
1027 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
1028 RequestServerCheck();
1029 FinishSleep();
1030 MockSearchDomainCheckResponse("http://www.google.co.jp/");
1032 // This tests a particularly gnarly sequence of events that used to cause us
1033 // to erroneously listen for a non-search navigation to commit.
1034 SetNavigationPending(&infobar_manager, true);
1035 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
1036 SetNavigationPending(&infobar_manager2, true);
1037 CommitSearch(&infobar_manager2,
1038 GURL("http://www.google.co.uk/search?q=test2"));
1039 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
1040 GoogleURLTrackerInfoBarDelegate* delegate2 =
1041 GetInfoBarDelegate(&infobar_manager2);
1042 ASSERT_FALSE(delegate2 == NULL);
1043 SetNavigationPending(&infobar_manager, true);
1044 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
1045 delegate2->Close(false);
1046 SetNavigationPending(&infobar_manager, false);
1047 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));