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

Side by Side Diff: chrome/browser/google/google_url_tracker.h

Issue 4880003: Fix a number of problems with the GoogleURLTracker (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_GOOGLE_GOOGLE_URL_TRACKER_H_ 5 #ifndef CHROME_BROWSER_GOOGLE_GOOGLE_URL_TRACKER_H_
6 #define CHROME_BROWSER_GOOGLE_GOOGLE_URL_TRACKER_H_ 6 #define CHROME_BROWSER_GOOGLE_GOOGLE_URL_TRACKER_H_
7 #pragma once 7 #pragma once
8 8
9 #include <map>
9 #include <string> 10 #include <string>
10 11
11 #include "base/gtest_prod_util.h" 12 #include "base/gtest_prod_util.h"
12 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/weak_ptr.h" 14 #include "base/memory/weak_ptr.h"
14 #include "chrome/browser/tab_contents/confirm_infobar_delegate.h" 15 #include "chrome/browser/tab_contents/confirm_infobar_delegate.h"
15 #include "content/public/common/url_fetcher.h" 16 #include "content/public/common/url_fetcher.h"
16 #include "content/public/common/url_fetcher_delegate.h" 17 #include "content/public/common/url_fetcher_delegate.h"
17 #include "content/public/browser/notification_observer.h" 18 #include "content/public/browser/notification_observer.h"
18 #include "content/public/browser/notification_registrar.h" 19 #include "content/public/browser/notification_registrar.h"
(...skipping 25 matching lines...) Expand all
44 public content::NotificationObserver, 45 public content::NotificationObserver,
45 public net::NetworkChangeNotifier::IPAddressObserver { 46 public net::NetworkChangeNotifier::IPAddressObserver {
46 public: 47 public:
47 // The constructor does different things depending on which of these values 48 // The constructor does different things depending on which of these values
48 // you pass it. Hopefully these are self-explanatory. 49 // you pass it. Hopefully these are self-explanatory.
49 enum Mode { 50 enum Mode {
50 NORMAL_MODE, 51 NORMAL_MODE,
51 UNIT_TEST_MODE, 52 UNIT_TEST_MODE,
52 }; 53 };
53 54
54 // Only the main browser process loop should call this, when setting up 55 // Only the main browser process loop and tests should call this, when setting
55 // g_browser_process->google_url_tracker_. No code other than the 56 // up g_browser_process->google_url_tracker_. No code other than the
56 // GoogleURLTracker itself should actually use 57 // GoogleURLTracker itself should actually use
57 // g_browser_process->google_url_tracker(). 58 // g_browser_process->google_url_tracker().
58 explicit GoogleURLTracker(Mode mode); 59 explicit GoogleURLTracker(Mode mode);
59 60
60 virtual ~GoogleURLTracker(); 61 virtual ~GoogleURLTracker();
61 62
62 // Returns the current Google URL. This will return a valid URL even in 63 // Returns the current Google URL. This will return a valid URL even in
63 // unittest mode. 64 // unittest mode.
64 // 65 //
65 // This is the only function most code should ever call. 66 // This is the only function most code should ever call.
(...skipping 16 matching lines...) Expand all
82 // When the load commits, we'll show the infobar. 83 // When the load commits, we'll show the infobar.
83 static void GoogleURLSearchCommitted(); 84 static void GoogleURLSearchCommitted();
84 85
85 static const char kDefaultGoogleHomepage[]; 86 static const char kDefaultGoogleHomepage[];
86 static const char kSearchDomainCheckURL[]; 87 static const char kSearchDomainCheckURL[];
87 88
88 private: 89 private:
89 friend class GoogleURLTrackerInfoBarDelegate; 90 friend class GoogleURLTrackerInfoBarDelegate;
90 friend class GoogleURLTrackerTest; 91 friend class GoogleURLTrackerTest;
91 92
92 typedef InfoBarDelegate* (*InfoBarCreator)(InfoBarTabHelper*, 93 typedef std::map<const InfoBarTabHelper*,
93 GoogleURLTracker*, 94 GoogleURLTrackerInfoBarDelegate*> InfoBars;
Ilya Sherman 2012/04/24 00:30:47 nit: Perhaps name this "InfoBarMap", so there's at
Peter Kasting 2012/04/24 01:53:01 Good idea. Changed type and variable name.
94 const GURL&); 95 typedef GoogleURLTrackerInfoBarDelegate* (*InfoBarCreator)(
96 InfoBarTabHelper* infobar_helper,
97 const GURL& search_url,
98 GoogleURLTracker* google_url_tracker,
99 const GURL& new_google_url);
95 100
96 void AcceptGoogleURL(const GURL& google_url); 101 void AcceptGoogleURL(const GURL& google_url);
97 void CancelGoogleURL(const GURL& google_url); 102 void CancelGoogleURL(const GURL& google_url);
98 void InfoBarClosed(); 103 void InfoBarClosed(const InfoBarTabHelper* infobar_helper);
Ilya Sherman 2012/04/24 00:30:47 nit: I think we generally prefer passing by const-
Peter Kasting 2012/04/24 01:53:01 Doing this would break the test code that needs to
99 void RedoSearch();
100 104
101 // Registers consumer interest in getting an updated URL from the server. 105 // Registers consumer interest in getting an updated URL from the server.
102 // It will be notified as chrome::GOOGLE_URL_UPDATED, so the 106 // It will be notified as chrome::GOOGLE_URL_UPDATED, so the
103 // consumer should observe this notification before calling this. 107 // consumer should observe this notification before calling this.
104 void SetNeedToFetch(); 108 void SetNeedToFetch();
105 109
106 // Called when the five second startup sleep has finished. Runs any pending 110 // Called when the five second startup sleep has finished. Runs any pending
107 // fetch. 111 // fetch.
108 void FinishSleep(); 112 void FinishSleep();
109 113
110 // Starts the fetch of the up-to-date Google URL if we actually want to fetch 114 // Starts the fetch of the up-to-date Google URL if we actually want to fetch
111 // it and can currently do so. 115 // it and can currently do so.
112 void StartFetchIfDesirable(); 116 void StartFetchIfDesirable();
113 117
114 // content::URLFetcherDelegate 118 // content::URLFetcherDelegate
115 virtual void OnURLFetchComplete(const content::URLFetcher* source) OVERRIDE; 119 virtual void OnURLFetchComplete(const content::URLFetcher* source) OVERRIDE;
116 120
117 // content::NotificationObserver 121 // content::NotificationObserver
118 virtual void Observe(int type, 122 virtual void Observe(int type,
119 const content::NotificationSource& source, 123 const content::NotificationSource& source,
120 const content::NotificationDetails& details) OVERRIDE; 124 const content::NotificationDetails& details) OVERRIDE;
121 125
122 // NetworkChangeNotifier::IPAddressObserver 126 // NetworkChangeNotifier::IPAddressObserver
123 virtual void OnIPAddressChanged() OVERRIDE; 127 virtual void OnIPAddressChanged() OVERRIDE;
124 128
125 void SearchCommitted(); 129 void SearchCommitted();
126 void OnNavigationPending(const content::NotificationSource& source, 130 void OnNavigationPending(const content::NotificationSource& source,
127 const GURL& pending_url); 131 const content::NotificationSource& contents_source,
128 void OnNavigationCommittedOrTabClosed(content::WebContents* web_contents, 132 InfoBarTabHelper* infobar_helper,
129 int type); 133 const GURL& search_url);
Ilya Sherman 2012/04/24 00:30:47 nit: const params generally should precede non-con
Peter Kasting 2012/04/24 01:53:01 |infobar_helper| isn't an outparam here, but can't
130 void ShowGoogleURLInfoBarIfNecessary(content::WebContents* web_contents); 134 void OnNavigationCommittedOrTabClosed(
135 const content::NotificationSource& source,
136 const content::NotificationSource& contents_source,
137 InfoBarTabHelper* infobar_helper,
138 int type);
Ilya Sherman 2012/04/24 00:30:47 nit: const params generally should precede non-con
Peter Kasting 2012/04/24 01:53:01 Made this one const.
139 void CloseAllInfoBars(bool redo_searches);
131 140
132 content::NotificationRegistrar registrar_; 141 content::NotificationRegistrar registrar_;
133 InfoBarCreator infobar_creator_; 142 InfoBarCreator infobar_creator_;
134 // TODO(ukai): GoogleURLTracker should track google domain (e.g. google.co.uk) 143 // TODO(ukai): GoogleURLTracker should track google domain (e.g. google.co.uk)
135 // rather than URL (e.g. http://www.google.co.uk/), so that user could 144 // rather than URL (e.g. http://www.google.co.uk/), so that user could
136 // configure to use https in search engine templates. 145 // configure to use https in search engine templates.
137 GURL google_url_; 146 GURL google_url_;
138 GURL fetched_google_url_; 147 GURL fetched_google_url_;
139 base::WeakPtrFactory<GoogleURLTracker> weak_ptr_factory_; 148 base::WeakPtrFactory<GoogleURLTracker> weak_ptr_factory_;
140 scoped_ptr<content::URLFetcher> fetcher_; 149 scoped_ptr<content::URLFetcher> fetcher_;
141 int fetcher_id_; 150 int fetcher_id_;
142 bool in_startup_sleep_; // True if we're in the five-second "no fetching" 151 bool in_startup_sleep_; // True if we're in the five-second "no fetching"
143 // period that begins at browser start. 152 // period that begins at browser start.
144 bool already_fetched_; // True if we've already fetched a URL once this run; 153 bool already_fetched_; // True if we've already fetched a URL once this run;
145 // we won't fetch again until after a restart. 154 // we won't fetch again until after a restart.
146 bool need_to_fetch_; // True if a consumer actually wants us to fetch an 155 bool need_to_fetch_; // True if a consumer actually wants us to fetch an
147 // updated URL. If this is never set, we won't 156 // updated URL. If this is never set, we won't
148 // bother to fetch anything. 157 // bother to fetch anything.
149 // Consumers should observe 158 // Consumers should observe
150 // chrome::GOOGLE_URL_UPDATED. 159 // chrome::GOOGLE_URL_UPDATED.
151 bool need_to_prompt_; // True if the last fetched Google URL is not 160 bool need_to_prompt_; // True if the last fetched Google URL is not
152 // matched with current user's default Google URL 161 // matched with current user's default Google URL
153 // nor the last prompted Google URL. 162 // nor the last prompted Google URL.
154 content::NavigationController* controller_; 163 InfoBars infobars_;
155 InfoBarDelegate* infobar_;
156 GURL search_url_;
157 164
158 DISALLOW_COPY_AND_ASSIGN(GoogleURLTracker); 165 DISALLOW_COPY_AND_ASSIGN(GoogleURLTracker);
159 }; 166 };
160 167
161 168
162 // This infobar delegate is declared here (rather than in the .cc file) so test 169 // This infobar delegate is declared here (rather than in the .cc file) so test
163 // code can subclass it. 170 // code can subclass it.
164 class GoogleURLTrackerInfoBarDelegate : public ConfirmInfoBarDelegate { 171 class GoogleURLTrackerInfoBarDelegate : public ConfirmInfoBarDelegate {
165 public: 172 public:
166 GoogleURLTrackerInfoBarDelegate(InfoBarTabHelper* infobar_helper, 173 GoogleURLTrackerInfoBarDelegate(InfoBarTabHelper* infobar_helper,
174 const GURL& search_url,
167 GoogleURLTracker* google_url_tracker, 175 GoogleURLTracker* google_url_tracker,
168 const GURL& new_google_url); 176 const GURL& new_google_url);
169 177
170 // ConfirmInfoBarDelegate: 178 // ConfirmInfoBarDelegate:
171 virtual bool Accept() OVERRIDE; 179 virtual bool Accept() OVERRIDE;
172 virtual bool Cancel() OVERRIDE; 180 virtual bool Cancel() OVERRIDE;
173 virtual string16 GetLinkText() const OVERRIDE; 181 virtual string16 GetLinkText() const OVERRIDE;
174 virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; 182 virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
175 183
184 // These are virtual so test code can override them in a subclass.
185 virtual void Show();
186 virtual void Close(bool redo_search);
187
176 protected: 188 protected:
177 virtual ~GoogleURLTrackerInfoBarDelegate(); 189 virtual ~GoogleURLTrackerInfoBarDelegate();
178 190
191 InfoBarTabHelper* map_key_; // What |google_url_tracker_| uses to track us.
192 const GURL search_url_;
179 GoogleURLTracker* google_url_tracker_; 193 GoogleURLTracker* google_url_tracker_;
180 const GURL new_google_url_; 194 const GURL new_google_url_;
195 bool showing_; // True if this delegate has been added to a TabContents.
181 196
182 private: 197 private:
183 // ConfirmInfoBarDelegate: 198 // ConfirmInfoBarDelegate:
184 virtual string16 GetMessageText() const OVERRIDE; 199 virtual string16 GetMessageText() const OVERRIDE;
185 virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; 200 virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
186 201
187 // Returns the portion of the appropriate hostname to display. 202 // Returns the portion of the appropriate hostname to display.
188 string16 GetHost(bool new_host) const; 203 string16 GetHost(bool new_host) const;
189 204
190 DISALLOW_COPY_AND_ASSIGN(GoogleURLTrackerInfoBarDelegate); 205 DISALLOW_COPY_AND_ASSIGN(GoogleURLTrackerInfoBarDelegate);
191 }; 206 };
192 207
193 #endif // CHROME_BROWSER_GOOGLE_GOOGLE_URL_TRACKER_H_ 208 #endif // CHROME_BROWSER_GOOGLE_GOOGLE_URL_TRACKER_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/google/google_url_tracker.cc » ('j') | chrome/browser/google/google_url_tracker.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698