diff options
author | droger@chromium.org <droger@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-03 13:36:04 +0000 |
---|---|---|
committer | droger@chromium.org <droger@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-03 13:36:04 +0000 |
commit | b4b8711a2a9a50738b620f62af7feed997d28447 (patch) | |
tree | 60017cfe2c2ba728b7aff720636eb69921a92f57 | |
parent | 0d06a59da4d3973691f9ad51a7d17ef922d6620f (diff) | |
download | chromium_src-b4b8711a2a9a50738b620f62af7feed997d28447.zip chromium_src-b4b8711a2a9a50738b620f62af7feed997d28447.tar.gz chromium_src-b4b8711a2a9a50738b620f62af7feed997d28447.tar.bz2 |
Remove Infobars notifications from GoogleURLTrackerMapEntry
The InfoBarManager::Observer() is used instead.
GoogleURLTrackerMapEntry now makes actual calls on the InfoBarManager (to
register and unregister as an observer). This has some consequences:
- the |infobar_manager_| pointer is no longer const
- the unittest has to create actual instances of InfoBarManager instead of
using placeholder integers.
BUG=373243
Review URL: https://codereview.chromium.org/290453005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@274510 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/google/google_url_tracker.cc | 3 | ||||
-rw-r--r-- | chrome/browser/google/google_url_tracker.h | 7 | ||||
-rw-r--r-- | chrome/browser/google/google_url_tracker_map_entry.cc | 47 | ||||
-rw-r--r-- | chrome/browser/google/google_url_tracker_map_entry.h | 24 | ||||
-rw-r--r-- | chrome/browser/google/google_url_tracker_unittest.cc | 559 |
5 files changed, 278 insertions, 362 deletions
diff --git a/chrome/browser/google/google_url_tracker.cc b/chrome/browser/google/google_url_tracker.cc index 88233ac..986f471 100644 --- a/chrome/browser/google/google_url_tracker.cc +++ b/chrome/browser/google/google_url_tracker.cc @@ -36,7 +36,6 @@ GoogleURLTracker::GoogleURLTracker(Profile* profile, Mode mode) : profile_(profile), client_(client.Pass()), - infobar_creator_(base::Bind(&GoogleURLTrackerInfoBarDelegate::Create)), google_url_(mode == UNIT_TEST_MODE ? kDefaultGoogleHomepage : profile->GetPrefs()->GetString(prefs::kLastKnownGoogleURL)), @@ -343,7 +342,7 @@ void GoogleURLTracker::OnNavigationCommitted( if (map_entry->has_infobar_delegate()) { map_entry->infobar_delegate()->Update(search_url); } else { - infobars::InfoBar* infobar = infobar_creator_.Run( + infobars::InfoBar* infobar = GoogleURLTrackerInfoBarDelegate::Create( infobar_manager, this, search_url); if (infobar) { map_entry->SetInfoBarDelegate( diff --git a/chrome/browser/google/google_url_tracker.h b/chrome/browser/google/google_url_tracker.h index 67e088f..207ac7b 100644 --- a/chrome/browser/google/google_url_tracker.h +++ b/chrome/browser/google/google_url_tracker.h @@ -188,13 +188,6 @@ class GoogleURLTracker : public net::URLFetcherDelegate, scoped_ptr<GoogleURLTrackerClient> client_; - // Creates an infobar and adds it to the provided InfoBarManager. Returns - // the infobar on success or NULL on failure. The caller does not own the - // returned object, the InfoBarManager does. - base::Callback<infobars::InfoBar*(infobars::InfoBarManager*, - GoogleURLTracker*, - const GURL&)> infobar_creator_; - GURL google_url_; GURL fetched_google_url_; scoped_ptr<net::URLFetcher> fetcher_; diff --git a/chrome/browser/google/google_url_tracker_map_entry.cc b/chrome/browser/google/google_url_tracker_map_entry.cc index d710947..f994f29 100644 --- a/chrome/browser/google/google_url_tracker_map_entry.cc +++ b/chrome/browser/google/google_url_tracker_map_entry.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -7,8 +7,6 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/google/google_url_tracker.h" #include "components/infobars/core/infobar.h" -#include "content/public/browser/notification_details.h" -#include "content/public/browser/notification_source.h" GoogleURLTrackerMapEntry::GoogleURLTrackerMapEntry( GoogleURLTracker* google_url_tracker, @@ -17,25 +15,14 @@ GoogleURLTrackerMapEntry::GoogleURLTrackerMapEntry( : google_url_tracker_(google_url_tracker), infobar_manager_(infobar_manager), infobar_delegate_(NULL), - navigation_helper_(navigation_helper.Pass()) { + navigation_helper_(navigation_helper.Pass()), + observing_(false) { + DCHECK(infobar_manager_); } GoogleURLTrackerMapEntry::~GoogleURLTrackerMapEntry() { -} - -void GoogleURLTrackerMapEntry::Observe( - int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) { - DCHECK(infobar_delegate_); - DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type); - DCHECK_EQ(infobar_manager_, - content::Source<infobars::InfoBarManager>(source).ptr()); - if (content::Details<infobars::InfoBar::RemovedDetails>( - details)->first->delegate() == infobar_delegate_) { - google_url_tracker_->DeleteMapEntryForManager(infobar_manager_); - // WARNING: At this point |this| has been deleted! - } + if (observing_) + infobar_manager_->RemoveObserver(this); } void GoogleURLTrackerMapEntry::SetInfoBarDelegate( @@ -47,9 +34,8 @@ void GoogleURLTrackerMapEntry::SetInfoBarDelegate( // the case where the user accepts the new Google URL. infobar_delegate->set_navigation_helper(navigation_helper_.Pass()); infobar_delegate_ = infobar_delegate; - registrar_.Add(this, - chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, - content::Source<infobars::InfoBarManager>(infobar_manager_)); + infobar_manager_->AddObserver(this); + observing_ = true; } void GoogleURLTrackerMapEntry::Close(bool redo_search) { @@ -62,3 +48,20 @@ void GoogleURLTrackerMapEntry::Close(bool redo_search) { } // WARNING: At this point |this| has been deleted! } + +void GoogleURLTrackerMapEntry::OnInfoBarRemoved(infobars::InfoBar* infobar, + bool animate) { + DCHECK(infobar_delegate_); + if (infobar->delegate() == infobar_delegate_) { + google_url_tracker_->DeleteMapEntryForManager(infobar_manager_); + // WARNING: At this point |this| has been deleted! + } +} + +void GoogleURLTrackerMapEntry::OnManagerShuttingDown( + infobars::InfoBarManager* manager) { + DCHECK(observing_); + DCHECK_EQ(infobar_manager_, manager); + manager->RemoveObserver(this); + observing_ = false; +} diff --git a/chrome/browser/google/google_url_tracker_map_entry.h b/chrome/browser/google/google_url_tracker_map_entry.h index 1acd274..5cdb2b5 100644 --- a/chrome/browser/google/google_url_tracker_map_entry.h +++ b/chrome/browser/google/google_url_tracker_map_entry.h @@ -1,4 +1,4 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -8,8 +8,7 @@ #include "base/memory/scoped_ptr.h" #include "chrome/browser/google/google_url_tracker_infobar_delegate.h" #include "chrome/browser/google/google_url_tracker_navigation_helper.h" -#include "content/public/browser/notification_observer.h" -#include "content/public/browser/notification_registrar.h" +#include "components/infobars/core/infobar_manager.h" class GoogleURLTracker; @@ -17,7 +16,7 @@ namespace infobars { class InfoBarManager; } -class GoogleURLTrackerMapEntry : public content::NotificationObserver { +class GoogleURLTrackerMapEntry : public infobars::InfoBarManager::Observer { public: GoogleURLTrackerMapEntry( GoogleURLTracker* google_url_tracker, @@ -38,21 +37,26 @@ class GoogleURLTrackerMapEntry : public content::NotificationObserver { infobar_delegate_->navigation_helper() : navigation_helper_.get(); } + const infobars::InfoBarManager* infobar_manager() const { + return infobar_manager_; + } + void Close(bool redo_search); private: friend class GoogleURLTrackerTest; - // content::NotificationObserver: - virtual void Observe(int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) OVERRIDE; + // infobars::InfoBarManager::Observer: + virtual void OnInfoBarRemoved(infobars::InfoBar* infobar, + bool animate) OVERRIDE; + virtual void OnManagerShuttingDown( + infobars::InfoBarManager* manager) OVERRIDE; - content::NotificationRegistrar registrar_; GoogleURLTracker* const google_url_tracker_; - const infobars::InfoBarManager* const infobar_manager_; + infobars::InfoBarManager* const infobar_manager_; GoogleURLTrackerInfoBarDelegate* infobar_delegate_; scoped_ptr<GoogleURLTrackerNavigationHelper> navigation_helper_; + bool observing_; DISALLOW_COPY_AND_ASSIGN(GoogleURLTrackerMapEntry); }; diff --git a/chrome/browser/google/google_url_tracker_unittest.cc b/chrome/browser/google/google_url_tracker_unittest.cc index 81f9e82..6f29909 100644 --- a/chrome/browser/google/google_url_tracker_unittest.cc +++ b/chrome/browser/google/google_url_tracker_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -7,9 +7,9 @@ #include <set> #include <string> +#include "base/memory/scoped_ptr.h" #include "base/message_loop/message_loop.h" #include "base/prefs/pref_service.h" -#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/google/google_url_tracker_factory.h" #include "chrome/browser/google/google_url_tracker_infobar_delegate.h" #include "chrome/browser/google/google_url_tracker_navigation_helper.h" @@ -18,53 +18,13 @@ #include "components/google/core/browser/google_url_tracker_client.h" #include "components/infobars/core/infobar.h" #include "components/infobars/core/infobar_delegate.h" -#include "content/public/browser/notification_service.h" #include "content/public/test/test_browser_thread_bundle.h" #include "net/url_request/test_url_fetcher_factory.h" #include "net/url_request/url_fetcher.h" #include "testing/gtest/include/gtest/gtest.h" -class GoogleURLTrackerTest; - namespace { -// TestInfoBarDelegate -------------------------------------------------------- - -class TestInfoBarDelegate : public GoogleURLTrackerInfoBarDelegate { - public: - // Creates a test infobar and delegate and returns the infobar. Unlike the - // parent class, this does not add the infobar to |infobar_manager|, since - // that "pointer" is really just a magic number. Thus there is no - // InfoBarManager ownership of the returned object; and since the caller - // doesn't own the returned object, we rely on |test_harness| cleaning this - // up eventually in GoogleURLTrackerTest::OnInfoBarClosed() to avoid leaks. - static infobars::InfoBar* Create( - GoogleURLTrackerTest* test_harness, - infobars::InfoBarManager* infobar_manager, - GoogleURLTracker* google_url_tracker, - const GURL& search_url); - - private: - TestInfoBarDelegate(GoogleURLTrackerTest* test_harness, - infobars::InfoBarManager* infobar_manager, - GoogleURLTracker* google_url_tracker, - const GURL& search_url); - virtual ~TestInfoBarDelegate(); - - // GoogleURLTrackerInfoBarDelegate: - virtual void Update(const GURL& search_url) OVERRIDE; - virtual void Close(bool redo_search) OVERRIDE; - - GoogleURLTrackerTest* test_harness_; - infobars::InfoBarManager* infobar_manager_; - - DISALLOW_COPY_AND_ASSIGN(TestInfoBarDelegate); -}; - -// The member function definitions come after the declaration of -// GoogleURLTrackerTest, so they can call members on it. - - // TestCallbackListener --------------------------------------------------- class TestCallbackListener { @@ -201,33 +161,35 @@ void TestGoogleURLTrackerNavigationHelper::OpenURL( bool user_clicked_on_link) { } -} // namespace +// TestInfoBarManager --------------------------------------------------------- + +class TestInfoBarManager : public infobars::InfoBarManager { + public: + explicit TestInfoBarManager(int unique_id); + virtual ~TestInfoBarManager(); + virtual int GetActiveEntryID() OVERRIDE; + + private: + int unique_id_; + DISALLOW_COPY_AND_ASSIGN(TestInfoBarManager); +}; +TestInfoBarManager::TestInfoBarManager(int unique_id) : unique_id_(unique_id) { +} + +TestInfoBarManager::~TestInfoBarManager() { + ShutDown(); +} + +int TestInfoBarManager::GetActiveEntryID() { + return unique_id_; +} + +} // namespace // GoogleURLTrackerTest ------------------------------------------------------- -// Ths class exercises GoogleURLTracker. In order to avoid instantiating more -// of the Chrome infrastructure than necessary, the GoogleURLTracker functions -// are carefully written so that many of the functions which take -// NavigationController* or infobars::InfoBarManager* do not actually -// dereference the -// objects, merely use them for comparisons and lookups, e.g. in |entry_map_|. -// This then allows the test code here to not create any of these objects, and -// instead supply "pointers" that are actually reinterpret_cast<>()ed magic -// numbers. Then we write the necessary stubs/hooks, here and in -// TestInfoBarDelegate above, to make everything continue to work. -// -// Technically, the C++98 spec defines the result of casting -// T* -> intptr_t -> T* to be an identity, but intptr_t -> T* -> intptr_t (what -// we use here) is "implementation-defined". Since I've never seen a compiler -// break this, though, and the result would simply be a failing test rather than -// a bug in Chrome, we'll use it anyway. class GoogleURLTrackerTest : public testing::Test { - public: - // Called by TestInfoBarDelegate::Close(). - void OnInfoBarClosed(scoped_ptr<infobars::InfoBar> infobar, - infobars::InfoBarManager* infobar_manager); - protected: GoogleURLTrackerTest(); virtual ~GoogleURLTrackerTest(); @@ -250,31 +212,29 @@ class GoogleURLTrackerTest : public testing::Test { GURL google_url() const { return google_url_tracker_->google_url(); } void SetLastPromptedGoogleURL(const GURL& url); GURL GetLastPromptedGoogleURL(); - void SetNavigationPending(intptr_t unique_id, bool is_search); - void CommitNonSearch(intptr_t unique_id); - void CommitSearch(intptr_t unique_id, const GURL& search_url); - void CloseTab(intptr_t unique_id); - GoogleURLTrackerMapEntry* GetMapEntry(intptr_t unique_id); - GoogleURLTrackerInfoBarDelegate* GetInfoBarDelegate(intptr_t unique_id); - GoogleURLTrackerNavigationHelper* GetNavigationHelper(intptr_t unique_id); + void SetNavigationPending(infobars::InfoBarManager* infobar_manager, + bool is_search); + void CommitNonSearch(infobars::InfoBarManager* infobar_manager); + void CommitSearch(infobars::InfoBarManager* infobar_manager, + const GURL& search_url); + void CloseTab(infobars::InfoBarManager* infobar_manager); + GoogleURLTrackerMapEntry* GetMapEntry( + infobars::InfoBarManager* infobar_manager); + GoogleURLTrackerInfoBarDelegate* GetInfoBarDelegate( + infobars::InfoBarManager* infobar_manager); + GoogleURLTrackerNavigationHelper* GetNavigationHelper( + infobars::InfoBarManager* infobar_manager); void ExpectDefaultURLs() const; - void ExpectListeningForCommit(intptr_t unique_id, bool listening); + void ExpectListeningForCommit(infobars::InfoBarManager* infobar_manager, + bool listening); bool listener_notified() const { return listener_.notified(); } void clear_listener_notified() { listener_.clear_notified(); } private: - // Since |infobar_manager| is really a magic number rather than an actual - // object, we don't add the created infobar to it. Instead we will simulate - // any helper<->infobar interaction necessary. The returned object will be - // cleaned up in OnInfoBarClosed(). - infobars::InfoBar* CreateTestInfoBar( - infobars::InfoBarManager* infobar_manager, - GoogleURLTracker* google_url_tracker, - const GURL& search_url); - // These are required by the TestURLFetchers GoogleURLTracker will create (see // test_url_fetcher_factory.h). content::TestBrowserThreadBundle thread_bundle_; + // Creating this allows us to call // net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(). scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; @@ -285,30 +245,9 @@ class GoogleURLTrackerTest : public testing::Test { TestCallbackListener listener_; // This tracks the different "tabs" a test has "opened", so we can close them // properly before shutting down |google_url_tracker_|, which expects that. - std::set<int> unique_ids_seen_; + std::set<infobars::InfoBarManager*> infobar_managers_seen_; }; -void GoogleURLTrackerTest::OnInfoBarClosed( - scoped_ptr<infobars::InfoBar> infobar, - infobars::InfoBarManager* infobar_manager) { - // First, simulate the InfoBarManager firing INFOBAR_REMOVED. - // TODO(droger): Replace this flow with a call to the observer method once - // the map entry is observing InfoBarManager. crbug.com/373243 - infobars::InfoBar::RemovedDetails removed_details(infobar.get(), false); - GoogleURLTracker::EntryMap::const_iterator i = - google_url_tracker_->entry_map_.find(infobar_manager); - ASSERT_FALSE(i == google_url_tracker_->entry_map_.end()); - GoogleURLTrackerMapEntry* map_entry = i->second; - ASSERT_EQ(infobar->delegate(), map_entry->infobar_delegate()); - map_entry->Observe( - chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, - content::Source<infobars::InfoBarManager>(infobar_manager), - content::Details<infobars::InfoBar::RemovedDetails>(&removed_details)); - - // Second, simulate the infobar container closing the infobar in response. - // This happens automatically as |infobar| goes out of scope. -} - GoogleURLTrackerTest::GoogleURLTrackerTest() : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) { GoogleURLTrackerFactory::GetInstance()-> @@ -326,13 +265,11 @@ void GoogleURLTrackerTest::SetUp() { scoped_ptr<GoogleURLTrackerClient> client(client_); google_url_tracker_.reset(new GoogleURLTracker( &profile_, client.Pass(), GoogleURLTracker::UNIT_TEST_MODE)); - google_url_tracker_->infobar_creator_ = base::Bind( - &GoogleURLTrackerTest::CreateTestInfoBar, base::Unretained(this)); } void GoogleURLTrackerTest::TearDown() { - while (!unique_ids_seen_.empty()) - CloseTab(*unique_ids_seen_.begin()); + while (!infobar_managers_seen_.empty()) + CloseTab(*infobar_managers_seen_.begin()); google_url_tracker_->Shutdown(); } @@ -380,30 +317,32 @@ GURL GoogleURLTrackerTest::GetLastPromptedGoogleURL() { return GURL(profile_.GetPrefs()->GetString(prefs::kLastPromptedGoogleURL)); } -void GoogleURLTrackerTest::SetNavigationPending(intptr_t unique_id, - bool is_search) { +void GoogleURLTrackerTest::SetNavigationPending( + infobars::InfoBarManager* infobar_manager, + bool is_search) { if (is_search) { google_url_tracker_->SearchCommitted(); // Note that the call above might not have actually registered a listener // for navigation starts if the searchdomaincheck response was bogus. } - unique_ids_seen_.insert(unique_id); + infobar_managers_seen_.insert(infobar_manager); if (client_->IsListeningForNavigationStart()) { google_url_tracker_->OnNavigationPending( scoped_ptr<GoogleURLTrackerNavigationHelper>( new TestGoogleURLTrackerNavigationHelper( google_url_tracker_.get())), - reinterpret_cast<infobars::InfoBarManager*>(unique_id), - unique_id); + infobar_manager, + infobar_manager->GetActiveEntryID()); } } -void GoogleURLTrackerTest::CommitNonSearch(intptr_t unique_id) { - GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); +void GoogleURLTrackerTest::CommitNonSearch( + infobars::InfoBarManager* infobar_manager) { + GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager); if (!map_entry) return; - ExpectListeningForCommit(unique_id, false); + ExpectListeningForCommit(infobar_manager, false); // The infobar should be showing; otherwise the pending non-search should // have closed it. @@ -417,46 +356,48 @@ void GoogleURLTrackerTest::CommitNonSearch(intptr_t unique_id) { map_entry->infobar_delegate()->Close(false); } -void GoogleURLTrackerTest::CommitSearch(intptr_t unique_id, - const GURL& search_url) { +void GoogleURLTrackerTest::CommitSearch( + infobars::InfoBarManager* infobar_manager, + const GURL& search_url) { DCHECK(search_url.is_valid()); - GoogleURLTrackerNavigationHelper* nav_helper = GetNavigationHelper(unique_id); + GoogleURLTrackerNavigationHelper* nav_helper = + GetNavigationHelper(infobar_manager); if (nav_helper && nav_helper->IsListeningForNavigationCommit()) { - google_url_tracker_->OnNavigationCommitted( - reinterpret_cast<infobars::InfoBarManager*>(unique_id), search_url); + google_url_tracker_->OnNavigationCommitted(infobar_manager, search_url); } } -void GoogleURLTrackerTest::CloseTab(intptr_t unique_id) { - unique_ids_seen_.erase(unique_id); - GoogleURLTrackerNavigationHelper* nav_helper = GetNavigationHelper(unique_id); +void GoogleURLTrackerTest::CloseTab(infobars::InfoBarManager* infobar_manager) { + infobar_managers_seen_.erase(infobar_manager); + GoogleURLTrackerNavigationHelper* nav_helper = + GetNavigationHelper(infobar_manager); if (nav_helper && nav_helper->IsListeningForTabDestruction()) { google_url_tracker_->OnTabClosed(nav_helper); } else { // Closing a tab with an infobar showing would close the infobar. - GoogleURLTrackerInfoBarDelegate* delegate = GetInfoBarDelegate(unique_id); + GoogleURLTrackerInfoBarDelegate* delegate = + GetInfoBarDelegate(infobar_manager); if (delegate) delegate->Close(false); } } GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry( - intptr_t unique_id) { + infobars::InfoBarManager* infobar_manager) { GoogleURLTracker::EntryMap::const_iterator i = - google_url_tracker_->entry_map_.find( - reinterpret_cast<infobars::InfoBarManager*>(unique_id)); + google_url_tracker_->entry_map_.find(infobar_manager); return (i == google_url_tracker_->entry_map_.end()) ? NULL : i->second; } GoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::GetInfoBarDelegate( - intptr_t unique_id) { - GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); + infobars::InfoBarManager* infobar_manager) { + GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager); return map_entry ? map_entry->infobar_delegate() : NULL; } GoogleURLTrackerNavigationHelper* GoogleURLTrackerTest::GetNavigationHelper( - intptr_t unique_id) { - GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); + infobars::InfoBarManager* infobar_manager) { + GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager); return map_entry ? map_entry->navigation_helper() : NULL; } @@ -465,9 +406,10 @@ void GoogleURLTrackerTest::ExpectDefaultURLs() const { EXPECT_EQ(GURL(), fetched_google_url()); } -void GoogleURLTrackerTest::ExpectListeningForCommit(intptr_t unique_id, - bool listening) { - GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); +void GoogleURLTrackerTest::ExpectListeningForCommit( + infobars::InfoBarManager* infobar_manager, + bool listening) { + GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager); if (map_entry) { EXPECT_EQ(listening, map_entry->navigation_helper()->IsListeningForNavigationCommit()); @@ -476,61 +418,6 @@ void GoogleURLTrackerTest::ExpectListeningForCommit(intptr_t unique_id, } } -infobars::InfoBar* GoogleURLTrackerTest::CreateTestInfoBar( - infobars::InfoBarManager* infobar_manager, - GoogleURLTracker* google_url_tracker, - const GURL& search_url) { - return TestInfoBarDelegate::Create( - this, infobar_manager, google_url_tracker, search_url); -} - - -// TestInfoBarDelegate -------------------------------------------------------- - -namespace { - -// static -infobars::InfoBar* TestInfoBarDelegate::Create( - GoogleURLTrackerTest* test_harness, - infobars::InfoBarManager* infobar_manager, - GoogleURLTracker* google_url_tracker, - const GURL& search_url) { - return ConfirmInfoBarDelegate::CreateInfoBar( - scoped_ptr<ConfirmInfoBarDelegate>(new TestInfoBarDelegate( - test_harness, - infobar_manager, - google_url_tracker, - search_url))).release(); -} - -TestInfoBarDelegate::TestInfoBarDelegate( - GoogleURLTrackerTest* test_harness, - infobars::InfoBarManager* infobar_manager, - GoogleURLTracker* google_url_tracker, - const GURL& search_url) - : GoogleURLTrackerInfoBarDelegate(google_url_tracker, - search_url), - test_harness_(test_harness), - infobar_manager_(infobar_manager) { -} - -TestInfoBarDelegate::~TestInfoBarDelegate() { -} - -void TestInfoBarDelegate::Update(const GURL& search_url) { - set_search_url(search_url); - set_pending_id(0); -} - -void TestInfoBarDelegate::Close(bool redo_search) { - test_harness_->OnInfoBarClosed(scoped_ptr<infobars::InfoBar>(infobar()), - infobar_manager_); - // WARNING: At this point |this| has been deleted! -} - -} // namespace - - // Tests ---------------------------------------------------------------------- TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) { @@ -575,6 +462,7 @@ TEST_F(GoogleURLTrackerTest, DontUpdateWhenUnchanged) { } TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { + TestInfoBarManager infobar_manager(1); SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); RequestServerCheck(); @@ -588,9 +476,9 @@ TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { EXPECT_EQ(GURL(), fetched_google_url()); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_FALSE(listener_notified()); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - EXPECT_TRUE(GetMapEntry(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); // Bad subdomain. NotifyIPAddressChanged(); @@ -598,9 +486,9 @@ TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { EXPECT_EQ(GURL(), fetched_google_url()); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_FALSE(listener_notified()); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - EXPECT_TRUE(GetMapEntry(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); // Non-empty path. NotifyIPAddressChanged(); @@ -608,9 +496,9 @@ TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { EXPECT_EQ(GURL(), fetched_google_url()); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_FALSE(listener_notified()); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - EXPECT_TRUE(GetMapEntry(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); // Non-empty query. NotifyIPAddressChanged(); @@ -618,9 +506,9 @@ TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { EXPECT_EQ(GURL(), fetched_google_url()); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_FALSE(listener_notified()); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - EXPECT_TRUE(GetMapEntry(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); // Non-empty ref. NotifyIPAddressChanged(); @@ -628,9 +516,9 @@ TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { EXPECT_EQ(GURL(), fetched_google_url()); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_FALSE(listener_notified()); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - EXPECT_TRUE(GetMapEntry(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); // Complete garbage. NotifyIPAddressChanged(); @@ -638,9 +526,9 @@ TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { EXPECT_EQ(GURL(), fetched_google_url()); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_FALSE(listener_notified()); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - EXPECT_TRUE(GetMapEntry(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); } TEST_F(GoogleURLTrackerTest, UpdatePromptedURLOnReturnToPreviousLocation) { @@ -741,6 +629,7 @@ TEST_F(GoogleURLTrackerTest, DontFetchTwiceOnLateRequests) { } TEST_F(GoogleURLTrackerTest, SearchingDoesNothingIfNoNeedToPrompt) { + TestInfoBarManager infobar_manager(1); RequestServerCheck(); FinishSleep(); MockSearchDomainCheckResponse("http://www.google.co.uk/"); @@ -750,9 +639,9 @@ TEST_F(GoogleURLTrackerTest, SearchingDoesNothingIfNoNeedToPrompt) { EXPECT_TRUE(listener_notified()); clear_listener_notified(); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - EXPECT_TRUE(GetMapEntry(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); @@ -760,6 +649,7 @@ TEST_F(GoogleURLTrackerTest, SearchingDoesNothingIfNoNeedToPrompt) { } TEST_F(GoogleURLTrackerTest, TabClosedOnPendingSearch) { + TestInfoBarManager infobar_manager(1); SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); RequestServerCheck(); FinishSleep(); @@ -769,93 +659,101 @@ TEST_F(GoogleURLTrackerTest, TabClosedOnPendingSearch) { EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); EXPECT_FALSE(listener_notified()); - SetNavigationPending(1, true); - GoogleURLTrackerMapEntry* map_entry = GetMapEntry(1); + SetNavigationPending(&infobar_manager, true); + GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager); ASSERT_FALSE(map_entry == NULL); EXPECT_FALSE(map_entry->has_infobar_delegate()); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); EXPECT_FALSE(listener_notified()); - CloseTab(1); - EXPECT_TRUE(GetMapEntry(1) == NULL); + CloseTab(&infobar_manager); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); EXPECT_FALSE(listener_notified()); } TEST_F(GoogleURLTrackerTest, TabClosedOnCommittedSearch) { + TestInfoBarManager infobar_manager(1); SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); RequestServerCheck(); FinishSleep(); MockSearchDomainCheckResponse("http://www.google.co.jp/"); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); - CloseTab(1); - EXPECT_TRUE(GetMapEntry(1) == NULL); + CloseTab(&infobar_manager); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); EXPECT_FALSE(listener_notified()); } TEST_F(GoogleURLTrackerTest, InfoBarClosed) { + TestInfoBarManager infobar_manager(1); SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); RequestServerCheck(); FinishSleep(); MockSearchDomainCheckResponse("http://www.google.co.jp/"); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBarDelegate(1); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + GoogleURLTrackerInfoBarDelegate* infobar = + GetInfoBarDelegate(&infobar_manager); ASSERT_FALSE(infobar == NULL); infobar->Close(false); - EXPECT_TRUE(GetMapEntry(1) == NULL); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); EXPECT_FALSE(listener_notified()); } TEST_F(GoogleURLTrackerTest, InfoBarRefused) { + TestInfoBarManager infobar_manager(1); SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); RequestServerCheck(); FinishSleep(); MockSearchDomainCheckResponse("http://www.google.co.jp/"); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBarDelegate(1); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + GoogleURLTrackerInfoBarDelegate* infobar = + GetInfoBarDelegate(&infobar_manager); ASSERT_FALSE(infobar == NULL); infobar->Cancel(); - EXPECT_TRUE(GetMapEntry(1) == NULL); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); EXPECT_FALSE(listener_notified()); } TEST_F(GoogleURLTrackerTest, InfoBarAccepted) { + TestInfoBarManager infobar_manager(1); SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); RequestServerCheck(); FinishSleep(); MockSearchDomainCheckResponse("http://www.google.co.jp/"); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBarDelegate(1); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + GoogleURLTrackerInfoBarDelegate* infobar = + GetInfoBarDelegate(&infobar_manager); ASSERT_FALSE(infobar == NULL); infobar->Accept(); - EXPECT_TRUE(GetMapEntry(1) == NULL); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url()); EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); EXPECT_TRUE(listener_notified()); } TEST_F(GoogleURLTrackerTest, FetchesCanAutomaticallyCloseInfoBars) { + TestInfoBarManager infobar_manager(1); RequestServerCheck(); FinishSleep(); MockSearchDomainCheckResponse(google_url().spec()); @@ -864,20 +762,20 @@ TEST_F(GoogleURLTrackerTest, FetchesCanAutomaticallyCloseInfoBars) { // should close the infobar. NotifyIPAddressChanged(); MockSearchDomainCheckResponse("http://www.google.co.uk/"); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.com/search?q=test")); - EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); + EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); NotifyIPAddressChanged(); MockSearchDomainCheckResponse(google_url().spec()); EXPECT_EQ(google_url(), GetLastPromptedGoogleURL()); - EXPECT_TRUE(GetMapEntry(1) == NULL); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); // As should fetching a URL that differs from the accepted only by the scheme. NotifyIPAddressChanged(); MockSearchDomainCheckResponse("http://www.google.co.uk/"); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.com/search?q=test")); - EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); + EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); NotifyIPAddressChanged(); url::Replacements<char> replacements; const std::string& scheme("https"); @@ -885,56 +783,58 @@ TEST_F(GoogleURLTrackerTest, FetchesCanAutomaticallyCloseInfoBars) { GURL new_google_url(google_url().ReplaceComponents(replacements)); MockSearchDomainCheckResponse(new_google_url.spec()); EXPECT_EQ(new_google_url, GetLastPromptedGoogleURL()); - EXPECT_TRUE(GetMapEntry(1) == NULL); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); // As should re-fetching the last prompted URL. SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); NotifyIPAddressChanged(); MockSearchDomainCheckResponse("http://www.google.co.jp/"); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.com/search?q=test")); - EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); + EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); NotifyIPAddressChanged(); MockSearchDomainCheckResponse("http://www.google.co.uk/"); EXPECT_EQ(new_google_url, google_url()); EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); - EXPECT_TRUE(GetMapEntry(1) == NULL); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); // And one that differs from the last prompted URL only by the scheme. NotifyIPAddressChanged(); MockSearchDomainCheckResponse("http://www.google.co.jp/"); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.com/search?q=test")); - EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); + EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); NotifyIPAddressChanged(); MockSearchDomainCheckResponse("https://www.google.co.uk/"); EXPECT_EQ(new_google_url, google_url()); EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); - EXPECT_TRUE(GetMapEntry(1) == NULL); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); // And fetching a different URL entirely. NotifyIPAddressChanged(); MockSearchDomainCheckResponse("http://www.google.co.jp/"); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.com/search?q=test")); - EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); + EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); NotifyIPAddressChanged(); MockSearchDomainCheckResponse("https://www.google.co.in/"); EXPECT_EQ(new_google_url, google_url()); EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); - EXPECT_TRUE(GetMapEntry(1) == NULL); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); } TEST_F(GoogleURLTrackerTest, ResetInfoBarGoogleURLs) { + TestInfoBarManager infobar_manager(1); RequestServerCheck(); FinishSleep(); MockSearchDomainCheckResponse(google_url().spec()); NotifyIPAddressChanged(); MockSearchDomainCheckResponse("http://www.google.co.uk/"); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.com/search?q=test")); - GoogleURLTrackerInfoBarDelegate* delegate = GetInfoBarDelegate(1); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); + GoogleURLTrackerInfoBarDelegate* delegate = + GetInfoBarDelegate(&infobar_manager); ASSERT_FALSE(delegate == NULL); EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); @@ -942,161 +842,176 @@ TEST_F(GoogleURLTrackerTest, ResetInfoBarGoogleURLs) { // infobar's only by scheme, the infobar should stay showing. NotifyIPAddressChanged(); MockSearchDomainCheckResponse("https://www.google.co.uk/"); - EXPECT_EQ(delegate, GetInfoBarDelegate(1)); + EXPECT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url()); } TEST_F(GoogleURLTrackerTest, NavigationsAfterPendingSearch) { + TestInfoBarManager infobar_manager(1); SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); RequestServerCheck(); FinishSleep(); MockSearchDomainCheckResponse("http://www.google.co.jp/"); // A pending non-search after a pending search should delete the map entry. - SetNavigationPending(1, true); - GoogleURLTrackerMapEntry* map_entry = GetMapEntry(1); + SetNavigationPending(&infobar_manager, true); + GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager); ASSERT_FALSE(map_entry == NULL); EXPECT_FALSE(map_entry->has_infobar_delegate()); - SetNavigationPending(1, false); - EXPECT_TRUE(GetMapEntry(1) == NULL); + SetNavigationPending(&infobar_manager, false); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); // A pending search after a pending search should leave the map entry alive. - SetNavigationPending(1, true); - map_entry = GetMapEntry(1); + SetNavigationPending(&infobar_manager, true); + map_entry = GetMapEntry(&infobar_manager); ASSERT_FALSE(map_entry == NULL); EXPECT_FALSE(map_entry->has_infobar_delegate()); - SetNavigationPending(1, true); - ASSERT_EQ(map_entry, GetMapEntry(1)); + SetNavigationPending(&infobar_manager, true); + ASSERT_EQ(map_entry, GetMapEntry(&infobar_manager)); EXPECT_FALSE(map_entry->has_infobar_delegate()); - ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); + ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); // Committing this search should show an infobar. - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test2")); + CommitSearch(&infobar_manager, + GURL("http://www.google.co.uk/search?q=test2")); EXPECT_TRUE(map_entry->has_infobar_delegate()); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); EXPECT_FALSE(listener_notified()); - ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); + ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); } TEST_F(GoogleURLTrackerTest, NavigationsAfterCommittedSearch) { + TestInfoBarManager infobar_manager(1); SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); RequestServerCheck(); FinishSleep(); MockSearchDomainCheckResponse("http://www.google.co.jp/"); - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - GoogleURLTrackerInfoBarDelegate* delegate = GetInfoBarDelegate(1); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + GoogleURLTrackerInfoBarDelegate* delegate = + GetInfoBarDelegate(&infobar_manager); ASSERT_FALSE(delegate == NULL); - ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); + ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); // A pending non-search on a visible infobar should basically do nothing. - SetNavigationPending(1, false); - ASSERT_EQ(delegate, GetInfoBarDelegate(1)); + SetNavigationPending(&infobar_manager, false); + ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); EXPECT_EQ(0, delegate->pending_id()); - ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); + ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); // As should another pending non-search after the first. - SetNavigationPending(1, false); - ASSERT_EQ(delegate, GetInfoBarDelegate(1)); + SetNavigationPending(&infobar_manager, false); + ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); EXPECT_EQ(0, delegate->pending_id()); - ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); + ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); // Committing this non-search should close the infobar. The control flow in // these tests is not really comparable to in the real browser, but at least a // few sanity-checks will be performed. - ASSERT_NO_FATAL_FAILURE(CommitNonSearch(1)); - EXPECT_TRUE(GetMapEntry(1) == NULL); + ASSERT_NO_FATAL_FAILURE(CommitNonSearch(&infobar_manager)); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); // A pending search on a visible infobar should cause the infobar to listen // for the search to commit. - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - delegate = GetInfoBarDelegate(1); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + delegate = GetInfoBarDelegate(&infobar_manager); ASSERT_FALSE(delegate == NULL); - SetNavigationPending(1, true); - ASSERT_EQ(delegate, GetInfoBarDelegate(1)); + SetNavigationPending(&infobar_manager, true); + ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); EXPECT_EQ(1, delegate->pending_id()); - ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); + ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); // But a non-search after this should cancel that state. - SetNavigationPending(1, false); - ASSERT_EQ(delegate, GetInfoBarDelegate(1)); + SetNavigationPending(&infobar_manager, false); + ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); EXPECT_EQ(0, delegate->pending_id()); - ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); + ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); // Another pending search after the non-search should put us back into // "waiting for commit" mode. - SetNavigationPending(1, true); - ASSERT_EQ(delegate, GetInfoBarDelegate(1)); + SetNavigationPending(&infobar_manager, true); + ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); EXPECT_EQ(1, delegate->pending_id()); - ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); + ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); // A second pending search after the first should not really change anything. - SetNavigationPending(1, true); - ASSERT_EQ(delegate, GetInfoBarDelegate(1)); + SetNavigationPending(&infobar_manager, true); + ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); EXPECT_EQ(1, delegate->pending_id()); - ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); + ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); // Committing this search should change the visible infobar's search_url. - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test2")); - ASSERT_EQ(delegate, GetInfoBarDelegate(1)); + CommitSearch(&infobar_manager, + GURL("http://www.google.co.uk/search?q=test2")); + ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), delegate->search_url()); EXPECT_EQ(0, delegate->pending_id()); - ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); + ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); EXPECT_FALSE(listener_notified()); } TEST_F(GoogleURLTrackerTest, MultipleMapEntries) { + TestInfoBarManager infobar_manager(1); + TestInfoBarManager infobar_manager2(2); + TestInfoBarManager infobar_manager3(3); + TestInfoBarManager infobar_manager4(4); SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); RequestServerCheck(); FinishSleep(); MockSearchDomainCheckResponse("http://www.google.co.jp/"); - SetNavigationPending(1, true); - GoogleURLTrackerMapEntry* map_entry = GetMapEntry(1); + SetNavigationPending(&infobar_manager, true); + GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager); ASSERT_FALSE(map_entry == NULL); EXPECT_FALSE(map_entry->has_infobar_delegate()); - SetNavigationPending(2, true); - CommitSearch(2, GURL("http://www.google.co.uk/search?q=test2")); - GoogleURLTrackerInfoBarDelegate* delegate2 = GetInfoBarDelegate(2); + SetNavigationPending(&infobar_manager2, true); + CommitSearch(&infobar_manager2, + GURL("http://www.google.co.uk/search?q=test2")); + GoogleURLTrackerInfoBarDelegate* delegate2 = + GetInfoBarDelegate(&infobar_manager2); ASSERT_FALSE(delegate2 == NULL); EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), delegate2->search_url()); - SetNavigationPending(3, true); - GoogleURLTrackerMapEntry* map_entry3 = GetMapEntry(3); + SetNavigationPending(&infobar_manager3, true); + GoogleURLTrackerMapEntry* map_entry3 = GetMapEntry(&infobar_manager3); ASSERT_FALSE(map_entry3 == NULL); EXPECT_FALSE(map_entry3->has_infobar_delegate()); - SetNavigationPending(4, true); - CommitSearch(4, GURL("http://www.google.co.uk/search?q=test4")); - GoogleURLTrackerInfoBarDelegate* delegate4 = GetInfoBarDelegate(4); + SetNavigationPending(&infobar_manager4, true); + CommitSearch(&infobar_manager4, + GURL("http://www.google.co.uk/search?q=test4")); + GoogleURLTrackerInfoBarDelegate* delegate4 = + GetInfoBarDelegate(&infobar_manager4); ASSERT_FALSE(delegate4 == NULL); EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test4"), delegate4->search_url()); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); EXPECT_TRUE(map_entry->has_infobar_delegate()); delegate2->Close(false); - EXPECT_TRUE(GetMapEntry(2) == NULL); + EXPECT_TRUE(GetMapEntry(&infobar_manager2) == NULL); EXPECT_FALSE(listener_notified()); delegate4->Accept(); - EXPECT_TRUE(GetMapEntry(1) == NULL); - EXPECT_TRUE(GetMapEntry(3) == NULL); - EXPECT_TRUE(GetMapEntry(4) == NULL); + EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); + EXPECT_TRUE(GetMapEntry(&infobar_manager3) == NULL); + EXPECT_TRUE(GetMapEntry(&infobar_manager4) == NULL); EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url()); EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); EXPECT_TRUE(listener_notified()); } TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantNavigation) { + TestInfoBarManager infobar_manager(1); + TestInfoBarManager infobar_manager2(2); SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); RequestServerCheck(); FinishSleep(); @@ -1104,16 +1019,18 @@ TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantNavigation) { // This tests a particularly gnarly sequence of events that used to cause us // to erroneously listen for a non-search navigation to commit. - SetNavigationPending(1, true); - CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); - SetNavigationPending(2, true); - CommitSearch(2, GURL("http://www.google.co.uk/search?q=test2")); - EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); - GoogleURLTrackerInfoBarDelegate* delegate2 = GetInfoBarDelegate(2); + SetNavigationPending(&infobar_manager, true); + CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); + SetNavigationPending(&infobar_manager2, true); + CommitSearch(&infobar_manager2, + GURL("http://www.google.co.uk/search?q=test2")); + EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); + GoogleURLTrackerInfoBarDelegate* delegate2 = + GetInfoBarDelegate(&infobar_manager2); ASSERT_FALSE(delegate2 == NULL); - SetNavigationPending(1, true); - ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); + SetNavigationPending(&infobar_manager, true); + ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); delegate2->Close(false); - SetNavigationPending(1, false); - ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); + SetNavigationPending(&infobar_manager, false); + ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); } |