146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/google/core/browser/google_url_tracker.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/google/google_url_tracker_factory.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/google/core/browser/google_pref_names.h"
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/google/core/browser/google_url_tracker_client.h"
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/google/core/browser/google_url_tracker_infobar_delegate.h"
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/google/core/browser/google_url_tracker_navigation_helper.h"
190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/infobars/core/infobar.h"
200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/infobars/core/infobar_delegate.h"
21a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_fetcher.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// TestCallbackListener ---------------------------------------------------
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TestCallbackListener {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  TestCallbackListener();
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual ~TestCallbackListener();
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool HasRegisteredCallback();
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void RegisterCallback(GoogleURLTracker* google_url_tracker);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool notified() const { return notified_; }
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void clear_notified() { notified_ = false; }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void OnGoogleURLUpdated(GURL old_url, GURL new_url);
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool notified_;
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<GoogleURLTracker::Subscription> google_url_updated_subscription_;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TestCallbackListener::TestCallbackListener() : notified_(false) {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TestCallbackListener::~TestCallbackListener() {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void TestCallbackListener::OnGoogleURLUpdated(GURL old_url, GURL new_url) {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  notified_ = true;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool TestCallbackListener::HasRegisteredCallback() {
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return google_url_updated_subscription_.get();
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void TestCallbackListener::RegisterCallback(
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    GoogleURLTracker* google_url_tracker) {
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  google_url_updated_subscription_ =
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      google_url_tracker->RegisterCallback(base::Bind(
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          &TestCallbackListener::OnGoogleURLUpdated, base::Unretained(this)));
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// TestGoogleURLTrackerClient -------------------------------------------------
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TestGoogleURLTrackerClient : public GoogleURLTrackerClient {
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestGoogleURLTrackerClient(Profile* profile_);
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual ~TestGoogleURLTrackerClient();
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetListeningForNavigationStart(bool listen) OVERRIDE;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsListeningForNavigationStart() OVERRIDE;
7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual bool IsBackgroundNetworkingEnabled() OVERRIDE;
8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual PrefService* GetPrefs() OVERRIDE;
8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  Profile* profile_;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool observe_nav_start_;
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TestGoogleURLTrackerClient);
88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TestGoogleURLTrackerClient::TestGoogleURLTrackerClient(Profile* profile)
9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    : profile_(profile),
9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      observe_nav_start_(false) {
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TestGoogleURLTrackerClient::~TestGoogleURLTrackerClient() {
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void TestGoogleURLTrackerClient::SetListeningForNavigationStart(bool listen) {
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  observe_nav_start_ = listen;
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool TestGoogleURLTrackerClient::IsListeningForNavigationStart() {
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return observe_nav_start_;
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool TestGoogleURLTrackerClient::IsBackgroundNetworkingEnabled() {
10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return true;
10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)PrefService* TestGoogleURLTrackerClient::GetPrefs() {
11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return profile_->GetPrefs();
11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)net::URLRequestContextGetter* TestGoogleURLTrackerClient::GetRequestContext() {
11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return profile_->GetRequestContext();
11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// TestGoogleURLTrackerNavigationHelper ---------------------------------------
120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TestGoogleURLTrackerNavigationHelper
122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    : public GoogleURLTrackerNavigationHelper {
123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  explicit TestGoogleURLTrackerNavigationHelper(GoogleURLTracker* tracker);
125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual ~TestGoogleURLTrackerNavigationHelper();
126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void SetListeningForNavigationCommit(bool listen) OVERRIDE;
128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool IsListeningForNavigationCommit() OVERRIDE;
129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void SetListeningForTabDestruction(bool listen) OVERRIDE;
130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool IsListeningForTabDestruction() OVERRIDE;
131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OpenURL(GURL url,
132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                       WindowOpenDisposition disposition,
133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                       bool user_clicked_on_link) OVERRIDE;
134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool listening_for_nav_commit_;
137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool listening_for_tab_destruction_;
138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TestGoogleURLTrackerNavigationHelper);
140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TestGoogleURLTrackerNavigationHelper::TestGoogleURLTrackerNavigationHelper(
143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    GoogleURLTracker* tracker)
144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    : GoogleURLTrackerNavigationHelper(tracker),
145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      listening_for_nav_commit_(false),
146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      listening_for_tab_destruction_(false) {
147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TestGoogleURLTrackerNavigationHelper::~TestGoogleURLTrackerNavigationHelper() {
150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestGoogleURLTrackerNavigationHelper::SetListeningForNavigationCommit(
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool listen) {
154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  listening_for_nav_commit_ = listen;
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool TestGoogleURLTrackerNavigationHelper::IsListeningForNavigationCommit() {
158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return listening_for_nav_commit_;
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestGoogleURLTrackerNavigationHelper::SetListeningForTabDestruction(
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool listen) {
163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  listening_for_tab_destruction_ = listen;
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool TestGoogleURLTrackerNavigationHelper::IsListeningForTabDestruction() {
167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return listening_for_tab_destruction_;
168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void TestGoogleURLTrackerNavigationHelper::OpenURL(
171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    GURL url,
172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    WindowOpenDisposition disposition,
173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    bool user_clicked_on_link) {
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// TestInfoBarManager ---------------------------------------------------------
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class TestInfoBarManager : public infobars::InfoBarManager {
17946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public:
18046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  explicit TestInfoBarManager(int unique_id);
18146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ~TestInfoBarManager();
18246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual int GetActiveEntryID() OVERRIDE;
18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
18446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private:
18546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  int unique_id_;
18646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TestInfoBarManager);
18746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
18846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
18946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TestInfoBarManager::TestInfoBarManager(int unique_id) : unique_id_(unique_id) {
19046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
19146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
19246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TestInfoBarManager::~TestInfoBarManager() {
19346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ShutDown();
19446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
19546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
19646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)int TestInfoBarManager::GetActiveEntryID() {
19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return unique_id_;
19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
19946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
20046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GoogleURLTrackerTest -------------------------------------------------------
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GoogleURLTrackerTest : public testing::Test {
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GoogleURLTrackerTest();
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~GoogleURLTrackerTest();
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // testing::Test
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() OVERRIDE;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() OVERRIDE;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::TestURLFetcher* GetFetcher();
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void MockSearchDomainCheckResponse(const std::string& domain);
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RequestServerCheck();
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void FinishSleep();
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void NotifyIPAddressChanged();
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL fetched_google_url() const {
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return google_url_tracker_->fetched_google_url();
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_google_url(const GURL& url) {
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    google_url_tracker_->google_url_ = url;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL google_url() const { return google_url_tracker_->google_url(); }
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetLastPromptedGoogleURL(const GURL& url);
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL GetLastPromptedGoogleURL();
22746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void SetNavigationPending(infobars::InfoBarManager* infobar_manager,
22846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                            bool is_search);
22946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void CommitNonSearch(infobars::InfoBarManager* infobar_manager);
23046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void CommitSearch(infobars::InfoBarManager* infobar_manager,
23146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                    const GURL& search_url);
23246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void CloseTab(infobars::InfoBarManager* infobar_manager);
23346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerMapEntry* GetMapEntry(
23446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      infobars::InfoBarManager* infobar_manager);
23546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerInfoBarDelegate* GetInfoBarDelegate(
23646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      infobars::InfoBarManager* infobar_manager);
23746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerNavigationHelper* GetNavigationHelper(
23846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      infobars::InfoBarManager* infobar_manager);
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ExpectDefaultURLs() const;
24046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void ExpectListeningForCommit(infobars::InfoBarManager* infobar_manager,
24146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                bool listening);
242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool listener_notified() const { return listener_.notified(); }
243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void clear_listener_notified() { listener_.clear_notified(); }
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These are required by the TestURLFetchers GoogleURLTracker will create (see
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // test_url_fetcher_factory.h).
248a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  content::TestBrowserThreadBundle thread_bundle_;
24946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creating this allows us to call
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests().
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::TestURLFetcherFactory fetcher_factory_;
254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  GoogleURLTrackerClient* client_;
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile profile_;
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<GoogleURLTracker> google_url_tracker_;
257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  TestCallbackListener listener_;
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This tracks the different "tabs" a test has "opened", so we can close them
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // properly before shutting down |google_url_tracker_|, which expects that.
26046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  std::set<infobars::InfoBarManager*> infobar_managers_seen_;
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleURLTrackerTest::GoogleURLTrackerTest()
264a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {
265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  GoogleURLTrackerFactory::GetInstance()->
266a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      RegisterUserPrefsOnBrowserContextForTest(&profile_);
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleURLTrackerTest::~GoogleURLTrackerTest() {
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GoogleURLTrackerTest::SetUp() {
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  network_change_notifier_.reset(net::NetworkChangeNotifier::CreateMock());
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Ownership is passed to google_url_tracker_, but a weak pointer is kept;
275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // this is safe since GoogleURLTracker keeps the client for its lifetime.
27646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  client_ = new TestGoogleURLTrackerClient(&profile_);
277cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<GoogleURLTrackerClient> client(client_);
278cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  google_url_tracker_.reset(new GoogleURLTracker(
27946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      client.Pass(), GoogleURLTracker::UNIT_TEST_MODE));
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GoogleURLTrackerTest::TearDown() {
28346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  while (!infobar_managers_seen_.empty())
28446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    CloseTab(*infobar_managers_seen_.begin());
285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  google_url_tracker_->Shutdown();
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::TestURLFetcher* GoogleURLTrackerTest::GetFetcher() {
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This will return the last fetcher created.  If no fetchers have been
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // created, we'll pass GetFetcherByID() "-1", and it will return NULL.
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return fetcher_factory_.GetFetcherByID(google_url_tracker_->fetcher_id_ - 1);
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GoogleURLTrackerTest::MockSearchDomainCheckResponse(
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& domain) {
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::TestURLFetcher* fetcher = GetFetcher();
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!fetcher)
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  fetcher_factory_.RemoveFetcherFromMap(fetcher->id());
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  fetcher->set_url(GURL(GoogleURLTracker::kSearchDomainCheckURL));
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  fetcher->set_response_code(200);
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  fetcher->SetResponseString(domain);
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  fetcher->delegate()->OnURLFetchComplete(fetcher);
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // At this point, |fetcher| is deleted.
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GoogleURLTrackerTest::RequestServerCheck() {
308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (!listener_.HasRegisteredCallback())
309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    listener_.RegisterCallback(google_url_tracker_.get());
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  google_url_tracker_->SetNeedToFetch();
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GoogleURLTrackerTest::FinishSleep() {
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  google_url_tracker_->FinishSleep();
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GoogleURLTrackerTest::NotifyIPAddressChanged() {
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // For thread safety, the NCN queues tasks to do the actual notifications, so
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // we need to spin the message loop so the tracker will actually be notified.
32190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::MessageLoop::current()->RunUntilIdle();
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GoogleURLTrackerTest::SetLastPromptedGoogleURL(const GURL& url) {
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  profile_.GetPrefs()->SetString(prefs::kLastPromptedGoogleURL, url.spec());
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GoogleURLTrackerTest::GetLastPromptedGoogleURL() {
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GURL(profile_.GetPrefs()->GetString(prefs::kLastPromptedGoogleURL));
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
33246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void GoogleURLTrackerTest::SetNavigationPending(
33346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    infobars::InfoBarManager* infobar_manager,
33446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    bool is_search) {
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (is_search) {
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    google_url_tracker_->SearchCommitted();
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Note that the call above might not have actually registered a listener
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // for navigation starts if the searchdomaincheck response was bogus.
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
34046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  infobar_managers_seen_.insert(infobar_manager);
341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (client_->IsListeningForNavigationStart()) {
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    google_url_tracker_->OnNavigationPending(
343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        scoped_ptr<GoogleURLTrackerNavigationHelper>(
344cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            new TestGoogleURLTrackerNavigationHelper(
345cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                google_url_tracker_.get())),
34646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        infobar_manager,
34746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        infobar_manager->GetActiveEntryID());
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void GoogleURLTrackerTest::CommitNonSearch(
35246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    infobars::InfoBarManager* infobar_manager) {
35346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!map_entry)
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ExpectListeningForCommit(infobar_manager, false);
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The infobar should be showing; otherwise the pending non-search should
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // have closed it.
3617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ASSERT_TRUE(map_entry->has_infobar_delegate());
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The pending_id should have been reset to 0 when the non-search became
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // pending.
3657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(0, map_entry->infobar_delegate()->pending_id());
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Committing the navigation would close the infobar.
3687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  map_entry->infobar_delegate()->Close(false);
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
37146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void GoogleURLTrackerTest::CommitSearch(
37246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    infobars::InfoBarManager* infobar_manager,
37346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    const GURL& search_url) {
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(search_url.is_valid());
37546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerNavigationHelper* nav_helper =
37646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      GetNavigationHelper(infobar_manager);
377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (nav_helper && nav_helper->IsListeningForNavigationCommit()) {
37846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    google_url_tracker_->OnNavigationCommitted(infobar_manager, search_url);
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void GoogleURLTrackerTest::CloseTab(infobars::InfoBarManager* infobar_manager) {
38346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  infobar_managers_seen_.erase(infobar_manager);
38446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerNavigationHelper* nav_helper =
38546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      GetNavigationHelper(infobar_manager);
386cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (nav_helper && nav_helper->IsListeningForTabDestruction()) {
387cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    google_url_tracker_->OnTabClosed(nav_helper);
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Closing a tab with an infobar showing would close the infobar.
39046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    GoogleURLTrackerInfoBarDelegate* delegate =
39146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        GetInfoBarDelegate(infobar_manager);
3927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    if (delegate)
3937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      delegate->Close(false);
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry(
39846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    infobars::InfoBarManager* infobar_manager) {
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GoogleURLTracker::EntryMap::const_iterator i =
40046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      google_url_tracker_->entry_map_.find(infobar_manager);
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return (i == google_url_tracker_->entry_map_.end()) ? NULL : i->second;
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4047dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochGoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::GetInfoBarDelegate(
40546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    infobars::InfoBarManager* infobar_manager) {
40646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
4077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return map_entry ? map_entry->infobar_delegate() : NULL;
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
410cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)GoogleURLTrackerNavigationHelper* GoogleURLTrackerTest::GetNavigationHelper(
41146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    infobars::InfoBarManager* infobar_manager) {
41246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
413cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return map_entry ? map_entry->navigation_helper() : NULL;
414cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
415cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GoogleURLTrackerTest::ExpectDefaultURLs() const {
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(), fetched_google_url());
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
42146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void GoogleURLTrackerTest::ExpectListeningForCommit(
42246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    infobars::InfoBarManager* infobar_manager,
42346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    bool listening) {
42446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (map_entry) {
426cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    EXPECT_EQ(listening,
427cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)              map_entry->navigation_helper()->IsListeningForNavigationCommit());
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(listening);
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests ----------------------------------------------------------------------
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) {
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectDefaultURLs();
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No one called RequestServerCheck() so nothing should have happened.
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(GetFetcher());
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectDefaultURLs();
442cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, UpdateOnFirstRun) {
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(GetFetcher());
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectDefaultURLs();
449cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // GoogleURL should be updated, becase there was no last prompted URL.
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
456cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(listener_notified());
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, DontUpdateWhenUnchanged) {
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(GetFetcher());
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectDefaultURLs();
465cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // GoogleURL should not be updated, because the fetched and prompted URLs
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // match.
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
473cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) {
47746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(GetFetcher());
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectDefaultURLs();
483cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Old-style domain string.
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse(".google.co.in");
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(), fetched_google_url());
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
490cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
49146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
49246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
49346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Bad subdomain.
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://mail.google.com/");
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(), fetched_google_url());
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
500cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
50146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
50246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
50346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Non-empty path.
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.com/search");
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(), fetched_google_url());
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
510cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
51146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
51246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
51346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Non-empty query.
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.com/?q=foo");
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(), fetched_google_url());
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
520cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
52146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
52246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
52346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Non-empty ref.
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.com/#anchor");
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(), fetched_google_url());
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
530cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
53146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
53246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
53346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Complete garbage.
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("HJ)*qF)_*&@f1");
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(), fetched_google_url());
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
540cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
54146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
54246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
54346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, UpdatePromptedURLOnReturnToPreviousLocation) {
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/"));
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_google_url(GURL("http://www.google.co.uk/"));
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
555cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, SilentlyAcceptSchemeChange) {
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We should auto-accept changes to the current Google URL that merely change
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the scheme, regardless of what the last prompted URL was.
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/"));
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_google_url(GURL("http://www.google.co.uk/"));
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("https://www.google.co.uk/");
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url());
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("https://www.google.co.uk/"), google_url());
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL());
569cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(listener_notified());
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
576cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(listener_notified());
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, RefetchOnIPAddressChange) {
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
585cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(listener_notified());
586cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  clear_listener_notified();
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.in/");
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.in/"), fetched_google_url());
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Just fetching a new URL shouldn't reset things without a prompt.
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
593cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, DontRefetchWhenNoOneRequestsCheck) {
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No one called RequestServerCheck() so nothing should have happened.
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(GetFetcher());
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectDefaultURLs();
603cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, FetchOnLateRequest) {
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The first request for a check should trigger a fetch if it hasn't happened
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // already.
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
617cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(listener_notified());
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, DontFetchTwiceOnLateRequests) {
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The first request for a check should trigger a fetch if it hasn't happened
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // already.
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
631cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(listener_notified());
632cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  clear_listener_notified();
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The second request should be ignored.
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(GetFetcher());
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.in/");
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
640cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, SearchingDoesNothingIfNoNeedToPrompt) {
64446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
651cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(listener_notified());
652cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  clear_listener_notified();
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
65546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
65646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
660cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, TabClosedOnPendingSearch) {
66446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.jp/"), fetched_google_url());
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
672cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
67446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
67546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager);
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(map_entry == NULL);
6777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(map_entry->has_infobar_delegate());
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
680cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
68246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CloseTab(&infobar_manager);
68346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
686cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, TabClosedOnCommittedSearch) {
69046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
69646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
69746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
69846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
70046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CloseTab(&infobar_manager);
70146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
704cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, InfoBarClosed) {
70846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
71446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
71546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
71646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerInfoBarDelegate* infobar =
71746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      GetInfoBarDelegate(&infobar_manager);
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(infobar == NULL);
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  infobar->Close(false);
72146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
724cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, InfoBarRefused) {
72846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
73546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
73646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerInfoBarDelegate* infobar =
73746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      GetInfoBarDelegate(&infobar_manager);
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(infobar == NULL);
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  infobar->Cancel();
74146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL());
744cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, InfoBarAccepted) {
74846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
75546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
75646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerInfoBarDelegate* infobar =
75746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      GetInfoBarDelegate(&infobar_manager);
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(infobar == NULL);
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  infobar->Accept();
76146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url());
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL());
764cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(listener_notified());
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, FetchesCanAutomaticallyCloseInfoBars) {
76846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse(google_url().spec());
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Re-fetching the accepted URL after showing an infobar for another URL
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // should close the infobar.
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
77746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
77846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
77946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse(google_url().spec());
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(google_url(), GetLastPromptedGoogleURL());
78346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // As should fetching a URL that differs from the accepted only by the scheme.
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
78846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
78946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
79046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
7925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  url::Replacements<char> replacements;
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& scheme("https");
7945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  replacements.SetScheme(scheme.data(), url::Component(0, scheme.length()));
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL new_google_url(google_url().ReplaceComponents(replacements));
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse(new_google_url.spec());
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(new_google_url, GetLastPromptedGoogleURL());
79846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // As should re-fetching the last prompted URL.
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
80446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
80546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
80646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(new_google_url, google_url());
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
81146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // And one that differs from the last prompted URL only by the scheme.
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
81646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
81746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
81846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("https://www.google.co.uk/");
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(new_google_url, google_url());
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL());
82346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // And fetching a different URL entirely.
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
82846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
82946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
83046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("https://www.google.co.in/");
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(new_google_url, google_url());
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL());
83546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, ResetInfoBarGoogleURLs) {
83946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse(google_url().spec());
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.uk/");
84646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
84746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
84846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerInfoBarDelegate* delegate =
84946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      GetInfoBarDelegate(&infobar_manager);
8507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ASSERT_FALSE(delegate == NULL);
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If while an infobar is showing we fetch a new URL that differs from the
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // infobar's only by scheme, the infobar should stay showing.
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotifyIPAddressChanged();
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("https://www.google.co.uk/");
85746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url());
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, NavigationsAfterPendingSearch) {
86246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A pending non-search after a pending search should delete the map entry.
86946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
87046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager);
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(map_entry == NULL);
8727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(map_entry->has_infobar_delegate());
87346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, false);
87446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A pending search after a pending search should leave the map entry alive.
87746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
87846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  map_entry = GetMapEntry(&infobar_manager);
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(map_entry == NULL);
8807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(map_entry->has_infobar_delegate());
88146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
88246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_EQ(map_entry, GetMapEntry(&infobar_manager));
8837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(map_entry->has_infobar_delegate());
88446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Committing this search should show an infobar.
88746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager,
88846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)               GURL("http://www.google.co.uk/search?q=test2"));
8897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(map_entry->has_infobar_delegate());
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
892cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
89346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, NavigationsAfterCommittedSearch) {
89746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
90246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
90346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
90446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerInfoBarDelegate* delegate =
90546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      GetInfoBarDelegate(&infobar_manager);
9067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ASSERT_FALSE(delegate == NULL);
90746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A pending non-search on a visible infobar should basically do nothing.
91046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, false);
91146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
9127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(0, delegate->pending_id());
91346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // As should another pending non-search after the first.
91646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, false);
91746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
9187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(0, delegate->pending_id());
91946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Committing this non-search should close the infobar.  The control flow in
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // these tests is not really comparable to in the real browser, but at least a
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // few sanity-checks will be performed.
92446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(CommitNonSearch(&infobar_manager));
92546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A pending search on a visible infobar should cause the infobar to listen
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // for the search to commit.
92946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
93046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
93146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  delegate = GetInfoBarDelegate(&infobar_manager);
9327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ASSERT_FALSE(delegate == NULL);
93346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
93446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
9357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(1, delegate->pending_id());
93646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // But a non-search after this should cancel that state.
93946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, false);
94046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
9417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(0, delegate->pending_id());
94246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Another pending search after the non-search should put us back into
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // "waiting for commit" mode.
94646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
94746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
9487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(1, delegate->pending_id());
94946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A second pending search after the first should not really change anything.
95246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
95346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
9547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(1, delegate->pending_id());
95546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Committing this search should change the visible infobar's search_url.
95846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager,
95946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)               GURL("http://www.google.co.uk/search?q=test2"));
96046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"),
9627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            delegate->search_url());
9637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(0, delegate->pending_id());
96446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
967cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, MultipleMapEntries) {
97146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
97246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager2(2);
97346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager3(3);
97446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager4(4);
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
98046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
98146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager);
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(map_entry == NULL);
9837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(map_entry->has_infobar_delegate());
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
98546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager2, true);
98646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager2,
98746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)               GURL("http://www.google.co.uk/search?q=test2"));
98846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerInfoBarDelegate* delegate2 =
98946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      GetInfoBarDelegate(&infobar_manager2);
9907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ASSERT_FALSE(delegate2 == NULL);
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"),
9927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            delegate2->search_url());
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
99446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager3, true);
99546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerMapEntry* map_entry3 = GetMapEntry(&infobar_manager3);
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(map_entry3 == NULL);
9977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(map_entry3->has_infobar_delegate());
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
99946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager4, true);
100046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager4,
100146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)               GURL("http://www.google.co.uk/search?q=test4"));
100246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerInfoBarDelegate* delegate4 =
100346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      GetInfoBarDelegate(&infobar_manager4);
10047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ASSERT_FALSE(delegate4 == NULL);
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test4"),
10067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            delegate4->search_url());
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
100846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
10097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(map_entry->has_infobar_delegate());
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  delegate2->Close(false);
101246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager2) == NULL);
1013cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(listener_notified());
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  delegate4->Accept();
101646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
101746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager3) == NULL);
101846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(GetMapEntry(&infobar_manager4) == NULL);
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url());
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL());
1021cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(listener_notified());
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantNavigation) {
102546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager(1);
102646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestInfoBarManager infobar_manager2(2);
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RequestServerCheck();
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FinishSleep();
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockSearchDomainCheckResponse("http://www.google.co.jp/");
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This tests a particularly gnarly sequence of events that used to cause us
10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to erroneously listen for a non-search navigation to commit.
103446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
103546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
103646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager2, true);
103746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CommitSearch(&infobar_manager2,
103846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)               GURL("http://www.google.co.uk/search?q=test2"));
103946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
104046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GoogleURLTrackerInfoBarDelegate* delegate2 =
104146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      GetInfoBarDelegate(&infobar_manager2);
10427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ASSERT_FALSE(delegate2 == NULL);
104346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, true);
104446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
10457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  delegate2->Close(false);
104646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetNavigationPending(&infobar_manager, false);
104746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1049