summaryrefslogtreecommitdiffstats
path: root/chrome/browser/profiles/profile_android.cc
diff options
context:
space:
mode:
authortedchoc@chromium.org <tedchoc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-22 05:26:02 +0000
committertedchoc@chromium.org <tedchoc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-22 05:26:02 +0000
commit246967cb9a3cc7b81e32a8191a3b03490d7a1949 (patch)
treecd9c8dafb21d56e337b0fa9a956cce894461869c /chrome/browser/profiles/profile_android.cc
parentf3b3576935e25d8d4e6c244740a06a36b9dc9f8e (diff)
downloadchromium_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.cc63
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_);
+}