| 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" |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 } // namespace | 85 } // namespace |
| 86 | 86 |
| 87 | 87 |
| 88 // GoogleURLTrackerTest ------------------------------------------------------- | 88 // GoogleURLTrackerTest ------------------------------------------------------- |
| 89 | 89 |
| 90 // Ths class exercises GoogleURLTracker. In order to avoid instantiating more | 90 // Ths class exercises GoogleURLTracker. In order to avoid instantiating more |
| 91 // of the Chrome infrastructure than necessary, the GoogleURLTracker functions | 91 // of the Chrome infrastructure than necessary, the GoogleURLTracker functions |
| 92 // are carefully written so that many of the functions which take WebContents*, | 92 // are carefully written so that many of the functions which take WebContents*, |
| 93 // NavigationController*, InfoBarTabHelper*, or objects containing such pointers | 93 // NavigationController*, InfoBarTabHelper*, or objects containing such pointers |
| 94 // (e.g. NotificationSource) do not actually dereference the objects, merely use | 94 // (e.g. NotificationSource) do not actually dereference the objects, merely use |
| 95 // them for comparisons and lookups, e.g. in an InfoBarMap. This then allows | 95 // them for comparisons and lookups, e.g. in |entry_map_|. This then allows the |
| 96 // the test code here to not create any of these objects, and instead supply | 96 // test code here to not create any of these objects, and instead supply |
| 97 // "pointers" that are actually reinterpret_cast<>()ed magic numbers. Then we | 97 // "pointers" that are actually reinterpret_cast<>()ed magic numbers. Then we |
| 98 // write the necessary stubs/hooks, here and in TestInfoBarDelegate above, to | 98 // write the necessary stubs/hooks, here and in TestInfoBarDelegate above, to |
| 99 // make everything continue to work. | 99 // make everything continue to work. |
| 100 // | 100 // |
| 101 // Technically, the C++98 spec defines the result of casting | 101 // Technically, the C++98 spec defines the result of casting |
| 102 // T* -> intptr_t -> T* to be an identity, but intptr_t -> T* -> intptr_t (what | 102 // T* -> intptr_t -> T* to be an identity, but intptr_t -> T* -> intptr_t (what |
| 103 // we use here) is "implementation-defined". Since I've never seen a compiler | 103 // we use here) is "implementation-defined". Since I've never seen a compiler |
| 104 // break this, though, and the result would simply be a failing test rather than | 104 // break this, though, and the result would simply be a failing test rather than |
| 105 // a bug in Chrome, we'll use it anyway. | 105 // a bug in Chrome, we'll use it anyway. |
| 106 class GoogleURLTrackerTest : public testing::Test { | 106 class GoogleURLTrackerTest : public testing::Test { |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 // This tracks the different "tabs" a test has "opened", so we can close them | 168 // This tracks the different "tabs" a test has "opened", so we can close them |
| 169 // properly before shutting down |google_url_tracker_|, which expects that. | 169 // properly before shutting down |google_url_tracker_|, which expects that. |
| 170 std::set<int> unique_ids_seen_; | 170 std::set<int> unique_ids_seen_; |
| 171 }; | 171 }; |
| 172 | 172 |
| 173 void GoogleURLTrackerTest::OnInfoBarClosed( | 173 void GoogleURLTrackerTest::OnInfoBarClosed( |
| 174 GoogleURLTrackerInfoBarDelegate* infobar, | 174 GoogleURLTrackerInfoBarDelegate* infobar, |
| 175 InfoBarTabHelper* infobar_helper) { | 175 InfoBarTabHelper* infobar_helper) { |
| 176 // First, simulate the InfoBarTabHelper firing INFOBAR_REMOVED. | 176 // First, simulate the InfoBarTabHelper firing INFOBAR_REMOVED. |
| 177 InfoBarRemovedDetails removed_details(infobar, false); | 177 InfoBarRemovedDetails removed_details(infobar, false); |
| 178 GoogleURLTracker::InfoBarMap::const_iterator i = | 178 GoogleURLTracker::EntryMap::const_iterator i = |
| 179 google_url_tracker_->infobar_map_.find(infobar_helper); | 179 google_url_tracker_->entry_map_.find(infobar_helper); |
| 180 ASSERT_FALSE(i == google_url_tracker_->infobar_map_.end()); | 180 ASSERT_FALSE(i == google_url_tracker_->entry_map_.end()); |
| 181 GoogleURLTrackerMapEntry* map_entry = i->second; | 181 GoogleURLTrackerMapEntry* map_entry = i->second; |
| 182 ASSERT_EQ(infobar, map_entry->infobar()); | 182 ASSERT_EQ(infobar, map_entry->infobar()); |
| 183 map_entry->Observe(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, | 183 map_entry->Observe(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, |
| 184 content::Source<InfoBarTabHelper>(infobar_helper), | 184 content::Source<InfoBarTabHelper>(infobar_helper), |
| 185 content::Details<InfoBarRemovedDetails>(&removed_details)); | 185 content::Details<InfoBarRemovedDetails>(&removed_details)); |
| 186 | 186 |
| 187 // Second, simulate the infobar container closing the infobar in response. | 187 // Second, simulate the infobar container closing the infobar in response. |
| 188 infobar->InfoBarClosed(); | 188 infobar->InfoBarClosed(); |
| 189 } | 189 } |
| 190 | 190 |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 // The pending_id should have been reset to 0 when the non-search became | 296 // The pending_id should have been reset to 0 when the non-search became |
| 297 // pending. | 297 // pending. |
| 298 EXPECT_EQ(0, map_entry->infobar()->pending_id()); | 298 EXPECT_EQ(0, map_entry->infobar()->pending_id()); |
| 299 | 299 |
| 300 // Committing the navigation would close the infobar. | 300 // Committing the navigation would close the infobar. |
| 301 map_entry->infobar()->Close(false); | 301 map_entry->infobar()->Close(false); |
| 302 } | 302 } |
| 303 | 303 |
| 304 void GoogleURLTrackerTest::CommitSearch(intptr_t unique_id, | 304 void GoogleURLTrackerTest::CommitSearch(intptr_t unique_id, |
| 305 const GURL& search_url) { | 305 const GURL& search_url) { |
| 306 DCHECK(search_url.is_valid()); |
| 306 if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(), | 307 if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(), |
| 307 content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 308 content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
| 308 content::Source<content::NavigationController>( | 309 content::Source<content::NavigationController>( |
| 309 reinterpret_cast<content::NavigationController*>(unique_id)))) { | 310 reinterpret_cast<content::NavigationController*>(unique_id)))) { |
| 310 google_url_tracker_->OnNavigationCommittedOrTabClosed( | 311 google_url_tracker_->OnNavigationCommitted( |
| 311 reinterpret_cast<InfoBarTabHelper*>(unique_id), | 312 reinterpret_cast<InfoBarTabHelper*>(unique_id), |
| 312 search_url); | 313 search_url); |
| 313 } | 314 } |
| 314 } | 315 } |
| 315 | 316 |
| 316 void GoogleURLTrackerTest::DoInstantNavigation(intptr_t unique_id, | 317 void GoogleURLTrackerTest::DoInstantNavigation(intptr_t unique_id, |
| 317 const GURL& search_url) { | 318 const GURL& search_url) { |
| 318 if (!search_url.is_empty()) { | 319 if (!search_url.is_empty()) { |
| 319 google_url_tracker_->SearchCommitted(); | 320 google_url_tracker_->SearchCommitted(); |
| 320 // Note that the call above might not have actually registered a listener | 321 // Note that the call above might not have actually registered a listener |
| 321 // for NOTIFICATION_INSTANT_COMMITTED if the searchdomaincheck response was | 322 // for NOTIFICATION_INSTANT_COMMITTED if the searchdomaincheck response was |
| 322 // bogus. | 323 // bogus. |
| 323 } | 324 } |
| 324 unique_ids_seen_.insert(unique_id); | 325 unique_ids_seen_.insert(unique_id); |
| 325 if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(), | 326 if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(), |
| 326 chrome::NOTIFICATION_INSTANT_COMMITTED, | 327 chrome::NOTIFICATION_INSTANT_COMMITTED, |
| 327 content::NotificationService::AllBrowserContextsAndSources())) { | 328 content::NotificationService::AllBrowserContextsAndSources())) { |
| 328 google_url_tracker_->OnInstantCommitted( | 329 google_url_tracker_->OnInstantCommitted( |
| 329 content::Source<content::NavigationController>( | 330 content::Source<content::NavigationController>( |
| 330 reinterpret_cast<content::NavigationController*>(unique_id)), | 331 reinterpret_cast<content::NavigationController*>(unique_id)), |
| 331 content::Source<content::WebContents>( | 332 content::Source<content::WebContents>( |
| 332 reinterpret_cast<content::WebContents*>(unique_id)), | 333 reinterpret_cast<content::WebContents*>(unique_id)), |
| 333 reinterpret_cast<InfoBarTabHelper*>(unique_id), search_url); | 334 reinterpret_cast<InfoBarTabHelper*>(unique_id), search_url); |
| 334 } | 335 } |
| 335 } | 336 } |
| 336 | 337 |
| 337 void GoogleURLTrackerTest::CloseTab(intptr_t unique_id) { | 338 void GoogleURLTrackerTest::CloseTab(intptr_t unique_id) { |
| 338 unique_ids_seen_.erase(unique_id); | 339 unique_ids_seen_.erase(unique_id); |
| 339 InfoBarTabHelper* infobar_helper = | 340 content::Source<content::WebContents> source( |
| 340 reinterpret_cast<InfoBarTabHelper*>(unique_id); | 341 reinterpret_cast<content::WebContents*>(unique_id)); |
| 341 if (google_url_tracker_->registrar_.IsRegistered( | 342 if (google_url_tracker_->registrar_.IsRegistered( |
| 342 google_url_tracker_.get(), content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 343 google_url_tracker_.get(), content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
| 343 content::Source<content::WebContents>( | 344 source)) { |
| 344 reinterpret_cast<content::WebContents*>(unique_id)))) { | 345 google_url_tracker_->OnTabClosed(source); |
| 345 google_url_tracker_->OnNavigationCommittedOrTabClosed(infobar_helper, | |
| 346 GURL()); | |
| 347 } else { | 346 } else { |
| 348 // Closing a tab with an infobar showing would close the infobar. | 347 // Closing a tab with an infobar showing would close the infobar. |
| 349 GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBar(unique_id); | 348 GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBar(unique_id); |
| 350 if (infobar) | 349 if (infobar) |
| 351 infobar->Close(false); | 350 infobar->Close(false); |
| 352 } | 351 } |
| 353 } | 352 } |
| 354 | 353 |
| 355 GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry( | 354 GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry( |
| 356 intptr_t unique_id) { | 355 intptr_t unique_id) { |
| 357 GoogleURLTracker::InfoBarMap::const_iterator i = | 356 GoogleURLTracker::EntryMap::const_iterator i = |
| 358 google_url_tracker_->infobar_map_.find( | 357 google_url_tracker_->entry_map_.find( |
| 359 reinterpret_cast<InfoBarTabHelper*>(unique_id)); | 358 reinterpret_cast<InfoBarTabHelper*>(unique_id)); |
| 360 return (i == google_url_tracker_->infobar_map_.end()) ? NULL : i->second; | 359 return (i == google_url_tracker_->entry_map_.end()) ? NULL : i->second; |
| 361 } | 360 } |
| 362 | 361 |
| 363 GoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::GetInfoBar( | 362 GoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::GetInfoBar( |
| 364 intptr_t unique_id) { | 363 intptr_t unique_id) { |
| 365 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); | 364 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); |
| 366 return map_entry ? map_entry->infobar() : NULL; | 365 return map_entry ? map_entry->infobar() : NULL; |
| 367 } | 366 } |
| 368 | 367 |
| 369 void GoogleURLTrackerTest::ExpectDefaultURLs() const { | 368 void GoogleURLTrackerTest::ExpectDefaultURLs() const { |
| 370 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 369 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
| (...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1030 CommitSearch(2, GURL("http://www.google.co.uk/search?q=test2")); | 1029 CommitSearch(2, GURL("http://www.google.co.uk/search?q=test2")); |
| 1031 EXPECT_FALSE(GetInfoBar(1) == NULL); | 1030 EXPECT_FALSE(GetInfoBar(1) == NULL); |
| 1032 GoogleURLTrackerInfoBarDelegate* infobar2 = GetInfoBar(2); | 1031 GoogleURLTrackerInfoBarDelegate* infobar2 = GetInfoBar(2); |
| 1033 ASSERT_FALSE(infobar2 == NULL); | 1032 ASSERT_FALSE(infobar2 == NULL); |
| 1034 SetNavigationPending(1, true); | 1033 SetNavigationPending(1, true); |
| 1035 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 1034 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); |
| 1036 infobar2->Close(false); | 1035 infobar2->Close(false); |
| 1037 SetNavigationPending(1, false); | 1036 SetNavigationPending(1, false); |
| 1038 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 1037 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); |
| 1039 } | 1038 } |
| OLD | NEW |