OLD | NEW |
1 // Copyright (c) 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 "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/memory/scoped_ptr.h" |
10 #include "base/message_loop/message_loop.h" | 11 #include "base/message_loop/message_loop.h" |
11 #include "base/prefs/pref_service.h" | 12 #include "base/prefs/pref_service.h" |
12 #include "chrome/browser/chrome_notification_types.h" | |
13 #include "chrome/browser/google/google_url_tracker_factory.h" | 13 #include "chrome/browser/google/google_url_tracker_factory.h" |
14 #include "chrome/browser/google/google_url_tracker_infobar_delegate.h" | 14 #include "chrome/browser/google/google_url_tracker_infobar_delegate.h" |
15 #include "chrome/browser/google/google_url_tracker_navigation_helper.h" | 15 #include "chrome/browser/google/google_url_tracker_navigation_helper.h" |
16 #include "chrome/common/pref_names.h" | 16 #include "chrome/common/pref_names.h" |
17 #include "chrome/test/base/testing_profile.h" | 17 #include "chrome/test/base/testing_profile.h" |
18 #include "components/google/core/browser/google_url_tracker_client.h" | 18 #include "components/google/core/browser/google_url_tracker_client.h" |
19 #include "components/infobars/core/infobar.h" | 19 #include "components/infobars/core/infobar.h" |
20 #include "components/infobars/core/infobar_delegate.h" | 20 #include "components/infobars/core/infobar_delegate.h" |
21 #include "content/public/browser/notification_service.h" | |
22 #include "content/public/test/test_browser_thread_bundle.h" | 21 #include "content/public/test/test_browser_thread_bundle.h" |
23 #include "net/url_request/test_url_fetcher_factory.h" | 22 #include "net/url_request/test_url_fetcher_factory.h" |
24 #include "net/url_request/url_fetcher.h" | 23 #include "net/url_request/url_fetcher.h" |
25 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
26 | 25 |
27 class GoogleURLTrackerTest; | |
28 | |
29 namespace { | 26 namespace { |
30 | 27 |
31 // TestInfoBarDelegate -------------------------------------------------------- | |
32 | |
33 class TestInfoBarDelegate : public GoogleURLTrackerInfoBarDelegate { | |
34 public: | |
35 // Creates a test infobar and delegate and returns the infobar. Unlike the | |
36 // parent class, this does not add the infobar to |infobar_manager|, since | |
37 // that "pointer" is really just a magic number. Thus there is no | |
38 // InfoBarManager ownership of the returned object; and since the caller | |
39 // doesn't own the returned object, we rely on |test_harness| cleaning this | |
40 // up eventually in GoogleURLTrackerTest::OnInfoBarClosed() to avoid leaks. | |
41 static infobars::InfoBar* Create( | |
42 GoogleURLTrackerTest* test_harness, | |
43 infobars::InfoBarManager* infobar_manager, | |
44 GoogleURLTracker* google_url_tracker, | |
45 const GURL& search_url); | |
46 | |
47 private: | |
48 TestInfoBarDelegate(GoogleURLTrackerTest* test_harness, | |
49 infobars::InfoBarManager* infobar_manager, | |
50 GoogleURLTracker* google_url_tracker, | |
51 const GURL& search_url); | |
52 virtual ~TestInfoBarDelegate(); | |
53 | |
54 // GoogleURLTrackerInfoBarDelegate: | |
55 virtual void Update(const GURL& search_url) OVERRIDE; | |
56 virtual void Close(bool redo_search) OVERRIDE; | |
57 | |
58 GoogleURLTrackerTest* test_harness_; | |
59 infobars::InfoBarManager* infobar_manager_; | |
60 | |
61 DISALLOW_COPY_AND_ASSIGN(TestInfoBarDelegate); | |
62 }; | |
63 | |
64 // The member function definitions come after the declaration of | |
65 // GoogleURLTrackerTest, so they can call members on it. | |
66 | |
67 | |
68 // TestCallbackListener --------------------------------------------------- | 28 // TestCallbackListener --------------------------------------------------- |
69 | 29 |
70 class TestCallbackListener { | 30 class TestCallbackListener { |
71 public: | 31 public: |
72 TestCallbackListener(); | 32 TestCallbackListener(); |
73 virtual ~TestCallbackListener(); | 33 virtual ~TestCallbackListener(); |
74 | 34 |
75 bool HasRegisteredCallback(); | 35 bool HasRegisteredCallback(); |
76 void RegisterCallback(GoogleURLTracker* google_url_tracker); | 36 void RegisterCallback(GoogleURLTracker* google_url_tracker); |
77 | 37 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 bool TestGoogleURLTrackerNavigationHelper::IsListeningForTabDestruction() { | 154 bool TestGoogleURLTrackerNavigationHelper::IsListeningForTabDestruction() { |
195 return listening_for_tab_destruction_; | 155 return listening_for_tab_destruction_; |
196 } | 156 } |
197 | 157 |
198 void TestGoogleURLTrackerNavigationHelper::OpenURL( | 158 void TestGoogleURLTrackerNavigationHelper::OpenURL( |
199 GURL url, | 159 GURL url, |
200 WindowOpenDisposition disposition, | 160 WindowOpenDisposition disposition, |
201 bool user_clicked_on_link) { | 161 bool user_clicked_on_link) { |
202 } | 162 } |
203 | 163 |
| 164 // TestInfoBarManager --------------------------------------------------------- |
| 165 |
| 166 class TestInfoBarManager : public infobars::InfoBarManager { |
| 167 public: |
| 168 explicit TestInfoBarManager(int unique_id); |
| 169 virtual ~TestInfoBarManager(); |
| 170 virtual int GetActiveEntryID() OVERRIDE; |
| 171 |
| 172 private: |
| 173 int unique_id_; |
| 174 DISALLOW_COPY_AND_ASSIGN(TestInfoBarManager); |
| 175 }; |
| 176 |
| 177 TestInfoBarManager::TestInfoBarManager(int unique_id) : unique_id_(unique_id) { |
| 178 } |
| 179 |
| 180 TestInfoBarManager::~TestInfoBarManager() { |
| 181 ShutDown(); |
| 182 } |
| 183 |
| 184 int TestInfoBarManager::GetActiveEntryID() { |
| 185 return unique_id_; |
| 186 } |
| 187 |
204 } // namespace | 188 } // namespace |
205 | 189 |
206 | |
207 // GoogleURLTrackerTest ------------------------------------------------------- | 190 // GoogleURLTrackerTest ------------------------------------------------------- |
208 | 191 |
209 // Ths class exercises GoogleURLTracker. In order to avoid instantiating more | |
210 // of the Chrome infrastructure than necessary, the GoogleURLTracker functions | |
211 // are carefully written so that many of the functions which take | |
212 // NavigationController* or infobars::InfoBarManager* do not actually | |
213 // dereference the | |
214 // objects, merely use them for comparisons and lookups, e.g. in |entry_map_|. | |
215 // This then allows the test code here to not create any of these objects, and | |
216 // instead supply "pointers" that are actually reinterpret_cast<>()ed magic | |
217 // numbers. Then we write the necessary stubs/hooks, here and in | |
218 // TestInfoBarDelegate above, to make everything continue to work. | |
219 // | |
220 // Technically, the C++98 spec defines the result of casting | |
221 // T* -> intptr_t -> T* to be an identity, but intptr_t -> T* -> intptr_t (what | |
222 // we use here) is "implementation-defined". Since I've never seen a compiler | |
223 // break this, though, and the result would simply be a failing test rather than | |
224 // a bug in Chrome, we'll use it anyway. | |
225 class GoogleURLTrackerTest : public testing::Test { | 192 class GoogleURLTrackerTest : public testing::Test { |
226 public: | |
227 // Called by TestInfoBarDelegate::Close(). | |
228 void OnInfoBarClosed(scoped_ptr<infobars::InfoBar> infobar, | |
229 infobars::InfoBarManager* infobar_manager); | |
230 | |
231 protected: | 193 protected: |
232 GoogleURLTrackerTest(); | 194 GoogleURLTrackerTest(); |
233 virtual ~GoogleURLTrackerTest(); | 195 virtual ~GoogleURLTrackerTest(); |
234 | 196 |
235 // testing::Test | 197 // testing::Test |
236 virtual void SetUp() OVERRIDE; | 198 virtual void SetUp() OVERRIDE; |
237 virtual void TearDown() OVERRIDE; | 199 virtual void TearDown() OVERRIDE; |
238 | 200 |
239 net::TestURLFetcher* GetFetcher(); | 201 net::TestURLFetcher* GetFetcher(); |
240 void MockSearchDomainCheckResponse(const std::string& domain); | 202 void MockSearchDomainCheckResponse(const std::string& domain); |
241 void RequestServerCheck(); | 203 void RequestServerCheck(); |
242 void FinishSleep(); | 204 void FinishSleep(); |
243 void NotifyIPAddressChanged(); | 205 void NotifyIPAddressChanged(); |
244 GURL fetched_google_url() const { | 206 GURL fetched_google_url() const { |
245 return google_url_tracker_->fetched_google_url(); | 207 return google_url_tracker_->fetched_google_url(); |
246 } | 208 } |
247 void set_google_url(const GURL& url) { | 209 void set_google_url(const GURL& url) { |
248 google_url_tracker_->google_url_ = url; | 210 google_url_tracker_->google_url_ = url; |
249 } | 211 } |
250 GURL google_url() const { return google_url_tracker_->google_url(); } | 212 GURL google_url() const { return google_url_tracker_->google_url(); } |
251 void SetLastPromptedGoogleURL(const GURL& url); | 213 void SetLastPromptedGoogleURL(const GURL& url); |
252 GURL GetLastPromptedGoogleURL(); | 214 GURL GetLastPromptedGoogleURL(); |
253 void SetNavigationPending(intptr_t unique_id, bool is_search); | 215 void SetNavigationPending(infobars::InfoBarManager* infobar_manager, |
254 void CommitNonSearch(intptr_t unique_id); | 216 bool is_search); |
255 void CommitSearch(intptr_t unique_id, const GURL& search_url); | 217 void CommitNonSearch(infobars::InfoBarManager* infobar_manager); |
256 void CloseTab(intptr_t unique_id); | 218 void CommitSearch(infobars::InfoBarManager* infobar_manager, |
257 GoogleURLTrackerMapEntry* GetMapEntry(intptr_t unique_id); | 219 const GURL& search_url); |
258 GoogleURLTrackerInfoBarDelegate* GetInfoBarDelegate(intptr_t unique_id); | 220 void CloseTab(infobars::InfoBarManager* infobar_manager); |
259 GoogleURLTrackerNavigationHelper* GetNavigationHelper(intptr_t unique_id); | 221 GoogleURLTrackerMapEntry* GetMapEntry( |
| 222 infobars::InfoBarManager* infobar_manager); |
| 223 GoogleURLTrackerInfoBarDelegate* GetInfoBarDelegate( |
| 224 infobars::InfoBarManager* infobar_manager); |
| 225 GoogleURLTrackerNavigationHelper* GetNavigationHelper( |
| 226 infobars::InfoBarManager* infobar_manager); |
260 void ExpectDefaultURLs() const; | 227 void ExpectDefaultURLs() const; |
261 void ExpectListeningForCommit(intptr_t unique_id, bool listening); | 228 void ExpectListeningForCommit(infobars::InfoBarManager* infobar_manager, |
| 229 bool listening); |
262 bool listener_notified() const { return listener_.notified(); } | 230 bool listener_notified() const { return listener_.notified(); } |
263 void clear_listener_notified() { listener_.clear_notified(); } | 231 void clear_listener_notified() { listener_.clear_notified(); } |
264 | 232 |
265 private: | 233 private: |
266 // Since |infobar_manager| is really a magic number rather than an actual | |
267 // object, we don't add the created infobar to it. Instead we will simulate | |
268 // any helper<->infobar interaction necessary. The returned object will be | |
269 // cleaned up in OnInfoBarClosed(). | |
270 infobars::InfoBar* CreateTestInfoBar( | |
271 infobars::InfoBarManager* infobar_manager, | |
272 GoogleURLTracker* google_url_tracker, | |
273 const GURL& search_url); | |
274 | |
275 // These are required by the TestURLFetchers GoogleURLTracker will create (see | 234 // These are required by the TestURLFetchers GoogleURLTracker will create (see |
276 // test_url_fetcher_factory.h). | 235 // test_url_fetcher_factory.h). |
277 content::TestBrowserThreadBundle thread_bundle_; | 236 content::TestBrowserThreadBundle thread_bundle_; |
| 237 |
278 // Creating this allows us to call | 238 // Creating this allows us to call |
279 // net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(). | 239 // net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(). |
280 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; | 240 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; |
281 net::TestURLFetcherFactory fetcher_factory_; | 241 net::TestURLFetcherFactory fetcher_factory_; |
282 GoogleURLTrackerClient* client_; | 242 GoogleURLTrackerClient* client_; |
283 TestingProfile profile_; | 243 TestingProfile profile_; |
284 scoped_ptr<GoogleURLTracker> google_url_tracker_; | 244 scoped_ptr<GoogleURLTracker> google_url_tracker_; |
285 TestCallbackListener listener_; | 245 TestCallbackListener listener_; |
286 // This tracks the different "tabs" a test has "opened", so we can close them | 246 // This tracks the different "tabs" a test has "opened", so we can close them |
287 // properly before shutting down |google_url_tracker_|, which expects that. | 247 // properly before shutting down |google_url_tracker_|, which expects that. |
288 std::set<int> unique_ids_seen_; | 248 std::set<infobars::InfoBarManager*> infobar_managers_seen_; |
289 }; | 249 }; |
290 | 250 |
291 void GoogleURLTrackerTest::OnInfoBarClosed( | |
292 scoped_ptr<infobars::InfoBar> infobar, | |
293 infobars::InfoBarManager* infobar_manager) { | |
294 // First, simulate the InfoBarManager firing INFOBAR_REMOVED. | |
295 // TODO(droger): Replace this flow with a call to the observer method once | |
296 // the map entry is observing InfoBarManager. crbug.com/373243 | |
297 infobars::InfoBar::RemovedDetails removed_details(infobar.get(), false); | |
298 GoogleURLTracker::EntryMap::const_iterator i = | |
299 google_url_tracker_->entry_map_.find(infobar_manager); | |
300 ASSERT_FALSE(i == google_url_tracker_->entry_map_.end()); | |
301 GoogleURLTrackerMapEntry* map_entry = i->second; | |
302 ASSERT_EQ(infobar->delegate(), map_entry->infobar_delegate()); | |
303 map_entry->Observe( | |
304 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, | |
305 content::Source<infobars::InfoBarManager>(infobar_manager), | |
306 content::Details<infobars::InfoBar::RemovedDetails>(&removed_details)); | |
307 | |
308 // Second, simulate the infobar container closing the infobar in response. | |
309 // This happens automatically as |infobar| goes out of scope. | |
310 } | |
311 | |
312 GoogleURLTrackerTest::GoogleURLTrackerTest() | 251 GoogleURLTrackerTest::GoogleURLTrackerTest() |
313 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) { | 252 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) { |
314 GoogleURLTrackerFactory::GetInstance()-> | 253 GoogleURLTrackerFactory::GetInstance()-> |
315 RegisterUserPrefsOnBrowserContextForTest(&profile_); | 254 RegisterUserPrefsOnBrowserContextForTest(&profile_); |
316 } | 255 } |
317 | 256 |
318 GoogleURLTrackerTest::~GoogleURLTrackerTest() { | 257 GoogleURLTrackerTest::~GoogleURLTrackerTest() { |
319 } | 258 } |
320 | 259 |
321 void GoogleURLTrackerTest::SetUp() { | 260 void GoogleURLTrackerTest::SetUp() { |
322 network_change_notifier_.reset(net::NetworkChangeNotifier::CreateMock()); | 261 network_change_notifier_.reset(net::NetworkChangeNotifier::CreateMock()); |
323 // Ownership is passed to google_url_tracker_, but a weak pointer is kept; | 262 // Ownership is passed to google_url_tracker_, but a weak pointer is kept; |
324 // this is safe since GoogleURLTracker keeps the client for its lifetime. | 263 // this is safe since GoogleURLTracker keeps the client for its lifetime. |
325 client_ = new TestGoogleURLTrackerClient(); | 264 client_ = new TestGoogleURLTrackerClient(); |
326 scoped_ptr<GoogleURLTrackerClient> client(client_); | 265 scoped_ptr<GoogleURLTrackerClient> client(client_); |
327 google_url_tracker_.reset(new GoogleURLTracker( | 266 google_url_tracker_.reset(new GoogleURLTracker( |
328 &profile_, client.Pass(), GoogleURLTracker::UNIT_TEST_MODE)); | 267 &profile_, client.Pass(), GoogleURLTracker::UNIT_TEST_MODE)); |
329 google_url_tracker_->infobar_creator_ = base::Bind( | |
330 &GoogleURLTrackerTest::CreateTestInfoBar, base::Unretained(this)); | |
331 } | 268 } |
332 | 269 |
333 void GoogleURLTrackerTest::TearDown() { | 270 void GoogleURLTrackerTest::TearDown() { |
334 while (!unique_ids_seen_.empty()) | 271 while (!infobar_managers_seen_.empty()) |
335 CloseTab(*unique_ids_seen_.begin()); | 272 CloseTab(*infobar_managers_seen_.begin()); |
336 google_url_tracker_->Shutdown(); | 273 google_url_tracker_->Shutdown(); |
337 } | 274 } |
338 | 275 |
339 net::TestURLFetcher* GoogleURLTrackerTest::GetFetcher() { | 276 net::TestURLFetcher* GoogleURLTrackerTest::GetFetcher() { |
340 // This will return the last fetcher created. If no fetchers have been | 277 // This will return the last fetcher created. If no fetchers have been |
341 // created, we'll pass GetFetcherByID() "-1", and it will return NULL. | 278 // created, we'll pass GetFetcherByID() "-1", and it will return NULL. |
342 return fetcher_factory_.GetFetcherByID(google_url_tracker_->fetcher_id_ - 1); | 279 return fetcher_factory_.GetFetcherByID(google_url_tracker_->fetcher_id_ - 1); |
343 } | 280 } |
344 | 281 |
345 void GoogleURLTrackerTest::MockSearchDomainCheckResponse( | 282 void GoogleURLTrackerTest::MockSearchDomainCheckResponse( |
(...skipping 27 matching lines...) Expand all Loading... |
373 } | 310 } |
374 | 311 |
375 void GoogleURLTrackerTest::SetLastPromptedGoogleURL(const GURL& url) { | 312 void GoogleURLTrackerTest::SetLastPromptedGoogleURL(const GURL& url) { |
376 profile_.GetPrefs()->SetString(prefs::kLastPromptedGoogleURL, url.spec()); | 313 profile_.GetPrefs()->SetString(prefs::kLastPromptedGoogleURL, url.spec()); |
377 } | 314 } |
378 | 315 |
379 GURL GoogleURLTrackerTest::GetLastPromptedGoogleURL() { | 316 GURL GoogleURLTrackerTest::GetLastPromptedGoogleURL() { |
380 return GURL(profile_.GetPrefs()->GetString(prefs::kLastPromptedGoogleURL)); | 317 return GURL(profile_.GetPrefs()->GetString(prefs::kLastPromptedGoogleURL)); |
381 } | 318 } |
382 | 319 |
383 void GoogleURLTrackerTest::SetNavigationPending(intptr_t unique_id, | 320 void GoogleURLTrackerTest::SetNavigationPending( |
384 bool is_search) { | 321 infobars::InfoBarManager* infobar_manager, |
| 322 bool is_search) { |
385 if (is_search) { | 323 if (is_search) { |
386 google_url_tracker_->SearchCommitted(); | 324 google_url_tracker_->SearchCommitted(); |
387 // Note that the call above might not have actually registered a listener | 325 // Note that the call above might not have actually registered a listener |
388 // for navigation starts if the searchdomaincheck response was bogus. | 326 // for navigation starts if the searchdomaincheck response was bogus. |
389 } | 327 } |
390 unique_ids_seen_.insert(unique_id); | 328 infobar_managers_seen_.insert(infobar_manager); |
391 if (client_->IsListeningForNavigationStart()) { | 329 if (client_->IsListeningForNavigationStart()) { |
392 google_url_tracker_->OnNavigationPending( | 330 google_url_tracker_->OnNavigationPending( |
393 scoped_ptr<GoogleURLTrackerNavigationHelper>( | 331 scoped_ptr<GoogleURLTrackerNavigationHelper>( |
394 new TestGoogleURLTrackerNavigationHelper( | 332 new TestGoogleURLTrackerNavigationHelper( |
395 google_url_tracker_.get())), | 333 google_url_tracker_.get())), |
396 reinterpret_cast<infobars::InfoBarManager*>(unique_id), | 334 infobar_manager, |
397 unique_id); | 335 infobar_manager->GetActiveEntryID()); |
398 } | 336 } |
399 } | 337 } |
400 | 338 |
401 void GoogleURLTrackerTest::CommitNonSearch(intptr_t unique_id) { | 339 void GoogleURLTrackerTest::CommitNonSearch( |
402 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); | 340 infobars::InfoBarManager* infobar_manager) { |
| 341 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager); |
403 if (!map_entry) | 342 if (!map_entry) |
404 return; | 343 return; |
405 | 344 |
406 ExpectListeningForCommit(unique_id, false); | 345 ExpectListeningForCommit(infobar_manager, false); |
407 | 346 |
408 // The infobar should be showing; otherwise the pending non-search should | 347 // The infobar should be showing; otherwise the pending non-search should |
409 // have closed it. | 348 // have closed it. |
410 ASSERT_TRUE(map_entry->has_infobar_delegate()); | 349 ASSERT_TRUE(map_entry->has_infobar_delegate()); |
411 | 350 |
412 // The pending_id should have been reset to 0 when the non-search became | 351 // The pending_id should have been reset to 0 when the non-search became |
413 // pending. | 352 // pending. |
414 EXPECT_EQ(0, map_entry->infobar_delegate()->pending_id()); | 353 EXPECT_EQ(0, map_entry->infobar_delegate()->pending_id()); |
415 | 354 |
416 // Committing the navigation would close the infobar. | 355 // Committing the navigation would close the infobar. |
417 map_entry->infobar_delegate()->Close(false); | 356 map_entry->infobar_delegate()->Close(false); |
418 } | 357 } |
419 | 358 |
420 void GoogleURLTrackerTest::CommitSearch(intptr_t unique_id, | 359 void GoogleURLTrackerTest::CommitSearch( |
421 const GURL& search_url) { | 360 infobars::InfoBarManager* infobar_manager, |
| 361 const GURL& search_url) { |
422 DCHECK(search_url.is_valid()); | 362 DCHECK(search_url.is_valid()); |
423 GoogleURLTrackerNavigationHelper* nav_helper = GetNavigationHelper(unique_id); | 363 GoogleURLTrackerNavigationHelper* nav_helper = |
| 364 GetNavigationHelper(infobar_manager); |
424 if (nav_helper && nav_helper->IsListeningForNavigationCommit()) { | 365 if (nav_helper && nav_helper->IsListeningForNavigationCommit()) { |
425 google_url_tracker_->OnNavigationCommitted( | 366 google_url_tracker_->OnNavigationCommitted(infobar_manager, search_url); |
426 reinterpret_cast<infobars::InfoBarManager*>(unique_id), search_url); | |
427 } | 367 } |
428 } | 368 } |
429 | 369 |
430 void GoogleURLTrackerTest::CloseTab(intptr_t unique_id) { | 370 void GoogleURLTrackerTest::CloseTab(infobars::InfoBarManager* infobar_manager) { |
431 unique_ids_seen_.erase(unique_id); | 371 infobar_managers_seen_.erase(infobar_manager); |
432 GoogleURLTrackerNavigationHelper* nav_helper = GetNavigationHelper(unique_id); | 372 GoogleURLTrackerNavigationHelper* nav_helper = |
| 373 GetNavigationHelper(infobar_manager); |
433 if (nav_helper && nav_helper->IsListeningForTabDestruction()) { | 374 if (nav_helper && nav_helper->IsListeningForTabDestruction()) { |
434 google_url_tracker_->OnTabClosed(nav_helper); | 375 google_url_tracker_->OnTabClosed(nav_helper); |
435 } else { | 376 } else { |
436 // Closing a tab with an infobar showing would close the infobar. | 377 // Closing a tab with an infobar showing would close the infobar. |
437 GoogleURLTrackerInfoBarDelegate* delegate = GetInfoBarDelegate(unique_id); | 378 GoogleURLTrackerInfoBarDelegate* delegate = |
| 379 GetInfoBarDelegate(infobar_manager); |
438 if (delegate) | 380 if (delegate) |
439 delegate->Close(false); | 381 delegate->Close(false); |
440 } | 382 } |
441 } | 383 } |
442 | 384 |
443 GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry( | 385 GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry( |
444 intptr_t unique_id) { | 386 infobars::InfoBarManager* infobar_manager) { |
445 GoogleURLTracker::EntryMap::const_iterator i = | 387 GoogleURLTracker::EntryMap::const_iterator i = |
446 google_url_tracker_->entry_map_.find( | 388 google_url_tracker_->entry_map_.find(infobar_manager); |
447 reinterpret_cast<infobars::InfoBarManager*>(unique_id)); | |
448 return (i == google_url_tracker_->entry_map_.end()) ? NULL : i->second; | 389 return (i == google_url_tracker_->entry_map_.end()) ? NULL : i->second; |
449 } | 390 } |
450 | 391 |
451 GoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::GetInfoBarDelegate( | 392 GoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::GetInfoBarDelegate( |
452 intptr_t unique_id) { | 393 infobars::InfoBarManager* infobar_manager) { |
453 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); | 394 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager); |
454 return map_entry ? map_entry->infobar_delegate() : NULL; | 395 return map_entry ? map_entry->infobar_delegate() : NULL; |
455 } | 396 } |
456 | 397 |
457 GoogleURLTrackerNavigationHelper* GoogleURLTrackerTest::GetNavigationHelper( | 398 GoogleURLTrackerNavigationHelper* GoogleURLTrackerTest::GetNavigationHelper( |
458 intptr_t unique_id) { | 399 infobars::InfoBarManager* infobar_manager) { |
459 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); | 400 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager); |
460 return map_entry ? map_entry->navigation_helper() : NULL; | 401 return map_entry ? map_entry->navigation_helper() : NULL; |
461 } | 402 } |
462 | 403 |
463 void GoogleURLTrackerTest::ExpectDefaultURLs() const { | 404 void GoogleURLTrackerTest::ExpectDefaultURLs() const { |
464 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 405 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
465 EXPECT_EQ(GURL(), fetched_google_url()); | 406 EXPECT_EQ(GURL(), fetched_google_url()); |
466 } | 407 } |
467 | 408 |
468 void GoogleURLTrackerTest::ExpectListeningForCommit(intptr_t unique_id, | 409 void GoogleURLTrackerTest::ExpectListeningForCommit( |
469 bool listening) { | 410 infobars::InfoBarManager* infobar_manager, |
470 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(unique_id); | 411 bool listening) { |
| 412 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager); |
471 if (map_entry) { | 413 if (map_entry) { |
472 EXPECT_EQ(listening, | 414 EXPECT_EQ(listening, |
473 map_entry->navigation_helper()->IsListeningForNavigationCommit()); | 415 map_entry->navigation_helper()->IsListeningForNavigationCommit()); |
474 } else { | 416 } else { |
475 EXPECT_FALSE(listening); | 417 EXPECT_FALSE(listening); |
476 } | 418 } |
477 } | 419 } |
478 | 420 |
479 infobars::InfoBar* GoogleURLTrackerTest::CreateTestInfoBar( | |
480 infobars::InfoBarManager* infobar_manager, | |
481 GoogleURLTracker* google_url_tracker, | |
482 const GURL& search_url) { | |
483 return TestInfoBarDelegate::Create( | |
484 this, infobar_manager, google_url_tracker, search_url); | |
485 } | |
486 | |
487 | |
488 // TestInfoBarDelegate -------------------------------------------------------- | |
489 | |
490 namespace { | |
491 | |
492 // static | |
493 infobars::InfoBar* TestInfoBarDelegate::Create( | |
494 GoogleURLTrackerTest* test_harness, | |
495 infobars::InfoBarManager* infobar_manager, | |
496 GoogleURLTracker* google_url_tracker, | |
497 const GURL& search_url) { | |
498 return ConfirmInfoBarDelegate::CreateInfoBar( | |
499 scoped_ptr<ConfirmInfoBarDelegate>(new TestInfoBarDelegate( | |
500 test_harness, | |
501 infobar_manager, | |
502 google_url_tracker, | |
503 search_url))).release(); | |
504 } | |
505 | |
506 TestInfoBarDelegate::TestInfoBarDelegate( | |
507 GoogleURLTrackerTest* test_harness, | |
508 infobars::InfoBarManager* infobar_manager, | |
509 GoogleURLTracker* google_url_tracker, | |
510 const GURL& search_url) | |
511 : GoogleURLTrackerInfoBarDelegate(google_url_tracker, | |
512 search_url), | |
513 test_harness_(test_harness), | |
514 infobar_manager_(infobar_manager) { | |
515 } | |
516 | |
517 TestInfoBarDelegate::~TestInfoBarDelegate() { | |
518 } | |
519 | |
520 void TestInfoBarDelegate::Update(const GURL& search_url) { | |
521 set_search_url(search_url); | |
522 set_pending_id(0); | |
523 } | |
524 | |
525 void TestInfoBarDelegate::Close(bool redo_search) { | |
526 test_harness_->OnInfoBarClosed(scoped_ptr<infobars::InfoBar>(infobar()), | |
527 infobar_manager_); | |
528 // WARNING: At this point |this| has been deleted! | |
529 } | |
530 | |
531 } // namespace | |
532 | |
533 | |
534 // Tests ---------------------------------------------------------------------- | 421 // Tests ---------------------------------------------------------------------- |
535 | 422 |
536 TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) { | 423 TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) { |
537 ExpectDefaultURLs(); | 424 ExpectDefaultURLs(); |
538 FinishSleep(); | 425 FinishSleep(); |
539 // No one called RequestServerCheck() so nothing should have happened. | 426 // No one called RequestServerCheck() so nothing should have happened. |
540 EXPECT_FALSE(GetFetcher()); | 427 EXPECT_FALSE(GetFetcher()); |
541 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 428 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
542 ExpectDefaultURLs(); | 429 ExpectDefaultURLs(); |
543 EXPECT_FALSE(listener_notified()); | 430 EXPECT_FALSE(listener_notified()); |
(...skipping 24 matching lines...) Expand all Loading... |
568 FinishSleep(); | 455 FinishSleep(); |
569 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 456 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
570 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 457 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
571 // GoogleURL should not be updated, because the fetched and prompted URLs | 458 // GoogleURL should not be updated, because the fetched and prompted URLs |
572 // match. | 459 // match. |
573 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 460 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
574 EXPECT_FALSE(listener_notified()); | 461 EXPECT_FALSE(listener_notified()); |
575 } | 462 } |
576 | 463 |
577 TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { | 464 TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) { |
| 465 TestInfoBarManager infobar_manager(1); |
578 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 466 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
579 | 467 |
580 RequestServerCheck(); | 468 RequestServerCheck(); |
581 EXPECT_FALSE(GetFetcher()); | 469 EXPECT_FALSE(GetFetcher()); |
582 ExpectDefaultURLs(); | 470 ExpectDefaultURLs(); |
583 EXPECT_FALSE(listener_notified()); | 471 EXPECT_FALSE(listener_notified()); |
584 | 472 |
585 // Old-style domain string. | 473 // Old-style domain string. |
586 FinishSleep(); | 474 FinishSleep(); |
587 MockSearchDomainCheckResponse(".google.co.in"); | 475 MockSearchDomainCheckResponse(".google.co.in"); |
588 EXPECT_EQ(GURL(), fetched_google_url()); | 476 EXPECT_EQ(GURL(), fetched_google_url()); |
589 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 477 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
590 EXPECT_FALSE(listener_notified()); | 478 EXPECT_FALSE(listener_notified()); |
591 SetNavigationPending(1, true); | 479 SetNavigationPending(&infobar_manager, true); |
592 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 480 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
593 EXPECT_TRUE(GetMapEntry(1) == NULL); | 481 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
594 | 482 |
595 // Bad subdomain. | 483 // Bad subdomain. |
596 NotifyIPAddressChanged(); | 484 NotifyIPAddressChanged(); |
597 MockSearchDomainCheckResponse("http://mail.google.com/"); | 485 MockSearchDomainCheckResponse("http://mail.google.com/"); |
598 EXPECT_EQ(GURL(), fetched_google_url()); | 486 EXPECT_EQ(GURL(), fetched_google_url()); |
599 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 487 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
600 EXPECT_FALSE(listener_notified()); | 488 EXPECT_FALSE(listener_notified()); |
601 SetNavigationPending(1, true); | 489 SetNavigationPending(&infobar_manager, true); |
602 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 490 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
603 EXPECT_TRUE(GetMapEntry(1) == NULL); | 491 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
604 | 492 |
605 // Non-empty path. | 493 // Non-empty path. |
606 NotifyIPAddressChanged(); | 494 NotifyIPAddressChanged(); |
607 MockSearchDomainCheckResponse("http://www.google.com/search"); | 495 MockSearchDomainCheckResponse("http://www.google.com/search"); |
608 EXPECT_EQ(GURL(), fetched_google_url()); | 496 EXPECT_EQ(GURL(), fetched_google_url()); |
609 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 497 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
610 EXPECT_FALSE(listener_notified()); | 498 EXPECT_FALSE(listener_notified()); |
611 SetNavigationPending(1, true); | 499 SetNavigationPending(&infobar_manager, true); |
612 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 500 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
613 EXPECT_TRUE(GetMapEntry(1) == NULL); | 501 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
614 | 502 |
615 // Non-empty query. | 503 // Non-empty query. |
616 NotifyIPAddressChanged(); | 504 NotifyIPAddressChanged(); |
617 MockSearchDomainCheckResponse("http://www.google.com/?q=foo"); | 505 MockSearchDomainCheckResponse("http://www.google.com/?q=foo"); |
618 EXPECT_EQ(GURL(), fetched_google_url()); | 506 EXPECT_EQ(GURL(), fetched_google_url()); |
619 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 507 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
620 EXPECT_FALSE(listener_notified()); | 508 EXPECT_FALSE(listener_notified()); |
621 SetNavigationPending(1, true); | 509 SetNavigationPending(&infobar_manager, true); |
622 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 510 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
623 EXPECT_TRUE(GetMapEntry(1) == NULL); | 511 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
624 | 512 |
625 // Non-empty ref. | 513 // Non-empty ref. |
626 NotifyIPAddressChanged(); | 514 NotifyIPAddressChanged(); |
627 MockSearchDomainCheckResponse("http://www.google.com/#anchor"); | 515 MockSearchDomainCheckResponse("http://www.google.com/#anchor"); |
628 EXPECT_EQ(GURL(), fetched_google_url()); | 516 EXPECT_EQ(GURL(), fetched_google_url()); |
629 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 517 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
630 EXPECT_FALSE(listener_notified()); | 518 EXPECT_FALSE(listener_notified()); |
631 SetNavigationPending(1, true); | 519 SetNavigationPending(&infobar_manager, true); |
632 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 520 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
633 EXPECT_TRUE(GetMapEntry(1) == NULL); | 521 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
634 | 522 |
635 // Complete garbage. | 523 // Complete garbage. |
636 NotifyIPAddressChanged(); | 524 NotifyIPAddressChanged(); |
637 MockSearchDomainCheckResponse("HJ)*qF)_*&@f1"); | 525 MockSearchDomainCheckResponse("HJ)*qF)_*&@f1"); |
638 EXPECT_EQ(GURL(), fetched_google_url()); | 526 EXPECT_EQ(GURL(), fetched_google_url()); |
639 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 527 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
640 EXPECT_FALSE(listener_notified()); | 528 EXPECT_FALSE(listener_notified()); |
641 SetNavigationPending(1, true); | 529 SetNavigationPending(&infobar_manager, true); |
642 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 530 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
643 EXPECT_TRUE(GetMapEntry(1) == NULL); | 531 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
644 } | 532 } |
645 | 533 |
646 TEST_F(GoogleURLTrackerTest, UpdatePromptedURLOnReturnToPreviousLocation) { | 534 TEST_F(GoogleURLTrackerTest, UpdatePromptedURLOnReturnToPreviousLocation) { |
647 SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/")); | 535 SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/")); |
648 set_google_url(GURL("http://www.google.co.uk/")); | 536 set_google_url(GURL("http://www.google.co.uk/")); |
649 RequestServerCheck(); | 537 RequestServerCheck(); |
650 FinishSleep(); | 538 FinishSleep(); |
651 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 539 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
652 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 540 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
653 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 541 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 RequestServerCheck(); | 622 RequestServerCheck(); |
735 // The second request should be ignored. | 623 // The second request should be ignored. |
736 EXPECT_FALSE(GetFetcher()); | 624 EXPECT_FALSE(GetFetcher()); |
737 MockSearchDomainCheckResponse("http://www.google.co.in/"); | 625 MockSearchDomainCheckResponse("http://www.google.co.in/"); |
738 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 626 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
739 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 627 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
740 EXPECT_FALSE(listener_notified()); | 628 EXPECT_FALSE(listener_notified()); |
741 } | 629 } |
742 | 630 |
743 TEST_F(GoogleURLTrackerTest, SearchingDoesNothingIfNoNeedToPrompt) { | 631 TEST_F(GoogleURLTrackerTest, SearchingDoesNothingIfNoNeedToPrompt) { |
| 632 TestInfoBarManager infobar_manager(1); |
744 RequestServerCheck(); | 633 RequestServerCheck(); |
745 FinishSleep(); | 634 FinishSleep(); |
746 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 635 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
747 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 636 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
748 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 637 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
749 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 638 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
750 EXPECT_TRUE(listener_notified()); | 639 EXPECT_TRUE(listener_notified()); |
751 clear_listener_notified(); | 640 clear_listener_notified(); |
752 | 641 |
753 SetNavigationPending(1, true); | 642 SetNavigationPending(&infobar_manager, true); |
754 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 643 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
755 EXPECT_TRUE(GetMapEntry(1) == NULL); | 644 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
756 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 645 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
757 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); | 646 EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url()); |
758 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 647 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
759 EXPECT_FALSE(listener_notified()); | 648 EXPECT_FALSE(listener_notified()); |
760 } | 649 } |
761 | 650 |
762 TEST_F(GoogleURLTrackerTest, TabClosedOnPendingSearch) { | 651 TEST_F(GoogleURLTrackerTest, TabClosedOnPendingSearch) { |
| 652 TestInfoBarManager infobar_manager(1); |
763 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 653 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
764 RequestServerCheck(); | 654 RequestServerCheck(); |
765 FinishSleep(); | 655 FinishSleep(); |
766 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 656 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
767 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 657 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
768 EXPECT_EQ(GURL("http://www.google.co.jp/"), fetched_google_url()); | 658 EXPECT_EQ(GURL("http://www.google.co.jp/"), fetched_google_url()); |
769 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 659 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
770 EXPECT_FALSE(listener_notified()); | 660 EXPECT_FALSE(listener_notified()); |
771 | 661 |
772 SetNavigationPending(1, true); | 662 SetNavigationPending(&infobar_manager, true); |
773 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(1); | 663 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager); |
774 ASSERT_FALSE(map_entry == NULL); | 664 ASSERT_FALSE(map_entry == NULL); |
775 EXPECT_FALSE(map_entry->has_infobar_delegate()); | 665 EXPECT_FALSE(map_entry->has_infobar_delegate()); |
776 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 666 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
777 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 667 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
778 EXPECT_FALSE(listener_notified()); | 668 EXPECT_FALSE(listener_notified()); |
779 | 669 |
780 CloseTab(1); | 670 CloseTab(&infobar_manager); |
781 EXPECT_TRUE(GetMapEntry(1) == NULL); | 671 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
782 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 672 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
783 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 673 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
784 EXPECT_FALSE(listener_notified()); | 674 EXPECT_FALSE(listener_notified()); |
785 } | 675 } |
786 | 676 |
787 TEST_F(GoogleURLTrackerTest, TabClosedOnCommittedSearch) { | 677 TEST_F(GoogleURLTrackerTest, TabClosedOnCommittedSearch) { |
| 678 TestInfoBarManager infobar_manager(1); |
788 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 679 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
789 RequestServerCheck(); | 680 RequestServerCheck(); |
790 FinishSleep(); | 681 FinishSleep(); |
791 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 682 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
792 | 683 |
793 SetNavigationPending(1, true); | 684 SetNavigationPending(&infobar_manager, true); |
794 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 685 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
795 EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); | 686 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); |
796 | 687 |
797 CloseTab(1); | 688 CloseTab(&infobar_manager); |
798 EXPECT_TRUE(GetMapEntry(1) == NULL); | 689 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
799 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 690 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
800 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 691 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
801 EXPECT_FALSE(listener_notified()); | 692 EXPECT_FALSE(listener_notified()); |
802 } | 693 } |
803 | 694 |
804 TEST_F(GoogleURLTrackerTest, InfoBarClosed) { | 695 TEST_F(GoogleURLTrackerTest, InfoBarClosed) { |
| 696 TestInfoBarManager infobar_manager(1); |
805 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 697 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
806 RequestServerCheck(); | 698 RequestServerCheck(); |
807 FinishSleep(); | 699 FinishSleep(); |
808 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 700 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
809 | 701 |
810 SetNavigationPending(1, true); | 702 SetNavigationPending(&infobar_manager, true); |
811 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 703 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
812 GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBarDelegate(1); | 704 GoogleURLTrackerInfoBarDelegate* infobar = |
| 705 GetInfoBarDelegate(&infobar_manager); |
813 ASSERT_FALSE(infobar == NULL); | 706 ASSERT_FALSE(infobar == NULL); |
814 | 707 |
815 infobar->Close(false); | 708 infobar->Close(false); |
816 EXPECT_TRUE(GetMapEntry(1) == NULL); | 709 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
817 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 710 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
818 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 711 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
819 EXPECT_FALSE(listener_notified()); | 712 EXPECT_FALSE(listener_notified()); |
820 } | 713 } |
821 | 714 |
822 TEST_F(GoogleURLTrackerTest, InfoBarRefused) { | 715 TEST_F(GoogleURLTrackerTest, InfoBarRefused) { |
| 716 TestInfoBarManager infobar_manager(1); |
823 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 717 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
824 RequestServerCheck(); | 718 RequestServerCheck(); |
825 FinishSleep(); | 719 FinishSleep(); |
826 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 720 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
827 | 721 |
828 SetNavigationPending(1, true); | 722 SetNavigationPending(&infobar_manager, true); |
829 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 723 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
830 GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBarDelegate(1); | 724 GoogleURLTrackerInfoBarDelegate* infobar = |
| 725 GetInfoBarDelegate(&infobar_manager); |
831 ASSERT_FALSE(infobar == NULL); | 726 ASSERT_FALSE(infobar == NULL); |
832 | 727 |
833 infobar->Cancel(); | 728 infobar->Cancel(); |
834 EXPECT_TRUE(GetMapEntry(1) == NULL); | 729 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
835 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 730 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
836 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); | 731 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); |
837 EXPECT_FALSE(listener_notified()); | 732 EXPECT_FALSE(listener_notified()); |
838 } | 733 } |
839 | 734 |
840 TEST_F(GoogleURLTrackerTest, InfoBarAccepted) { | 735 TEST_F(GoogleURLTrackerTest, InfoBarAccepted) { |
| 736 TestInfoBarManager infobar_manager(1); |
841 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 737 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
842 RequestServerCheck(); | 738 RequestServerCheck(); |
843 FinishSleep(); | 739 FinishSleep(); |
844 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 740 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
845 | 741 |
846 SetNavigationPending(1, true); | 742 SetNavigationPending(&infobar_manager, true); |
847 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 743 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
848 GoogleURLTrackerInfoBarDelegate* infobar = GetInfoBarDelegate(1); | 744 GoogleURLTrackerInfoBarDelegate* infobar = |
| 745 GetInfoBarDelegate(&infobar_manager); |
849 ASSERT_FALSE(infobar == NULL); | 746 ASSERT_FALSE(infobar == NULL); |
850 | 747 |
851 infobar->Accept(); | 748 infobar->Accept(); |
852 EXPECT_TRUE(GetMapEntry(1) == NULL); | 749 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
853 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url()); | 750 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url()); |
854 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); | 751 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); |
855 EXPECT_TRUE(listener_notified()); | 752 EXPECT_TRUE(listener_notified()); |
856 } | 753 } |
857 | 754 |
858 TEST_F(GoogleURLTrackerTest, FetchesCanAutomaticallyCloseInfoBars) { | 755 TEST_F(GoogleURLTrackerTest, FetchesCanAutomaticallyCloseInfoBars) { |
| 756 TestInfoBarManager infobar_manager(1); |
859 RequestServerCheck(); | 757 RequestServerCheck(); |
860 FinishSleep(); | 758 FinishSleep(); |
861 MockSearchDomainCheckResponse(google_url().spec()); | 759 MockSearchDomainCheckResponse(google_url().spec()); |
862 | 760 |
863 // Re-fetching the accepted URL after showing an infobar for another URL | 761 // Re-fetching the accepted URL after showing an infobar for another URL |
864 // should close the infobar. | 762 // should close the infobar. |
865 NotifyIPAddressChanged(); | 763 NotifyIPAddressChanged(); |
866 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 764 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
867 SetNavigationPending(1, true); | 765 SetNavigationPending(&infobar_manager, true); |
868 CommitSearch(1, GURL("http://www.google.com/search?q=test")); | 766 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); |
869 EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); | 767 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); |
870 NotifyIPAddressChanged(); | 768 NotifyIPAddressChanged(); |
871 MockSearchDomainCheckResponse(google_url().spec()); | 769 MockSearchDomainCheckResponse(google_url().spec()); |
872 EXPECT_EQ(google_url(), GetLastPromptedGoogleURL()); | 770 EXPECT_EQ(google_url(), GetLastPromptedGoogleURL()); |
873 EXPECT_TRUE(GetMapEntry(1) == NULL); | 771 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
874 | 772 |
875 // As should fetching a URL that differs from the accepted only by the scheme. | 773 // As should fetching a URL that differs from the accepted only by the scheme. |
876 NotifyIPAddressChanged(); | 774 NotifyIPAddressChanged(); |
877 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 775 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
878 SetNavigationPending(1, true); | 776 SetNavigationPending(&infobar_manager, true); |
879 CommitSearch(1, GURL("http://www.google.com/search?q=test")); | 777 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); |
880 EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); | 778 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); |
881 NotifyIPAddressChanged(); | 779 NotifyIPAddressChanged(); |
882 url::Replacements<char> replacements; | 780 url::Replacements<char> replacements; |
883 const std::string& scheme("https"); | 781 const std::string& scheme("https"); |
884 replacements.SetScheme(scheme.data(), url::Component(0, scheme.length())); | 782 replacements.SetScheme(scheme.data(), url::Component(0, scheme.length())); |
885 GURL new_google_url(google_url().ReplaceComponents(replacements)); | 783 GURL new_google_url(google_url().ReplaceComponents(replacements)); |
886 MockSearchDomainCheckResponse(new_google_url.spec()); | 784 MockSearchDomainCheckResponse(new_google_url.spec()); |
887 EXPECT_EQ(new_google_url, GetLastPromptedGoogleURL()); | 785 EXPECT_EQ(new_google_url, GetLastPromptedGoogleURL()); |
888 EXPECT_TRUE(GetMapEntry(1) == NULL); | 786 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
889 | 787 |
890 // As should re-fetching the last prompted URL. | 788 // As should re-fetching the last prompted URL. |
891 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 789 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
892 NotifyIPAddressChanged(); | 790 NotifyIPAddressChanged(); |
893 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 791 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
894 SetNavigationPending(1, true); | 792 SetNavigationPending(&infobar_manager, true); |
895 CommitSearch(1, GURL("http://www.google.com/search?q=test")); | 793 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); |
896 EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); | 794 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); |
897 NotifyIPAddressChanged(); | 795 NotifyIPAddressChanged(); |
898 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 796 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
899 EXPECT_EQ(new_google_url, google_url()); | 797 EXPECT_EQ(new_google_url, google_url()); |
900 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 798 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
901 EXPECT_TRUE(GetMapEntry(1) == NULL); | 799 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
902 | 800 |
903 // And one that differs from the last prompted URL only by the scheme. | 801 // And one that differs from the last prompted URL only by the scheme. |
904 NotifyIPAddressChanged(); | 802 NotifyIPAddressChanged(); |
905 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 803 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
906 SetNavigationPending(1, true); | 804 SetNavigationPending(&infobar_manager, true); |
907 CommitSearch(1, GURL("http://www.google.com/search?q=test")); | 805 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); |
908 EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); | 806 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); |
909 NotifyIPAddressChanged(); | 807 NotifyIPAddressChanged(); |
910 MockSearchDomainCheckResponse("https://www.google.co.uk/"); | 808 MockSearchDomainCheckResponse("https://www.google.co.uk/"); |
911 EXPECT_EQ(new_google_url, google_url()); | 809 EXPECT_EQ(new_google_url, google_url()); |
912 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 810 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
913 EXPECT_TRUE(GetMapEntry(1) == NULL); | 811 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
914 | 812 |
915 // And fetching a different URL entirely. | 813 // And fetching a different URL entirely. |
916 NotifyIPAddressChanged(); | 814 NotifyIPAddressChanged(); |
917 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 815 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
918 SetNavigationPending(1, true); | 816 SetNavigationPending(&infobar_manager, true); |
919 CommitSearch(1, GURL("http://www.google.com/search?q=test")); | 817 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); |
920 EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); | 818 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); |
921 NotifyIPAddressChanged(); | 819 NotifyIPAddressChanged(); |
922 MockSearchDomainCheckResponse("https://www.google.co.in/"); | 820 MockSearchDomainCheckResponse("https://www.google.co.in/"); |
923 EXPECT_EQ(new_google_url, google_url()); | 821 EXPECT_EQ(new_google_url, google_url()); |
924 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 822 EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
925 EXPECT_TRUE(GetMapEntry(1) == NULL); | 823 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
926 } | 824 } |
927 | 825 |
928 TEST_F(GoogleURLTrackerTest, ResetInfoBarGoogleURLs) { | 826 TEST_F(GoogleURLTrackerTest, ResetInfoBarGoogleURLs) { |
| 827 TestInfoBarManager infobar_manager(1); |
929 RequestServerCheck(); | 828 RequestServerCheck(); |
930 FinishSleep(); | 829 FinishSleep(); |
931 MockSearchDomainCheckResponse(google_url().spec()); | 830 MockSearchDomainCheckResponse(google_url().spec()); |
932 | 831 |
933 NotifyIPAddressChanged(); | 832 NotifyIPAddressChanged(); |
934 MockSearchDomainCheckResponse("http://www.google.co.uk/"); | 833 MockSearchDomainCheckResponse("http://www.google.co.uk/"); |
935 SetNavigationPending(1, true); | 834 SetNavigationPending(&infobar_manager, true); |
936 CommitSearch(1, GURL("http://www.google.com/search?q=test")); | 835 CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test")); |
937 GoogleURLTrackerInfoBarDelegate* delegate = GetInfoBarDelegate(1); | 836 GoogleURLTrackerInfoBarDelegate* delegate = |
| 837 GetInfoBarDelegate(&infobar_manager); |
938 ASSERT_FALSE(delegate == NULL); | 838 ASSERT_FALSE(delegate == NULL); |
939 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); | 839 EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url()); |
940 | 840 |
941 // If while an infobar is showing we fetch a new URL that differs from the | 841 // If while an infobar is showing we fetch a new URL that differs from the |
942 // infobar's only by scheme, the infobar should stay showing. | 842 // infobar's only by scheme, the infobar should stay showing. |
943 NotifyIPAddressChanged(); | 843 NotifyIPAddressChanged(); |
944 MockSearchDomainCheckResponse("https://www.google.co.uk/"); | 844 MockSearchDomainCheckResponse("https://www.google.co.uk/"); |
945 EXPECT_EQ(delegate, GetInfoBarDelegate(1)); | 845 EXPECT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); |
946 EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url()); | 846 EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url()); |
947 } | 847 } |
948 | 848 |
949 TEST_F(GoogleURLTrackerTest, NavigationsAfterPendingSearch) { | 849 TEST_F(GoogleURLTrackerTest, NavigationsAfterPendingSearch) { |
| 850 TestInfoBarManager infobar_manager(1); |
950 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 851 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
951 RequestServerCheck(); | 852 RequestServerCheck(); |
952 FinishSleep(); | 853 FinishSleep(); |
953 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 854 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
954 | 855 |
955 // A pending non-search after a pending search should delete the map entry. | 856 // A pending non-search after a pending search should delete the map entry. |
956 SetNavigationPending(1, true); | 857 SetNavigationPending(&infobar_manager, true); |
957 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(1); | 858 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager); |
958 ASSERT_FALSE(map_entry == NULL); | 859 ASSERT_FALSE(map_entry == NULL); |
959 EXPECT_FALSE(map_entry->has_infobar_delegate()); | 860 EXPECT_FALSE(map_entry->has_infobar_delegate()); |
960 SetNavigationPending(1, false); | 861 SetNavigationPending(&infobar_manager, false); |
961 EXPECT_TRUE(GetMapEntry(1) == NULL); | 862 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
962 | 863 |
963 // A pending search after a pending search should leave the map entry alive. | 864 // A pending search after a pending search should leave the map entry alive. |
964 SetNavigationPending(1, true); | 865 SetNavigationPending(&infobar_manager, true); |
965 map_entry = GetMapEntry(1); | 866 map_entry = GetMapEntry(&infobar_manager); |
966 ASSERT_FALSE(map_entry == NULL); | 867 ASSERT_FALSE(map_entry == NULL); |
967 EXPECT_FALSE(map_entry->has_infobar_delegate()); | 868 EXPECT_FALSE(map_entry->has_infobar_delegate()); |
968 SetNavigationPending(1, true); | 869 SetNavigationPending(&infobar_manager, true); |
969 ASSERT_EQ(map_entry, GetMapEntry(1)); | 870 ASSERT_EQ(map_entry, GetMapEntry(&infobar_manager)); |
970 EXPECT_FALSE(map_entry->has_infobar_delegate()); | 871 EXPECT_FALSE(map_entry->has_infobar_delegate()); |
971 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 872 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); |
972 | 873 |
973 // Committing this search should show an infobar. | 874 // Committing this search should show an infobar. |
974 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test2")); | 875 CommitSearch(&infobar_manager, |
| 876 GURL("http://www.google.co.uk/search?q=test2")); |
975 EXPECT_TRUE(map_entry->has_infobar_delegate()); | 877 EXPECT_TRUE(map_entry->has_infobar_delegate()); |
976 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 878 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
977 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 879 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
978 EXPECT_FALSE(listener_notified()); | 880 EXPECT_FALSE(listener_notified()); |
979 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 881 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); |
980 } | 882 } |
981 | 883 |
982 TEST_F(GoogleURLTrackerTest, NavigationsAfterCommittedSearch) { | 884 TEST_F(GoogleURLTrackerTest, NavigationsAfterCommittedSearch) { |
| 885 TestInfoBarManager infobar_manager(1); |
983 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 886 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
984 RequestServerCheck(); | 887 RequestServerCheck(); |
985 FinishSleep(); | 888 FinishSleep(); |
986 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 889 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
987 SetNavigationPending(1, true); | 890 SetNavigationPending(&infobar_manager, true); |
988 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 891 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
989 GoogleURLTrackerInfoBarDelegate* delegate = GetInfoBarDelegate(1); | 892 GoogleURLTrackerInfoBarDelegate* delegate = |
| 893 GetInfoBarDelegate(&infobar_manager); |
990 ASSERT_FALSE(delegate == NULL); | 894 ASSERT_FALSE(delegate == NULL); |
991 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 895 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); |
992 | 896 |
993 // A pending non-search on a visible infobar should basically do nothing. | 897 // A pending non-search on a visible infobar should basically do nothing. |
994 SetNavigationPending(1, false); | 898 SetNavigationPending(&infobar_manager, false); |
995 ASSERT_EQ(delegate, GetInfoBarDelegate(1)); | 899 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); |
996 EXPECT_EQ(0, delegate->pending_id()); | 900 EXPECT_EQ(0, delegate->pending_id()); |
997 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 901 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); |
998 | 902 |
999 // As should another pending non-search after the first. | 903 // As should another pending non-search after the first. |
1000 SetNavigationPending(1, false); | 904 SetNavigationPending(&infobar_manager, false); |
1001 ASSERT_EQ(delegate, GetInfoBarDelegate(1)); | 905 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); |
1002 EXPECT_EQ(0, delegate->pending_id()); | 906 EXPECT_EQ(0, delegate->pending_id()); |
1003 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 907 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); |
1004 | 908 |
1005 // Committing this non-search should close the infobar. The control flow in | 909 // Committing this non-search should close the infobar. The control flow in |
1006 // these tests is not really comparable to in the real browser, but at least a | 910 // these tests is not really comparable to in the real browser, but at least a |
1007 // few sanity-checks will be performed. | 911 // few sanity-checks will be performed. |
1008 ASSERT_NO_FATAL_FAILURE(CommitNonSearch(1)); | 912 ASSERT_NO_FATAL_FAILURE(CommitNonSearch(&infobar_manager)); |
1009 EXPECT_TRUE(GetMapEntry(1) == NULL); | 913 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
1010 | 914 |
1011 // A pending search on a visible infobar should cause the infobar to listen | 915 // A pending search on a visible infobar should cause the infobar to listen |
1012 // for the search to commit. | 916 // for the search to commit. |
1013 SetNavigationPending(1, true); | 917 SetNavigationPending(&infobar_manager, true); |
1014 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 918 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
1015 delegate = GetInfoBarDelegate(1); | 919 delegate = GetInfoBarDelegate(&infobar_manager); |
1016 ASSERT_FALSE(delegate == NULL); | 920 ASSERT_FALSE(delegate == NULL); |
1017 SetNavigationPending(1, true); | 921 SetNavigationPending(&infobar_manager, true); |
1018 ASSERT_EQ(delegate, GetInfoBarDelegate(1)); | 922 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); |
1019 EXPECT_EQ(1, delegate->pending_id()); | 923 EXPECT_EQ(1, delegate->pending_id()); |
1020 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 924 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); |
1021 | 925 |
1022 // But a non-search after this should cancel that state. | 926 // But a non-search after this should cancel that state. |
1023 SetNavigationPending(1, false); | 927 SetNavigationPending(&infobar_manager, false); |
1024 ASSERT_EQ(delegate, GetInfoBarDelegate(1)); | 928 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); |
1025 EXPECT_EQ(0, delegate->pending_id()); | 929 EXPECT_EQ(0, delegate->pending_id()); |
1026 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 930 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); |
1027 | 931 |
1028 // Another pending search after the non-search should put us back into | 932 // Another pending search after the non-search should put us back into |
1029 // "waiting for commit" mode. | 933 // "waiting for commit" mode. |
1030 SetNavigationPending(1, true); | 934 SetNavigationPending(&infobar_manager, true); |
1031 ASSERT_EQ(delegate, GetInfoBarDelegate(1)); | 935 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); |
1032 EXPECT_EQ(1, delegate->pending_id()); | 936 EXPECT_EQ(1, delegate->pending_id()); |
1033 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 937 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); |
1034 | 938 |
1035 // A second pending search after the first should not really change anything. | 939 // A second pending search after the first should not really change anything. |
1036 SetNavigationPending(1, true); | 940 SetNavigationPending(&infobar_manager, true); |
1037 ASSERT_EQ(delegate, GetInfoBarDelegate(1)); | 941 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); |
1038 EXPECT_EQ(1, delegate->pending_id()); | 942 EXPECT_EQ(1, delegate->pending_id()); |
1039 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 943 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); |
1040 | 944 |
1041 // Committing this search should change the visible infobar's search_url. | 945 // Committing this search should change the visible infobar's search_url. |
1042 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test2")); | 946 CommitSearch(&infobar_manager, |
1043 ASSERT_EQ(delegate, GetInfoBarDelegate(1)); | 947 GURL("http://www.google.co.uk/search?q=test2")); |
| 948 ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager)); |
1044 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), | 949 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), |
1045 delegate->search_url()); | 950 delegate->search_url()); |
1046 EXPECT_EQ(0, delegate->pending_id()); | 951 EXPECT_EQ(0, delegate->pending_id()); |
1047 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 952 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); |
1048 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); | 953 EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url()); |
1049 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); | 954 EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL()); |
1050 EXPECT_FALSE(listener_notified()); | 955 EXPECT_FALSE(listener_notified()); |
1051 } | 956 } |
1052 | 957 |
1053 TEST_F(GoogleURLTrackerTest, MultipleMapEntries) { | 958 TEST_F(GoogleURLTrackerTest, MultipleMapEntries) { |
| 959 TestInfoBarManager infobar_manager(1); |
| 960 TestInfoBarManager infobar_manager2(2); |
| 961 TestInfoBarManager infobar_manager3(3); |
| 962 TestInfoBarManager infobar_manager4(4); |
1054 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 963 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
1055 RequestServerCheck(); | 964 RequestServerCheck(); |
1056 FinishSleep(); | 965 FinishSleep(); |
1057 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 966 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
1058 | 967 |
1059 SetNavigationPending(1, true); | 968 SetNavigationPending(&infobar_manager, true); |
1060 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(1); | 969 GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager); |
1061 ASSERT_FALSE(map_entry == NULL); | 970 ASSERT_FALSE(map_entry == NULL); |
1062 EXPECT_FALSE(map_entry->has_infobar_delegate()); | 971 EXPECT_FALSE(map_entry->has_infobar_delegate()); |
1063 | 972 |
1064 SetNavigationPending(2, true); | 973 SetNavigationPending(&infobar_manager2, true); |
1065 CommitSearch(2, GURL("http://www.google.co.uk/search?q=test2")); | 974 CommitSearch(&infobar_manager2, |
1066 GoogleURLTrackerInfoBarDelegate* delegate2 = GetInfoBarDelegate(2); | 975 GURL("http://www.google.co.uk/search?q=test2")); |
| 976 GoogleURLTrackerInfoBarDelegate* delegate2 = |
| 977 GetInfoBarDelegate(&infobar_manager2); |
1067 ASSERT_FALSE(delegate2 == NULL); | 978 ASSERT_FALSE(delegate2 == NULL); |
1068 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), | 979 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), |
1069 delegate2->search_url()); | 980 delegate2->search_url()); |
1070 | 981 |
1071 SetNavigationPending(3, true); | 982 SetNavigationPending(&infobar_manager3, true); |
1072 GoogleURLTrackerMapEntry* map_entry3 = GetMapEntry(3); | 983 GoogleURLTrackerMapEntry* map_entry3 = GetMapEntry(&infobar_manager3); |
1073 ASSERT_FALSE(map_entry3 == NULL); | 984 ASSERT_FALSE(map_entry3 == NULL); |
1074 EXPECT_FALSE(map_entry3->has_infobar_delegate()); | 985 EXPECT_FALSE(map_entry3->has_infobar_delegate()); |
1075 | 986 |
1076 SetNavigationPending(4, true); | 987 SetNavigationPending(&infobar_manager4, true); |
1077 CommitSearch(4, GURL("http://www.google.co.uk/search?q=test4")); | 988 CommitSearch(&infobar_manager4, |
1078 GoogleURLTrackerInfoBarDelegate* delegate4 = GetInfoBarDelegate(4); | 989 GURL("http://www.google.co.uk/search?q=test4")); |
| 990 GoogleURLTrackerInfoBarDelegate* delegate4 = |
| 991 GetInfoBarDelegate(&infobar_manager4); |
1079 ASSERT_FALSE(delegate4 == NULL); | 992 ASSERT_FALSE(delegate4 == NULL); |
1080 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test4"), | 993 EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test4"), |
1081 delegate4->search_url()); | 994 delegate4->search_url()); |
1082 | 995 |
1083 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 996 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
1084 EXPECT_TRUE(map_entry->has_infobar_delegate()); | 997 EXPECT_TRUE(map_entry->has_infobar_delegate()); |
1085 | 998 |
1086 delegate2->Close(false); | 999 delegate2->Close(false); |
1087 EXPECT_TRUE(GetMapEntry(2) == NULL); | 1000 EXPECT_TRUE(GetMapEntry(&infobar_manager2) == NULL); |
1088 EXPECT_FALSE(listener_notified()); | 1001 EXPECT_FALSE(listener_notified()); |
1089 | 1002 |
1090 delegate4->Accept(); | 1003 delegate4->Accept(); |
1091 EXPECT_TRUE(GetMapEntry(1) == NULL); | 1004 EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL); |
1092 EXPECT_TRUE(GetMapEntry(3) == NULL); | 1005 EXPECT_TRUE(GetMapEntry(&infobar_manager3) == NULL); |
1093 EXPECT_TRUE(GetMapEntry(4) == NULL); | 1006 EXPECT_TRUE(GetMapEntry(&infobar_manager4) == NULL); |
1094 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url()); | 1007 EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url()); |
1095 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); | 1008 EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL()); |
1096 EXPECT_TRUE(listener_notified()); | 1009 EXPECT_TRUE(listener_notified()); |
1097 } | 1010 } |
1098 | 1011 |
1099 TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantNavigation) { | 1012 TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantNavigation) { |
| 1013 TestInfoBarManager infobar_manager(1); |
| 1014 TestInfoBarManager infobar_manager2(2); |
1100 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); | 1015 SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/")); |
1101 RequestServerCheck(); | 1016 RequestServerCheck(); |
1102 FinishSleep(); | 1017 FinishSleep(); |
1103 MockSearchDomainCheckResponse("http://www.google.co.jp/"); | 1018 MockSearchDomainCheckResponse("http://www.google.co.jp/"); |
1104 | 1019 |
1105 // This tests a particularly gnarly sequence of events that used to cause us | 1020 // This tests a particularly gnarly sequence of events that used to cause us |
1106 // to erroneously listen for a non-search navigation to commit. | 1021 // to erroneously listen for a non-search navigation to commit. |
1107 SetNavigationPending(1, true); | 1022 SetNavigationPending(&infobar_manager, true); |
1108 CommitSearch(1, GURL("http://www.google.co.uk/search?q=test")); | 1023 CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test")); |
1109 SetNavigationPending(2, true); | 1024 SetNavigationPending(&infobar_manager2, true); |
1110 CommitSearch(2, GURL("http://www.google.co.uk/search?q=test2")); | 1025 CommitSearch(&infobar_manager2, |
1111 EXPECT_FALSE(GetInfoBarDelegate(1) == NULL); | 1026 GURL("http://www.google.co.uk/search?q=test2")); |
1112 GoogleURLTrackerInfoBarDelegate* delegate2 = GetInfoBarDelegate(2); | 1027 EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL); |
| 1028 GoogleURLTrackerInfoBarDelegate* delegate2 = |
| 1029 GetInfoBarDelegate(&infobar_manager2); |
1113 ASSERT_FALSE(delegate2 == NULL); | 1030 ASSERT_FALSE(delegate2 == NULL); |
1114 SetNavigationPending(1, true); | 1031 SetNavigationPending(&infobar_manager, true); |
1115 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true)); | 1032 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true)); |
1116 delegate2->Close(false); | 1033 delegate2->Close(false); |
1117 SetNavigationPending(1, false); | 1034 SetNavigationPending(&infobar_manager, false); |
1118 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false)); | 1035 ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false)); |
1119 } | 1036 } |
OLD | NEW |