12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_PROFILES_PROFILE_ANDROID_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_PROFILES_PROFILE_ANDROID_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <jni.h>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/android/scoped_java_ref.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/supports_user_data.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Profile;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Android wrapper around profile that provides safer passage from java and
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// back to native.
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ProfileAndroid : public base::SupportsUserData::Data {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static ProfileAndroid* FromProfile(Profile* profile);
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static Profile* FromProfileAndroid(jobject obj);
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static bool RegisterProfileAndroid(JNIEnv* env);
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static jobject GetLastUsedProfile(JNIEnv* env, jclass clazz);
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Return the original profile.
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::android::ScopedJavaLocalRef<jobject> GetOriginalProfile(
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      JNIEnv* env, jobject obj);
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Return the incognito profile.
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // WARNING: This will create the OffTheRecord profile if it doesn't already
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // exist. If this isn't what you want, you need to check
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // HasOffTheRecordProfile() first.
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::android::ScopedJavaLocalRef<jobject> GetOffTheRecordProfile(
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      JNIEnv* env, jobject obj);
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Return whether an off the record profile exists.
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  jboolean HasOffTheRecordProfile(JNIEnv* env, jobject obj);
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Whether this profile is off the record.
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  jboolean IsOffTheRecord(JNIEnv* env, jobject obj);
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit ProfileAndroid(Profile* profile);
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~ProfileAndroid();
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Profile* profile_;  // weak
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::android::ScopedJavaGlobalRef<jobject> obj_;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CHROME_BROWSER_PROFILES_PROFILE_ANDROID_H_
55