Index: chrome/browser/sync/profile_sync_service_android.h |
diff --git a/chrome/browser/sync/profile_sync_service_android.h b/chrome/browser/sync/profile_sync_service_android.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..466efc8b98c775002bad81098d1f3b6e69d2befb |
--- /dev/null |
+++ b/chrome/browser/sync/profile_sync_service_android.h |
@@ -0,0 +1,220 @@ |
+// 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_helper.h" |
+#include "base/compiler_specific.h" |
+#include "chrome/browser/api/sync/profile_sync_service_observer.h" |
+#include "sync/internal_api/public/base/model_type.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 ProfileSyncServiceObserver { |
+ public: |
+ ProfileSyncServiceAndroid(JNIEnv* env, jobject obj); |
+ |
+ // This method should be called once right after contructing the object. |
+ void Init(); |
+ |
+ // Called from Java when we need to nudge native syncer. The |objectId|, |
+ // |version| and |payload| values should come from an invalidation. |
+ void NudgeSyncer(JNIEnv* env, |
+ jobject obj, |
+ jstring objectId, |
+ jlong version, |
+ jstring payload); |
+ |
+ void TokenAvailable(JNIEnv*, jobject, jstring username, jstring auth_token); |
+ |
+ // Called from Java when the user manually enables sync |
+ void EnableSync(JNIEnv* env, jobject obj); |
+ |
+ // Called from Java when the user manually disables sync |
+ void DisableSync(JNIEnv* env, jobject obj); |
+ |
+ // Called from Java when the user signs in to Chrome. Starts up sync, and |
+ // if auth credentials are required, uses the passed |auth_token|. If |
+ // |auth_token| is empty, a new |auth_token| is requested from the UI thread |
+ // via a call to InvalidateAuthToken(). |
+ void SignInSync(JNIEnv* env, jobject obj, jstring username, |
+ jstring auth_token); |
+ |
+ // Called from Java when the user signs out of Chrome |
+ void SignOutSync(JNIEnv* env, jobject obj); |
+ |
+ // Returns a string version of browser_sync::SyncBackendHost::StatusSummary |
+ base::android::ScopedJavaLocalRef<jstring> QuerySyncStatusSummary( |
+ JNIEnv* env, jobject obj); |
+ |
+ // Called from Java early during startup to ensure we use the correct |
+ // unique machine tag in session sync. Returns true if the machine tag was |
+ // succesfully set. |
+ // This must be called before the |SessionModelAssociator| is initialized. |
+ jboolean SetSyncSessionsId(JNIEnv* env, jobject obj, jstring tag); |
+ |
+ // Returns true if the sync backend is initialized. |
+ jboolean IsSyncInitialized(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the sync is currently being setup for the first time. |
+ jboolean IsFirstSetupInProgress(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the user is currently encrypting everything. |
+ jboolean IsEncryptEverythingEnabled(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the sync code needs a passphrase for either encryption or |
+ // decryption (can need a passphrase for encryption if the user is turning on |
+ // encryption and no passphrase has been set yet). |
+ jboolean IsPassphraseRequired(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the sync code needs a decryption passphrase for one of the |
+ // currently enabled types. |
+ jboolean IsPassphraseRequiredForDecryption(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the sync code needs a decryption passphrase for *any* type, |
+ // even types that aren't supported on this platform (like passwords). |
+ jboolean IsPassphraseRequiredForExternalType(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the sync code needs a custom decryption passphrase. |
+ // Can not be called if the sync backend is not initialized. |
+ jboolean IsUsingSecondaryPassphrase(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the decryption passphrase works (was able to decrypt the |
+ // stored sync data). Should only be called if |
+ // IsPassphraseRequiredForDecryption() returns true. |
+ jboolean SetDecryptionPassphrase(JNIEnv* env, |
+ jobject obj, |
+ jstring passphrase); |
+ |
+ // Encrypts the user's data with the passed passphrase. If |is_gaia| == true |
+ // then the passphrase is treated as a google (GAIA) passphrase, otherwise |
+ // it's treated like an explicit/custom passphrase. |
+ void SetEncryptionPassphrase(JNIEnv* env, |
+ jobject obj, |
+ jstring passphrase, |
+ jboolean is_gaia); |
+ |
+ // Returns whether the cryptographer is ready (i.e. encrypted types can be |
+ // handled). |
+ jboolean IsCryptographerReady(JNIEnv* env, jobject); |
+ |
+ // Returns the actual passphrase type being used for encryption. This is a |
+ // value from the enum defined in syncer::PassphraseType and must be matched |
+ // in Java. |
+ jint GetPassphraseType(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the current explicit passphrase time is defined. |
+ jboolean HasExplicitPassphraseTime(JNIEnv* env, jobject); |
+ |
+ base::android::ScopedJavaLocalRef<jstring> |
+ GetSyncEnterGooglePassphraseBodyWithDateText( |
+ JNIEnv* env, jobject); |
+ |
+ base::android::ScopedJavaLocalRef<jstring> |
+ GetSyncEnterCustomPassphraseBodyWithDateText( |
+ JNIEnv* env, jobject); |
+ |
+ base::android::ScopedJavaLocalRef<jstring> |
+ GetSyncEnterCustomPassphraseBodyText( |
+ JNIEnv* env, jobject); |
+ |
+ // Returns true if sync has been migrated. |
+ jboolean IsSyncKeystoreMigrationDone(JNIEnv* env, jobject obj); |
+ |
+ // Enables the passed data types. |
+ // If |sync_everything| is true, then all data types are enabled and the |
+ // contents of |model_type_selection| is |
+ // ignored. |
+ // Otherwise, the values of |model_type_selection| must contain a bit map of |
+ // values from profile_sync_service_model_type_selection_android.h. |
+ void SetPreferredDataTypes(JNIEnv* env, |
+ jobject obj, |
+ jboolean sync_everything, |
+ jlong model_type_selection); |
+ |
+ // Tells sync that we're currently configuring so no data types should be |
+ // downloaded yet. |
+ void SetSetupInProgress(JNIEnv* env, jobject obj, jboolean in_progress); |
+ |
+ // Tells sync that sync setup is complete so we can start syncing now. |
+ void SetSyncSetupCompleted(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if sync setup has been completed. |
+ jboolean HasSyncSetupCompleted(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if sync is configured to "sync everything". |
+ jboolean HasKeepEverythingSynced(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the user has autofill sync enabled. |
+ jboolean IsAutofillSyncEnabled(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the user has bookmark sync enabled. |
+ jboolean IsBookmarkSyncEnabled(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the user has password sync enabled. |
+ jboolean IsPasswordSyncEnabled(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the user has typed URL sync enabled. |
+ jboolean IsTypedUrlSyncEnabled(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if the user has session sync enabled. |
+ jboolean IsSessionSyncEnabled(JNIEnv* env, jobject obj); |
+ |
+ // Turns on encryption for all data types. This is an asynchronous operation |
+ // which happens after the current configuration pass is done, so a call to |
+ // this routine must be followed by a call to SetEnabledDataTypes(). |
+ void EnableEncryptEverything(JNIEnv* env, jobject obj); |
+ |
+ // Returns true if sync has encountered an unrecoverable error. |
+ jboolean HasUnrecoverableError(JNIEnv* env, jobject obj); |
+ |
+ // Returns sync internals in a JSON-formatted Java string. |
+ base::android::ScopedJavaLocalRef<jstring> GetAboutInfoForTest(JNIEnv* env, |
+ jobject obj); |
+ |
+ // Returns the integer value corresponding to the current auth error state |
+ // (GoogleServiceAuthError.State). |
+ jint GetAuthError(JNIEnv* env, jobject obj); |
+ |
+ // ProfileSyncServiceObserver: |
+ virtual void OnStateChanged() OVERRIDE; |
+ |
+ // Registers the ProfileSyncServiceAndroid's native methods through JNI. |
+ static bool Register(JNIEnv* env); |
+ |
+ private: |
+ virtual ~ProfileSyncServiceAndroid(); |
+ // Remove observers to profile sync service. |
+ void RemoveObserver(); |
+ void InvalidateAuthToken(); |
+ // Called from Java when we need to nudge native syncer. The |objectId|, |
+ // |version| and |payload| values should come from an invalidation. |
+ void SendNudgeNotification(const std::string& str_object_id, |
+ int64 version, |
+ const std::string& payload); |
+ |
+ Profile* profile_; |
+ ProfileSyncService* sync_service_; |
+ // Java-side ProfileSyncService object. |
+ JavaObjectWeakGlobalRef weak_java_profile_sync_service_; |
+ |
+ // The invalidation API spec allows for the possibility of redundant |
+ // invalidations, so keep track of the max versions and drop |
+ // invalidations with old versions. |
+ std::map<syncer::ModelType, int64> max_invalidation_versions_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ProfileSyncServiceAndroid); |
+}; |
+ |
+#endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_ANDROID_H_ |