blob: 45099020c3feb34e237ec9a1acf357a77862b8ad [file] [log] [blame]
// 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.
#ifndef CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_ANDROID_H_
#define CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_ANDROID_H_
#include <jni.h>
#include <map>
#include "base/android/jni_weak_ref.h"
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/macros.h"
#include "base/time/time.h"
#include "components/invalidation/public/invalidation_util.h"
#include "components/sync_driver/sync_prefs.h"
#include "components/sync_driver/sync_service_observer.h"
#include "google/cacheinvalidation/include/types.h"
#include "google_apis/gaia/google_service_auth_error.h"
class Profile;
class ProfileSyncService;
// Android wrapper of the ProfileSyncService which provides access from the Java
// layer. Note that on Android, there's only a single profile, and therefore
// a single instance of this wrapper. The name of the Java class is
// ProfileSyncService.
// This class should only be accessed from the UI thread.
class ProfileSyncServiceAndroid : public sync_driver::SyncServiceObserver {
public:
ProfileSyncServiceAndroid(JNIEnv* env, jobject obj);
~ProfileSyncServiceAndroid() override;
// This method should be called once right after contructing the object.
// Returns false if we didn't get a ProfileSyncService.
bool Init();
// sync_driver::SyncServiceObserver:
void OnStateChanged() override;
// Pure ProfileSyncService calls.
jboolean IsSyncRequested(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void RequestStart(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void RequestStop(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SignOutSync(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jboolean IsSyncActive(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jboolean IsBackendInitialized(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SetSetupInProgress(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jboolean in_progress);
jboolean IsFirstSetupComplete(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SetFirstSetupComplete(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
base::android::ScopedJavaLocalRef<jintArray> GetActiveDataTypes(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
base::android::ScopedJavaLocalRef<jintArray> GetPreferredDataTypes(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SetPreferredDataTypes(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jboolean sync_everything,
const base::android::JavaParamRef<jintArray>& model_type_selection);
jboolean IsCryptographerReady(JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
jboolean IsEncryptEverythingAllowed(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jboolean IsEncryptEverythingEnabled(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void EnableEncryptEverything(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jboolean IsPassphraseRequiredForDecryption(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jboolean IsUsingSecondaryPassphrase(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
base::android::ScopedJavaLocalRef<jbyteArray> GetCustomPassphraseKey(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jint GetPassphraseType(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SetEncryptionPassphrase(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& passphrase);
jboolean SetDecryptionPassphrase(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& passphrase);
jboolean HasExplicitPassphraseTime(
JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
jlong GetExplicitPassphraseTime(JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
void FlushDirectory(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
base::android::ScopedJavaLocalRef<jstring> QuerySyncStatusSummary(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void GetAllNodes(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& callback);
jint GetAuthError(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jboolean HasUnrecoverableError(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
// Pure SyncPrefs calls.
jboolean IsPassphrasePrompted(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SetPassphrasePrompted(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jboolean prompted);
void SetSyncSessionsId(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& tag);
jboolean HasKeepEverythingSynced(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
// UI string getters.
base::android::ScopedJavaLocalRef<jstring>
GetSyncEnterGooglePassphraseBodyWithDateText(
JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
base::android::ScopedJavaLocalRef<jstring>
GetSyncEnterCustomPassphraseBodyWithDateText(
JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
base::android::ScopedJavaLocalRef<jstring> GetCurrentSignedInAccountText(
JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
base::android::ScopedJavaLocalRef<jstring>
GetSyncEnterCustomPassphraseBodyText(
JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
// Functionality only available for testing purposes.
// Returns sync internals in a JSON-formatted Java string.
base::android::ScopedJavaLocalRef<jstring> GetAboutInfoForTest(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
// Returns a timestamp for when a sync was last executed. The return value is
// the internal value of base::Time.
jlong GetLastSyncedTimeForTest(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
// Overrides ProfileSyncService's NetworkResources object. This is used to
// set up the Sync FakeServer for testing.
void OverrideNetworkResourcesForTest(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jlong network_resources);
static ProfileSyncServiceAndroid* GetProfileSyncServiceAndroid();
// Registers the ProfileSyncServiceAndroid's native methods through JNI.
static bool Register(JNIEnv* env);
private:
// Returns whether sync is allowed by Android.
bool IsSyncAllowedByAndroid() const;
// A reference to the Chrome profile object.
Profile* profile_;
// A reference to the sync service for this profile.
ProfileSyncService* sync_service_;
// The class that handles getting, setting, and persisting sync
// preferences.
std::unique_ptr<sync_driver::SyncPrefs> sync_prefs_;
// Java-side ProfileSyncService object.
JavaObjectWeakGlobalRef weak_java_profile_sync_service_;
DISALLOW_COPY_AND_ASSIGN(ProfileSyncServiceAndroid);
};
#endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_ANDROID_H_