signin_manager_android.cc revision f2477e01787aa58f445919b809d89e252beef54f
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#include "chrome/browser/android/signin/signin_manager_android.h"
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/android/jni_android.h"
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/android/jni_string.h"
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/bind.h"
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/bind_helpers.h"
11558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/memory/ref_counted.h"
12558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/message_loop/message_loop_proxy.h"
13558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/prefs/pref_service.h"
14558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/bookmarks/bookmark_model.h"
15558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/bookmarks/bookmark_model_factory.h"
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/browser_process.h"
17558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/browsing_data/browsing_data_helper.h"
18558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/browsing_data/browsing_data_remover.h"
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/profiles/profile_manager.h"
201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/signin/google_auto_login_helper.h"
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/signin/signin_manager.h"
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/signin/signin_manager_factory.h"
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/common/pref_names.h"
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "jni/SigninManager_jni.h"
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY)
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/browser_policy_connector.h"
28558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/policy/cloud/cloud_policy_core.h"
29558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/policy/cloud/cloud_policy_store.h"
30558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/policy/cloud/user_cloud_policy_manager.h"
31558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h"
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/cloud/user_policy_signin_service_android.h"
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h"
349ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "google_apis/gaia/gaia_auth_util.h"
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
37558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochnamespace {
38558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
39558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// A BrowsingDataRemover::Observer that clears all Profile data and then
40558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// invokes a callback and deletes itself.
41558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass ProfileDataRemover : public BrowsingDataRemover::Observer {
42558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch public:
43558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  ProfileDataRemover(Profile* profile, const base::Closure& callback)
44558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      : callback_(callback),
45558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        origin_loop_(base::MessageLoopProxy::current()),
46558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        remover_(BrowsingDataRemover::CreateForUnboundedRange(profile)) {
47558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    remover_->AddObserver(this);
48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    remover_->Remove(BrowsingDataRemover::REMOVE_ALL, BrowsingDataHelper::ALL);
49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
51558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual ~ProfileDataRemover() {}
52558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
53558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual void OnBrowsingDataRemoverDone() OVERRIDE {
54558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    remover_->RemoveObserver(this);
55558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    origin_loop_->PostTask(FROM_HERE, callback_);
56558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    origin_loop_->DeleteSoon(FROM_HERE, this);
57558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
58558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
59558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch private:
60558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  base::Closure callback_;
61558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  scoped_refptr<base::MessageLoopProxy> origin_loop_;
62558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  BrowsingDataRemover* remover_;
63558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
64558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(ProfileDataRemover);
65558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch};
66558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
67558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}  // namespace
68558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
697dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochSigninManagerAndroid::SigninManagerAndroid(JNIEnv* env, jobject obj)
70558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    : profile_(NULL),
71558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      weak_factory_(this) {
727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  java_signin_manager_.Reset(env, obj);
737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DCHECK(g_browser_process);
747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DCHECK(g_browser_process->profile_manager());
757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  profile_ = g_browser_process->profile_manager()->GetDefaultProfile();
767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DCHECK(profile_);
777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
797dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochSigninManagerAndroid::~SigninManagerAndroid() {}
807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::CheckPolicyBeforeSignIn(JNIEnv* env,
827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                                   jobject obj,
837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                                   jstring username) {
847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY)
859ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  username_ = base::android::ConvertJavaStringToUTF8(env, username);
867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  policy::UserPolicySigninService* service =
877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      policy::UserPolicySigninServiceFactory::GetForProfile(profile_);
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  service->RegisterForPolicy(
899ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      base::android::ConvertJavaStringToUTF8(env, username),
907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      base::Bind(&SigninManagerAndroid::OnPolicyRegisterDone,
91558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                 weak_factory_.GetWeakPtr()));
927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#else
937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // This shouldn't be called when ShouldLoadPolicyForUser() is false.
947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  NOTREACHED();
95558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  base::android::ScopedJavaLocalRef<jstring> domain;
967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  Java_SigninManager_onPolicyCheckedBeforeSignIn(env,
977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                                 java_signin_manager_.obj(),
989ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                                                 domain.obj());
997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::FetchPolicyBeforeSignIn(JNIEnv* env, jobject obj) {
1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY)
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (!dm_token_.empty()) {
1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    policy::UserPolicySigninService* service =
1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        policy::UserPolicySigninServiceFactory::GetForProfile(profile_);
1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    service->FetchPolicyForSignedInUser(
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        username_,
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        dm_token_,
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        client_id_,
1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        base::Bind(&SigninManagerAndroid::OnPolicyFetchDone,
112558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                   weak_factory_.GetWeakPtr()));
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    dm_token_.clear();
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    client_id_.clear();
1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return;
1167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
1177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // This shouldn't be called when ShouldLoadPolicyForUser() is false, or when
1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // CheckPolicyBeforeSignIn() failed.
1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  NOTREACHED();
1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  Java_SigninManager_onPolicyFetchedBeforeSignIn(env,
1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                                 java_signin_manager_.obj());
1237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::OnSignInCompleted(JNIEnv* env,
1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                             jobject obj,
1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                             jstring username) {
1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  SigninManagerFactory::GetForProfile(profile_)->OnExternalSigninCompleted(
1299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      base::android::ConvertJavaStringToUTF8(env, username));
1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::SignOut(JNIEnv* env, jobject obj) {
1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  SigninManagerFactory::GetForProfile(profile_)->SignOut();
1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
136558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochbase::android::ScopedJavaLocalRef<jstring>
137558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochSigninManagerAndroid::GetManagementDomain(JNIEnv* env, jobject obj) {
138558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  base::android::ScopedJavaLocalRef<jstring> domain;
139558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
140558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY)
141558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  policy::UserCloudPolicyManager* manager =
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      policy::UserCloudPolicyManagerFactory::GetForBrowserContext(profile_);
143558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  policy::CloudPolicyStore* store = manager->core()->store();
144558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
145558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  if (store && store->is_managed() && store->policy()->has_username()) {
146558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    domain.Reset(
147558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        base::android::ConvertUTF8ToJavaString(
148558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch            env, gaia::ExtractDomainName(store->policy()->username())));
149558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
150558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif
151558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
152558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  return domain;
153558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
154558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
155558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid SigninManagerAndroid::WipeProfileData(JNIEnv* env, jobject obj) {
156558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // The ProfileDataRemover deletes itself once done.
157558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  new ProfileDataRemover(
158558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      profile_,
159558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      base::Bind(&SigninManagerAndroid::OnBrowsingDataRemoverDone,
160558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                 weak_factory_.GetWeakPtr()));
161558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
162558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
1637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY)
1647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::OnPolicyRegisterDone(
166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string& dm_token,
167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string& client_id) {
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  dm_token_ = dm_token;
169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  client_id_ = client_id_;
1707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  JNIEnv* env = base::android::AttachCurrentThread();
172558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  base::android::ScopedJavaLocalRef<jstring> domain;
173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (!dm_token_.empty()) {
1749ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    DCHECK(!username_.empty());
1759ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    domain.Reset(
1769ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch        base::android::ConvertUTF8ToJavaString(
1779ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            env, gaia::ExtractDomainName(username_)));
1789ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  } else {
1799ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    username_.clear();
1809ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  }
1819ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  Java_SigninManager_onPolicyCheckedBeforeSignIn(env,
1837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                                 java_signin_manager_.obj(),
1849ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                                                 domain.obj());
1857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::OnPolicyFetchDone(bool success) {
1889ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  Java_SigninManager_onPolicyFetchedBeforeSignIn(
1899ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      base::android::AttachCurrentThread(),
1909ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      java_signin_manager_.obj());
1917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
1947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
195558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid SigninManagerAndroid::OnBrowsingDataRemoverDone() {
196558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_);
197558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  model->RemoveAll();
198558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
199558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // All the Profile data has been wiped. Clear the last signed in username as
200558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // well, so that the next signin doesn't trigger the acount change dialog.
201558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  profile_->GetPrefs()->ClearPref(prefs::kGoogleServicesLastUsername);
202558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
203558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  Java_SigninManager_onProfileDataWiped(base::android::AttachCurrentThread(),
204558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                        java_signin_manager_.obj());
205558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
206558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
2073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void SigninManagerAndroid::LogInSignedInUser(JNIEnv* env, jobject obj) {
2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // AutoLogin deletes itself.
2093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  GoogleAutoLoginHelper* autoLogin = new GoogleAutoLoginHelper(profile_);
2103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  autoLogin->LogIn();
2113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
2123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static jlong Init(JNIEnv* env, jobject obj) {
2147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  SigninManagerAndroid* signin_manager_android =
2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      new SigninManagerAndroid(env, obj);
216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return reinterpret_cast<intptr_t>(signin_manager_android);
2177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstatic jboolean ShouldLoadPolicyForUser(JNIEnv* env,
2207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                        jobject obj,
2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                        jstring j_username) {
2227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY)
2239ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  std::string username =
2249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      base::android::ConvertJavaStringToUTF8(env, j_username);
2257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return !policy::BrowserPolicyConnector::IsNonEnterpriseUser(username);
2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#else
2277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return false;
2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
2307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// static
2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool SigninManagerAndroid::Register(JNIEnv* env) {
2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return RegisterNativesImpl(env);
2347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
235