Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: chrome/browser/google/google_url_tracker_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698