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