Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / components / signin / core / browser / signin_client.h
index 4187f47..fafcada 100644 (file)
@@ -6,6 +6,9 @@
 #define COMPONENTS_SIGNIN_CORE_BROWSER_SIGNIN_CLIENT_H_
 
 #include "base/callback.h"
+#include "base/callback_list.h"
+#include "base/time/time.h"
+#include "components/keyed_service/core/keyed_service.h"
 #include "components/signin/core/browser/webdata/token_web_data.h"
 
 class PrefService;
@@ -27,11 +30,14 @@ class ProfileOAuth2TokenServiceIOSProvider;
 
 // An interface that needs to be supplied to the Signin component by its
 // embedder.
-class SigninClient {
+class SigninClient : public KeyedService {
  public:
   typedef base::Callback<void(const net::CanonicalCookie* cookie)>
       CookieChangedCallback;
 
+  typedef base::CallbackList<void(const net::CanonicalCookie* cookie)>
+      CookieChangedCallbackList;
+
   virtual ~SigninClient() {}
 
   // Gets the preferences associated with the client.
@@ -43,6 +49,16 @@ class SigninClient {
   // Returns whether it is possible to revoke credentials.
   virtual bool CanRevokeCredentials() = 0;
 
+  // Returns device id that is scoped to single signin. This device id will be
+  // regenerated if user signs out and signs back in.
+  // When refresh token is requested for this user it will be annotated with
+  // this device id.
+  virtual std::string GetSigninScopedDeviceId() = 0;
+
+  // Clears signin scoped device id. This happens when user signs out or about
+  // to sign in.
+  virtual void ClearSigninScopedDeviceId() = 0;
+
   // Returns the URL request context information associated with the client.
   virtual net::URLRequestContextGetter* GetURLRequestContext() = 0;
 
@@ -54,18 +70,25 @@ class SigninClient {
   // Signin component is being used.
   virtual std::string GetProductVersion() = 0;
 
-  // Sets the callback that should be called when a cookie changes. The
-  // callback will be called only if it is not empty.
+  // Adds or removes a callback that should be called when a cookie changes.
   // TODO(blundell): Eliminate this interface in favor of having core signin
   // code observe cookie changes once //chrome/browser/net has been
   // componentized.
-  virtual void SetCookieChangedCallback(
-      const CookieChangedCallback& callback) = 0;
+  virtual scoped_ptr<CookieChangedCallbackList::Subscription>
+      AddCookieChangedCallback(const CookieChangedCallback& callback) = 0;
 
   // Called when Google signin has succeeded.
   virtual void GoogleSigninSucceeded(const std::string& username,
                                      const std::string& password) {}
 
+  virtual void SetSigninProcess(int host_id) = 0;
+  virtual void ClearSigninProcess() = 0;
+  virtual bool IsSigninProcess(int host_id) const = 0;
+  virtual bool HasSigninProcess() const = 0;
+
+  virtual bool IsFirstRun() const = 0;
+  virtual base::Time GetInstallDate() = 0;
+
 #if defined(OS_IOS)
   // TODO(msarda): http://crbug.com/358544 Remove this iOS specific code from
   // the core SigninClient.