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

Unified Diff: google_apis/gaia/merge_session_helper.h

Issue 424233002: When the user signs in, make sure to set cookies on all reachable google (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « google_apis/gaia/gaia_urls.cc ('k') | google_apis/gaia/merge_session_helper.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: google_apis/gaia/merge_session_helper.h
diff --git a/google_apis/gaia/merge_session_helper.h b/google_apis/gaia/merge_session_helper.h
index 962eaa5ea6d09ac1e10a5255a56cf73540f59dda..ff91777cfd001a4b13463cf42cf2c041380f5bf2 100644
--- a/google_apis/gaia/merge_session_helper.h
+++ b/google_apis/gaia/merge_session_helper.h
@@ -8,6 +8,7 @@
#include <deque>
#include "base/observer_list.h"
+#include "base/timer/timer.h"
#include "google_apis/gaia/gaia_auth_consumer.h"
#include "google_apis/gaia/ubertoken_fetcher.h"
#include "net/url_request/url_fetcher_delegate.h"
@@ -17,6 +18,7 @@ class GoogleServiceAuthError;
class OAuth2TokenService;
namespace net {
+class URLFetcher;
class URLRequestContextGetter;
}
@@ -41,6 +43,65 @@ class MergeSessionHelper : public GaiaAuthConsumer,
virtual ~Observer() {}
};
+ // Class to retrieve the external connection check results from gaia.
+ // Declared publicly for unit tests.
+ class ExternalCcResultFetcher : public GaiaAuthConsumer,
+ public net::URLFetcherDelegate {
+ public:
+ // Maps connection URLs, as returned by StartGetCheckConnectionInfo() to
+ // token and URLFetcher used to fetch the URL.
+ typedef std::map<GURL, std::pair<std::string, net::URLFetcher*> >
+ URLToTokenAndFetcher;
+
+ // Maps tokens to the fetched result for that token.
+ typedef std::map<std::string, std::string> ResultMap;
+
+ ExternalCcResultFetcher(MergeSessionHelper* helper);
+ virtual ~ExternalCcResultFetcher();
+
+ // Gets the current value of the external connection check result string.
+ std::string GetExternalCcResult();
+
+ // Start fetching the external CC result. If a fetch is already in progress
+ // it is canceled.
+ void Start();
+
+ // Are external URLs still being checked?
+ bool IsRunning();
+
+ // Returns a copy of the internal token to fetcher map.
+ URLToTokenAndFetcher get_fetcher_map_for_testing() {
+ return fetchers_;
+ }
+
+ // Simulate a timeout for tests.
+ void TimeoutForTests();
+
+ private:
+ // Overridden from GaiaAuthConsumer.
+ virtual void OnGetCheckConnectionInfoSuccess(
+ const std::string& data) OVERRIDE;
+
+ // Creates and initializes a URL fetcher for doing a connection check.
+ net::URLFetcher* CreateFetcher(const GURL& url);
+
+ // Overridden from URLFetcherDelgate.
+ virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
+
+ // Any fetches still ongoing after this call are considered timed out.
+ void Timeout();
+
+ void CleanupTransientState();
+
+ MergeSessionHelper* helper_;
+ base::OneShotTimer<ExternalCcResultFetcher> timer_;
+ scoped_ptr<GaiaAuthFetcher> gaia_auth_fetcher_;
+ URLToTokenAndFetcher fetchers_;
+ ResultMap results_;
+
+ DISALLOW_COPY_AND_ASSIGN(ExternalCcResultFetcher);
+ };
+
MergeSessionHelper(OAuth2TokenService* token_service,
net::URLRequestContextGetter* request_context,
Observer* observer);
@@ -74,7 +135,17 @@ class MergeSessionHelper : public GaiaAuthConsumer,
// Returns true of there are pending log ins or outs.
bool is_running() const { return accounts_.size() > 0; }
+ // Start the process of fetching the external check connection result so that
+ // its ready when we try to perform a merge session.
+ void StartFetchingExternalCcResult();
+
+ // Returns true if the helper is still fetching external check connection
+ // results.
+ bool StillFetchingExternalCcResult();
+
private:
+ net::URLRequestContextGetter* request_context() { return request_context_; }
+
// Overridden from UbertokenConsumer.
virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE;
virtual void OnUbertokenFailure(const GoogleServiceAuthError& error) OVERRIDE;
@@ -104,6 +175,7 @@ class MergeSessionHelper : public GaiaAuthConsumer,
net::URLRequestContextGetter* request_context_;
scoped_ptr<GaiaAuthFetcher> gaia_auth_fetcher_;
scoped_ptr<UbertokenFetcher> uber_token_fetcher_;
+ ExternalCcResultFetcher result_fetcher_;
// A worklist for this class. Accounts names are stored here if
// we are pending a signin action for that account. Empty strings
« no previous file with comments | « google_apis/gaia/gaia_urls.cc ('k') | google_apis/gaia/merge_session_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698