signin_manager_android.h revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file.
47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef CHROME_BROWSER_ANDROID_SIGNIN_SIGNIN_MANAGER_ANDROID_H_
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define CHROME_BROWSER_ANDROID_SIGNIN_SIGNIN_MANAGER_ANDROID_H_
77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include <jni.h>
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include <string>
119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/android/scoped_java_ref.h"
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/basictypes.h"
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/scoped_ptr.h"
15558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/memory/weak_ptr.h"
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "google_apis/gaia/merge_session_helper.h"
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class GoogleServiceAuthError;
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass Profile;
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace policy {
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass CloudPolicyClient;
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Android wrapper of the SigninManager which provides access from the Java
267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// layer. Note that on Android, there's only a single profile, and therefore
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// a single instance of this wrapper. The name of the Java class is
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// SigninManager.
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// This class should only be accessed from the UI thread.
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch//
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// This class implements parts of the sign-in flow, to make sure that policy
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// is available before sign-in completes.
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class SigninManagerAndroid : public MergeSessionHelper::Observer {
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public:
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  SigninManagerAndroid(JNIEnv* env, jobject obj);
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Registers the SigninManagerAndroid's native methods through JNI.
387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  static bool Register(JNIEnv* env);
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void CheckPolicyBeforeSignIn(JNIEnv* env, jobject obj, jstring username);
417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void FetchPolicyBeforeSignIn(JNIEnv* env, jobject obj);
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void OnSignInCompleted(JNIEnv* env, jobject obj, jstring username);
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void SignOut(JNIEnv* env, jobject obj);
477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  base::android::ScopedJavaLocalRef<jstring> GetManagementDomain(JNIEnv* env,
49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                                                 jobject obj);
50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
51558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void WipeProfileData(JNIEnv* env, jobject obj);
52558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void LogInSignedInUser(JNIEnv* env, jobject obj);
543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void ClearLastSignedInUser(JNIEnv* env, jobject obj);
565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private:
587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual ~SigninManagerAndroid();
597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY)
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void OnPolicyRegisterDone(const std::string& dm_token,
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            const std::string& client_id);
637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void OnPolicyFetchDone(bool success);
647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
66558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void OnBrowsingDataRemoverDone();
67558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void ClearLastSignedInUser();
695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // MergeSessionHelper::Observer implementation.
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void MergeSessionCompleted(
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& account_id,
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const GoogleServiceAuthError& error) OVERRIDE;
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  Profile* profile_;
767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Java-side SigninManager object.
787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  base::android::ScopedJavaGlobalRef<jobject> java_signin_manager_;
797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY)
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // CloudPolicy credentials stored during a pending sign-in, awaiting user
827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // confirmation before starting to fetch policies.
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::string dm_token_;
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::string client_id_;
859ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
869ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Username that is pending sign-in. This is used to extract the domain name
879ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // for the policy dialog, when |username_| corresponds to a managed account.
889ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  std::string username_;
897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Helper to merge the signed into account into the cookie jar session.
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<MergeSessionHelper> merge_session_helper_;
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
94558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  base::WeakPtrFactory<SigninManagerAndroid> weak_factory_;
95558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(SigninManagerAndroid);
977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch};
987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif  // CHROME_BROWSER_ANDROID_SIGNIN_SIGNIN_MANAGER_ANDROID_H_
100