Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7091)

Unified Diff: chrome/browser/sync/profile_sync_service_android.h

Issue 12313075: [sync] Upstream the Android ProfileSyncService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_
« no previous file with comments | « chrome/browser/sync/glue/session_model_associator.cc ('k') | chrome/browser/sync/profile_sync_service_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698