| // 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_SYNC_SERVICE_ANDROID_BRIDGE_H_ |
| #define CHROME_BROWSER_SYNC_SYNC_SERVICE_ANDROID_BRIDGE_H_ |
| |
| #include <memory> |
| |
| #include "base/android/jni_weak_ref.h" |
| #include "components/sync/driver/sync_service_observer.h" |
| #include "components/sync/engine/net/http_post_provider_factory.h" |
| |
| namespace syncer { |
| class SyncServiceImpl; |
| class SyncSetupInProgressHandle; |
| } // namespace syncer |
| |
| // Forwards calls from SyncServiceImpl.java to the native SyncServiceImpl and |
| // back. Instead of directly implementing JNI free functions, this class is used |
| // so it can manage the lifetime of objects like SyncSetupInProgressHandle. |
| // Note that on Android, there's only a single profile, a single native |
| // SyncServiceImpl, and therefore a single instance of this class. |
| // Must only be accessed from the UI thread. |
| class SyncServiceAndroidBridge : public syncer::SyncServiceObserver { |
| public: |
| // |sync_service| must not be null. |
| SyncServiceAndroidBridge(JNIEnv* env, |
| syncer::SyncServiceImpl* sync_service, |
| jobject java_profile_sync_service); |
| ~SyncServiceAndroidBridge() override; |
| |
| SyncServiceAndroidBridge(const SyncServiceAndroidBridge&) = delete; |
| SyncServiceAndroidBridge& operator=(const SyncServiceAndroidBridge&) = delete; |
| |
| // syncer::SyncServiceObserver: |
| void OnStateChanged(syncer::SyncService* sync) override; |
| |
| // Please keep all methods below in the same order as the @NativeMethods in |
| // SyncServiceImpl.java. |
| jboolean IsSyncRequested(JNIEnv* env); |
| void SetSyncRequested(JNIEnv* env, jboolean requested); |
| jboolean CanSyncFeatureStart(JNIEnv* env); |
| jboolean IsSyncAllowedByPlatform(JNIEnv* env); |
| void SetSyncAllowedByPlatform(JNIEnv* env, jboolean allowed); |
| jboolean IsSyncFeatureActive(JNIEnv* env); |
| jboolean IsSyncDisabledByEnterprisePolicy(JNIEnv* env); |
| jboolean IsEngineInitialized(JNIEnv* env); |
| jboolean IsTransportStateActive(JNIEnv* env); |
| void SetSetupInProgress(JNIEnv* env, jboolean in_progress); |
| jboolean IsFirstSetupComplete(JNIEnv* env); |
| void SetFirstSetupComplete(JNIEnv* env, jint source); |
| base::android::ScopedJavaLocalRef<jintArray> GetActiveDataTypes(JNIEnv* env); |
| base::android::ScopedJavaLocalRef<jintArray> GetChosenDataTypes(JNIEnv* env); |
| void SetChosenDataTypes( |
| JNIEnv* env, |
| jboolean sync_everything, |
| const base::android::JavaParamRef<jintArray>& model_type_selection); |
| jboolean IsCustomPassphraseAllowed(JNIEnv* env); |
| jboolean IsEncryptEverythingEnabled(JNIEnv* env); |
| jboolean IsPassphraseRequiredForPreferredDataTypes(JNIEnv* env); |
| jboolean IsTrustedVaultKeyRequired(JNIEnv* env); |
| jboolean IsTrustedVaultKeyRequiredForPreferredDataTypes(JNIEnv* env); |
| jboolean IsTrustedVaultRecoverabilityDegraded(JNIEnv* env); |
| jboolean IsUsingExplicitPassphrase(JNIEnv* env); |
| jint GetPassphraseType(JNIEnv* env); |
| void SetEncryptionPassphrase( |
| JNIEnv* env, |
| const base::android::JavaParamRef<jstring>& passphrase); |
| jboolean SetDecryptionPassphrase( |
| JNIEnv* env, |
| const base::android::JavaParamRef<jstring>& passphrase); |
| // Returns 0 if there's no passphrase time. |
| jlong GetExplicitPassphraseTime(JNIEnv* env); |
| void GetAllNodes(JNIEnv* env, |
| const base::android::JavaParamRef<jobject>& callback); |
| jint GetAuthError(JNIEnv* env); |
| jboolean HasUnrecoverableError(JNIEnv* env); |
| jboolean RequiresClientUpgrade(JNIEnv* env); |
| void SetDecoupledFromAndroidMasterSync(JNIEnv* env); |
| jboolean GetDecoupledFromAndroidMasterSync(JNIEnv* env); |
| base::android::ScopedJavaLocalRef<jobject> GetAuthenticatedAccountInfo( |
| JNIEnv* env); |
| jboolean IsAuthenticatedAccountPrimary(JNIEnv* env); |
| jboolean IsPassphrasePromptMutedForCurrentProductVersion(JNIEnv* env); |
| void MarkPassphrasePromptMutedForCurrentProductVersion(JNIEnv* env); |
| jboolean HasKeepEverythingSynced(JNIEnv* env); |
| jboolean ShouldOfferTrustedVaultOptIn(JNIEnv* env); |
| void TriggerRefresh(JNIEnv* env); |
| // Returns a timestamp for when a sync was last executed. The return value is |
| // the internal value of base::Time. |
| jlong GetLastSyncedTimeForDebugging(JNIEnv* env); |
| jlong GetNativeSyncServiceImplForTest(JNIEnv* env); |
| |
| private: |
| // A reference to the sync service for this profile. |
| syncer::SyncServiceImpl* const native_sync_service_; |
| |
| // Java-side SyncServiceImpl object. |
| const JavaObjectWeakGlobalRef java_sync_service_; |
| |
| // Prevents Sync from running until configuration is complete. |
| std::unique_ptr<syncer::SyncSetupInProgressHandle> sync_blocker_; |
| }; |
| |
| #endif // CHROME_BROWSER_SYNC_SYNC_SERVICE_ANDROID_BRIDGE_H_ |