summaryrefslogtreecommitdiffstats
path: root/chrome/browser/google_url_tracker.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/google_url_tracker.h')
-rw-r--r--chrome/browser/google_url_tracker.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/chrome/browser/google_url_tracker.h b/chrome/browser/google_url_tracker.h
new file mode 100644
index 0000000..e4b065d
--- /dev/null
+++ b/chrome/browser/google_url_tracker.h
@@ -0,0 +1,84 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "chrome/browser/url_fetcher.h"
+
+class PrefService;
+
+// This object is responsible for updating the Google URL exactly once (when
+// first constructed) and tracking the currently known value, which is also
+// saved to a pref.
+class GoogleURLTracker : public URLFetcher::Delegate {
+ public:
+ // Only the main browser process loop should call this, when setting up
+ // g_browser_process->google_url_tracker_. No code other than the
+ // GoogleURLTracker itself should actually use
+ // g_browser_process->google_url_tracker() (which shouldn't be hard, since
+ // there aren't useful public functions on this object for consumers to access
+ // anyway).
+ GoogleURLTracker();
+
+ // This returns the current Google URL. If this is the first call to it in
+ // this session, it also kicks off a timer to fetch the correct Google URL;
+ // when that fetch completes, it will fire NOTIFY_GOOGLE_URL_UPDATED.
+ //
+ // This is the only function most code should ever call.
+ //
+ // This will return a valid URL even in unittest mode.
+ static GURL GoogleURL();
+
+ static void RegisterPrefs(PrefService* prefs);
+
+ private:
+ FRIEND_TEST(GoogleURLTrackerTest, CheckAndConvertURL);
+
+ // Determines if |url| is an appropriate source for a new Google base URL, and
+ // update |base_url| to the appropriate base URL if so. Returns whether the
+ // check succeeded (and thus whether |base_url| was actually updated).
+ static bool CheckAndConvertToGoogleBaseURL(const GURL& url, GURL* base_url);
+
+ // Starts the fetch of the up-to-date Google URL.
+ void StartFetch();
+
+ // URLFetcher::Delegate
+ virtual void OnURLFetchComplete(const URLFetcher *source,
+ const GURL& url,
+ const URLRequestStatus& status,
+ int response_code,
+ const ResponseCookies& cookies,
+ const std::string& data);
+
+ static const char kDefaultGoogleHomepage[];
+
+ GURL google_url_;
+ ScopedRunnableMethodFactory<GoogleURLTracker> fetcher_factory_;
+ scoped_ptr<URLFetcher> fetcher_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(GoogleURLTracker);
+};