Chromium Code Reviews| 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.h" | 10 #include "base/message_loop.h" |
| 11 #include "chrome/browser/api/infobars/infobar_delegate.h" | 11 #include "chrome/browser/api/infobars/infobar_delegate.h" |
| 12 #include "chrome/browser/google/google_url_tracker_factory.h" | 12 #include "chrome/browser/google/google_url_tracker_factory.h" |
| 13 #include "chrome/browser/google/google_url_tracker_infobar_delegate.h" | 13 #include "chrome/browser/google/google_url_tracker_infobar_delegate.h" |
| 14 #include "chrome/browser/infobars/infobar.h" | |
| 14 #include "chrome/browser/prefs/pref_service.h" | 15 #include "chrome/browser/prefs/pref_service.h" |
| 15 #include "chrome/common/chrome_notification_types.h" | 16 #include "chrome/common/chrome_notification_types.h" |
| 16 #include "chrome/common/pref_names.h" | 17 #include "chrome/common/pref_names.h" |
| 17 #include "chrome/test/base/testing_profile.h" | 18 #include "chrome/test/base/testing_profile.h" |
| 18 #include "content/public/browser/notification_service.h" | 19 #include "content/public/browser/notification_service.h" |
| 19 #include "content/public/test/test_browser_thread.h" | 20 #include "content/public/test/test_browser_thread.h" |
| 20 #include "net/url_request/test_url_fetcher_factory.h" | 21 #include "net/url_request/test_url_fetcher_factory.h" |
| 21 #include "net/url_request/url_fetcher.h" | 22 #include "net/url_request/url_fetcher.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
| 23 | 24 |
| 25 namespace { | |
| 26 | |
| 27 // TestInfoBarDelegate -------------------------------------------------------- | |
| 28 | |
| 29 class TestInfoBarDelegate : public GoogleURLTrackerInfoBarDelegate { | |
| 30 public: | |
| 31 TestInfoBarDelegate(GoogleURLTrackerTest* test_harness, | |
|
Ilya Sherman
2012/10/17 00:32:41
nit: Seems like this should still need to be forwa
Peter Kasting
2012/10/17 00:34:28
Yeah, boo to MSVC for letting me get away without
| |
| 32 InfoBarTabHelper* infobar_helper, | |
| 33 GoogleURLTracker* google_url_tracker, | |
| 34 const GURL& search_url); | |
| 35 virtual ~TestInfoBarDelegate(); | |
| 36 | |
| 37 private: | |
| 38 // GoogleURLTrackerInfoBarDelegate: | |
| 39 virtual void Update(const GURL& search_url) OVERRIDE; | |
| 40 virtual void Close(bool redo_search) OVERRIDE; | |
| 41 | |
| 42 GoogleURLTrackerTest* test_harness_; | |
| 43 InfoBarTabHelper* infobar_helper_; | |
| 44 | |
| 45 DISALLOW_COPY_AND_ASSIGN(TestInfoBarDelegate); | |
| 46 }; | |
| 47 | |
| 48 // The member function definitions come after the declaration of | |
| 49 // GoogleURLTrackerTest, so they can call members on it. | |
| 50 | |
| 51 | |
| 24 // TestNotificationObserver --------------------------------------------------- | 52 // TestNotificationObserver --------------------------------------------------- |
| 25 | 53 |
| 26 namespace { | |
| 27 | |
| 28 class TestNotificationObserver : public content::NotificationObserver { | 54 class TestNotificationObserver : public content::NotificationObserver { |
| 29 public: | 55 public: |
| 30 TestNotificationObserver(); | 56 TestNotificationObserver(); |
| 31 virtual ~TestNotificationObserver(); | 57 virtual ~TestNotificationObserver(); |
| 32 | 58 |
| 33 virtual void Observe(int type, | 59 virtual void Observe(int type, |
| 34 const content::NotificationSource& source, | 60 const content::NotificationSource& source, |
| 35 const content::NotificationDetails& details); | 61 const content::NotificationDetails& details); |
| 36 bool notified() const { return notified_; } | 62 bool notified() const { return notified_; } |
| 37 void clear_notified() { notified_ = false; } | 63 void clear_notified() { notified_ = false; } |
| 38 | 64 |
| 39 private: | 65 private: |
| 40 bool notified_; | 66 bool notified_; |
| 41 }; | 67 }; |
| 42 | 68 |
| 43 TestNotificationObserver::TestNotificationObserver() : notified_(false) { | 69 TestNotificationObserver::TestNotificationObserver() : notified_(false) { |
| 44 } | 70 } |
| 45 | 71 |
| 46 TestNotificationObserver::~TestNotificationObserver() { | 72 TestNotificationObserver::~TestNotificationObserver() { |
| 47 } | 73 } |
| 48 | 74 |
| 49 void TestNotificationObserver::Observe( | 75 void TestNotificationObserver::Observe( |
| 50 int type, | 76 int type, |
| 51 const content::NotificationSource& source, | 77 const content::NotificationSource& source, |
| 52 const content::NotificationDetails& details) { | 78 const content::NotificationDetails& details) { |
| 53 notified_ = true; | 79 notified_ = true; |
| 54 } | 80 } |
| 55 | 81 |
| 56 | |
| 57 // TestInfoBarDelegate -------------------------------------------------------- | |
| 58 | |
| 59 class TestInfoBarDelegate : public GoogleURLTrackerInfoBarDelegate { | |
| 60 public: | |
| 61 TestInfoBarDelegate(InfoBarTabHelper* infobar_helper, | |
| 62 GoogleURLTracker* google_url_tracker, | |
| 63 const GURL& new_google_url); | |
| 64 virtual ~TestInfoBarDelegate(); | |
| 65 | |
| 66 GURL search_url() const { return search_url_; } | |
| 67 GURL new_google_url() const { return new_google_url_; } | |
| 68 int pending_id() const { return pending_id_; } | |
| 69 | |
| 70 private: | |
| 71 // GoogleURLTrackerInfoBarDelegate: | |
| 72 virtual void Show(const GURL& search_url) OVERRIDE; | |
| 73 virtual void Close(bool redo_search) OVERRIDE; | |
| 74 }; | |
| 75 | |
| 76 TestInfoBarDelegate::TestInfoBarDelegate(InfoBarTabHelper* infobar_helper, | |
| 77 GoogleURLTracker* google_url_tracker, | |
| 78 const GURL& new_google_url) | |
| 79 : GoogleURLTrackerInfoBarDelegate(NULL, google_url_tracker, new_google_url) { | |
| 80 // We set |map_key_| here instead of in the superclass constructor so that the | |
| 81 // InfoBarDelegate base class will not try to dereference it, which would fail | |
| 82 // since this is really a magic number and not an actual pointer. | |
| 83 map_key_ = infobar_helper; | |
| 84 } | |
| 85 | |
| 86 void TestInfoBarDelegate::Show(const GURL& search_url) { | |
| 87 search_url_ = search_url; | |
| 88 pending_id_ = 0; | |
| 89 showing_ = true; | |
| 90 } | |
| 91 | |
| 92 void TestInfoBarDelegate::Close(bool redo_search) { | |
| 93 InfoBarClosed(); | |
| 94 } | |
| 95 | |
| 96 TestInfoBarDelegate::~TestInfoBarDelegate() { | |
| 97 } | |
| 98 | |
| 99 GoogleURLTrackerInfoBarDelegate* CreateTestInfobar( | |
| 100 InfoBarTabHelper* infobar_helper, | |
| 101 GoogleURLTracker* google_url_tracker, | |
| 102 const GURL& new_google_url) { | |
| 103 return new TestInfoBarDelegate(infobar_helper, google_url_tracker, | |
| 104 new_google_url); | |
| 105 } | |
| 106 | |
| 107 } // namespace | 82 } // namespace |
| 108 | 83 |
| 109 | 84 |
| 110 // GoogleURLTrackerTest ------------------------------------------------------- | 85 // GoogleURLTrackerTest ------------------------------------------------------- |
| 111 | 86 |
| 87 // Ths class exercises GoogleURLTracker. In order to avoid instantiating more | |
| 88 // of the Chrome infrastructure than necessary, the GoogleURLTracker functions | |
| 89 // are carefully written so that many of the functions which take WebContents*, | |
| 90 // NavigationController*, InfoBarTabHelper*, or objects containing such pointers | |
| 91 // (e.g. NotificationSource) do not actually dereference the objects, merely use | |
| 92 // them for comparisons and lookups, e.g. in an InfoBarMap. This then allows | |
| 93 // the test code here to not create any of these objects, and instead supply | |
| 94 // "pointers" that are actually reinterpret_cast<>()ed magic numbers. Then we | |
| 95 // write the necessary stubs/hooks, here and in TestInfoBarDelegate above, to | |
| 96 // make everything continue to work. | |
| 97 // | |
| 98 // Technically, the C++98 spec defines the result of casting | |
| 99 // T* -> intptr_t -> T* to be an identity, but intptr_t -> T* -> intptr_t (what | |
| 100 // we use here) is "implementation-defined". Since I've never seen a compiler | |
| 101 // break this, though, and the result would simply be a failing test rather than | |
| 102 // a bug in Chrome, we'll use it anyway. | |
| 112 class GoogleURLTrackerTest : public testing::Test { | 103 class GoogleURLTrackerTest : public testing::Test { |
| 104 public: | |
| 105 // Called by TestInfoBarDelegate::Close(). | |
| 106 void OnInfoBarClosed(GoogleURLTrackerInfoBarDelegate* infobar, | |
| 107 InfoBarTabHelper* infobar_helper); | |
| 108 | |
| 113 protected: | 109 protected: |
| 114 GoogleURLTrackerTest(); | 110 GoogleURLTrackerTest(); |
| 115 virtual ~GoogleURLTrackerTest(); | 111 virtual ~GoogleURLTrackerTest(); |
| 116 | 112 |
| 117 // testing::Test | 113 // testing::Test |
| 118 virtual void SetUp(); | 114 virtual void SetUp() OVERRIDE; |
| 119 virtual void TearDown(); | 115 virtual void TearDown() OVERRIDE; |
| 120 | 116 |
| 121 net::TestURLFetcher* GetFetcher(); | 117 net::TestURLFetcher* GetFetcher(); |
| 122 void MockSearchDomainCheckResponse(const std::string& domain); | 118 void MockSearchDomainCheckResponse(const std::string& domain); |
| 123 void RequestServerCheck(); | 119 void RequestServerCheck(); |
| 124 void FinishSleep(); | 120 void FinishSleep(); |
| 125 void NotifyIPAddressChanged(); | 121 void NotifyIPAddressChanged(); |
| 126 GURL fetched_google_url() const { | 122 GURL fetched_google_url() const { |
| 127 return google_url_tracker_->fetched_google_url_; | 123 return google_url_tracker_->fetched_google_url(); |
| 128 } | 124 } |
| 129 void set_google_url(const GURL& url) { | 125 void set_google_url(const GURL& url) { |
| 130 google_url_tracker_->google_url_ = url; | 126 google_url_tracker_->google_url_ = url; |
| 131 } | 127 } |
| 132 GURL google_url() const { return google_url_tracker_->google_url_; } | 128 GURL google_url() const { return google_url_tracker_->google_url(); } |
| 133 void SetLastPromptedGoogleURL(const GURL& url); | 129 void SetLastPromptedGoogleURL(const GURL& url); |
| 134 GURL GetLastPromptedGoogleURL(); | 130 GURL GetLastPromptedGoogleURL(); |
| 135 void SetNavigationPending(int unique_id, bool is_search); | 131 void SetNavigationPending(intptr_t unique_id, bool is_search); |
| 136 void CommitNonSearch(int unique_id); | 132 void CommitNonSearch(intptr_t unique_id); |
| 137 void CommitSearch(int unique_id, const GURL& search_url); | 133 void CommitSearch(intptr_t unique_id, const GURL& search_url); |
| 138 void DoInstantNavigation(int unique_id, const GURL& search_url); | 134 void DoInstantNavigation(intptr_t unique_id, const GURL& search_url); |
| 139 void CloseTab(int unique_id); | 135 void CloseTab(intptr_t unique_id); |
| 140 TestInfoBarDelegate* GetInfoBar(int unique_id); | 136 GoogleURLTrackerMapEntry* GetMapEntry(intptr_t unique_id); |
| 137 GoogleURLTrackerInfoBarDelegate* GetInfoBar(intptr_t unique_id); | |
| 141 void ExpectDefaultURLs() const; | 138 void ExpectDefaultURLs() const; |
| 142 void ExpectListeningForCommit(int unique_id, bool listening) const; | 139 void ExpectListeningForCommit(intptr_t unique_id, bool listening); |
| 143 | 140 bool observer_notified() const { return observer_.notified(); } |
| 144 scoped_ptr<TestNotificationObserver> observer_; | 141 void clear_observer_notified() { observer_.clear_notified(); } |
| 145 | 142 |
| 146 private: | 143 private: |
| 144 // Since |infobar_helper| is really a magic number rather than an actual | |
| 145 // object, we don't add the created infobar to it. Instead we will simulate | |
| 146 // any helper<->infobar interaction necessary. The returned object will be | |
| 147 // cleaned up in CloseTab(). | |
| 148 GoogleURLTrackerInfoBarDelegate* CreateTestInfoBar( | |
| 149 InfoBarTabHelper* infobar_helper, | |
| 150 GoogleURLTracker* google_url_tracker, | |
| 151 const GURL& search_url); | |
| 152 | |
| 147 // These are required by the TestURLFetchers GoogleURLTracker will create (see | 153 // These are required by the TestURLFetchers GoogleURLTracker will create (see |
| 148 // test_url_fetcher_factory.h). | 154 // test_url_fetcher_factory.h). |
| 149 MessageLoop message_loop_; | 155 MessageLoop message_loop_; |
| 150 content::TestBrowserThread io_thread_; | 156 content::TestBrowserThread io_thread_; |
| 151 // Creating this allows us to call | 157 // Creating this allows us to call |
| 152 // net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(). | 158 // net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(). |
| 153 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; | 159 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; |
| 154 net::TestURLFetcherFactory fetcher_factory_; | 160 net::TestURLFetcherFactory fetcher_factory_; |
| 155 content::NotificationRegistrar registrar_; | 161 content::NotificationRegistrar registrar_; |
| 162 TestNotificationObserver observer_; | |
| 156 TestingProfile profile_; | 163 TestingProfile profile_; |
| 157 scoped_ptr<GoogleURLTracker> google_url_tracker_; | 164 scoped_ptr<GoogleURLTracker> google_url_tracker_; |
| 158 // This tracks the different "tabs" a test has "opened", so we can close them | 165 // This tracks the different "tabs" a test has "opened", so we can close them |
| 159 // properly before shutting down |google_url_tracker_|, which expects that. | 166 // properly before shutting down |google_url_tracker_|, which expects that. |
| 160 std::set<int> unique_ids_seen_; | 167 std::set<int> unique_ids_seen_; |
| 161 }; | 168 }; |
| 162 | 169 |
| 170 void GoogleURLTrackerTest::OnInfoBarClosed( | |
| 171 GoogleURLTrackerInfoBarDelegate* infobar, | |
| 172 InfoBarTabHelper* infobar_helper) { | |
| 173 // First, simulate the InfoBarTabHelper firing INFOBAR_REMOVED. | |
| 174 InfoBarRemovedDetails removed_details(infobar, false); | |
| 175 GoogleURLTracker::InfoBarMap::const_iterator i = | |
| 176 google_url_tracker_->infobar_map_.find(infobar_helper); | |
| 177 ASSERT_FALSE(i == google_url_tracker_->infobar_map_.end()); | |
| 178 GoogleURLTrackerMapEntry* map_entry = i->second; | |
| 179 ASSERT_EQ(infobar, map_entry->infobar()); | |
| 180 map_entry->Observe(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, | |
| 181 content::Source<InfoBarTabHelper>(infobar_helper), | |
| 182 content::Details<InfoBarRemovedDetails>(&removed_details)); | |
| 183 | |
| 184 // Second, simulate the infobar container closing the infobar in response. | |
| 185 infobar->InfoBarClosed(); | |
| 186 } | |
| 187 | |
| 163 GoogleURLTrackerTest::GoogleURLTrackerTest() | 188 GoogleURLTrackerTest::GoogleURLTrackerTest() |
| 164 : observer_(new TestNotificationObserver), | 189 : message_loop_(MessageLoop::TYPE_IO), |
| 165 message_loop_(MessageLoop::TYPE_IO), | |
| 166 io_thread_(content::BrowserThread::IO, &message_loop_) { | 190 io_thread_(content::BrowserThread::IO, &message_loop_) { |
| 167 GoogleURLTrackerFactory::GetInstance()->RegisterUserPrefsOnProfile(&profile_); | 191 GoogleURLTrackerFactory::GetInstance()->RegisterUserPrefsOnProfile(&profile_); |
| 168 } | 192 } |
| 169 | 193 |
| 170 GoogleURLTrackerTest::~GoogleURLTrackerTest() { | 194 GoogleURLTrackerTest::~GoogleURLTrackerTest() { |
| 171 } | 195 } |
| 172 | 196 |
| 173 void GoogleURLTrackerTest::SetUp() { | 197 void GoogleURLTrackerTest::SetUp() { |
| 174 network_change_notifier_.reset(net::NetworkChangeNotifier::CreateMock()); | 198 network_change_notifier_.reset(net::NetworkChangeNotifier::CreateMock()); |
| 175 google_url_tracker_.reset( | 199 google_url_tracker_.reset( |
| 176 new GoogleURLTracker(&profile_, GoogleURLTracker::UNIT_TEST_MODE)); | 200 new GoogleURLTracker(&profile_, GoogleURLTracker::UNIT_TEST_MODE)); |
| 177 google_url_tracker_->infobar_creator_ = &CreateTestInfobar; | 201 google_url_tracker_->infobar_creator_ = base::Bind( |
| 202 &GoogleURLTrackerTest::CreateTestInfoBar, base::Unretained(this)); | |
| 178 } | 203 } |
| 179 | 204 |
| 180 void GoogleURLTrackerTest::TearDown() { | 205 void GoogleURLTrackerTest::TearDown() { |
| 181 while (!unique_ids_seen_.empty()) | 206 while (!unique_ids_seen_.empty()) |
| 182 CloseTab(*unique_ids_seen_.begin()); | 207 CloseTab(*unique_ids_seen_.begin()); |
| 183 | 208 |
| 184 google_url_tracker_.reset(); | 209 google_url_tracker_.reset(); |
| 185 network_change_notifier_.reset(); | 210 network_change_notifier_.reset(); |
| 186 } | 211 } |
| 187 | 212 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 198 return; | 223 return; |
| 199 fetcher_factory_.RemoveFetcherFromMap(fetcher->id()); | 224 fetcher_factory_.RemoveFetcherFromMap(fetcher->id()); |
| 200 fetcher->set_url(GURL(GoogleURLTracker::kSearchDomainCheckURL)); | 225 fetcher->set_url(GURL(GoogleURLTracker::kSearchDomainCheckURL)); |
| 201 fetcher->set_response_code(200); | 226 fetcher->set_response_code(200); |
| 202 fetcher->SetResponseString(domain); | 227 fetcher->SetResponseString(domain); |
| 203 fetcher->delegate()->OnURLFetchComplete(fetcher); | 228 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 204 // At this point, |fetcher| is deleted. | 229 // At this point, |fetcher| is deleted. |
| 205 } | 230 } |
| 206 | 231 |
| 207 void GoogleURLTrackerTest::RequestServerCheck() { | 232 void GoogleURLTrackerTest::RequestServerCheck() { |
| 208 if (!registrar_.IsRegistered(observer_.get(), | 233 if (!registrar_.IsRegistered(&observer_, |
| 209 chrome::NOTIFICATION_GOOGLE_URL_UPDATED, | 234 chrome::NOTIFICATION_GOOGLE_URL_UPDATED, |
| 210 content::Source<Profile>(&profile_))) { | 235 content::Source<Profile>(&profile_))) { |
| 211 registrar_.Add(observer_.get(), chrome::NOTIFICATION_GOOGLE_URL_UPDATED, | 236 registrar_.Add(&observer_, chrome::NOTIFICATION_GOOGLE_URL_UPDATED, |
| 212 content::Source<Profile>(&profile_)); | 237 content::Source<Profile>(&profile_)); |
| 213 } | 238 } |
| 214 google_url_tracker_->SetNeedToFetch(); | 239 google_url_tracker_->SetNeedToFetch(); |
| 215 } | 240 } |
| 216 | 241 |
| 217 void GoogleURLTrackerTest::FinishSleep() { | 242 void GoogleURLTrackerTest::FinishSleep() { |
| 218 google_url_tracker_->FinishSleep(); | 243 google_url_tracker_->FinishSleep(); |
| 219 } | 244 } |
| 220 | 245 |
| 221 void GoogleURLTrackerTest::NotifyIPAddressChanged() { | 246 void GoogleURLTrackerTest::NotifyIPAddressChanged() { |
| 222 net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 247 net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
| 223 // For thread safety, the NCN queues tasks to do the actual notifications, so | 248 // For thread safety, the NCN queues tasks to do the actual notifications, so |
| 224 // we need to spin the message loop so the tracker will actually be notified. | 249 // we need to spin the message loop so the tracker will actually be notified. |
| 225 MessageLoop::current()->RunAllPending(); | 250 MessageLoop::current()->RunAllPending(); |
| 226 } | 251 } |
| 227 | 252 |
| 228 void GoogleURLTrackerTest::SetLastPromptedGoogleURL(const GURL& url) { | 253 void GoogleURLTrackerTest::SetLastPromptedGoogleURL(const GURL& url) { |
| 229 profile_.GetPrefs()->SetString(prefs::kLastPromptedGoogleURL, url.spec()); | 254 profile_.GetPrefs()->SetString(prefs::kLastPromptedGoogleURL, url.spec()); |
| 230 } | 255 } |
| 231 | 256 |
| 232 GURL GoogleURLTrackerTest::GetLastPromptedGoogleURL() { | 257 GURL GoogleURLTrackerTest::GetLastPromptedGoogleURL() { |
| 233 return GURL(profile_.GetPrefs()->GetString(prefs::kLastPromptedGoogleURL)); | 258 return GURL(profile_.GetPrefs()->GetString(prefs::kLastPromptedGoogleURL)); |
| 234 } | 259 } |
| 235 | 260 |
| 236 void GoogleURLTrackerTest::SetNavigationPending(int unique_id, bool is_search) { | 261 void GoogleURLTrackerTest::SetNavigationPending(intptr_t unique_id, |
| 262 bool is_search) { | |
| 237 if (is_search) { | 263 if (is_search) { |
| 238 google_url_tracker_->SearchCommitted(); | 264 google_url_tracker_->SearchCommitted(); |
| 239 // Note that the call above might not have actually registered a listener | 265 // Note that the call above might not have actually registered a listener |
| 240 // for NOTIFICATION_NAV_ENTRY_PENDING if the searchdomaincheck response was | 266 // for NOTIFICATION_NAV_ENTRY_PENDING if the searchdomaincheck response was |
| 241 // bogus. | 267 // bogus. |
| 242 } | 268 } |
| 243 unique_ids_seen_.insert(unique_id); | 269 unique_ids_seen_.insert(unique_id); |
| 244 if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(), | 270 if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(), |
| 245 content::NOTIFICATION_NAV_ENTRY_PENDING, | 271 content::NOTIFICATION_NAV_ENTRY_PENDING, |
| 246 content::NotificationService::AllBrowserContextsAndSources())) { | 272 content::NotificationService::AllBrowserContextsAndSources())) { |
| 247 google_url_tracker_->OnNavigationPending( | 273 google_url_tracker_->OnNavigationPending( |
| 248 content::Source<content::NavigationController>( | 274 content::Source<content::NavigationController>( |
| 249 reinterpret_cast<content::NavigationController*>(unique_id)), | 275 reinterpret_cast<content::NavigationController*>(unique_id)), |
| 250 content::Source<content::WebContents>( | 276 content::Source<content::WebContents>( |
| 251 reinterpret_cast<content::WebContents*>(unique_id)), | 277 reinterpret_cast<content::WebContents*>(unique_id)), |
| 252 reinterpret_cast<InfoBarTabHelper*>(unique_id), unique_id); | 278 reinterpret_cast<InfoBarTabHelper*>(unique_id), unique_id); |
| 253 } | 279 } |
| 254 } | 280 } |
| 255 | 281 |
| 256 void GoogleURLTrackerTest::CommitNonSearch(int unique_id) { | 282 void GoogleURLTrackerTest::CommitNonSearch(intptr_t unique_id) { |
| 257 GoogleURLTracker::InfoBarMap::iterator i = | 283 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); |
| 258 google_url_tracker_->infobar_map_.find( | 284 if (!map_entry) |
| 259 reinterpret_cast<InfoBarTabHelper*>(unique_id)); | 285 return; |
| 260 if (i != google_url_tracker_->infobar_map_.end()) { | 286 |
| 261 ExpectListeningForCommit(unique_id, false); | 287 ExpectListeningForCommit(unique_id, false); |
| 262 TestInfoBarDelegate* infobar = | 288 |
| 263 static_cast<TestInfoBarDelegate*>(i->second.infobar); | 289 // The infobar should be showing; otherwise the pending non-search should |
| 264 // The infobar should be showing; otherwise the pending non-search should | 290 // have closed it. |
| 265 // have closed it. | 291 ASSERT_TRUE(map_entry->has_infobar()); |
| 266 EXPECT_TRUE(infobar->showing()); | 292 |
| 267 // The pending_id should have been reset to 0 when the non-search became | 293 // The pending_id should have been reset to 0 when the non-search became |
| 268 // pending. | 294 // pending. |
| 269 EXPECT_EQ(0, infobar->pending_id()); | 295 EXPECT_EQ(0, map_entry->infobar()->pending_id()); |
| 270 infobar->InfoBarClosed(); | 296 |
| 271 } | 297 // Committing the navigation would close the infobar. |
| 298 map_entry->infobar()->Close(false); | |
| 272 } | 299 } |
| 273 | 300 |
| 274 void GoogleURLTrackerTest::CommitSearch(int unique_id, const GURL& search_url) { | 301 void GoogleURLTrackerTest::CommitSearch(intptr_t unique_id, |
| 302 const GURL& search_url) { | |
| 275 if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(), | 303 if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(), |
| 276 content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 304 content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
| 277 content::Source<content::NavigationController>( | 305 content::Source<content::NavigationController>( |
| 278 reinterpret_cast<content::NavigationController*>(unique_id)))) { | 306 reinterpret_cast<content::NavigationController*>(unique_id)))) { |
| 279 google_url_tracker_->OnNavigationCommittedOrTabClosed( | 307 google_url_tracker_->OnNavigationCommittedOrTabClosed( |
| 280 reinterpret_cast<InfoBarTabHelper*>(unique_id), | 308 reinterpret_cast<InfoBarTabHelper*>(unique_id), |
| 281 search_url); | 309 search_url); |
| 282 } | 310 } |
| 283 } | 311 } |
| 284 | 312 |
| 285 void GoogleURLTrackerTest::DoInstantNavigation(int unique_id, | 313 void GoogleURLTrackerTest::DoInstantNavigation(intptr_t unique_id, |
| 286 const GURL& search_url) { | 314 const GURL& search_url) { |
| 287 if (!search_url.is_empty()) { | 315 if (!search_url.is_empty()) { |
| 288 google_url_tracker_->SearchCommitted(); | 316 google_url_tracker_->SearchCommitted(); |
| 289 // Note that the call above might not have actually registered a listener | 317 // Note that the call above might not have actually registered a listener |
| 290 // for NOTIFICATION_INSTANT_COMMITTED if the searchdomaincheck response was | 318 // for NOTIFICATION_INSTANT_COMMITTED if the searchdomaincheck response was |
| 291 // bogus. | 319 // bogus. |
| 292 } | 320 } |
| 293 unique_ids_seen_.insert(unique_id); | 321 unique_ids_seen_.insert(unique_id); |
| 294 if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(), | 322 if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(), |
| 295 chrome::NOTIFICATION_INSTANT_COMMITTED, | 323 chrome::NOTIFICATION_INSTANT_COMMITTED, |
| 296 content::NotificationService::AllBrowserContextsAndSources())) { | 324 content::NotificationService::AllBrowserContextsAndSources())) { |
| 297 google_url_tracker_->OnInstantCommitted( | 325 google_url_tracker_->OnInstantCommitted( |
| 298 content::Source<content::NavigationController>( | 326 content::Source<content::NavigationController>( |
| 299 reinterpret_cast<content::NavigationController*>(unique_id)), | 327 reinterpret_cast<content::NavigationController*>(unique_id)), |
| 300 content::Source<content::WebContents>( | 328 content::Source<content::WebContents>( |
| 301 reinterpret_cast<content::WebContents*>(unique_id)), | 329 reinterpret_cast<content::WebContents*>(unique_id)), |
| 302 reinterpret_cast<InfoBarTabHelper*>(unique_id), search_url); | 330 reinterpret_cast<InfoBarTabHelper*>(unique_id), search_url); |
| 303 } | 331 } |
| 304 } | 332 } |
| 305 | 333 |
| 306 void GoogleURLTrackerTest::CloseTab(int unique_id) { | 334 void GoogleURLTrackerTest::CloseTab(intptr_t unique_id) { |
| 307 unique_ids_seen_.erase(unique_id); | 335 unique_ids_seen_.erase(unique_id); |
| 308 InfoBarTabHelper* infobar_helper = | 336 InfoBarTabHelper* infobar_helper = |
| 309 reinterpret_cast<InfoBarTabHelper*>(unique_id); | 337 reinterpret_cast<InfoBarTabHelper*>(unique_id); |
| 310 if (google_url_tracker_->registrar_.IsRegistered( | 338 if (google_url_tracker_->registrar_.IsRegistered( |
| 311 google_url_tracker_.get(), | 339 google_url_tracker_.get(), content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
| 312 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 340 content::Source<content::WebContents>( |
| 313 content::Source<content::WebContents>( | 341 reinterpret_cast<content::WebContents*>(unique_id)))) { |
| 314 reinterpret_cast<content::WebContents*>(unique_id)))) { | |
| 315 google_url_tracker_->OnNavigationCommittedOrTabClosed(infobar_helper, | 342 google_url_tracker_->OnNavigationCommittedOrTabClosed(infobar_helper, |
| 316 GURL()); | 343 GURL()); |
| 317 } else { | 344 } else { |
| 318 // Normally, closing a tab with an infobar showing will close the infobar. | 345 // Closing a tab with an infobar showing would close the infobar. |
| 319 // Since we don't have real tabs and are just faking things with magic | 346 GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBar(unique_id); |
| 320 // numbers, we have to manually close the infobar, if any. | 347 if (infobar) |
| 321 GoogleURLTracker::InfoBarMap::iterator i = | 348 infobar->Close(false); |
| 322 google_url_tracker_->infobar_map_.find(infobar_helper); | |
| 323 if (i != google_url_tracker_->infobar_map_.end()) { | |
| 324 TestInfoBarDelegate* infobar = | |
| 325 static_cast<TestInfoBarDelegate*>(i->second.infobar); | |
| 326 EXPECT_TRUE(infobar->showing()); | |
| 327 infobar->InfoBarClosed(); | |
| 328 } | |
| 329 } | 349 } |
| 330 } | 350 } |
| 331 | 351 |
| 332 TestInfoBarDelegate* GoogleURLTrackerTest::GetInfoBar(int unique_id) { | 352 GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry( |
| 353 intptr_t unique_id) { | |
| 333 GoogleURLTracker::InfoBarMap::const_iterator i = | 354 GoogleURLTracker::InfoBarMap::const_iterator i = |
| 334 google_url_tracker_->infobar_map_.find( | 355 google_url_tracker_->infobar_map_.find( |
| 335 reinterpret_cast<InfoBarTabHelper*>(unique_id)); | 356 reinterpret_cast<InfoBarTabHelper*>(unique_id)); |
| 336 return (i == google_url_tracker_->infobar_map_.end()) ? | 357 return (i == google_url_tracker_->infobar_map_.end()) ? NULL : i->second; |
| 337 NULL : static_cast<TestInfoBarDelegate*>(i->second.infobar); | 358 } |
| 359 | |
| 360 GoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::GetInfoBar( | |
| 361 intptr_t unique_id) { | |
| 362 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); | |
| 363 return map_entry ? map_entry->infobar() : NULL; | |
| 338 } | 364 } |
| 339 | 365 |
| 340 void GoogleURLTrackerTest::ExpectDefaultURLs() const { | 366 void GoogleURLTrackerTest::ExpectDefaultURLs() const { |
| 341 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 367 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 342 EXPECT_EQ(GURL(), fetched_google_url()); | 368 EXPECT_EQ(GURL(), fetched_google_url()); |
| 343 } | 369 } |
| 344 | 370 |
| 345 void GoogleURLTrackerTest::ExpectListeningForCommit(int unique_id, | 371 void GoogleURLTrackerTest::ExpectListeningForCommit(intptr_t unique_id, |
| 346 bool listening) const { | 372 bool listening) { |
| 347 GoogleURLTracker::InfoBarMap::iterator i = | 373 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); |
| 348 google_url_tracker_->infobar_map_.find( | 374 if (map_entry) { |
| 349 reinterpret_cast<InfoBarTabHelper*>(unique_id)); | 375 EXPECT_EQ(listening, google_url_tracker_->registrar_.IsRegistered( |
| 350 if (i == google_url_tracker_->infobar_map_.end()) { | 376 google_url_tracker_.get(), content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
| 377 map_entry->navigation_controller_source())); | |
| 378 } else { | |
| 351 EXPECT_FALSE(listening); | 379 EXPECT_FALSE(listening); |
| 352 return; | |
| 353 } | 380 } |
| 354 EXPECT_EQ(listening, google_url_tracker_->registrar_.IsRegistered( | |
| 355 google_url_tracker_.get(), content::NOTIFICATION_NAV_ENTRY_COMMITTED, | |
| 356 i->second.navigation_controller_source)); | |
| 357 } | 381 } |
| 358 | 382 |
| 383 GoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::CreateTestInfoBar( | |
| 384 InfoBarTabHelper* infobar_helper, | |
| 385 GoogleURLTracker* google_url_tracker, | |
| 386 const GURL& search_url) { | |
| 387 return new TestInfoBarDelegate(this, infobar_helper, google_url_tracker, | |
| 388 search_url); | |
| 389 } | |
| 390 | |
| 391 | |
| 392 // TestInfoBarDelegate -------------------------------------------------------- | |
| 393 | |
| 394 namespace { | |
| 395 | |
| 396 TestInfoBarDelegate::TestInfoBarDelegate(GoogleURLTrackerTest* test_harness, | |
| 397 InfoBarTabHelper* infobar_helper, | |
| 398 GoogleURLTracker* google_url_tracker, | |
| 399 const GURL& search_url) | |
| 400 : GoogleURLTrackerInfoBarDelegate(NULL, google_url_tracker, search_url), | |
| 401 test_harness_(test_harness), | |
| 402 infobar_helper_(infobar_helper) { | |
| 403 } | |
| 404 | |
| 405 TestInfoBarDelegate::~TestInfoBarDelegate() { | |
| 406 } | |
| 407 | |
| 408 void TestInfoBarDelegate::Update(const GURL& search_url) { | |
| 409 set_search_url(search_url); | |
| 410 set_pending_id(0); | |
| 411 } | |
| 412 | |
| 413 void TestInfoBarDelegate::Close(bool redo_search) { | |
| 414 test_harness_->OnInfoBarClosed(this, infobar_helper_); | |
| 415 } | |
| 416 | |
| 417 } // namespace | |
| 418 | |
| 359 | 419 |
| 360 // Tests ---------------------------------------------------------------------- | 420 // Tests ---------------------------------------------------------------------- |
| 361 | 421 |
| 362 TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) { | 422 TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) { |
| 363 ExpectDefaultURLs(); | 423 ExpectDefaultURLs(); |
| 364 FinishSleep(); | 424 FinishSleep(); |
| 365 // No one called RequestServerCheck() so nothing should have happened. | 425 // No one called RequestServerCheck() so nothing should have happened. |
| 366 EXPECT_FALSE(GetFetcher()); | 426 EXPECT_FALSE(GetFetcher()); |
| 367 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 427 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 368 ExpectDefaultURLs(); | 428 ExpectDefaultURLs(); |
| 369 EXPECT_FALSE(observer_->notified()); | 429 EXPECT_FALSE(observer_notified()); |
| 370 } | 430 } |
| 371 | 431 |
| 372 TEST_F(GoogleURLTrackerTest, UpdateOnFirstRun) { | 432 TEST_F(GoogleURLTrackerTest, UpdateOnFirstRun) { |
| 373 RequestServerCheck(); | 433 RequestServerCheck(); |
| 374 EXPECT_FALSE(GetFetcher()); | 434 EXPECT_FALSE(GetFetcher()); |
| 375 ExpectDefaultURLs(); | 435 ExpectDefaultURLs(); |
| 376 EXPECT_FALSE(observer_->notified()); | 436 EXPECT_FALSE(observer_notified()); |
| 377 | 437 |
| 378 FinishSleep(); | 438 FinishSleep(); |
| 379 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 439 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 380 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 440 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
| 381 // GoogleURL should be updated, becase there was no last prompted URL. | 441 // GoogleURL should be updated, becase there was no last prompted URL. |
| 382 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 442 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 383 EXPECT_TRUE(observer_->notified()); | 443 EXPECT_TRUE(observer_notified()); |
| 384 } | 444 } |
| 385 | 445 |
| 386 TEST_F(GoogleURLTrackerTest, DontUpdateWhenUnchanged) { | 446 TEST_F(GoogleURLTrackerTest, DontUpdateWhenUnchanged) { |
| 387 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 447 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 388 | 448 |
| 389 RequestServerCheck(); | 449 RequestServerCheck(); |
| 390 EXPECT_FALSE(GetFetcher()); | 450 EXPECT_FALSE(GetFetcher()); |
| 391 ExpectDefaultURLs(); | 451 ExpectDefaultURLs(); |
| 392 EXPECT_FALSE(observer_->notified()); | 452 EXPECT_FALSE(observer_notified()); |
| 393 | 453 |
| 394 FinishSleep(); | 454 FinishSleep(); |
| 395 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 455 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 396 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 456 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
| 397 // GoogleURL should not be updated, because the fetched and prompted URLs | 457 // GoogleURL should not be updated, because the fetched and prompted URLs |
| 398 // match. | 458 // match. |
| 399 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 459 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 400 EXPECT_FALSE(observer_->notified()); | 460 EXPECT_FALSE(observer_notified()); |
| 401 } | 461 } |
| 402 | 462 |
| 403 TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { | 463 TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { |
| 404 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 464 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 405 | 465 |
| 406 RequestServerCheck(); | 466 RequestServerCheck(); |
| 407 EXPECT_FALSE(GetFetcher()); | 467 EXPECT_FALSE(GetFetcher()); |
| 408 ExpectDefaultURLs(); | 468 ExpectDefaultURLs(); |
| 409 EXPECT_FALSE(observer_->notified()); | 469 EXPECT_FALSE(observer_notified()); |
| 410 | 470 |
| 411 // Old-style domain string. | 471 // Old-style domain string. |
| 412 FinishSleep(); | 472 FinishSleep(); |
| 413 MockSearchDomainCheckResponse(".google.co.in"); | 473 MockSearchDomainCheckResponse(".google.co.in"); |
| 414 EXPECT_EQ(GURL(), fetched_google_url()); | 474 EXPECT_EQ(GURL(), fetched_google_url()); |
| 415 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 475 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 416 EXPECT_FALSE(observer_->notified()); | 476 EXPECT_FALSE(observer_notified()); |
| 417 SetNavigationPending(1, true); | 477 SetNavigationPending(1, true); |
| 418 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 478 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 419 EXPECT_TRUE(GetInfoBar(1) == NULL); | 479 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 420 | 480 |
| 421 // Bad subdomain. | 481 // Bad subdomain. |
| 422 NotifyIPAddressChanged(); | 482 NotifyIPAddressChanged(); |
| 423 MockSearchDomainCheckResponse("http://mail.google.com/"); | 483 MockSearchDomainCheckResponse("http://mail.google.com/"); |
| 424 EXPECT_EQ(GURL(), fetched_google_url()); | 484 EXPECT_EQ(GURL(), fetched_google_url()); |
| 425 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 485 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 426 EXPECT_FALSE(observer_->notified()); | 486 EXPECT_FALSE(observer_notified()); |
| 427 SetNavigationPending(1, true); | 487 SetNavigationPending(1, true); |
| 428 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 488 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 429 EXPECT_TRUE(GetInfoBar(1) == NULL); | 489 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 430 | 490 |
| 431 // Non-empty path. | 491 // Non-empty path. |
| 432 NotifyIPAddressChanged(); | 492 NotifyIPAddressChanged(); |
| 433 MockSearchDomainCheckResponse("http://www.google.com/search"); | 493 MockSearchDomainCheckResponse("http://www.google.com/search"); |
| 434 EXPECT_EQ(GURL(), fetched_google_url()); | 494 EXPECT_EQ(GURL(), fetched_google_url()); |
| 435 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 495 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 436 EXPECT_FALSE(observer_->notified()); | 496 EXPECT_FALSE(observer_notified()); |
| 437 SetNavigationPending(1, true); | 497 SetNavigationPending(1, true); |
| 438 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 498 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 439 EXPECT_TRUE(GetInfoBar(1) == NULL); | 499 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 440 | 500 |
| 441 // Non-empty query. | 501 // Non-empty query. |
| 442 NotifyIPAddressChanged(); | 502 NotifyIPAddressChanged(); |
| 443 MockSearchDomainCheckResponse("http://www.google.com/?q=foo"); | 503 MockSearchDomainCheckResponse("http://www.google.com/?q=foo"); |
| 444 EXPECT_EQ(GURL(), fetched_google_url()); | 504 EXPECT_EQ(GURL(), fetched_google_url()); |
| 445 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 505 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 446 EXPECT_FALSE(observer_->notified()); | 506 EXPECT_FALSE(observer_notified()); |
| 447 SetNavigationPending(1, true); | 507 SetNavigationPending(1, true); |
| 448 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 508 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 449 EXPECT_TRUE(GetInfoBar(1) == NULL); | 509 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 450 | 510 |
| 451 // Non-empty ref. | 511 // Non-empty ref. |
| 452 NotifyIPAddressChanged(); | 512 NotifyIPAddressChanged(); |
| 453 MockSearchDomainCheckResponse("http://www.google.com/#anchor"); | 513 MockSearchDomainCheckResponse("http://www.google.com/#anchor"); |
| 454 EXPECT_EQ(GURL(), fetched_google_url()); | 514 EXPECT_EQ(GURL(), fetched_google_url()); |
| 455 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 515 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 456 EXPECT_FALSE(observer_->notified()); | 516 EXPECT_FALSE(observer_notified()); |
| 457 SetNavigationPending(1, true); | 517 SetNavigationPending(1, true); |
| 458 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 518 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 459 EXPECT_TRUE(GetInfoBar(1) == NULL); | 519 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 460 | 520 |
| 461 // Complete garbage. | 521 // Complete garbage. |
| 462 NotifyIPAddressChanged(); | 522 NotifyIPAddressChanged(); |
| 463 MockSearchDomainCheckResponse("HJ)*qF)_*&@f1"); | 523 MockSearchDomainCheckResponse("HJ)*qF)_*&@f1"); |
| 464 EXPECT_EQ(GURL(), fetched_google_url()); | 524 EXPECT_EQ(GURL(), fetched_google_url()); |
| 465 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 525 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 466 EXPECT_FALSE(observer_->notified()); | 526 EXPECT_FALSE(observer_notified()); |
| 467 SetNavigationPending(1, true); | 527 SetNavigationPending(1, true); |
| 468 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 528 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 469 EXPECT_TRUE(GetInfoBar(1) == NULL); | 529 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 470 } | 530 } |
| 471 | 531 |
| 472 TEST_F(GoogleURLTrackerTest, UpdatePromptedURLOnReturnToPreviousLocation) { | 532 TEST_F(GoogleURLTrackerTest, UpdatePromptedURLOnReturnToPreviousLocation) { |
| 473 SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/")); | 533 SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/")); |
| 474 set_google_url(GURL("http://www.google.co.uk/")); | 534 set_google_url(GURL("http://www.google.co.uk/")); |
| 475 RequestServerCheck(); | 535 RequestServerCheck(); |
| 476 FinishSleep(); | 536 FinishSleep(); |
| 477 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 537 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 478 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 538 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
| 479 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 539 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 480 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 540 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 481 EXPECT_FALSE(observer_->notified()); | 541 EXPECT_FALSE(observer_notified()); |
| 482 } | 542 } |
| 483 | 543 |
| 484 TEST_F(GoogleURLTrackerTest, SilentlyAcceptSchemeChange) { | 544 TEST_F(GoogleURLTrackerTest, SilentlyAcceptSchemeChange) { |
| 485 // We should auto-accept changes to the current Google URL that merely change | 545 // We should auto-accept changes to the current Google URL that merely change |
| 486 // the scheme, regardless of what the last prompted URL was. | 546 // the scheme, regardless of what the last prompted URL was. |
| 487 SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/")); | 547 SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/")); |
| 488 set_google_url(GURL("http://www.google.co.uk/")); | 548 set_google_url(GURL("http://www.google.co.uk/")); |
| 489 RequestServerCheck(); | 549 RequestServerCheck(); |
| 490 FinishSleep(); | 550 FinishSleep(); |
| 491 MockSearchDomainCheckResponse("https://www.google.co.uk/"); | 551 MockSearchDomainCheckResponse("https://www.google.co.uk/"); |
| 492 EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url()); | 552 EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url()); |
| 493 EXPECT_EQ(GURL("https://www.google.co.uk/"), google_url()); | 553 EXPECT_EQ(GURL("https://www.google.co.uk/"), google_url()); |
| 494 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 554 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 495 EXPECT_TRUE(observer_->notified()); | 555 EXPECT_TRUE(observer_notified()); |
| 496 | 556 |
| 497 NotifyIPAddressChanged(); | 557 NotifyIPAddressChanged(); |
| 498 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 558 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 499 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 559 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
| 500 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 560 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 501 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 561 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 502 EXPECT_TRUE(observer_->notified()); | 562 EXPECT_TRUE(observer_notified()); |
| 503 } | 563 } |
| 504 | 564 |
| 505 TEST_F(GoogleURLTrackerTest, RefetchOnIPAddressChange) { | 565 TEST_F(GoogleURLTrackerTest, RefetchOnIPAddressChange) { |
| 506 RequestServerCheck(); | 566 RequestServerCheck(); |
| 507 FinishSleep(); | 567 FinishSleep(); |
| 508 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 568 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 509 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 569 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
| 510 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 570 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 511 EXPECT_TRUE(observer_->notified()); | 571 EXPECT_TRUE(observer_notified()); |
| 512 observer_->clear_notified(); | 572 clear_observer_notified(); |
| 513 | 573 |
| 514 NotifyIPAddressChanged(); | 574 NotifyIPAddressChanged(); |
| 515 MockSearchDomainCheckResponse("http://www.google.co.in/"); | 575 MockSearchDomainCheckResponse("http://www.google.co.in/"); |
| 516 EXPECT_EQ(GURL("http://www.google.co.in/"), fetched_google_url()); | 576 EXPECT_EQ(GURL("http://www.google.co.in/"), fetched_google_url()); |
| 517 // Just fetching a new URL shouldn't reset things without a prompt. | 577 // Just fetching a new URL shouldn't reset things without a prompt. |
| 518 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 578 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 519 EXPECT_FALSE(observer_->notified()); | 579 EXPECT_FALSE(observer_notified()); |
| 520 } | 580 } |
| 521 | 581 |
| 522 TEST_F(GoogleURLTrackerTest, DontRefetchWhenNoOneRequestsCheck) { | 582 TEST_F(GoogleURLTrackerTest, DontRefetchWhenNoOneRequestsCheck) { |
| 523 FinishSleep(); | 583 FinishSleep(); |
| 524 NotifyIPAddressChanged(); | 584 NotifyIPAddressChanged(); |
| 525 // No one called RequestServerCheck() so nothing should have happened. | 585 // No one called RequestServerCheck() so nothing should have happened. |
| 526 EXPECT_FALSE(GetFetcher()); | 586 EXPECT_FALSE(GetFetcher()); |
| 527 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 587 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 528 ExpectDefaultURLs(); | 588 ExpectDefaultURLs(); |
| 529 EXPECT_FALSE(observer_->notified()); | 589 EXPECT_FALSE(observer_notified()); |
| 530 } | 590 } |
| 531 | 591 |
| 532 TEST_F(GoogleURLTrackerTest, FetchOnLateRequest) { | 592 TEST_F(GoogleURLTrackerTest, FetchOnLateRequest) { |
| 533 FinishSleep(); | 593 FinishSleep(); |
| 534 NotifyIPAddressChanged(); | 594 NotifyIPAddressChanged(); |
| 535 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 595 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 536 | 596 |
| 537 RequestServerCheck(); | 597 RequestServerCheck(); |
| 538 // The first request for a check should trigger a fetch if it hasn't happened | 598 // The first request for a check should trigger a fetch if it hasn't happened |
| 539 // already. | 599 // already. |
| 540 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 600 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 541 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 601 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
| 542 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 602 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 543 EXPECT_TRUE(observer_->notified()); | 603 EXPECT_TRUE(observer_notified()); |
| 544 } | 604 } |
| 545 | 605 |
| 546 TEST_F(GoogleURLTrackerTest, DontFetchTwiceOnLateRequests) { | 606 TEST_F(GoogleURLTrackerTest, DontFetchTwiceOnLateRequests) { |
| 547 FinishSleep(); | 607 FinishSleep(); |
| 548 NotifyIPAddressChanged(); | 608 NotifyIPAddressChanged(); |
| 549 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 609 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 550 | 610 |
| 551 RequestServerCheck(); | 611 RequestServerCheck(); |
| 552 // The first request for a check should trigger a fetch if it hasn't happened | 612 // The first request for a check should trigger a fetch if it hasn't happened |
| 553 // already. | 613 // already. |
| 554 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 614 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 555 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 615 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
| 556 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 616 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 557 EXPECT_TRUE(observer_->notified()); | 617 EXPECT_TRUE(observer_notified()); |
| 558 observer_->clear_notified(); | 618 clear_observer_notified(); |
| 559 | 619 |
| 560 RequestServerCheck(); | 620 RequestServerCheck(); |
| 561 // The second request should be ignored. | 621 // The second request should be ignored. |
| 562 EXPECT_FALSE(GetFetcher()); | 622 EXPECT_FALSE(GetFetcher()); |
| 563 MockSearchDomainCheckResponse("http://www.google.co.in/"); | 623 MockSearchDomainCheckResponse("http://www.google.co.in/"); |
| 564 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 624 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
| 565 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 625 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 566 EXPECT_FALSE(observer_->notified()); | 626 EXPECT_FALSE(observer_notified()); |
| 567 } | 627 } |
| 568 | 628 |
| 569 TEST_F(GoogleURLTrackerTest, SearchingDoesNothingIfNoNeedToPrompt) { | 629 TEST_F(GoogleURLTrackerTest, SearchingDoesNothingIfNoNeedToPrompt) { |
| 570 RequestServerCheck(); | 630 RequestServerCheck(); |
| 571 FinishSleep(); | 631 FinishSleep(); |
| 572 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 632 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 573 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 633 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
| 574 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 634 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 575 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 635 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 576 EXPECT_TRUE(observer_->notified()); | 636 EXPECT_TRUE(observer_notified()); |
| 577 observer_->clear_notified(); | 637 clear_observer_notified(); |
| 578 | 638 |
| 579 SetNavigationPending(1, true); | 639 SetNavigationPending(1, true); |
| 580 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 640 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 581 TestInfoBarDelegate* infobar = GetInfoBar(1); | 641 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 582 EXPECT_TRUE(infobar == NULL); | |
| 583 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 642 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
| 584 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 643 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 585 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 644 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 586 EXPECT_FALSE(observer_->notified()); | 645 EXPECT_FALSE(observer_notified()); |
| 587 } | 646 } |
| 588 | 647 |
| 589 TEST_F(GoogleURLTrackerTest, TabClosedOnPendingSearch) { | 648 TEST_F(GoogleURLTrackerTest, TabClosedOnPendingSearch) { |
| 590 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 649 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 591 RequestServerCheck(); | 650 RequestServerCheck(); |
| 592 FinishSleep(); | 651 FinishSleep(); |
| 593 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 652 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 594 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 653 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 595 EXPECT_EQ(GURL("http://www.google.co.jp/"), fetched_google_url()); | 654 EXPECT_EQ(GURL("http://www.google.co.jp/"), fetched_google_url()); |
| 596 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 655 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 597 EXPECT_FALSE(observer_->notified()); | 656 EXPECT_FALSE(observer_notified()); |
| 598 | 657 |
| 599 SetNavigationPending(1, true); | 658 SetNavigationPending(1, true); |
| 600 TestInfoBarDelegate* infobar = GetInfoBar(1); | 659 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(1); |
| 601 ASSERT_FALSE(infobar == NULL); | 660 ASSERT_FALSE(map_entry == NULL); |
| 602 EXPECT_FALSE(infobar->showing()); | 661 EXPECT_FALSE(map_entry->has_infobar()); |
| 603 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 662 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 604 EXPECT_EQ(GURL("http://www.google.co.jp/"), infobar->new_google_url()); | |
| 605 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 663 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 606 EXPECT_FALSE(observer_->notified()); | 664 EXPECT_FALSE(observer_notified()); |
| 607 | 665 |
| 608 CloseTab(1); | 666 CloseTab(1); |
| 609 EXPECT_TRUE(GetInfoBar(1) == NULL); | 667 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 610 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 668 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 611 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 669 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 612 EXPECT_FALSE(observer_->notified()); | 670 EXPECT_FALSE(observer_notified()); |
| 613 } | 671 } |
| 614 | 672 |
| 615 TEST_F(GoogleURLTrackerTest, TabClosedOnCommittedSearch) { | 673 TEST_F(GoogleURLTrackerTest, TabClosedOnCommittedSearch) { |
| 616 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 674 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 617 RequestServerCheck(); | 675 RequestServerCheck(); |
| 618 FinishSleep(); | 676 FinishSleep(); |
| 619 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 677 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 620 | 678 |
| 621 SetNavigationPending(1, true); | 679 SetNavigationPending(1, true); |
| 622 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 680 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 623 TestInfoBarDelegate* infobar = GetInfoBar(1); | 681 EXPECT_FALSE(GetInfoBar(1) == NULL); |
| 624 ASSERT_FALSE(infobar == NULL); | |
| 625 EXPECT_TRUE(infobar->showing()); | |
| 626 | 682 |
| 627 CloseTab(1); | 683 CloseTab(1); |
| 628 EXPECT_TRUE(GetInfoBar(1) == NULL); | 684 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 629 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 685 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 630 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 686 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 631 EXPECT_FALSE(observer_->notified()); | 687 EXPECT_FALSE(observer_notified()); |
| 632 } | 688 } |
| 633 | 689 |
| 634 TEST_F(GoogleURLTrackerTest, InfobarClosed) { | 690 TEST_F(GoogleURLTrackerTest, InfoBarClosed) { |
| 635 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 691 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 636 RequestServerCheck(); | 692 RequestServerCheck(); |
| 637 FinishSleep(); | 693 FinishSleep(); |
| 638 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 694 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 639 | 695 |
| 640 SetNavigationPending(1, true); | 696 SetNavigationPending(1, true); |
| 641 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 697 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 642 TestInfoBarDelegate* infobar = GetInfoBar(1); | 698 GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBar(1); |
| 643 ASSERT_FALSE(infobar == NULL); | 699 ASSERT_FALSE(infobar == NULL); |
| 644 | 700 |
| 645 infobar->InfoBarClosed(); | 701 infobar->Close(false); |
| 646 EXPECT_TRUE(GetInfoBar(1) == NULL); | 702 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 647 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 703 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 648 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 704 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 649 EXPECT_FALSE(observer_->notified()); | 705 EXPECT_FALSE(observer_notified()); |
| 650 } | 706 } |
| 651 | 707 |
| 652 TEST_F(GoogleURLTrackerTest, InfobarRefused) { | 708 TEST_F(GoogleURLTrackerTest, InfoBarRefused) { |
| 653 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 709 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 654 RequestServerCheck(); | 710 RequestServerCheck(); |
| 655 FinishSleep(); | 711 FinishSleep(); |
| 656 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 712 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 657 | 713 |
| 658 SetNavigationPending(1, true); | 714 SetNavigationPending(1, true); |
| 659 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 715 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 660 TestInfoBarDelegate* infobar = GetInfoBar(1); | 716 GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBar(1); |
| 661 ASSERT_FALSE(infobar == NULL); | 717 ASSERT_FALSE(infobar == NULL); |
| 662 | 718 |
| 663 infobar->Cancel(); | 719 infobar->Cancel(); |
| 664 EXPECT_TRUE(GetInfoBar(1) == NULL); | 720 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 665 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 721 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 666 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); | 722 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); |
| 667 EXPECT_FALSE(observer_->notified()); | 723 EXPECT_FALSE(observer_notified()); |
| 668 } | 724 } |
| 669 | 725 |
| 670 TEST_F(GoogleURLTrackerTest, InfobarAccepted) { | 726 TEST_F(GoogleURLTrackerTest, InfoBarAccepted) { |
| 671 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 727 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 672 RequestServerCheck(); | 728 RequestServerCheck(); |
| 673 FinishSleep(); | 729 FinishSleep(); |
| 674 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 730 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 675 | 731 |
| 676 SetNavigationPending(1, true); | 732 SetNavigationPending(1, true); |
| 677 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 733 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 678 TestInfoBarDelegate* infobar = GetInfoBar(1); | 734 GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBar(1); |
| 679 ASSERT_FALSE(infobar == NULL); | 735 ASSERT_FALSE(infobar == NULL); |
| 680 | 736 |
| 681 infobar->Accept(); | 737 infobar->Accept(); |
| 682 EXPECT_TRUE(GetInfoBar(1) == NULL); | 738 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 683 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url()); | 739 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url()); |
| 684 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); | 740 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); |
| 685 EXPECT_TRUE(observer_->notified()); | 741 EXPECT_TRUE(observer_notified()); |
| 686 } | 742 } |
| 687 | 743 |
| 688 TEST_F(GoogleURLTrackerTest, InfobarForInstant) { | 744 TEST_F(GoogleURLTrackerTest, InfoBarForInstant) { |
| 689 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 745 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 690 RequestServerCheck(); | 746 RequestServerCheck(); |
| 691 FinishSleep(); | 747 FinishSleep(); |
| 692 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 748 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 693 | 749 |
| 694 DoInstantNavigation(1, GURL("http://www.google.co.uk/search?q=test")); | 750 DoInstantNavigation(1, GURL("http://www.google.co.uk/search?q=test")); |
| 695 TestInfoBarDelegate* infobar = GetInfoBar(1); | 751 EXPECT_FALSE(GetInfoBar(1) == NULL); |
| 696 ASSERT_FALSE(infobar == NULL); | |
| 697 EXPECT_TRUE(infobar->showing()); | |
| 698 } | 752 } |
| 699 | 753 |
| 700 TEST_F(GoogleURLTrackerTest, FetchesCanAutomaticallyCloseInfobars) { | 754 TEST_F(GoogleURLTrackerTest, FetchesCanAutomaticallyCloseInfoBars) { |
| 701 RequestServerCheck(); | 755 RequestServerCheck(); |
| 702 FinishSleep(); | 756 FinishSleep(); |
| 703 MockSearchDomainCheckResponse(google_url().spec()); | 757 MockSearchDomainCheckResponse(google_url().spec()); |
| 704 | 758 |
| 705 // Re-fetching the accepted URL after showing an infobar for another URL | 759 // Re-fetching the accepted URL after showing an infobar for another URL |
| 706 // should close the infobar. | 760 // should close the infobar. |
| 707 NotifyIPAddressChanged(); | 761 NotifyIPAddressChanged(); |
| 708 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 762 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 709 SetNavigationPending(1, true); | 763 SetNavigationPending(1, true); |
| 710 CommitSearch(1, GURL("http://www.google.com/search?q=test")); | 764 CommitSearch(1, GURL("http://www.google.com/search?q=test")); |
| 711 EXPECT_FALSE(GetInfoBar(1) == NULL); | 765 EXPECT_FALSE(GetInfoBar(1) == NULL); |
| 712 NotifyIPAddressChanged(); | 766 NotifyIPAddressChanged(); |
| 713 MockSearchDomainCheckResponse(google_url().spec()); | 767 MockSearchDomainCheckResponse(google_url().spec()); |
| 714 EXPECT_EQ(google_url(), GetLastPromptedGoogleURL()); | 768 EXPECT_EQ(google_url(), GetLastPromptedGoogleURL()); |
| 715 EXPECT_TRUE(GetInfoBar(1) == NULL); | 769 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 716 | 770 |
| 717 // As should fetching a URL that differs from the accepted only by the scheme. | 771 // As should fetching a URL that differs from the accepted only by the scheme. |
| 718 NotifyIPAddressChanged(); | 772 NotifyIPAddressChanged(); |
| 719 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 773 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 720 SetNavigationPending(1, true); | 774 SetNavigationPending(1, true); |
| 721 CommitSearch(1, GURL("http://www.google.com/search?q=test")); | 775 CommitSearch(1, GURL("http://www.google.com/search?q=test")); |
| 722 EXPECT_FALSE(GetInfoBar(1) == NULL); | 776 EXPECT_FALSE(GetInfoBar(1) == NULL); |
| 723 NotifyIPAddressChanged(); | 777 NotifyIPAddressChanged(); |
| 724 url_canon::Replacements<char> replacements; | 778 url_canon::Replacements<char> replacements; |
| 725 const std::string& scheme("https"); | 779 const std::string& scheme("https"); |
| 726 replacements.SetScheme(scheme.data(), | 780 replacements.SetScheme(scheme.data(), |
| 727 url_parse::Component(0, scheme.length())); | 781 url_parse::Component(0, scheme.length())); |
| 728 GURL new_google_url(google_url().ReplaceComponents(replacements)); | 782 GURL new_google_url(google_url().ReplaceComponents(replacements)); |
| 729 MockSearchDomainCheckResponse(new_google_url.spec()); | 783 MockSearchDomainCheckResponse(new_google_url.spec()); |
| 730 EXPECT_EQ(new_google_url, GetLastPromptedGoogleURL()); | 784 EXPECT_EQ(new_google_url, GetLastPromptedGoogleURL()); |
| 731 EXPECT_TRUE(GetInfoBar(1) == NULL); | 785 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 732 | 786 |
| 733 // As should re-fetching the last prompted URL. | 787 // As should re-fetching the last prompted URL. |
| 734 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 788 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 735 NotifyIPAddressChanged(); | 789 NotifyIPAddressChanged(); |
| 736 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 790 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 737 SetNavigationPending(1, true); | 791 SetNavigationPending(1, true); |
| 738 CommitSearch(1, GURL("http://www.google.com/search?q=test")); | 792 CommitSearch(1, GURL("http://www.google.com/search?q=test")); |
| 739 EXPECT_FALSE(GetInfoBar(1) == NULL); | 793 EXPECT_FALSE(GetInfoBar(1) == NULL); |
| 740 NotifyIPAddressChanged(); | 794 NotifyIPAddressChanged(); |
| 741 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 795 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 742 EXPECT_EQ(new_google_url, google_url()); | 796 EXPECT_EQ(new_google_url, google_url()); |
| 743 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 797 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 744 EXPECT_TRUE(GetInfoBar(1) == NULL); | 798 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 745 | 799 |
| 746 // And one that differs from the last prompted URL only by the scheme. | 800 // And one that differs from the last prompted URL only by the scheme. |
| 747 NotifyIPAddressChanged(); | 801 NotifyIPAddressChanged(); |
| 748 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 802 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 749 SetNavigationPending(1, true); | 803 SetNavigationPending(1, true); |
| 750 CommitSearch(1, GURL("http://www.google.com/search?q=test")); | 804 CommitSearch(1, GURL("http://www.google.com/search?q=test")); |
| 751 EXPECT_FALSE(GetInfoBar(1) == NULL); | 805 EXPECT_FALSE(GetInfoBar(1) == NULL); |
| 752 NotifyIPAddressChanged(); | 806 NotifyIPAddressChanged(); |
| 753 MockSearchDomainCheckResponse("https://www.google.co.uk/"); | 807 MockSearchDomainCheckResponse("https://www.google.co.uk/"); |
| 754 EXPECT_EQ(new_google_url, google_url()); | 808 EXPECT_EQ(new_google_url, google_url()); |
| 755 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 809 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 756 EXPECT_TRUE(GetInfoBar(1) == NULL); | 810 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 757 | 811 |
| 758 // And fetching a different URL entirely. | 812 // And fetching a different URL entirely. |
| 759 NotifyIPAddressChanged(); | 813 NotifyIPAddressChanged(); |
| 760 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 814 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 761 SetNavigationPending(1, true); | 815 SetNavigationPending(1, true); |
| 762 CommitSearch(1, GURL("http://www.google.com/search?q=test")); | 816 CommitSearch(1, GURL("http://www.google.com/search?q=test")); |
| 763 EXPECT_FALSE(GetInfoBar(1) == NULL); | 817 EXPECT_FALSE(GetInfoBar(1) == NULL); |
| 764 NotifyIPAddressChanged(); | 818 NotifyIPAddressChanged(); |
| 765 MockSearchDomainCheckResponse("https://www.google.co.in/"); | 819 MockSearchDomainCheckResponse("https://www.google.co.in/"); |
| 766 EXPECT_EQ(new_google_url, google_url()); | 820 EXPECT_EQ(new_google_url, google_url()); |
| 767 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 821 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 768 EXPECT_TRUE(GetInfoBar(1) == NULL); | 822 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 769 } | 823 } |
| 770 | 824 |
| 771 TEST_F(GoogleURLTrackerTest, ResetInfobarGoogleURLs) { | 825 TEST_F(GoogleURLTrackerTest, ResetInfoBarGoogleURLs) { |
| 772 RequestServerCheck(); | 826 RequestServerCheck(); |
| 773 FinishSleep(); | 827 FinishSleep(); |
| 774 MockSearchDomainCheckResponse(google_url().spec()); | 828 MockSearchDomainCheckResponse(google_url().spec()); |
| 775 | 829 |
| 776 NotifyIPAddressChanged(); | 830 NotifyIPAddressChanged(); |
| 777 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 831 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 778 SetNavigationPending(1, true); | 832 SetNavigationPending(1, true); |
| 779 TestInfoBarDelegate* infobar = GetInfoBar(1); | 833 CommitSearch(1, GURL("http://www.google.com/search?q=test")); |
| 834 GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBar(1); | |
| 780 ASSERT_FALSE(infobar == NULL); | 835 ASSERT_FALSE(infobar == NULL); |
| 781 EXPECT_EQ(GURL("http://www.google.co.uk/"), infobar->new_google_url()); | 836 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
| 782 | 837 |
| 783 // If while an infobar is pending we fetch a new URL that differs from the | 838 // If while an infobar is showing we fetch a new URL that differs from the |
| 784 // infobar's only by scheme, the infobar should stay pending but have its | 839 // infobar's only by scheme, the infobar should stay showing. |
| 785 // Google URL reset. | |
| 786 NotifyIPAddressChanged(); | 840 NotifyIPAddressChanged(); |
| 787 MockSearchDomainCheckResponse("https://www.google.co.uk/"); | 841 MockSearchDomainCheckResponse("https://www.google.co.uk/"); |
| 788 TestInfoBarDelegate* new_infobar = GetInfoBar(1); | 842 EXPECT_EQ(infobar, GetInfoBar(1)); |
| 789 ASSERT_FALSE(new_infobar == NULL); | 843 EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url()); |
| 790 EXPECT_EQ(infobar, new_infobar); | |
| 791 EXPECT_EQ(GURL("https://www.google.co.uk/"), new_infobar->new_google_url()); | |
| 792 | |
| 793 // Same with an infobar that is showing. | |
| 794 CommitSearch(1, GURL("http://www.google.com/search?q=test")); | |
| 795 EXPECT_TRUE(infobar->showing()); | |
| 796 NotifyIPAddressChanged(); | |
| 797 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | |
| 798 new_infobar = GetInfoBar(1); | |
| 799 ASSERT_FALSE(new_infobar == NULL); | |
| 800 EXPECT_EQ(infobar, new_infobar); | |
| 801 EXPECT_EQ(GURL("http://www.google.co.uk/"), infobar->new_google_url()); | |
| 802 EXPECT_TRUE(infobar->showing()); | |
| 803 } | 844 } |
| 804 | 845 |
| 805 TEST_F(GoogleURLTrackerTest, NavigationsAfterPendingSearch) { | 846 TEST_F(GoogleURLTrackerTest, NavigationsAfterPendingSearch) { |
| 806 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 847 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 807 RequestServerCheck(); | 848 RequestServerCheck(); |
| 808 FinishSleep(); | 849 FinishSleep(); |
| 809 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 850 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 810 | 851 |
| 811 // A pending non-search after a pending search should close the infobar. | 852 // A pending non-search after a pending search should delete the map entry. |
| 812 SetNavigationPending(1, true); | 853 SetNavigationPending(1, true); |
| 813 TestInfoBarDelegate* infobar = GetInfoBar(1); | 854 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(1); |
| 814 ASSERT_FALSE(infobar == NULL); | 855 ASSERT_FALSE(map_entry == NULL); |
| 815 EXPECT_FALSE(infobar->showing()); | 856 EXPECT_FALSE(map_entry->has_infobar()); |
| 816 SetNavigationPending(1, false); | 857 SetNavigationPending(1, false); |
| 817 infobar = GetInfoBar(1); | 858 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 818 EXPECT_TRUE(infobar == NULL); | |
| 819 | 859 |
| 820 // A pending search after a pending search should leave the infobar alive. | 860 // A pending search after a pending search should leave the map entry alive. |
| 821 SetNavigationPending(1, true); | 861 SetNavigationPending(1, true); |
| 822 infobar = GetInfoBar(1); | 862 map_entry = GetMapEntry(1); |
| 823 ASSERT_FALSE(infobar == NULL); | 863 ASSERT_FALSE(map_entry == NULL); |
| 824 EXPECT_FALSE(infobar->showing()); | 864 EXPECT_FALSE(map_entry->has_infobar()); |
| 825 SetNavigationPending(1, true); | 865 SetNavigationPending(1, true); |
| 826 TestInfoBarDelegate* new_infobar = GetInfoBar(1); | 866 ASSERT_EQ(map_entry, GetMapEntry(1)); |
| 827 ASSERT_FALSE(new_infobar == NULL); | 867 EXPECT_FALSE(map_entry->has_infobar()); |
| 828 EXPECT_EQ(infobar, new_infobar); | |
| 829 EXPECT_FALSE(infobar->showing()); | |
| 830 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 868 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); |
| 831 | 869 |
| 832 // Committing this search should show the infobar. | 870 // Committing this search should show an infobar. |
| 833 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test2")); | 871 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test2")); |
| 834 EXPECT_TRUE(infobar->showing()); | 872 EXPECT_TRUE(map_entry->has_infobar()); |
| 835 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 873 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 836 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 874 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 837 EXPECT_FALSE(observer_->notified()); | 875 EXPECT_FALSE(observer_notified()); |
| 838 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 876 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); |
| 839 } | 877 } |
| 840 | 878 |
| 841 TEST_F(GoogleURLTrackerTest, NavigationsAfterCommittedSearch) { | 879 TEST_F(GoogleURLTrackerTest, NavigationsAfterCommittedSearch) { |
| 842 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 880 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 843 RequestServerCheck(); | 881 RequestServerCheck(); |
| 844 FinishSleep(); | 882 FinishSleep(); |
| 845 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 883 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 846 SetNavigationPending(1, true); | 884 SetNavigationPending(1, true); |
| 847 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 885 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 848 TestInfoBarDelegate* infobar = GetInfoBar(1); | 886 GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBar(1); |
| 849 ASSERT_FALSE(infobar == NULL); | 887 ASSERT_FALSE(infobar == NULL); |
| 850 EXPECT_TRUE(infobar->showing()); | |
| 851 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 888 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); |
| 852 | 889 |
| 853 // A pending non-search on a visible infobar should basically do nothing. | 890 // A pending non-search on a visible infobar should basically do nothing. |
| 854 SetNavigationPending(1, false); | 891 SetNavigationPending(1, false); |
| 855 TestInfoBarDelegate* new_infobar = GetInfoBar(1); | 892 ASSERT_EQ(infobar, GetInfoBar(1)); |
| 856 ASSERT_FALSE(new_infobar == NULL); | |
| 857 EXPECT_EQ(infobar, new_infobar); | |
| 858 EXPECT_TRUE(infobar->showing()); | |
| 859 EXPECT_EQ(0, infobar->pending_id()); | 893 EXPECT_EQ(0, infobar->pending_id()); |
| 860 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 894 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); |
| 861 | 895 |
| 862 // As should another pending non-search after the first. | 896 // As should another pending non-search after the first. |
| 863 SetNavigationPending(1, false); | 897 SetNavigationPending(1, false); |
| 864 new_infobar = GetInfoBar(1); | 898 ASSERT_EQ(infobar, GetInfoBar(1)); |
| 865 ASSERT_FALSE(new_infobar == NULL); | |
| 866 EXPECT_EQ(infobar, new_infobar); | |
| 867 EXPECT_TRUE(infobar->showing()); | |
| 868 EXPECT_EQ(0, infobar->pending_id()); | 899 EXPECT_EQ(0, infobar->pending_id()); |
| 869 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 900 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); |
| 870 | 901 |
| 871 // Committing this non-search should close the infobar. The control flow in | 902 // Committing this non-search should close the infobar. The control flow in |
| 872 // these tests is not really comparable to in the real browser, but at least a | 903 // these tests is not really comparable to in the real browser, but at least a |
| 873 // few sanity-checks will be performed. | 904 // few sanity-checks will be performed. |
| 874 ASSERT_NO_FATAL_FAILURE(CommitNonSearch(1)); | 905 ASSERT_NO_FATAL_FAILURE(CommitNonSearch(1)); |
| 875 new_infobar = GetInfoBar(1); | 906 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 876 EXPECT_TRUE(new_infobar == NULL); | |
| 877 | 907 |
| 878 // A pending search on a visible infobar should cause the infobar to listen | 908 // A pending search on a visible infobar should cause the infobar to listen |
| 879 // for the search to commit. | 909 // for the search to commit. |
| 880 SetNavigationPending(1, true); | 910 SetNavigationPending(1, true); |
| 881 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 911 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 882 infobar = GetInfoBar(1); | 912 infobar = GetInfoBar(1); |
| 883 ASSERT_FALSE(infobar == NULL); | 913 ASSERT_FALSE(infobar == NULL); |
| 884 EXPECT_TRUE(infobar->showing()); | |
| 885 SetNavigationPending(1, true); | 914 SetNavigationPending(1, true); |
| 886 new_infobar = GetInfoBar(1); | 915 ASSERT_EQ(infobar, GetInfoBar(1)); |
| 887 ASSERT_FALSE(new_infobar == NULL); | |
| 888 EXPECT_EQ(infobar, new_infobar); | |
| 889 EXPECT_TRUE(infobar->showing()); | |
| 890 EXPECT_EQ(1, infobar->pending_id()); | 916 EXPECT_EQ(1, infobar->pending_id()); |
| 891 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 917 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); |
| 892 | 918 |
| 893 // But a non-search after this should cancel that state. | 919 // But a non-search after this should cancel that state. |
| 894 SetNavigationPending(1, false); | 920 SetNavigationPending(1, false); |
| 895 new_infobar = GetInfoBar(1); | 921 ASSERT_EQ(infobar, GetInfoBar(1)); |
| 896 ASSERT_FALSE(new_infobar == NULL); | |
| 897 EXPECT_EQ(infobar, new_infobar); | |
| 898 EXPECT_TRUE(infobar->showing()); | |
| 899 EXPECT_EQ(0, infobar->pending_id()); | 922 EXPECT_EQ(0, infobar->pending_id()); |
| 900 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 923 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); |
| 901 | 924 |
| 902 // Another pending search after the non-search should put us back into | 925 // Another pending search after the non-search should put us back into |
| 903 // "waiting for commit" mode. | 926 // "waiting for commit" mode. |
| 904 SetNavigationPending(1, true); | 927 SetNavigationPending(1, true); |
| 905 new_infobar = GetInfoBar(1); | 928 ASSERT_EQ(infobar, GetInfoBar(1)); |
| 906 ASSERT_FALSE(new_infobar == NULL); | |
| 907 EXPECT_EQ(infobar, new_infobar); | |
| 908 EXPECT_TRUE(infobar->showing()); | |
| 909 EXPECT_EQ(1, infobar->pending_id()); | 929 EXPECT_EQ(1, infobar->pending_id()); |
| 910 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 930 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); |
| 911 | 931 |
| 912 // A second pending search after the first should not really change anything. | 932 // A second pending search after the first should not really change anything. |
| 913 SetNavigationPending(1, true); | 933 SetNavigationPending(1, true); |
| 914 new_infobar = GetInfoBar(1); | 934 ASSERT_EQ(infobar, GetInfoBar(1)); |
| 915 ASSERT_FALSE(new_infobar == NULL); | |
| 916 EXPECT_EQ(infobar, new_infobar); | |
| 917 EXPECT_TRUE(infobar->showing()); | |
| 918 EXPECT_EQ(1, infobar->pending_id()); | 935 EXPECT_EQ(1, infobar->pending_id()); |
| 919 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 936 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); |
| 920 | 937 |
| 921 // Committing this search should change the visible infobar's search_url. | 938 // Committing this search should change the visible infobar's search_url. |
| 922 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test2")); | 939 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test2")); |
| 923 new_infobar = GetInfoBar(1); | 940 ASSERT_EQ(infobar, GetInfoBar(1)); |
| 924 ASSERT_FALSE(new_infobar == NULL); | 941 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), |
| 925 EXPECT_EQ(infobar, new_infobar); | 942 infobar->search_url()); |
| 926 EXPECT_TRUE(infobar->showing()); | |
| 927 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), infobar->search_url( )); | |
| 928 EXPECT_EQ(0, infobar->pending_id()); | 943 EXPECT_EQ(0, infobar->pending_id()); |
| 929 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 944 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); |
| 930 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 945 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 931 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 946 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
| 932 EXPECT_FALSE(observer_->notified()); | 947 EXPECT_FALSE(observer_notified()); |
| 933 } | 948 } |
| 934 | 949 |
| 935 TEST_F(GoogleURLTrackerTest, MultipleInfobars) { | 950 TEST_F(GoogleURLTrackerTest, MultipleMapEntries) { |
| 936 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 951 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 937 RequestServerCheck(); | 952 RequestServerCheck(); |
| 938 FinishSleep(); | 953 FinishSleep(); |
| 939 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 954 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 940 | 955 |
| 941 SetNavigationPending(1, true); | 956 SetNavigationPending(1, true); |
| 942 TestInfoBarDelegate* infobar = GetInfoBar(1); | 957 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(1); |
| 943 ASSERT_FALSE(infobar == NULL); | 958 ASSERT_FALSE(map_entry == NULL); |
| 944 EXPECT_FALSE(infobar->showing()); | 959 EXPECT_FALSE(map_entry->has_infobar()); |
| 945 | 960 |
| 946 SetNavigationPending(2, true); | 961 SetNavigationPending(2, true); |
| 947 CommitSearch(2, GURL("http://www.google.co.uk/search?q=test2")); | 962 CommitSearch(2, GURL("http://www.google.co.uk/search?q=test2")); |
| 948 TestInfoBarDelegate* infobar2 = GetInfoBar(2); | 963 GoogleURLTrackerInfoBarDelegate* infobar2 = GetInfoBar(2); |
| 949 ASSERT_FALSE(infobar2 == NULL); | 964 ASSERT_FALSE(infobar2 == NULL); |
| 950 EXPECT_TRUE(infobar2->showing()); | |
| 951 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), | 965 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), |
| 952 infobar2->search_url()); | 966 infobar2->search_url()); |
| 953 | 967 |
| 954 SetNavigationPending(3, true); | 968 SetNavigationPending(3, true); |
| 955 TestInfoBarDelegate* infobar3 = GetInfoBar(3); | 969 GoogleURLTrackerMapEntry* map_entry3 = GetMapEntry(3); |
| 956 ASSERT_FALSE(infobar3 == NULL); | 970 ASSERT_FALSE(map_entry3 == NULL); |
| 957 EXPECT_FALSE(infobar3->showing()); | 971 EXPECT_FALSE(map_entry3->has_infobar()); |
| 958 | 972 |
| 959 SetNavigationPending(4, true); | 973 SetNavigationPending(4, true); |
| 960 CommitSearch(4, GURL("http://www.google.co.uk/search?q=test4")); | 974 CommitSearch(4, GURL("http://www.google.co.uk/search?q=test4")); |
| 961 TestInfoBarDelegate* infobar4 = GetInfoBar(4); | 975 GoogleURLTrackerInfoBarDelegate* infobar4 = GetInfoBar(4); |
| 962 ASSERT_FALSE(infobar4 == NULL); | 976 ASSERT_FALSE(infobar4 == NULL); |
| 963 EXPECT_TRUE(infobar4->showing()); | |
| 964 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test4"), | 977 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test4"), |
| 965 infobar4->search_url()); | 978 infobar4->search_url()); |
| 966 | 979 |
| 967 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 980 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 968 EXPECT_TRUE(infobar->showing()); | 981 EXPECT_TRUE(map_entry->has_infobar()); |
| 969 | 982 |
| 970 infobar2->InfoBarClosed(); | 983 infobar2->Close(false); |
| 971 EXPECT_TRUE(GetInfoBar(2) == NULL); | 984 EXPECT_TRUE(GetMapEntry(2) == NULL); |
| 972 EXPECT_FALSE(observer_->notified()); | 985 EXPECT_FALSE(observer_notified()); |
| 973 | 986 |
| 974 infobar4->Accept(); | 987 infobar4->Accept(); |
| 975 EXPECT_TRUE(GetInfoBar(1) == NULL); | 988 EXPECT_TRUE(GetMapEntry(1) == NULL); |
| 976 EXPECT_TRUE(GetInfoBar(3) == NULL); | 989 EXPECT_TRUE(GetMapEntry(3) == NULL); |
| 977 EXPECT_TRUE(GetInfoBar(4) == NULL); | 990 EXPECT_TRUE(GetMapEntry(4) == NULL); |
| 978 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url()); | 991 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url()); |
| 979 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); | 992 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); |
| 980 EXPECT_TRUE(observer_->notified()); | 993 EXPECT_TRUE(observer_notified()); |
| 981 } | 994 } |
| 982 | 995 |
| 983 TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantInstantNavigation) { | 996 TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantInstantNavigation) { |
| 984 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 997 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 985 RequestServerCheck(); | 998 RequestServerCheck(); |
| 986 FinishSleep(); | 999 FinishSleep(); |
| 987 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 1000 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 988 | 1001 |
| 989 // Starting a search pending on any tab should cause us to listen for pending | 1002 // Starting a search pending on any tab should cause us to listen for pending |
| 990 // and instant navigations on all tabs, but we should ignore these when they | 1003 // and instant navigations on all tabs, but we should ignore these when they |
| 991 // are for tabs that we don't care about. | 1004 // are for tabs that we don't care about. |
| 992 SetNavigationPending(1, true); | 1005 SetNavigationPending(1, true); |
| 993 TestInfoBarDelegate* infobar = GetInfoBar(1); | 1006 EXPECT_FALSE(GetMapEntry(1) == NULL); |
| 994 ASSERT_FALSE(infobar == NULL); | |
| 995 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 1007 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); |
| 996 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(2, false)); | 1008 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(2, false)); |
| 997 | 1009 |
| 998 DoInstantNavigation(2, GURL()); | 1010 DoInstantNavigation(2, GURL()); |
| 999 TestInfoBarDelegate* infobar2 = GetInfoBar(2); | 1011 EXPECT_TRUE(GetMapEntry(2) == NULL); |
| 1000 ASSERT_TRUE(infobar2 == NULL); | |
| 1001 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 1012 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); |
| 1002 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(2, false)); | 1013 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(2, false)); |
| 1003 } | 1014 } |
| 1004 | 1015 |
| 1005 TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantNavigation) { | 1016 TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantNavigation) { |
| 1006 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 1017 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
| 1007 RequestServerCheck(); | 1018 RequestServerCheck(); |
| 1008 FinishSleep(); | 1019 FinishSleep(); |
| 1009 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 1020 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 1010 | 1021 |
| 1011 // This tests a particularly gnarly sequence of events that used to cause us | 1022 // This tests a particularly gnarly sequence of events that used to cause us |
| 1012 // to erroneously listen for a non-search navigation to commit. | 1023 // to erroneously listen for a non-search navigation to commit. |
| 1013 SetNavigationPending(1, true); | 1024 SetNavigationPending(1, true); |
| 1014 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 1025 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); |
| 1015 SetNavigationPending(2, true); | 1026 SetNavigationPending(2, true); |
| 1016 CommitSearch(2, GURL("http://www.google.co.uk/search?q=test2")); | 1027 CommitSearch(2, GURL("http://www.google.co.uk/search?q=test2")); |
| 1017 TestInfoBarDelegate* infobar = GetInfoBar(1); | 1028 EXPECT_FALSE(GetInfoBar(1) == NULL); |
| 1018 ASSERT_FALSE(infobar == NULL); | 1029 GoogleURLTrackerInfoBarDelegate* infobar2 = GetInfoBar(2); |
| 1019 EXPECT_TRUE(infobar->showing()); | |
| 1020 TestInfoBarDelegate* infobar2 = GetInfoBar(2); | |
| 1021 ASSERT_FALSE(infobar2 == NULL); | 1030 ASSERT_FALSE(infobar2 == NULL); |
| 1022 EXPECT_TRUE(infobar2->showing()); | |
| 1023 SetNavigationPending(1, true); | 1031 SetNavigationPending(1, true); |
| 1024 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 1032 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); |
| 1025 infobar2->InfoBarClosed(); | 1033 infobar2->Close(false); |
| 1026 SetNavigationPending(1, false); | 1034 SetNavigationPending(1, false); |
| 1027 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 1035 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); |
| 1028 } | 1036 } |
| OLD | NEW |