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

Unified Diff: chrome/browser/google/google_url_tracker_unittest.cc

Issue 290453005: Remove Infobars notifications from GoogleURLTrackerMapEntry (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase + review comments Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/google/google_url_tracker_map_entry.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/google/google_url_tracker_unittest.cc
diff --git a/chrome/browser/google/google_url_tracker_unittest.cc b/chrome/browser/google/google_url_tracker_unittest.cc
index 81f9e82d35bc8b1358e8e0ec72bf5f6daff3ad30..d4fd3ddeded85c3084b61d194431bd4f7845db5b 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,10 @@
#include <set>
#include <string>
+#include "base/containers/scoped_ptr_hash_map.h"
+#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 +19,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 +162,23 @@ void TestGoogleURLTrackerNavigationHelper::OpenURL(
bool user_clicked_on_link) {
}
-} // namespace
+// TestInfoBarManager ---------------------------------------------------------
+
+class TestInfoBarManager : public infobars::InfoBarManager {
+ public:
+ virtual int GetActiveEntryID() OVERRIDE;
+};
+
+int TestInfoBarManager::GetActiveEntryID() {
+ return 0;
+}
+
+} // 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 +201,28 @@ 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(int unique_id, bool is_search);
+ void CommitNonSearch(int unique_id);
+ void CommitSearch(int unique_id, const GURL& search_url);
+ void CloseTab(int unique_id);
+ GoogleURLTrackerMapEntry* GetMapEntry(int unique_id);
+ GoogleURLTrackerInfoBarDelegate* GetInfoBarDelegate(int unique_id);
+ GoogleURLTrackerNavigationHelper* GetNavigationHelper(int unique_id);
void ExpectDefaultURLs() const;
- void ExpectListeningForCommit(intptr_t unique_id, bool listening);
+ void ExpectListeningForCommit(int unique_id, 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_;
+
+ // Gets the infobar manager indexed by |unique_id|.
+ // Lazily creates WebContents instances, adds them in |infobar_manager_map_|
blundell 2014/06/02 15:02:40 This comment is stale now, right?
droger 2014/06/02 15:56:29 No.
blundell 2014/06/02 16:00:09 But you're not creating WebContents instances anym
+ // and attaches InfoBarManagers to them.
+ infobars::InfoBarManager* GetInfoBarManager(int unique_id);
+
// Creating this allows us to call
// net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests().
scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
@@ -283,32 +231,12 @@ class GoogleURLTrackerTest : public testing::Test {
TestingProfile profile_;
scoped_ptr<GoogleURLTracker> google_url_tracker_;
TestCallbackListener listener_;
+ base::ScopedPtrHashMap<int, infobars::InfoBarManager> infobar_manager_map_;
blundell 2014/06/02 15:02:40 This is probably a big change, but do you even nee
droger 2014/06/02 15:56:29 I need something to own the InfoBarManagers, as th
blundell 2014/06/02 16:00:09 The "something" could just be like 3 (or however m
droger 2014/06/02 16:50:04 Done. Although SetNavigationPending still requires
// 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_;
};
-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,8 +254,8 @@ 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));
+ google_url_tracker_->infobar_creator_ =
+ base::Bind(&GoogleURLTrackerInfoBarDelegate::Create);
blundell 2014/06/02 15:02:40 This is just calling the production creation funct
droger 2014/06/02 15:56:29 Done.
}
void GoogleURLTrackerTest::TearDown() {
@@ -380,8 +308,7 @@ GURL GoogleURLTrackerTest::GetLastPromptedGoogleURL() {
return GURL(profile_.GetPrefs()->GetString(prefs::kLastPromptedGoogleURL));
}
-void GoogleURLTrackerTest::SetNavigationPending(intptr_t unique_id,
- bool is_search) {
+void GoogleURLTrackerTest::SetNavigationPending(int unique_id, bool is_search) {
if (is_search) {
google_url_tracker_->SearchCommitted();
// Note that the call above might not have actually registered a listener
@@ -393,12 +320,12 @@ void GoogleURLTrackerTest::SetNavigationPending(intptr_t unique_id,
scoped_ptr<GoogleURLTrackerNavigationHelper>(
new TestGoogleURLTrackerNavigationHelper(
google_url_tracker_.get())),
- reinterpret_cast<infobars::InfoBarManager*>(unique_id),
+ GetInfoBarManager(unique_id),
unique_id);
}
}
-void GoogleURLTrackerTest::CommitNonSearch(intptr_t unique_id) {
+void GoogleURLTrackerTest::CommitNonSearch(int unique_id) {
GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id);
if (!map_entry)
return;
@@ -417,17 +344,16 @@ 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(int unique_id, const GURL& search_url) {
DCHECK(search_url.is_valid());
GoogleURLTrackerNavigationHelper* nav_helper = GetNavigationHelper(unique_id);
if (nav_helper && nav_helper->IsListeningForNavigationCommit()) {
- google_url_tracker_->OnNavigationCommitted(
- reinterpret_cast<infobars::InfoBarManager*>(unique_id), search_url);
+ google_url_tracker_->OnNavigationCommitted(GetInfoBarManager(unique_id),
+ search_url);
}
}
-void GoogleURLTrackerTest::CloseTab(intptr_t unique_id) {
+void GoogleURLTrackerTest::CloseTab(int unique_id) {
unique_ids_seen_.erase(unique_id);
GoogleURLTrackerNavigationHelper* nav_helper = GetNavigationHelper(unique_id);
if (nav_helper && nav_helper->IsListeningForTabDestruction()) {
@@ -440,22 +366,20 @@ void GoogleURLTrackerTest::CloseTab(intptr_t unique_id) {
}
}
-GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry(
- intptr_t unique_id) {
+GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry(int unique_id) {
GoogleURLTracker::EntryMap::const_iterator i =
- google_url_tracker_->entry_map_.find(
- reinterpret_cast<infobars::InfoBarManager*>(unique_id));
+ google_url_tracker_->entry_map_.find(GetInfoBarManager(unique_id));
return (i == google_url_tracker_->entry_map_.end()) ? NULL : i->second;
}
GoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::GetInfoBarDelegate(
- intptr_t unique_id) {
+ int unique_id) {
GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id);
return map_entry ? map_entry->infobar_delegate() : NULL;
}
GoogleURLTrackerNavigationHelper* GoogleURLTrackerTest::GetNavigationHelper(
- intptr_t unique_id) {
+ int unique_id) {
GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id);
return map_entry ? map_entry->navigation_helper() : NULL;
}
@@ -465,7 +389,7 @@ void GoogleURLTrackerTest::ExpectDefaultURLs() const {
EXPECT_EQ(GURL(), fetched_google_url());
}
-void GoogleURLTrackerTest::ExpectListeningForCommit(intptr_t unique_id,
+void GoogleURLTrackerTest::ExpectListeningForCommit(int unique_id,
bool listening) {
GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id);
if (map_entry) {
@@ -476,61 +400,22 @@ 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() {
-}
+infobars::InfoBarManager* GoogleURLTrackerTest::GetInfoBarManager(
+ int unique_id) {
+ base::ScopedPtrHashMap<int, infobars::InfoBarManager>::const_iterator it =
+ infobar_manager_map_.find(unique_id);
-void TestInfoBarDelegate::Update(const GURL& search_url) {
- set_search_url(search_url);
- set_pending_id(0);
-}
+ if (it == infobar_manager_map_.end()) {
+ // Lazily create an InfoBarManager for |unique_id|.
+ scoped_ptr<infobars::InfoBarManager> infobar_manager(
+ new TestInfoBarManager);
+ it = infobar_manager_map_.set(unique_id, infobar_manager.Pass());
+ }
-void TestInfoBarDelegate::Close(bool redo_search) {
- test_harness_->OnInfoBarClosed(scoped_ptr<infobars::InfoBar>(infobar()),
- infobar_manager_);
- // WARNING: At this point |this| has been deleted!
+ DCHECK(it->second);
+ return it->second;
}
-} // namespace
-
-
// Tests ----------------------------------------------------------------------
TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) {
« no previous file with comments | « chrome/browser/google/google_url_tracker_map_entry.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698