| 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_
|
|
|