Index: chrome/browser/signin/chrome_signin_client.h |
diff --git a/chrome/browser/signin/chrome_signin_client.h b/chrome/browser/signin/chrome_signin_client.h |
index d5a4e307edadbf8c8dd1ee5fb4e4dc7893462926..b51bcc065ed191510939f66ba5ed4bd7e3f1606f 100644 |
--- a/chrome/browser/signin/chrome_signin_client.h |
+++ b/chrome/browser/signin/chrome_signin_client.h |
@@ -9,11 +9,14 @@ |
#include "base/compiler_specific.h" |
#include "components/keyed_service/core/keyed_service.h" |
#include "components/signin/core/browser/signin_client.h" |
+#include "content/public/browser/render_process_host_observer.h" |
class CookieSettings; |
class Profile; |
-class ChromeSigninClient : public SigninClient, public KeyedService { |
+class ChromeSigninClient : public SigninClient, |
+ public KeyedService, |
+ public content::RenderProcessHostObserver { |
public: |
explicit ChromeSigninClient(Profile* profile); |
virtual ~ChromeSigninClient(); |
@@ -22,6 +25,23 @@ class ChromeSigninClient : public SigninClient, public KeyedService { |
static bool ProfileAllowsSigninCookies(Profile* profile); |
static bool SettingsAllowSigninCookies(CookieSettings* cookie_settings); |
+ // Tracks the privileged signin process identified by |host_id| so that we |
+ // can later ask (via IsSigninProcess) if it is safe to sign the user in from |
+ // the current context (see OneClickSigninHelper). All of this tracking |
+ // state is reset once the renderer process terminates. |
+ // |
+ // N.B. This is the id returned by RenderProcessHost::GetID(). |
+ // TODO(guohui): Eliminate these APIs once the web-based signin flow is |
+ // replaced by a native flow. crbug.com/347247 |
+ void SetSigninProcess(int host_id); |
+ void ClearSigninProcess(); |
+ bool IsSigninProcess(int host_id) const; |
+ bool HasSigninProcess() const; |
+ |
+ // content::RenderProcessHostObserver implementation. |
+ virtual void RenderProcessHostDestroyed(content::RenderProcessHost* host) |
+ OVERRIDE; |
+ |
// SigninClient implementation. |
virtual PrefService* GetPrefs() OVERRIDE; |
virtual scoped_refptr<TokenWebData> GetDatabase() OVERRIDE; |
@@ -33,6 +53,13 @@ class ChromeSigninClient : public SigninClient, public KeyedService { |
private: |
Profile* profile_; |
+ // See SetSigninProcess. Tracks the currently active signin process |
+ // by ID, if there is one. |
+ int signin_host_id_; |
+ |
+ // The RenderProcessHosts being observed. |
+ std::set<content::RenderProcessHost*> signin_hosts_observed_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ChromeSigninClient); |
}; |