1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/profiles/profile_android.h"
7 #include "base/android/jni_android.h"
8 #include "chrome/browser/profiles/profile.h"
9 #include "chrome/browser/profiles/profile_manager.h"
10 #include "jni/Profile_jni.h"
12 using base::android::AttachCurrentThread
;
15 const char kProfileAndroidKey
[] = "profile_android";
19 ProfileAndroid
* ProfileAndroid::FromProfile(Profile
* profile
) {
23 ProfileAndroid
* profile_android
= static_cast<ProfileAndroid
*>(
24 profile
->GetUserData(kProfileAndroidKey
));
25 if (!profile_android
) {
26 profile_android
= new ProfileAndroid(profile
);
27 profile
->SetUserData(kProfileAndroidKey
, profile_android
);
29 return profile_android
;
33 Profile
* ProfileAndroid::FromProfileAndroid(jobject obj
) {
37 ProfileAndroid
* profile_android
= reinterpret_cast<ProfileAndroid
*>(
38 Java_Profile_getNativePointer(AttachCurrentThread(), obj
));
41 return profile_android
->profile_
;
45 bool ProfileAndroid::RegisterProfileAndroid(JNIEnv
* env
) {
46 return RegisterNativesImpl(env
);
50 jobject
ProfileAndroid::GetLastUsedProfile(JNIEnv
* env
, jclass clazz
) {
51 Profile
* profile
= ProfileManager::GetLastUsedProfile();
52 if (profile
== NULL
) {
53 NOTREACHED() << "Profile not found.";
57 ProfileAndroid
* profile_android
= ProfileAndroid::FromProfile(profile
);
58 if (profile_android
== NULL
) {
59 NOTREACHED() << "ProfileAndroid not found.";
63 return profile_android
->obj_
.obj();
67 jobject
GetLastUsedProfile(JNIEnv
* env
, jclass clazz
) {
68 return ProfileAndroid::GetLastUsedProfile(env
, clazz
);
71 ProfileAndroid::ProfileAndroid(Profile
* profile
)
73 JNIEnv
* env
= AttachCurrentThread();
74 base::android::ScopedJavaLocalRef
<jobject
> jprofile
=
75 Java_Profile_create(env
, reinterpret_cast<intptr_t>(this));
76 obj_
.Reset(env
, jprofile
.obj());
80 ProfileAndroid::~ProfileAndroid() {
81 Java_Profile_destroy(AttachCurrentThread(), obj_
.obj());
84 base::android::ScopedJavaLocalRef
<jobject
> ProfileAndroid::GetJavaObject() {
85 return base::android::ScopedJavaLocalRef
<jobject
>(obj_
);