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