| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/google/google_url_tracker.h" | 5 #include "chrome/browser/google/google_url_tracker.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 11 #include "base/prefs/pref_service.h" | 11 #include "base/prefs/pref_service.h" |
| 12 #include "chrome/browser/chrome_notification_types.h" | 12 #include "chrome/browser/chrome_notification_types.h" |
| 13 #include "chrome/browser/google/google_url_tracker_factory.h" | 13 #include "chrome/browser/google/google_url_tracker_factory.h" |
| 14 #include "chrome/browser/google/google_url_tracker_infobar_delegate.h" | 14 #include "chrome/browser/google/google_url_tracker_infobar_delegate.h" |
| 15 #include "chrome/browser/google/google_url_tracker_navigation_helper.h" | 15 #include "chrome/browser/google/google_url_tracker_navigation_helper.h" |
| 16 #include "chrome/browser/infobars/infobar.h" | |
| 17 #include "chrome/browser/infobars/infobar_delegate.h" | |
| 18 #include "chrome/common/pref_names.h" | 16 #include "chrome/common/pref_names.h" |
| 19 #include "chrome/test/base/testing_profile.h" | 17 #include "chrome/test/base/testing_profile.h" |
| 18 #include "components/infobars/core/infobar.h" |
| 19 #include "components/infobars/core/infobar_delegate.h" |
| 20 #include "content/public/browser/notification_service.h" | 20 #include "content/public/browser/notification_service.h" |
| 21 #include "content/public/test/test_browser_thread_bundle.h" | 21 #include "content/public/test/test_browser_thread_bundle.h" |
| 22 #include "net/url_request/test_url_fetcher_factory.h" | 22 #include "net/url_request/test_url_fetcher_factory.h" |
| 23 #include "net/url_request/url_fetcher.h" | 23 #include "net/url_request/url_fetcher.h" |
| 24 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
| 25 | 25 |
| 26 class GoogleURLTrackerTest; | 26 class GoogleURLTrackerTest; |
| 27 | 27 |
| 28 namespace { | 28 namespace { |
| 29 | 29 |
| 30 // TestInfoBarDelegate -------------------------------------------------------- | 30 // TestInfoBarDelegate -------------------------------------------------------- |
| 31 | 31 |
| 32 class TestInfoBarDelegate : public GoogleURLTrackerInfoBarDelegate { | 32 class TestInfoBarDelegate : public GoogleURLTrackerInfoBarDelegate { |
| 33 public: | 33 public: |
| 34 // Creates a test infobar and delegate and returns the infobar. Unlike the | 34 // Creates a test infobar and delegate and returns the infobar. Unlike the |
| 35 // parent class, this does not add the infobar to |infobar_service|, since | 35 // parent class, this does not add the infobar to |infobar_service|, since |
| 36 // that "pointer" is really just a magic number. Thus there is no | 36 // that "pointer" is really just a magic number. Thus there is no |
| 37 // InfoBarService ownership of the returned object; and since the caller | 37 // InfoBarService ownership of the returned object; and since the caller |
| 38 // doesn't own the returned object, we rely on |test_harness| cleaning this up | 38 // doesn't own the returned object, we rely on |test_harness| cleaning this up |
| 39 // eventually in GoogleURLTrackerTest::OnInfoBarClosed() to avoid leaks. | 39 // eventually in GoogleURLTrackerTest::OnInfoBarClosed() to avoid leaks. |
| 40 static InfoBar* Create(GoogleURLTrackerTest* test_harness, | 40 static infobars::InfoBar* Create(GoogleURLTrackerTest* test_harness, |
| 41 InfoBarService* infobar_service, | 41 InfoBarService* infobar_service, |
| 42 GoogleURLTracker* google_url_tracker, | 42 GoogleURLTracker* google_url_tracker, |
| 43 const GURL& search_url); | 43 const GURL& search_url); |
| 44 | 44 |
| 45 private: | 45 private: |
| 46 TestInfoBarDelegate(GoogleURLTrackerTest* test_harness, | 46 TestInfoBarDelegate(GoogleURLTrackerTest* test_harness, |
| 47 InfoBarService* infobar_service, | 47 InfoBarService* infobar_service, |
| 48 GoogleURLTracker* google_url_tracker, | 48 GoogleURLTracker* google_url_tracker, |
| 49 const GURL& search_url); | 49 const GURL& search_url); |
| 50 virtual ~TestInfoBarDelegate(); | 50 virtual ~TestInfoBarDelegate(); |
| 51 | 51 |
| 52 // GoogleURLTrackerInfoBarDelegate: | 52 // GoogleURLTrackerInfoBarDelegate: |
| 53 virtual void Update(const GURL& search_url) OVERRIDE; | 53 virtual void Update(const GURL& search_url) OVERRIDE; |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 // TestInfoBarDelegate above, to make everything continue to work. | 192 // TestInfoBarDelegate above, to make everything continue to work. |
| 193 // | 193 // |
| 194 // Technically, the C++98 spec defines the result of casting | 194 // Technically, the C++98 spec defines the result of casting |
| 195 // T* -> intptr_t -> T* to be an identity, but intptr_t -> T* -> intptr_t (what | 195 // T* -> intptr_t -> T* to be an identity, but intptr_t -> T* -> intptr_t (what |
| 196 // we use here) is "implementation-defined". Since I've never seen a compiler | 196 // we use here) is "implementation-defined". Since I've never seen a compiler |
| 197 // break this, though, and the result would simply be a failing test rather than | 197 // break this, though, and the result would simply be a failing test rather than |
| 198 // a bug in Chrome, we'll use it anyway. | 198 // a bug in Chrome, we'll use it anyway. |
| 199 class GoogleURLTrackerTest : public testing::Test { | 199 class GoogleURLTrackerTest : public testing::Test { |
| 200 public: | 200 public: |
| 201 // Called by TestInfoBarDelegate::Close(). | 201 // Called by TestInfoBarDelegate::Close(). |
| 202 void OnInfoBarClosed(scoped_ptr<InfoBar> infobar, | 202 void OnInfoBarClosed(scoped_ptr<infobars::InfoBar> infobar, |
| 203 InfoBarService* infobar_service); | 203 InfoBarService* infobar_service); |
| 204 | 204 |
| 205 protected: | 205 protected: |
| 206 GoogleURLTrackerTest(); | 206 GoogleURLTrackerTest(); |
| 207 virtual ~GoogleURLTrackerTest(); | 207 virtual ~GoogleURLTrackerTest(); |
| 208 | 208 |
| 209 // testing::Test | 209 // testing::Test |
| 210 virtual void SetUp() OVERRIDE; | 210 virtual void SetUp() OVERRIDE; |
| 211 virtual void TearDown() OVERRIDE; | 211 virtual void TearDown() OVERRIDE; |
| 212 | 212 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 233 void ExpectDefaultURLs() const; | 233 void ExpectDefaultURLs() const; |
| 234 void ExpectListeningForCommit(intptr_t unique_id, bool listening); | 234 void ExpectListeningForCommit(intptr_t unique_id, bool listening); |
| 235 bool observer_notified() const { return observer_.notified(); } | 235 bool observer_notified() const { return observer_.notified(); } |
| 236 void clear_observer_notified() { observer_.clear_notified(); } | 236 void clear_observer_notified() { observer_.clear_notified(); } |
| 237 | 237 |
| 238 private: | 238 private: |
| 239 // Since |infobar_service| is really a magic number rather than an actual | 239 // Since |infobar_service| is really a magic number rather than an actual |
| 240 // object, we don't add the created infobar to it. Instead we will simulate | 240 // object, we don't add the created infobar to it. Instead we will simulate |
| 241 // any helper<->infobar interaction necessary. The returned object will be | 241 // any helper<->infobar interaction necessary. The returned object will be |
| 242 // cleaned up in OnInfoBarClosed(). | 242 // cleaned up in OnInfoBarClosed(). |
| 243 InfoBar* CreateTestInfoBar(InfoBarService* infobar_service, | 243 infobars::InfoBar* CreateTestInfoBar(InfoBarService* infobar_service, |
| 244 GoogleURLTracker* google_url_tracker, | 244 GoogleURLTracker* google_url_tracker, |
| 245 const GURL& search_url); | 245 const GURL& search_url); |
| 246 | 246 |
| 247 // These are required by the TestURLFetchers GoogleURLTracker will create (see | 247 // These are required by the TestURLFetchers GoogleURLTracker will create (see |
| 248 // test_url_fetcher_factory.h). | 248 // test_url_fetcher_factory.h). |
| 249 content::TestBrowserThreadBundle thread_bundle_; | 249 content::TestBrowserThreadBundle thread_bundle_; |
| 250 // Creating this allows us to call | 250 // Creating this allows us to call |
| 251 // net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(). | 251 // net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(). |
| 252 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; | 252 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; |
| 253 net::TestURLFetcherFactory fetcher_factory_; | 253 net::TestURLFetcherFactory fetcher_factory_; |
| 254 content::NotificationRegistrar registrar_; | 254 content::NotificationRegistrar registrar_; |
| 255 TestNotificationObserver observer_; | 255 TestNotificationObserver observer_; |
| 256 GoogleURLTrackerNavigationHelper* nav_helper_; | 256 GoogleURLTrackerNavigationHelper* nav_helper_; |
| 257 TestingProfile profile_; | 257 TestingProfile profile_; |
| 258 scoped_ptr<GoogleURLTracker> google_url_tracker_; | 258 scoped_ptr<GoogleURLTracker> google_url_tracker_; |
| 259 // This tracks the different "tabs" a test has "opened", so we can close them | 259 // This tracks the different "tabs" a test has "opened", so we can close them |
| 260 // properly before shutting down |google_url_tracker_|, which expects that. | 260 // properly before shutting down |google_url_tracker_|, which expects that. |
| 261 std::set<int> unique_ids_seen_; | 261 std::set<int> unique_ids_seen_; |
| 262 }; | 262 }; |
| 263 | 263 |
| 264 void GoogleURLTrackerTest::OnInfoBarClosed(scoped_ptr<InfoBar> infobar, | 264 void GoogleURLTrackerTest::OnInfoBarClosed( |
| 265 InfoBarService* infobar_service) { | 265 scoped_ptr<infobars::InfoBar> infobar, |
| 266 InfoBarService* infobar_service) { |
| 266 // First, simulate the InfoBarService firing INFOBAR_REMOVED. | 267 // First, simulate the InfoBarService firing INFOBAR_REMOVED. |
| 267 InfoBar::RemovedDetails removed_details(infobar.get(), false); | 268 infobars::InfoBar::RemovedDetails removed_details(infobar.get(), false); |
| 268 GoogleURLTracker::EntryMap::const_iterator i = | 269 GoogleURLTracker::EntryMap::const_iterator i = |
| 269 google_url_tracker_->entry_map_.find(infobar_service); | 270 google_url_tracker_->entry_map_.find(infobar_service); |
| 270 ASSERT_FALSE(i == google_url_tracker_->entry_map_.end()); | 271 ASSERT_FALSE(i == google_url_tracker_->entry_map_.end()); |
| 271 GoogleURLTrackerMapEntry* map_entry = i->second; | 272 GoogleURLTrackerMapEntry* map_entry = i->second; |
| 272 ASSERT_EQ(infobar->delegate(), map_entry->infobar_delegate()); | 273 ASSERT_EQ(infobar->delegate(), map_entry->infobar_delegate()); |
| 273 map_entry->Observe( | 274 map_entry->Observe( |
| 274 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, | 275 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, |
| 275 content::Source<InfoBarService>(infobar_service), | 276 content::Source<InfoBarService>(infobar_service), |
| 276 content::Details<InfoBar::RemovedDetails>(&removed_details)); | 277 content::Details<infobars::InfoBar::RemovedDetails>(&removed_details)); |
| 277 | 278 |
| 278 // Second, simulate the infobar container closing the infobar in response. | 279 // Second, simulate the infobar container closing the infobar in response. |
| 279 // This happens automatically as |infobar| goes out of scope. | 280 // This happens automatically as |infobar| goes out of scope. |
| 280 } | 281 } |
| 281 | 282 |
| 282 GoogleURLTrackerTest::GoogleURLTrackerTest() | 283 GoogleURLTrackerTest::GoogleURLTrackerTest() |
| 283 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) { | 284 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) { |
| 284 GoogleURLTrackerFactory::GetInstance()-> | 285 GoogleURLTrackerFactory::GetInstance()-> |
| 285 RegisterUserPrefsOnBrowserContextForTest(&profile_); | 286 RegisterUserPrefsOnBrowserContextForTest(&profile_); |
| 286 } | 287 } |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 bool listening) { | 440 bool listening) { |
| 440 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); | 441 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); |
| 441 if (map_entry) { | 442 if (map_entry) { |
| 442 EXPECT_EQ(listening, nav_helper_->IsListeningForNavigationCommit( | 443 EXPECT_EQ(listening, nav_helper_->IsListeningForNavigationCommit( |
| 443 map_entry->navigation_controller())); | 444 map_entry->navigation_controller())); |
| 444 } else { | 445 } else { |
| 445 EXPECT_FALSE(listening); | 446 EXPECT_FALSE(listening); |
| 446 } | 447 } |
| 447 } | 448 } |
| 448 | 449 |
| 449 InfoBar* GoogleURLTrackerTest::CreateTestInfoBar( | 450 infobars::InfoBar* GoogleURLTrackerTest::CreateTestInfoBar( |
| 450 InfoBarService* infobar_service, | 451 InfoBarService* infobar_service, |
| 451 GoogleURLTracker* google_url_tracker, | 452 GoogleURLTracker* google_url_tracker, |
| 452 const GURL& search_url) { | 453 const GURL& search_url) { |
| 453 return TestInfoBarDelegate::Create(this, infobar_service, google_url_tracker, | 454 return TestInfoBarDelegate::Create(this, infobar_service, google_url_tracker, |
| 454 search_url); | 455 search_url); |
| 455 } | 456 } |
| 456 | 457 |
| 457 | 458 |
| 458 // TestInfoBarDelegate -------------------------------------------------------- | 459 // TestInfoBarDelegate -------------------------------------------------------- |
| 459 | 460 |
| 460 namespace { | 461 namespace { |
| 461 | 462 |
| 462 // static | 463 // static |
| 463 InfoBar* TestInfoBarDelegate::Create(GoogleURLTrackerTest* test_harness, | 464 infobars::InfoBar* TestInfoBarDelegate::Create( |
| 464 InfoBarService* infobar_service, | 465 GoogleURLTrackerTest* test_harness, |
| 465 GoogleURLTracker* google_url_tracker, | 466 InfoBarService* infobar_service, |
| 466 const GURL& search_url) { | 467 GoogleURLTracker* google_url_tracker, |
| 468 const GURL& search_url) { |
| 467 return ConfirmInfoBarDelegate::CreateInfoBar( | 469 return ConfirmInfoBarDelegate::CreateInfoBar( |
| 468 scoped_ptr<ConfirmInfoBarDelegate>(new TestInfoBarDelegate( | 470 scoped_ptr<ConfirmInfoBarDelegate>(new TestInfoBarDelegate( |
| 469 test_harness, infobar_service, google_url_tracker, | 471 test_harness, infobar_service, google_url_tracker, |
| 470 search_url))).release(); | 472 search_url))).release(); |
| 471 } | 473 } |
| 472 | 474 |
| 473 TestInfoBarDelegate::TestInfoBarDelegate(GoogleURLTrackerTest* test_harness, | 475 TestInfoBarDelegate::TestInfoBarDelegate(GoogleURLTrackerTest* test_harness, |
| 474 InfoBarService* infobar_service, | 476 InfoBarService* infobar_service, |
| 475 GoogleURLTracker* google_url_tracker, | 477 GoogleURLTracker* google_url_tracker, |
| 476 const GURL& search_url) | 478 const GURL& search_url) |
| 477 : GoogleURLTrackerInfoBarDelegate(google_url_tracker, search_url), | 479 : GoogleURLTrackerInfoBarDelegate(google_url_tracker, search_url), |
| 478 test_harness_(test_harness), | 480 test_harness_(test_harness), |
| 479 infobar_service_(infobar_service) { | 481 infobar_service_(infobar_service) { |
| 480 } | 482 } |
| 481 | 483 |
| 482 TestInfoBarDelegate::~TestInfoBarDelegate() { | 484 TestInfoBarDelegate::~TestInfoBarDelegate() { |
| 483 } | 485 } |
| 484 | 486 |
| 485 void TestInfoBarDelegate::Update(const GURL& search_url) { | 487 void TestInfoBarDelegate::Update(const GURL& search_url) { |
| 486 set_search_url(search_url); | 488 set_search_url(search_url); |
| 487 set_pending_id(0); | 489 set_pending_id(0); |
| 488 } | 490 } |
| 489 | 491 |
| 490 void TestInfoBarDelegate::Close(bool redo_search) { | 492 void TestInfoBarDelegate::Close(bool redo_search) { |
| 491 test_harness_->OnInfoBarClosed(scoped_ptr<InfoBar>(infobar()), | 493 test_harness_->OnInfoBarClosed(scoped_ptr<infobars::InfoBar>(infobar()), |
| 492 infobar_service_); | 494 infobar_service_); |
| 493 // WARNING: At this point |this| has been deleted! | 495 // WARNING: At this point |this| has been deleted! |
| 494 } | 496 } |
| 495 | 497 |
| 496 } // namespace | 498 } // namespace |
| 497 | 499 |
| 498 | 500 |
| 499 // Tests ---------------------------------------------------------------------- | 501 // Tests ---------------------------------------------------------------------- |
| 500 | 502 |
| 501 TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) { | 503 TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) { |
| (...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1076 CommitSearch(2, GURL("http://www.google.co.uk/search?q=test2")); | 1078 CommitSearch(2, GURL("http://www.google.co.uk/search?q=test2")); |
| 1077 EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); | 1079 EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); |
| 1078 GoogleURLTrackerInfoBarDelegate* delegate2 = GetInfoBarDelegate(2); | 1080 GoogleURLTrackerInfoBarDelegate* delegate2 = GetInfoBarDelegate(2); |
| 1079 ASSERT_FALSE(delegate2 == NULL); | 1081 ASSERT_FALSE(delegate2 == NULL); |
| 1080 SetNavigationPending(1, true); | 1082 SetNavigationPending(1, true); |
| 1081 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 1083 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); |
| 1082 delegate2->Close(false); | 1084 delegate2->Close(false); |
| 1083 SetNavigationPending(1, false); | 1085 SetNavigationPending(1, false); |
| 1084 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 1086 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); |
| 1085 } | 1087 } |
| OLD | NEW |