| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 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 "components/google/core/browser/google_url_tracker.h" | 5 #include "components/google/core/browser/google_url_tracker.h" |
| 6 | 6 |
| 7 #include <set> | |
| 8 #include <string> | 7 #include <string> |
| 9 | 8 |
| 10 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 12 #include "base/prefs/pref_registry_simple.h" | 11 #include "base/prefs/pref_registry_simple.h" |
| 13 #include "base/prefs/pref_service.h" | 12 #include "base/prefs/pref_service.h" |
| 14 #include "base/prefs/testing_pref_service.h" | 13 #include "base/prefs/testing_pref_service.h" |
| 15 #include "components/google/core/browser/google_pref_names.h" | 14 #include "components/google/core/browser/google_pref_names.h" |
| 16 #include "components/google/core/browser/google_url_tracker_client.h" | 15 #include "components/google/core/browser/google_url_tracker_client.h" |
| 17 #include "components/google/core/browser/google_url_tracker_infobar_delegate.h" | |
| 18 #include "components/google/core/browser/google_url_tracker_navigation_helper.h" | |
| 19 #include "components/infobars/core/confirm_infobar_delegate.h" | |
| 20 #include "components/infobars/core/infobar.h" | |
| 21 #include "components/infobars/core/infobar_delegate.h" | |
| 22 #include "net/url_request/test_url_fetcher_factory.h" | 16 #include "net/url_request/test_url_fetcher_factory.h" |
| 23 #include "net/url_request/url_fetcher.h" | 17 #include "net/url_request/url_fetcher.h" |
| 24 #include "net/url_request/url_request_test_util.h" | 18 #include "net/url_request/url_request_test_util.h" |
| 25 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 26 | 20 |
| 27 namespace { | 21 namespace { |
| 28 | 22 |
| 29 // TestCallbackListener --------------------------------------------------- | 23 // TestCallbackListener --------------------------------------------------- |
| 30 | 24 |
| 31 class TestCallbackListener { | 25 class TestCallbackListener { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 } | 62 } |
| 69 | 63 |
| 70 | 64 |
| 71 // TestGoogleURLTrackerClient ------------------------------------------------- | 65 // TestGoogleURLTrackerClient ------------------------------------------------- |
| 72 | 66 |
| 73 class TestGoogleURLTrackerClient : public GoogleURLTrackerClient { | 67 class TestGoogleURLTrackerClient : public GoogleURLTrackerClient { |
| 74 public: | 68 public: |
| 75 explicit TestGoogleURLTrackerClient(PrefService* prefs_); | 69 explicit TestGoogleURLTrackerClient(PrefService* prefs_); |
| 76 ~TestGoogleURLTrackerClient() override; | 70 ~TestGoogleURLTrackerClient() override; |
| 77 | 71 |
| 78 void SetListeningForNavigationStart(bool listen) override; | |
| 79 bool IsListeningForNavigationStart() override; | |
| 80 bool IsBackgroundNetworkingEnabled() override; | 72 bool IsBackgroundNetworkingEnabled() override; |
| 81 PrefService* GetPrefs() override; | 73 PrefService* GetPrefs() override; |
| 82 net::URLRequestContextGetter* GetRequestContext() override; | 74 net::URLRequestContextGetter* GetRequestContext() override; |
| 83 | 75 |
| 84 private: | 76 private: |
| 85 PrefService* prefs_; | 77 PrefService* prefs_; |
| 86 scoped_refptr<net::TestURLRequestContextGetter> request_context_; | 78 scoped_refptr<net::TestURLRequestContextGetter> request_context_; |
| 87 bool observe_nav_start_; | |
| 88 | 79 |
| 89 DISALLOW_COPY_AND_ASSIGN(TestGoogleURLTrackerClient); | 80 DISALLOW_COPY_AND_ASSIGN(TestGoogleURLTrackerClient); |
| 90 }; | 81 }; |
| 91 | 82 |
| 92 TestGoogleURLTrackerClient::TestGoogleURLTrackerClient(PrefService* prefs) | 83 TestGoogleURLTrackerClient::TestGoogleURLTrackerClient(PrefService* prefs) |
| 93 : prefs_(prefs), | 84 : prefs_(prefs), |
| 94 request_context_(new net::TestURLRequestContextGetter( | 85 request_context_(new net::TestURLRequestContextGetter( |
| 95 base::MessageLoopProxy::current())), | 86 base::MessageLoopProxy::current())) { |
| 96 observe_nav_start_(false) { | |
| 97 } | 87 } |
| 98 | 88 |
| 99 TestGoogleURLTrackerClient::~TestGoogleURLTrackerClient() { | 89 TestGoogleURLTrackerClient::~TestGoogleURLTrackerClient() { |
| 100 } | 90 } |
| 101 | 91 |
| 102 void TestGoogleURLTrackerClient::SetListeningForNavigationStart(bool listen) { | |
| 103 observe_nav_start_ = listen; | |
| 104 } | |
| 105 | |
| 106 bool TestGoogleURLTrackerClient::IsListeningForNavigationStart() { | |
| 107 return observe_nav_start_; | |
| 108 } | |
| 109 | |
| 110 bool TestGoogleURLTrackerClient::IsBackgroundNetworkingEnabled() { | 92 bool TestGoogleURLTrackerClient::IsBackgroundNetworkingEnabled() { |
| 111 return true; | 93 return true; |
| 112 } | 94 } |
| 113 | 95 |
| 114 PrefService* TestGoogleURLTrackerClient::GetPrefs() { | 96 PrefService* TestGoogleURLTrackerClient::GetPrefs() { |
| 115 return prefs_; | 97 return prefs_; |
| 116 } | 98 } |
| 117 | 99 |
| 118 net::URLRequestContextGetter* TestGoogleURLTrackerClient::GetRequestContext() { | 100 net::URLRequestContextGetter* TestGoogleURLTrackerClient::GetRequestContext() { |
| 119 return request_context_.get(); | 101 return request_context_.get(); |
| 120 } | 102 } |
| 121 | 103 |
| 122 | 104 |
| 123 // TestGoogleURLTrackerNavigationHelper --------------------------------------- | |
| 124 | |
| 125 class TestGoogleURLTrackerNavigationHelper | |
| 126 : public GoogleURLTrackerNavigationHelper { | |
| 127 public: | |
| 128 explicit TestGoogleURLTrackerNavigationHelper(GoogleURLTracker* tracker); | |
| 129 ~TestGoogleURLTrackerNavigationHelper() override; | |
| 130 | |
| 131 void SetListeningForNavigationCommit(bool listen) override; | |
| 132 bool IsListeningForNavigationCommit() override; | |
| 133 void SetListeningForTabDestruction(bool listen) override; | |
| 134 bool IsListeningForTabDestruction() override; | |
| 135 void OpenURL(GURL url, | |
| 136 WindowOpenDisposition disposition, | |
| 137 bool user_clicked_on_link) override; | |
| 138 | |
| 139 private: | |
| 140 bool listening_for_nav_commit_; | |
| 141 bool listening_for_tab_destruction_; | |
| 142 | |
| 143 DISALLOW_COPY_AND_ASSIGN(TestGoogleURLTrackerNavigationHelper); | |
| 144 }; | |
| 145 | |
| 146 TestGoogleURLTrackerNavigationHelper::TestGoogleURLTrackerNavigationHelper( | |
| 147 GoogleURLTracker* tracker) | |
| 148 : GoogleURLTrackerNavigationHelper(tracker), | |
| 149 listening_for_nav_commit_(false), | |
| 150 listening_for_tab_destruction_(false) { | |
| 151 } | |
| 152 | |
| 153 TestGoogleURLTrackerNavigationHelper::~TestGoogleURLTrackerNavigationHelper() { | |
| 154 } | |
| 155 | |
| 156 void TestGoogleURLTrackerNavigationHelper::SetListeningForNavigationCommit( | |
| 157 bool listen) { | |
| 158 listening_for_nav_commit_ = listen; | |
| 159 } | |
| 160 | |
| 161 bool TestGoogleURLTrackerNavigationHelper::IsListeningForNavigationCommit() { | |
| 162 return listening_for_nav_commit_; | |
| 163 } | |
| 164 | |
| 165 void TestGoogleURLTrackerNavigationHelper::SetListeningForTabDestruction( | |
| 166 bool listen) { | |
| 167 listening_for_tab_destruction_ = listen; | |
| 168 } | |
| 169 | |
| 170 bool TestGoogleURLTrackerNavigationHelper::IsListeningForTabDestruction() { | |
| 171 return listening_for_tab_destruction_; | |
| 172 } | |
| 173 | |
| 174 void TestGoogleURLTrackerNavigationHelper::OpenURL( | |
| 175 GURL url, | |
| 176 WindowOpenDisposition disposition, | |
| 177 bool user_clicked_on_link) { | |
| 178 } | |
| 179 | |
| 180 // TestInfoBarManager --------------------------------------------------------- | |
| 181 | |
| 182 class TestInfoBarManager : public infobars::InfoBarManager { | |
| 183 public: | |
| 184 explicit TestInfoBarManager(int unique_id); | |
| 185 ~TestInfoBarManager() override; | |
| 186 int GetActiveEntryID() override; | |
| 187 | |
| 188 private: | |
| 189 // infobars::InfoBarManager: | |
| 190 scoped_ptr<infobars::InfoBar> CreateConfirmInfoBar( | |
| 191 scoped_ptr<ConfirmInfoBarDelegate> delegate) override; | |
| 192 | |
| 193 int unique_id_; | |
| 194 DISALLOW_COPY_AND_ASSIGN(TestInfoBarManager); | |
| 195 }; | |
| 196 | |
| 197 TestInfoBarManager::TestInfoBarManager(int unique_id) : unique_id_(unique_id) { | |
| 198 } | |
| 199 | |
| 200 TestInfoBarManager::~TestInfoBarManager() { | |
| 201 ShutDown(); | |
| 202 } | |
| 203 | |
| 204 int TestInfoBarManager::GetActiveEntryID() { | |
| 205 return unique_id_; | |
| 206 } | |
| 207 | |
| 208 scoped_ptr<infobars::InfoBar> TestInfoBarManager::CreateConfirmInfoBar( | |
| 209 scoped_ptr<ConfirmInfoBarDelegate> delegate) { | |
| 210 return make_scoped_ptr(new infobars::InfoBar(delegate.Pass())); | |
| 211 } | |
| 212 | |
| 213 } // namespace | 105 } // namespace |
| 214 | 106 |
| 215 // GoogleURLTrackerTest ------------------------------------------------------- | 107 // GoogleURLTrackerTest ------------------------------------------------------- |
| 216 | 108 |
| 217 class GoogleURLTrackerTest : public testing::Test { | 109 class GoogleURLTrackerTest : public testing::Test { |
| 218 protected: | 110 protected: |
| 219 GoogleURLTrackerTest(); | 111 GoogleURLTrackerTest(); |
| 220 ~GoogleURLTrackerTest() override; | 112 ~GoogleURLTrackerTest() override; |
| 221 | 113 |
| 222 // testing::Test | 114 // testing::Test |
| 223 void SetUp() override; | 115 void SetUp() override; |
| 224 void TearDown() override; | 116 void TearDown() override; |
| 225 | 117 |
| 226 net::TestURLFetcher* GetFetcher(); | 118 net::TestURLFetcher* GetFetcher(); |
| 227 void MockSearchDomainCheckResponse(const std::string& domain); | 119 void MockSearchDomainCheckResponse(const std::string& domain); |
| 228 void RequestServerCheck(); | 120 void RequestServerCheck(); |
| 229 void FinishSleep(); | 121 void FinishSleep(); |
| 230 void NotifyNetworkChanged(); | 122 void NotifyNetworkChanged(); |
| 231 GURL fetched_google_url() const { | |
| 232 return google_url_tracker_->fetched_google_url(); | |
| 233 } | |
| 234 void set_google_url(const GURL& url) { | 123 void set_google_url(const GURL& url) { |
| 235 google_url_tracker_->google_url_ = url; | 124 google_url_tracker_->google_url_ = url; |
| 236 } | 125 } |
| 237 GURL google_url() const { return google_url_tracker_->google_url(); } | 126 GURL google_url() const { return google_url_tracker_->google_url(); } |
| 238 void SetLastPromptedGoogleURL(const GURL& url); | |
| 239 GURL GetLastPromptedGoogleURL(); | |
| 240 void SetNavigationPending(infobars::InfoBarManager* infobar_manager, | |
| 241 bool is_search); | |
| 242 void CommitNonSearch(infobars::InfoBarManager* infobar_manager); | |
| 243 void CommitSearch(infobars::InfoBarManager* infobar_manager, | |
| 244 const GURL& search_url); | |
| 245 void CloseTab(infobars::InfoBarManager* infobar_manager); | |
| 246 GoogleURLTrackerMapEntry* GetMapEntry( | |
| 247 infobars::InfoBarManager* infobar_manager); | |
| 248 GoogleURLTrackerInfoBarDelegate* GetInfoBarDelegate( | |
| 249 infobars::InfoBarManager* infobar_manager); | |
| 250 GoogleURLTrackerNavigationHelper* GetNavigationHelper( | |
| 251 infobars::InfoBarManager* infobar_manager); | |
| 252 void ExpectDefaultURLs() const; | |
| 253 void ExpectListeningForCommit(infobars::InfoBarManager* infobar_manager, | |
| 254 bool listening); | |
| 255 bool listener_notified() const { return listener_.notified(); } | 127 bool listener_notified() const { return listener_.notified(); } |
| 256 void clear_listener_notified() { listener_.clear_notified(); } | 128 void clear_listener_notified() { listener_.clear_notified(); } |
| 257 | 129 |
| 258 private: | 130 private: |
| 259 base::MessageLoop message_loop_; | 131 base::MessageLoop message_loop_; |
| 260 TestingPrefServiceSimple prefs_; | 132 TestingPrefServiceSimple prefs_; |
| 261 | 133 |
| 262 // Creating this allows us to call | 134 // Creating this allows us to call |
| 263 // net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(). | 135 // net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(). |
| 264 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; | 136 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; |
| 265 net::TestURLFetcherFactory fetcher_factory_; | 137 net::TestURLFetcherFactory fetcher_factory_; |
| 266 GoogleURLTrackerClient* client_; | 138 GoogleURLTrackerClient* client_; |
| 267 scoped_ptr<GoogleURLTracker> google_url_tracker_; | 139 scoped_ptr<GoogleURLTracker> google_url_tracker_; |
| 268 TestCallbackListener listener_; | 140 TestCallbackListener listener_; |
| 269 // This tracks the different "tabs" a test has "opened", so we can close them | |
| 270 // properly before shutting down |google_url_tracker_|, which expects that. | |
| 271 std::set<infobars::InfoBarManager*> infobar_managers_seen_; | |
| 272 }; | 141 }; |
| 273 | 142 |
| 274 GoogleURLTrackerTest::GoogleURLTrackerTest() { | 143 GoogleURLTrackerTest::GoogleURLTrackerTest() { |
| 275 prefs_.registry()->RegisterStringPref( | 144 prefs_.registry()->RegisterStringPref( |
| 276 prefs::kLastKnownGoogleURL, | 145 prefs::kLastKnownGoogleURL, |
| 277 GoogleURLTracker::kDefaultGoogleHomepage); | 146 GoogleURLTracker::kDefaultGoogleHomepage); |
| 278 prefs_.registry()->RegisterStringPref( | |
| 279 prefs::kLastPromptedGoogleURL, | |
| 280 std::string()); | |
| 281 } | 147 } |
| 282 | 148 |
| 283 GoogleURLTrackerTest::~GoogleURLTrackerTest() { | 149 GoogleURLTrackerTest::~GoogleURLTrackerTest() { |
| 284 } | 150 } |
| 285 | 151 |
| 286 void GoogleURLTrackerTest::SetUp() { | 152 void GoogleURLTrackerTest::SetUp() { |
| 287 network_change_notifier_.reset(net::NetworkChangeNotifier::CreateMock()); | 153 network_change_notifier_.reset(net::NetworkChangeNotifier::CreateMock()); |
| 288 // Ownership is passed to google_url_tracker_, but a weak pointer is kept; | 154 // Ownership is passed to google_url_tracker_, but a weak pointer is kept; |
| 289 // this is safe since GoogleURLTracker keeps the client for its lifetime. | 155 // this is safe since GoogleURLTracker keeps the client for its lifetime. |
| 290 client_ = new TestGoogleURLTrackerClient(&prefs_); | 156 client_ = new TestGoogleURLTrackerClient(&prefs_); |
| 291 scoped_ptr<GoogleURLTrackerClient> client(client_); | 157 scoped_ptr<GoogleURLTrackerClient> client(client_); |
| 292 google_url_tracker_.reset(new GoogleURLTracker( | 158 google_url_tracker_.reset(new GoogleURLTracker( |
| 293 client.Pass(), GoogleURLTracker::UNIT_TEST_MODE)); | 159 client.Pass(), GoogleURLTracker::UNIT_TEST_MODE)); |
| 294 } | 160 } |
| 295 | 161 |
| 296 void GoogleURLTrackerTest::TearDown() { | 162 void GoogleURLTrackerTest::TearDown() { |
| 297 while (!infobar_managers_seen_.empty()) | |
| 298 CloseTab(*infobar_managers_seen_.begin()); | |
| 299 google_url_tracker_->Shutdown(); | 163 google_url_tracker_->Shutdown(); |
| 300 } | 164 } |
| 301 | 165 |
| 302 net::TestURLFetcher* GoogleURLTrackerTest::GetFetcher() { | 166 net::TestURLFetcher* GoogleURLTrackerTest::GetFetcher() { |
| 303 // This will return the last fetcher created. If no fetchers have been | 167 // This will return the last fetcher created. If no fetchers have been |
| 304 // created, we'll pass GetFetcherByID() "-1", and it will return NULL. | 168 // created, we'll pass GetFetcherByID() "-1", and it will return NULL. |
| 305 return fetcher_factory_.GetFetcherByID(google_url_tracker_->fetcher_id_ - 1); | 169 return fetcher_factory_.GetFetcherByID(google_url_tracker_->fetcher_id_ - 1); |
| 306 } | 170 } |
| 307 | 171 |
| 308 void GoogleURLTrackerTest::MockSearchDomainCheckResponse( | 172 void GoogleURLTrackerTest::MockSearchDomainCheckResponse( |
| (...skipping 20 matching lines...) Expand all Loading... |
| 329 } | 193 } |
| 330 | 194 |
| 331 void GoogleURLTrackerTest::NotifyNetworkChanged() { | 195 void GoogleURLTrackerTest::NotifyNetworkChanged() { |
| 332 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests( | 196 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests( |
| 333 net::NetworkChangeNotifier::CONNECTION_UNKNOWN); | 197 net::NetworkChangeNotifier::CONNECTION_UNKNOWN); |
| 334 // For thread safety, the NCN queues tasks to do the actual notifications, so | 198 // For thread safety, the NCN queues tasks to do the actual notifications, so |
| 335 // we need to spin the message loop so the tracker will actually be notified. | 199 // we need to spin the message loop so the tracker will actually be notified. |
| 336 base::MessageLoop::current()->RunUntilIdle(); | 200 base::MessageLoop::current()->RunUntilIdle(); |
| 337 } | 201 } |
| 338 | 202 |
| 339 void GoogleURLTrackerTest::SetLastPromptedGoogleURL(const GURL& url) { | |
| 340 prefs_.SetString(prefs::kLastPromptedGoogleURL, url.spec()); | |
| 341 } | |
| 342 | |
| 343 GURL GoogleURLTrackerTest::GetLastPromptedGoogleURL() { | |
| 344 return GURL(prefs_.GetString(prefs::kLastPromptedGoogleURL)); | |
| 345 } | |
| 346 | |
| 347 void GoogleURLTrackerTest::SetNavigationPending( | |
| 348 infobars::InfoBarManager* infobar_manager, | |
| 349 bool is_search) { | |
| 350 if (is_search) { | |
| 351 google_url_tracker_->SearchCommitted(); | |
| 352 // Note that the call above might not have actually registered a listener | |
| 353 // for navigation starts if the searchdomaincheck response was bogus. | |
| 354 } | |
| 355 infobar_managers_seen_.insert(infobar_manager); | |
| 356 if (client_->IsListeningForNavigationStart()) { | |
| 357 google_url_tracker_->OnNavigationPending( | |
| 358 scoped_ptr<GoogleURLTrackerNavigationHelper>( | |
| 359 new TestGoogleURLTrackerNavigationHelper( | |
| 360 google_url_tracker_.get())), | |
| 361 infobar_manager, | |
| 362 infobar_manager->GetActiveEntryID()); | |
| 363 } | |
| 364 } | |
| 365 | |
| 366 void GoogleURLTrackerTest::CommitNonSearch( | |
| 367 infobars::InfoBarManager* infobar_manager) { | |
| 368 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager); | |
| 369 if (!map_entry) | |
| 370 return; | |
| 371 | |
| 372 ExpectListeningForCommit(infobar_manager, false); | |
| 373 | |
| 374 // The infobar should be showing; otherwise the pending non-search should | |
| 375 // have closed it. | |
| 376 ASSERT_TRUE(map_entry->has_infobar_delegate()); | |
| 377 | |
| 378 // The pending_id should have been reset to 0 when the non-search became | |
| 379 // pending. | |
| 380 EXPECT_EQ(0, map_entry->infobar_delegate()->pending_id()); | |
| 381 | |
| 382 // Committing the navigation would close the infobar. | |
| 383 map_entry->infobar_delegate()->Close(false); | |
| 384 } | |
| 385 | |
| 386 void GoogleURLTrackerTest::CommitSearch( | |
| 387 infobars::InfoBarManager* infobar_manager, | |
| 388 const GURL& search_url) { | |
| 389 DCHECK(search_url.is_valid()); | |
| 390 GoogleURLTrackerNavigationHelper* nav_helper = | |
| 391 GetNavigationHelper(infobar_manager); | |
| 392 if (nav_helper && nav_helper->IsListeningForNavigationCommit()) { | |
| 393 google_url_tracker_->OnNavigationCommitted(infobar_manager, search_url); | |
| 394 } | |
| 395 } | |
| 396 | |
| 397 void GoogleURLTrackerTest::CloseTab(infobars::InfoBarManager* infobar_manager) { | |
| 398 infobar_managers_seen_.erase(infobar_manager); | |
| 399 GoogleURLTrackerNavigationHelper* nav_helper = | |
| 400 GetNavigationHelper(infobar_manager); | |
| 401 if (nav_helper && nav_helper->IsListeningForTabDestruction()) { | |
| 402 google_url_tracker_->OnTabClosed(nav_helper); | |
| 403 } else { | |
| 404 // Closing a tab with an infobar showing would close the infobar. | |
| 405 GoogleURLTrackerInfoBarDelegate* delegate = | |
| 406 GetInfoBarDelegate(infobar_manager); | |
| 407 if (delegate) | |
| 408 delegate->Close(false); | |
| 409 } | |
| 410 } | |
| 411 | |
| 412 GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry( | |
| 413 infobars::InfoBarManager* infobar_manager) { | |
| 414 GoogleURLTracker::EntryMap::const_iterator i = | |
| 415 google_url_tracker_->entry_map_.find(infobar_manager); | |
| 416 return (i == google_url_tracker_->entry_map_.end()) ? NULL : i->second; | |
| 417 } | |
| 418 | |
| 419 GoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::GetInfoBarDelegate( | |
| 420 infobars::InfoBarManager* infobar_manager) { | |
| 421 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager); | |
| 422 return map_entry ? map_entry->infobar_delegate() : NULL; | |
| 423 } | |
| 424 | |
| 425 GoogleURLTrackerNavigationHelper* GoogleURLTrackerTest::GetNavigationHelper( | |
| 426 infobars::InfoBarManager* infobar_manager) { | |
| 427 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager); | |
| 428 return map_entry ? map_entry->navigation_helper() : NULL; | |
| 429 } | |
| 430 | |
| 431 void GoogleURLTrackerTest::ExpectDefaultURLs() const { | |
| 432 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 433 EXPECT_EQ(GURL(), fetched_google_url()); | |
| 434 } | |
| 435 | |
| 436 void GoogleURLTrackerTest::ExpectListeningForCommit( | |
| 437 infobars::InfoBarManager* infobar_manager, | |
| 438 bool listening) { | |
| 439 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager); | |
| 440 if (map_entry) { | |
| 441 EXPECT_EQ(listening, | |
| 442 map_entry->navigation_helper()->IsListeningForNavigationCommit()); | |
| 443 } else { | |
| 444 EXPECT_FALSE(listening); | |
| 445 } | |
| 446 } | |
| 447 | |
| 448 // Tests ---------------------------------------------------------------------- | 203 // Tests ---------------------------------------------------------------------- |
| 449 | 204 |
| 450 TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) { | 205 TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) { |
| 451 ExpectDefaultURLs(); | 206 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 452 FinishSleep(); | 207 FinishSleep(); |
| 453 // No one called RequestServerCheck() so nothing should have happened. | 208 // No one called RequestServerCheck() so nothing should have happened. |
| 454 EXPECT_FALSE(GetFetcher()); | 209 EXPECT_FALSE(GetFetcher()); |
| 455 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 210 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 456 ExpectDefaultURLs(); | 211 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 457 EXPECT_FALSE(listener_notified()); | 212 EXPECT_FALSE(listener_notified()); |
| 458 } | 213 } |
| 459 | 214 |
| 460 TEST_F(GoogleURLTrackerTest, UpdateOnFirstRun) { | 215 TEST_F(GoogleURLTrackerTest, Update) { |
| 461 RequestServerCheck(); | 216 RequestServerCheck(); |
| 462 EXPECT_FALSE(GetFetcher()); | 217 EXPECT_FALSE(GetFetcher()); |
| 463 ExpectDefaultURLs(); | 218 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 464 EXPECT_FALSE(listener_notified()); | 219 EXPECT_FALSE(listener_notified()); |
| 465 | 220 |
| 466 FinishSleep(); | 221 FinishSleep(); |
| 467 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 222 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 468 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | |
| 469 // GoogleURL should be updated, becase there was no last prompted URL. | |
| 470 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 223 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 471 EXPECT_TRUE(listener_notified()); | 224 EXPECT_TRUE(listener_notified()); |
| 472 } | 225 } |
| 473 | 226 |
| 474 TEST_F(GoogleURLTrackerTest, DontUpdateWhenUnchanged) { | 227 TEST_F(GoogleURLTrackerTest, DontUpdateWhenUnchanged) { |
| 475 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 228 GURL original_google_url("http://www.google.co.uk/"); |
| 229 set_google_url(original_google_url); |
| 476 | 230 |
| 477 RequestServerCheck(); | 231 RequestServerCheck(); |
| 478 EXPECT_FALSE(GetFetcher()); | 232 EXPECT_FALSE(GetFetcher()); |
| 479 ExpectDefaultURLs(); | 233 EXPECT_EQ(original_google_url, google_url()); |
| 480 EXPECT_FALSE(listener_notified()); | 234 EXPECT_FALSE(listener_notified()); |
| 481 | 235 |
| 482 FinishSleep(); | 236 FinishSleep(); |
| 483 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 237 MockSearchDomainCheckResponse(original_google_url.spec()); |
| 484 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 238 EXPECT_EQ(original_google_url, google_url()); |
| 485 // GoogleURL should not be updated, because the fetched and prompted URLs | 239 // No one should be notified, because the new URL matches the old. |
| 486 // match. | |
| 487 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 488 EXPECT_FALSE(listener_notified()); | 240 EXPECT_FALSE(listener_notified()); |
| 489 } | 241 } |
| 490 | 242 |
| 491 TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { | 243 TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { |
| 492 TestInfoBarManager infobar_manager(1); | 244 GURL original_google_url("http://www.google.co.uk/"); |
| 493 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 245 set_google_url(original_google_url); |
| 494 | 246 |
| 495 RequestServerCheck(); | 247 RequestServerCheck(); |
| 496 EXPECT_FALSE(GetFetcher()); | 248 EXPECT_FALSE(GetFetcher()); |
| 497 ExpectDefaultURLs(); | 249 EXPECT_EQ(original_google_url, google_url()); |
| 498 EXPECT_FALSE(listener_notified()); | 250 EXPECT_FALSE(listener_notified()); |
| 499 | 251 |
| 500 // Old-style domain string. | 252 // Old-style domain string. |
| 501 FinishSleep(); | 253 FinishSleep(); |
| 502 MockSearchDomainCheckResponse(".google.co.in"); | 254 MockSearchDomainCheckResponse(".google.co.in"); |
| 503 EXPECT_EQ(GURL(), fetched_google_url()); | 255 EXPECT_EQ(original_google_url, google_url()); |
| 504 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 505 EXPECT_FALSE(listener_notified()); | 256 EXPECT_FALSE(listener_notified()); |
| 506 SetNavigationPending(&infobar_manager, true); | |
| 507 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 508 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 509 | 257 |
| 510 // Bad subdomain. | 258 // Bad subdomain. |
| 511 NotifyNetworkChanged(); | 259 NotifyNetworkChanged(); |
| 512 MockSearchDomainCheckResponse("http://mail.google.com/"); | 260 MockSearchDomainCheckResponse("http://mail.google.com/"); |
| 513 EXPECT_EQ(GURL(), fetched_google_url()); | 261 EXPECT_EQ(original_google_url, google_url()); |
| 514 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 515 EXPECT_FALSE(listener_notified()); | 262 EXPECT_FALSE(listener_notified()); |
| 516 SetNavigationPending(&infobar_manager, true); | |
| 517 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 518 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 519 | 263 |
| 520 // Non-empty path. | 264 // Non-empty path. |
| 521 NotifyNetworkChanged(); | 265 NotifyNetworkChanged(); |
| 522 MockSearchDomainCheckResponse("http://www.google.com/search"); | 266 MockSearchDomainCheckResponse("http://www.google.com/search"); |
| 523 EXPECT_EQ(GURL(), fetched_google_url()); | 267 EXPECT_EQ(original_google_url, google_url()); |
| 524 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 525 EXPECT_FALSE(listener_notified()); | 268 EXPECT_FALSE(listener_notified()); |
| 526 SetNavigationPending(&infobar_manager, true); | |
| 527 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 528 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 529 | 269 |
| 530 // Non-empty query. | 270 // Non-empty query. |
| 531 NotifyNetworkChanged(); | 271 NotifyNetworkChanged(); |
| 532 MockSearchDomainCheckResponse("http://www.google.com/?q=foo"); | 272 MockSearchDomainCheckResponse("http://www.google.com/?q=foo"); |
| 533 EXPECT_EQ(GURL(), fetched_google_url()); | 273 EXPECT_EQ(original_google_url, google_url()); |
| 534 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 535 EXPECT_FALSE(listener_notified()); | 274 EXPECT_FALSE(listener_notified()); |
| 536 SetNavigationPending(&infobar_manager, true); | |
| 537 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 538 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 539 | 275 |
| 540 // Non-empty ref. | 276 // Non-empty ref. |
| 541 NotifyNetworkChanged(); | 277 NotifyNetworkChanged(); |
| 542 MockSearchDomainCheckResponse("http://www.google.com/#anchor"); | 278 MockSearchDomainCheckResponse("http://www.google.com/#anchor"); |
| 543 EXPECT_EQ(GURL(), fetched_google_url()); | 279 EXPECT_EQ(original_google_url, google_url()); |
| 544 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 545 EXPECT_FALSE(listener_notified()); | 280 EXPECT_FALSE(listener_notified()); |
| 546 SetNavigationPending(&infobar_manager, true); | |
| 547 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 548 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 549 | 281 |
| 550 // Complete garbage. | 282 // Complete garbage. |
| 551 NotifyNetworkChanged(); | 283 NotifyNetworkChanged(); |
| 552 MockSearchDomainCheckResponse("HJ)*qF)_*&@f1"); | 284 MockSearchDomainCheckResponse("HJ)*qF)_*&@f1"); |
| 553 EXPECT_EQ(GURL(), fetched_google_url()); | 285 EXPECT_EQ(original_google_url, google_url()); |
| 554 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 555 EXPECT_FALSE(listener_notified()); | 286 EXPECT_FALSE(listener_notified()); |
| 556 SetNavigationPending(&infobar_manager, true); | |
| 557 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 558 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 559 } | |
| 560 | |
| 561 TEST_F(GoogleURLTrackerTest, UpdatePromptedURLOnReturnToPreviousLocation) { | |
| 562 SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/")); | |
| 563 set_google_url(GURL("http://www.google.co.uk/")); | |
| 564 RequestServerCheck(); | |
| 565 FinishSleep(); | |
| 566 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | |
| 567 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | |
| 568 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | |
| 569 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 570 EXPECT_FALSE(listener_notified()); | |
| 571 } | |
| 572 | |
| 573 TEST_F(GoogleURLTrackerTest, SilentlyAcceptSchemeChange) { | |
| 574 // We should auto-accept changes to the current Google URL that merely change | |
| 575 // the scheme, regardless of what the last prompted URL was. | |
| 576 SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/")); | |
| 577 set_google_url(GURL("http://www.google.co.uk/")); | |
| 578 RequestServerCheck(); | |
| 579 FinishSleep(); | |
| 580 MockSearchDomainCheckResponse("https://www.google.co.uk/"); | |
| 581 EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url()); | |
| 582 EXPECT_EQ(GURL("https://www.google.co.uk/"), google_url()); | |
| 583 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 584 EXPECT_TRUE(listener_notified()); | |
| 585 | |
| 586 NotifyNetworkChanged(); | |
| 587 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | |
| 588 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | |
| 589 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | |
| 590 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 591 EXPECT_TRUE(listener_notified()); | |
| 592 } | 287 } |
| 593 | 288 |
| 594 TEST_F(GoogleURLTrackerTest, RefetchOnNetworkChange) { | 289 TEST_F(GoogleURLTrackerTest, RefetchOnNetworkChange) { |
| 595 RequestServerCheck(); | 290 RequestServerCheck(); |
| 596 FinishSleep(); | 291 FinishSleep(); |
| 597 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 292 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 598 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | |
| 599 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 293 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 600 EXPECT_TRUE(listener_notified()); | 294 EXPECT_TRUE(listener_notified()); |
| 601 clear_listener_notified(); | 295 clear_listener_notified(); |
| 602 | 296 |
| 603 NotifyNetworkChanged(); | 297 NotifyNetworkChanged(); |
| 604 MockSearchDomainCheckResponse("http://www.google.co.in/"); | 298 MockSearchDomainCheckResponse("http://www.google.co.in/"); |
| 605 EXPECT_EQ(GURL("http://www.google.co.in/"), fetched_google_url()); | 299 EXPECT_EQ(GURL("http://www.google.co.in/"), google_url()); |
| 606 // Just fetching a new URL shouldn't reset things without a prompt. | 300 EXPECT_TRUE(listener_notified()); |
| 607 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | |
| 608 EXPECT_FALSE(listener_notified()); | |
| 609 } | 301 } |
| 610 | 302 |
| 611 TEST_F(GoogleURLTrackerTest, DontRefetchWhenNoOneRequestsCheck) { | 303 TEST_F(GoogleURLTrackerTest, DontRefetchWhenNoOneRequestsCheck) { |
| 612 FinishSleep(); | 304 FinishSleep(); |
| 613 NotifyNetworkChanged(); | 305 NotifyNetworkChanged(); |
| 614 // No one called RequestServerCheck() so nothing should have happened. | 306 // No one called RequestServerCheck() so nothing should have happened. |
| 615 EXPECT_FALSE(GetFetcher()); | 307 EXPECT_FALSE(GetFetcher()); |
| 616 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 308 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 617 ExpectDefaultURLs(); | 309 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| 618 EXPECT_FALSE(listener_notified()); | 310 EXPECT_FALSE(listener_notified()); |
| 619 } | 311 } |
| 620 | 312 |
| 621 TEST_F(GoogleURLTrackerTest, FetchOnLateRequest) { | 313 TEST_F(GoogleURLTrackerTest, FetchOnLateRequest) { |
| 622 FinishSleep(); | 314 FinishSleep(); |
| 623 NotifyNetworkChanged(); | 315 NotifyNetworkChanged(); |
| 624 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 316 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 625 | 317 |
| 626 RequestServerCheck(); | 318 RequestServerCheck(); |
| 627 // The first request for a check should trigger a fetch if it hasn't happened | 319 // The first request for a check should trigger a fetch if it hasn't happened |
| 628 // already. | 320 // already. |
| 629 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 321 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 630 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | |
| 631 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 322 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 632 EXPECT_TRUE(listener_notified()); | 323 EXPECT_TRUE(listener_notified()); |
| 633 } | 324 } |
| 634 | 325 |
| 635 TEST_F(GoogleURLTrackerTest, DontFetchTwiceOnLateRequests) { | 326 TEST_F(GoogleURLTrackerTest, DontFetchTwiceOnLateRequests) { |
| 636 FinishSleep(); | 327 FinishSleep(); |
| 637 NotifyNetworkChanged(); | 328 NotifyNetworkChanged(); |
| 638 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 329 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
| 639 | 330 |
| 640 RequestServerCheck(); | 331 RequestServerCheck(); |
| 641 // The first request for a check should trigger a fetch if it hasn't happened | 332 // The first request for a check should trigger a fetch if it hasn't happened |
| 642 // already. | 333 // already. |
| 643 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 334 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
| 644 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | |
| 645 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 335 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 646 EXPECT_TRUE(listener_notified()); | 336 EXPECT_TRUE(listener_notified()); |
| 647 clear_listener_notified(); | 337 clear_listener_notified(); |
| 648 | 338 |
| 649 RequestServerCheck(); | 339 RequestServerCheck(); |
| 650 // The second request should be ignored. | 340 // The second request should be ignored. |
| 651 EXPECT_FALSE(GetFetcher()); | 341 EXPECT_FALSE(GetFetcher()); |
| 652 MockSearchDomainCheckResponse("http://www.google.co.in/"); | 342 MockSearchDomainCheckResponse("http://www.google.co.in/"); |
| 653 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | |
| 654 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 343 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
| 655 EXPECT_FALSE(listener_notified()); | 344 EXPECT_FALSE(listener_notified()); |
| 656 } | 345 } |
| 657 | |
| 658 TEST_F(GoogleURLTrackerTest, SearchingDoesNothingIfNoNeedToPrompt) { | |
| 659 TestInfoBarManager infobar_manager(1); | |
| 660 RequestServerCheck(); | |
| 661 FinishSleep(); | |
| 662 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | |
| 663 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | |
| 664 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | |
| 665 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 666 EXPECT_TRUE(listener_notified()); | |
| 667 clear_listener_notified(); | |
| 668 | |
| 669 SetNavigationPending(&infobar_manager, true); | |
| 670 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 671 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 672 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | |
| 673 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | |
| 674 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 675 EXPECT_FALSE(listener_notified()); | |
| 676 } | |
| 677 | |
| 678 TEST_F(GoogleURLTrackerTest, TabClosedOnPendingSearch) { | |
| 679 TestInfoBarManager infobar_manager(1); | |
| 680 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | |
| 681 RequestServerCheck(); | |
| 682 FinishSleep(); | |
| 683 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | |
| 684 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 685 EXPECT_EQ(GURL("http://www.google.co.jp/"), fetched_google_url()); | |
| 686 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 687 EXPECT_FALSE(listener_notified()); | |
| 688 | |
| 689 SetNavigationPending(&infobar_manager, true); | |
| 690 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager); | |
| 691 ASSERT_FALSE(map_entry == NULL); | |
| 692 EXPECT_FALSE(map_entry->has_infobar_delegate()); | |
| 693 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 694 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 695 EXPECT_FALSE(listener_notified()); | |
| 696 | |
| 697 CloseTab(&infobar_manager); | |
| 698 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 699 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 700 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 701 EXPECT_FALSE(listener_notified()); | |
| 702 } | |
| 703 | |
| 704 TEST_F(GoogleURLTrackerTest, TabClosedOnCommittedSearch) { | |
| 705 TestInfoBarManager infobar_manager(1); | |
| 706 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | |
| 707 RequestServerCheck(); | |
| 708 FinishSleep(); | |
| 709 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | |
| 710 | |
| 711 SetNavigationPending(&infobar_manager, true); | |
| 712 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 713 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); | |
| 714 | |
| 715 CloseTab(&infobar_manager); | |
| 716 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 717 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 718 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 719 EXPECT_FALSE(listener_notified()); | |
| 720 } | |
| 721 | |
| 722 TEST_F(GoogleURLTrackerTest, InfoBarClosed) { | |
| 723 TestInfoBarManager infobar_manager(1); | |
| 724 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | |
| 725 RequestServerCheck(); | |
| 726 FinishSleep(); | |
| 727 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | |
| 728 | |
| 729 SetNavigationPending(&infobar_manager, true); | |
| 730 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 731 GoogleURLTrackerInfoBarDelegate* infobar = | |
| 732 GetInfoBarDelegate(&infobar_manager); | |
| 733 ASSERT_FALSE(infobar == NULL); | |
| 734 | |
| 735 infobar->Close(false); | |
| 736 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 737 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 738 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 739 EXPECT_FALSE(listener_notified()); | |
| 740 } | |
| 741 | |
| 742 TEST_F(GoogleURLTrackerTest, InfoBarRefused) { | |
| 743 TestInfoBarManager infobar_manager(1); | |
| 744 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | |
| 745 RequestServerCheck(); | |
| 746 FinishSleep(); | |
| 747 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | |
| 748 | |
| 749 SetNavigationPending(&infobar_manager, true); | |
| 750 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 751 GoogleURLTrackerInfoBarDelegate* infobar = | |
| 752 GetInfoBarDelegate(&infobar_manager); | |
| 753 ASSERT_FALSE(infobar == NULL); | |
| 754 | |
| 755 infobar->Cancel(); | |
| 756 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 757 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 758 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); | |
| 759 EXPECT_FALSE(listener_notified()); | |
| 760 } | |
| 761 | |
| 762 TEST_F(GoogleURLTrackerTest, InfoBarAccepted) { | |
| 763 TestInfoBarManager infobar_manager(1); | |
| 764 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | |
| 765 RequestServerCheck(); | |
| 766 FinishSleep(); | |
| 767 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | |
| 768 | |
| 769 SetNavigationPending(&infobar_manager, true); | |
| 770 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 771 GoogleURLTrackerInfoBarDelegate* infobar = | |
| 772 GetInfoBarDelegate(&infobar_manager); | |
| 773 ASSERT_FALSE(infobar == NULL); | |
| 774 | |
| 775 infobar->Accept(); | |
| 776 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 777 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url()); | |
| 778 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); | |
| 779 EXPECT_TRUE(listener_notified()); | |
| 780 } | |
| 781 | |
| 782 TEST_F(GoogleURLTrackerTest, FetchesCanAutomaticallyCloseInfoBars) { | |
| 783 TestInfoBarManager infobar_manager(1); | |
| 784 RequestServerCheck(); | |
| 785 FinishSleep(); | |
| 786 MockSearchDomainCheckResponse(google_url().spec()); | |
| 787 | |
| 788 // Re-fetching the accepted URL after showing an infobar for another URL | |
| 789 // should close the infobar. | |
| 790 NotifyNetworkChanged(); | |
| 791 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | |
| 792 SetNavigationPending(&infobar_manager, true); | |
| 793 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); | |
| 794 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); | |
| 795 NotifyNetworkChanged(); | |
| 796 MockSearchDomainCheckResponse(google_url().spec()); | |
| 797 EXPECT_EQ(google_url(), GetLastPromptedGoogleURL()); | |
| 798 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 799 | |
| 800 // As should fetching a URL that differs from the accepted only by the scheme. | |
| 801 NotifyNetworkChanged(); | |
| 802 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | |
| 803 SetNavigationPending(&infobar_manager, true); | |
| 804 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); | |
| 805 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); | |
| 806 NotifyNetworkChanged(); | |
| 807 url::Replacements<char> replacements; | |
| 808 const std::string& scheme("https"); | |
| 809 replacements.SetScheme(scheme.data(), url::Component(0, scheme.length())); | |
| 810 GURL new_google_url(google_url().ReplaceComponents(replacements)); | |
| 811 MockSearchDomainCheckResponse(new_google_url.spec()); | |
| 812 EXPECT_EQ(new_google_url, GetLastPromptedGoogleURL()); | |
| 813 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 814 | |
| 815 // As should re-fetching the last prompted URL. | |
| 816 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | |
| 817 NotifyNetworkChanged(); | |
| 818 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | |
| 819 SetNavigationPending(&infobar_manager, true); | |
| 820 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); | |
| 821 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); | |
| 822 NotifyNetworkChanged(); | |
| 823 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | |
| 824 EXPECT_EQ(new_google_url, google_url()); | |
| 825 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 826 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 827 | |
| 828 // And one that differs from the last prompted URL only by the scheme. | |
| 829 NotifyNetworkChanged(); | |
| 830 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | |
| 831 SetNavigationPending(&infobar_manager, true); | |
| 832 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); | |
| 833 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); | |
| 834 NotifyNetworkChanged(); | |
| 835 MockSearchDomainCheckResponse("https://www.google.co.uk/"); | |
| 836 EXPECT_EQ(new_google_url, google_url()); | |
| 837 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 838 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 839 | |
| 840 // And fetching a different URL entirely. | |
| 841 NotifyNetworkChanged(); | |
| 842 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | |
| 843 SetNavigationPending(&infobar_manager, true); | |
| 844 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); | |
| 845 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); | |
| 846 NotifyNetworkChanged(); | |
| 847 MockSearchDomainCheckResponse("https://www.google.co.in/"); | |
| 848 EXPECT_EQ(new_google_url, google_url()); | |
| 849 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 850 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 851 } | |
| 852 | |
| 853 TEST_F(GoogleURLTrackerTest, ResetInfoBarGoogleURLs) { | |
| 854 TestInfoBarManager infobar_manager(1); | |
| 855 RequestServerCheck(); | |
| 856 FinishSleep(); | |
| 857 MockSearchDomainCheckResponse(google_url().spec()); | |
| 858 | |
| 859 NotifyNetworkChanged(); | |
| 860 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | |
| 861 SetNavigationPending(&infobar_manager, true); | |
| 862 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); | |
| 863 GoogleURLTrackerInfoBarDelegate* delegate = | |
| 864 GetInfoBarDelegate(&infobar_manager); | |
| 865 ASSERT_FALSE(delegate == NULL); | |
| 866 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | |
| 867 | |
| 868 // If while an infobar is showing we fetch a new URL that differs from the | |
| 869 // infobar's only by scheme, the infobar should stay showing. | |
| 870 NotifyNetworkChanged(); | |
| 871 MockSearchDomainCheckResponse("https://www.google.co.uk/"); | |
| 872 EXPECT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); | |
| 873 EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url()); | |
| 874 } | |
| 875 | |
| 876 TEST_F(GoogleURLTrackerTest, NavigationsAfterPendingSearch) { | |
| 877 TestInfoBarManager infobar_manager(1); | |
| 878 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | |
| 879 RequestServerCheck(); | |
| 880 FinishSleep(); | |
| 881 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | |
| 882 | |
| 883 // A pending non-search after a pending search should delete the map entry. | |
| 884 SetNavigationPending(&infobar_manager, true); | |
| 885 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager); | |
| 886 ASSERT_FALSE(map_entry == NULL); | |
| 887 EXPECT_FALSE(map_entry->has_infobar_delegate()); | |
| 888 SetNavigationPending(&infobar_manager, false); | |
| 889 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 890 | |
| 891 // A pending search after a pending search should leave the map entry alive. | |
| 892 SetNavigationPending(&infobar_manager, true); | |
| 893 map_entry = GetMapEntry(&infobar_manager); | |
| 894 ASSERT_FALSE(map_entry == NULL); | |
| 895 EXPECT_FALSE(map_entry->has_infobar_delegate()); | |
| 896 SetNavigationPending(&infobar_manager, true); | |
| 897 ASSERT_EQ(map_entry, GetMapEntry(&infobar_manager)); | |
| 898 EXPECT_FALSE(map_entry->has_infobar_delegate()); | |
| 899 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); | |
| 900 | |
| 901 // Committing this search should show an infobar. | |
| 902 CommitSearch(&infobar_manager, | |
| 903 GURL("http://www.google.co.uk/search?q=test2")); | |
| 904 EXPECT_TRUE(map_entry->has_infobar_delegate()); | |
| 905 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 906 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 907 EXPECT_FALSE(listener_notified()); | |
| 908 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); | |
| 909 } | |
| 910 | |
| 911 TEST_F(GoogleURLTrackerTest, NavigationsAfterCommittedSearch) { | |
| 912 TestInfoBarManager infobar_manager(1); | |
| 913 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | |
| 914 RequestServerCheck(); | |
| 915 FinishSleep(); | |
| 916 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | |
| 917 SetNavigationPending(&infobar_manager, true); | |
| 918 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 919 GoogleURLTrackerInfoBarDelegate* delegate = | |
| 920 GetInfoBarDelegate(&infobar_manager); | |
| 921 ASSERT_FALSE(delegate == NULL); | |
| 922 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); | |
| 923 | |
| 924 // A pending non-search on a visible infobar should basically do nothing. | |
| 925 SetNavigationPending(&infobar_manager, false); | |
| 926 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); | |
| 927 EXPECT_EQ(0, delegate->pending_id()); | |
| 928 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); | |
| 929 | |
| 930 // As should another pending non-search after the first. | |
| 931 SetNavigationPending(&infobar_manager, false); | |
| 932 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); | |
| 933 EXPECT_EQ(0, delegate->pending_id()); | |
| 934 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); | |
| 935 | |
| 936 // Committing this non-search should close the infobar. The control flow in | |
| 937 // these tests is not really comparable to in the real browser, but at least a | |
| 938 // few sanity-checks will be performed. | |
| 939 ASSERT_NO_FATAL_FAILURE(CommitNonSearch(&infobar_manager)); | |
| 940 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 941 | |
| 942 // A pending search on a visible infobar should cause the infobar to listen | |
| 943 // for the search to commit. | |
| 944 SetNavigationPending(&infobar_manager, true); | |
| 945 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 946 delegate = GetInfoBarDelegate(&infobar_manager); | |
| 947 ASSERT_FALSE(delegate == NULL); | |
| 948 SetNavigationPending(&infobar_manager, true); | |
| 949 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); | |
| 950 EXPECT_EQ(1, delegate->pending_id()); | |
| 951 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); | |
| 952 | |
| 953 // But a non-search after this should cancel that state. | |
| 954 SetNavigationPending(&infobar_manager, false); | |
| 955 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); | |
| 956 EXPECT_EQ(0, delegate->pending_id()); | |
| 957 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); | |
| 958 | |
| 959 // Another pending search after the non-search should put us back into | |
| 960 // "waiting for commit" mode. | |
| 961 SetNavigationPending(&infobar_manager, true); | |
| 962 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); | |
| 963 EXPECT_EQ(1, delegate->pending_id()); | |
| 964 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); | |
| 965 | |
| 966 // A second pending search after the first should not really change anything. | |
| 967 SetNavigationPending(&infobar_manager, true); | |
| 968 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); | |
| 969 EXPECT_EQ(1, delegate->pending_id()); | |
| 970 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); | |
| 971 | |
| 972 // Committing this search should change the visible infobar's search_url. | |
| 973 CommitSearch(&infobar_manager, | |
| 974 GURL("http://www.google.co.uk/search?q=test2")); | |
| 975 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); | |
| 976 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), | |
| 977 delegate->search_url()); | |
| 978 EXPECT_EQ(0, delegate->pending_id()); | |
| 979 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); | |
| 980 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | |
| 981 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | |
| 982 EXPECT_FALSE(listener_notified()); | |
| 983 } | |
| 984 | |
| 985 TEST_F(GoogleURLTrackerTest, MultipleMapEntries) { | |
| 986 TestInfoBarManager infobar_manager(1); | |
| 987 TestInfoBarManager infobar_manager2(2); | |
| 988 TestInfoBarManager infobar_manager3(3); | |
| 989 TestInfoBarManager infobar_manager4(4); | |
| 990 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | |
| 991 RequestServerCheck(); | |
| 992 FinishSleep(); | |
| 993 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | |
| 994 | |
| 995 SetNavigationPending(&infobar_manager, true); | |
| 996 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager); | |
| 997 ASSERT_FALSE(map_entry == NULL); | |
| 998 EXPECT_FALSE(map_entry->has_infobar_delegate()); | |
| 999 | |
| 1000 SetNavigationPending(&infobar_manager2, true); | |
| 1001 CommitSearch(&infobar_manager2, | |
| 1002 GURL("http://www.google.co.uk/search?q=test2")); | |
| 1003 GoogleURLTrackerInfoBarDelegate* delegate2 = | |
| 1004 GetInfoBarDelegate(&infobar_manager2); | |
| 1005 ASSERT_FALSE(delegate2 == NULL); | |
| 1006 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), | |
| 1007 delegate2->search_url()); | |
| 1008 | |
| 1009 SetNavigationPending(&infobar_manager3, true); | |
| 1010 GoogleURLTrackerMapEntry* map_entry3 = GetMapEntry(&infobar_manager3); | |
| 1011 ASSERT_FALSE(map_entry3 == NULL); | |
| 1012 EXPECT_FALSE(map_entry3->has_infobar_delegate()); | |
| 1013 | |
| 1014 SetNavigationPending(&infobar_manager4, true); | |
| 1015 CommitSearch(&infobar_manager4, | |
| 1016 GURL("http://www.google.co.uk/search?q=test4")); | |
| 1017 GoogleURLTrackerInfoBarDelegate* delegate4 = | |
| 1018 GetInfoBarDelegate(&infobar_manager4); | |
| 1019 ASSERT_FALSE(delegate4 == NULL); | |
| 1020 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test4"), | |
| 1021 delegate4->search_url()); | |
| 1022 | |
| 1023 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 1024 EXPECT_TRUE(map_entry->has_infobar_delegate()); | |
| 1025 | |
| 1026 delegate2->Close(false); | |
| 1027 EXPECT_TRUE(GetMapEntry(&infobar_manager2) == NULL); | |
| 1028 EXPECT_FALSE(listener_notified()); | |
| 1029 | |
| 1030 delegate4->Accept(); | |
| 1031 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); | |
| 1032 EXPECT_TRUE(GetMapEntry(&infobar_manager3) == NULL); | |
| 1033 EXPECT_TRUE(GetMapEntry(&infobar_manager4) == NULL); | |
| 1034 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url()); | |
| 1035 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); | |
| 1036 EXPECT_TRUE(listener_notified()); | |
| 1037 } | |
| 1038 | |
| 1039 TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantNavigation) { | |
| 1040 TestInfoBarManager infobar_manager(1); | |
| 1041 TestInfoBarManager infobar_manager2(2); | |
| 1042 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | |
| 1043 RequestServerCheck(); | |
| 1044 FinishSleep(); | |
| 1045 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | |
| 1046 | |
| 1047 // This tests a particularly gnarly sequence of events that used to cause us | |
| 1048 // to erroneously listen for a non-search navigation to commit. | |
| 1049 SetNavigationPending(&infobar_manager, true); | |
| 1050 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); | |
| 1051 SetNavigationPending(&infobar_manager2, true); | |
| 1052 CommitSearch(&infobar_manager2, | |
| 1053 GURL("http://www.google.co.uk/search?q=test2")); | |
| 1054 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); | |
| 1055 GoogleURLTrackerInfoBarDelegate* delegate2 = | |
| 1056 GetInfoBarDelegate(&infobar_manager2); | |
| 1057 ASSERT_FALSE(delegate2 == NULL); | |
| 1058 SetNavigationPending(&infobar_manager, true); | |
| 1059 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); | |
| 1060 delegate2->Close(false); | |
| 1061 SetNavigationPending(&infobar_manager, false); | |
| 1062 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); | |
| 1063 } | |
| OLD | NEW |