diff options
author | tedchoc@chromium.org <tedchoc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-22 05:26:02 +0000 |
---|---|---|
committer | tedchoc@chromium.org <tedchoc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-22 05:26:02 +0000 |
commit | 246967cb9a3cc7b81e32a8191a3b03490d7a1949 (patch) | |
tree | cd9c8dafb21d56e337b0fa9a956cce894461869c /chrome/browser/profiles/profile_android.cc | |
parent | f3b3576935e25d8d4e6c244740a06a36b9dc9f8e (diff) | |
download | chromium_src-246967cb9a3cc7b81e32a8191a3b03490d7a1949.zip chromium_src-246967cb9a3cc7b81e32a8191a3b03490d7a1949.tar.gz chromium_src-246967cb9a3cc7b81e32a8191a3b03490d7a1949.tar.bz2 |
Add a profile object for android to pass to java.
This is to avoid passing the native pointer around in java land and make
it more explicit what it being operated on.
BUG=
TBR=thakis@chromium.org
NOTRY=true
Review URL: https://chromiumcodereview.appspot.com/12782006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@189764 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/profiles/profile_android.cc')
-rw-r--r-- | chrome/browser/profiles/profile_android.cc | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/chrome/browser/profiles/profile_android.cc b/chrome/browser/profiles/profile_android.cc new file mode 100644 index 0000000..71df381 --- /dev/null +++ b/chrome/browser/profiles/profile_android.cc @@ -0,0 +1,63 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/profiles/profile_android.h" + +#include "base/android/jni_android.h" +#include "chrome/browser/profiles/profile.h" +#include "jni/Profile_jni.h" + +using base::android::AttachCurrentThread; + +namespace { +const char kProfileAndroidKey[] = "profile_android"; +} // namespace + +// static +ProfileAndroid* ProfileAndroid::FromProfile(Profile* profile) { + if (!profile) + return NULL; + + ProfileAndroid* profile_android = static_cast<ProfileAndroid*>( + profile->GetUserData(kProfileAndroidKey)); + if (!profile_android) { + profile_android = new ProfileAndroid(profile); + profile->SetUserData(kProfileAndroidKey, profile_android); + } + return profile_android; +} + +// static +Profile* ProfileAndroid::FromProfileAndroid(jobject obj) { + if (!obj) + return NULL; + + ProfileAndroid* profile_android = reinterpret_cast<ProfileAndroid*>( + Java_Profile_getNativePointer(AttachCurrentThread(), obj)); + if (!profile_android) + return NULL; + return profile_android->profile_; +} + +// static +bool ProfileAndroid::RegisterProfileAndroid(JNIEnv* env) { + return RegisterNativesImpl(env); +} + +ProfileAndroid::ProfileAndroid(Profile* profile) + : profile_(profile) { + JNIEnv* env = AttachCurrentThread(); + base::android::ScopedJavaLocalRef<jobject> jprofile = + Java_Profile_create(env, reinterpret_cast<int>(this)); + obj_.Reset(env, jprofile.obj()); + +} + +ProfileAndroid::~ProfileAndroid() { + Java_Profile_destroy(AttachCurrentThread(), obj_.obj()); +} + +base::android::ScopedJavaLocalRef<jobject> ProfileAndroid::GetJavaObject() { + return base::android::ScopedJavaLocalRef<jobject>(obj_); +} |