1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_SYNC_ANDROID_SYNC_SERVICE_ANDROID_BRIDGE_H_
#define COMPONENTS_SYNC_ANDROID_SYNC_SERVICE_ANDROID_BRIDGE_H_
#include <memory>
#include "base/android/scoped_java_ref.h"
#include "base/memory/raw_ptr.h"
#include "components/sync/service/sync_service_observer.h"
#include "google_apis/gaia/google_service_auth_error.h"
namespace syncer {
class SyncService;
class SyncSetupInProgressHandle;
// Forwards calls from SyncServiceImpl.java to the native SyncService 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
// SyncService, and therefore a single instance of this class.
// Must only be accessed from the UI thread.
class SyncServiceAndroidBridge : public SyncServiceObserver {
public:
// `j_sync_service` must be an object implementing the SyncService interface.
static SyncService* FromJavaObject(
const base::android::JavaRef<jobject>& j_sync_service);
// `native_sync_service` must be non-null and outlive this object.
explicit SyncServiceAndroidBridge(SyncService* native_sync_service);
~SyncServiceAndroidBridge() override;
SyncServiceAndroidBridge(const SyncServiceAndroidBridge&) = delete;
SyncServiceAndroidBridge& operator=(const SyncServiceAndroidBridge&) = delete;
base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
// SyncServiceObserver:
void OnStateChanged(SyncService* sync) override;
void OnSyncShutdown(SyncService* sync) override;
// Please keep all methods below in the same order as the @NativeMethods in
// SyncServiceImpl.java.
jboolean IsSyncFeatureEnabled(JNIEnv* env);
jboolean IsSyncFeatureActive(JNIEnv* env);
jboolean IsSyncDisabledByEnterprisePolicy(JNIEnv* env);
jboolean IsEngineInitialized(JNIEnv* env);
void SetSetupInProgress(JNIEnv* env, jboolean in_progress);
jboolean IsInitialSyncFeatureSetupComplete(JNIEnv* env);
void SetInitialSyncFeatureSetupComplete(JNIEnv* env, jint source);
base::android::ScopedJavaLocalRef<jintArray> GetActiveDataTypes(JNIEnv* env);
base::android::ScopedJavaLocalRef<jintArray> GetSelectedTypes(JNIEnv* env);
void GetTypesWithUnsyncedData(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& callback);
void GetLocalDataDescriptions(
JNIEnv* env,
const base::android::JavaParamRef<jintArray>& types,
const base::android::JavaParamRef<jobject>& callback);
void TriggerLocalDataMigration(
JNIEnv* env,
const base::android::JavaParamRef<jintArray>& types);
jboolean IsTypeManagedByPolicy(JNIEnv* env, jint type);
jboolean IsTypeManagedByCustodian(JNIEnv* env, jint type);
void SetSelectedTypes(JNIEnv* env,
jboolean sync_everything,
const base::android::JavaParamRef<jintArray>&
user_selectable_type_selection);
void SetSelectedType(JNIEnv* env, jint type, jboolean is_type_on);
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);
jint GetTransportState(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);
GoogleServiceAuthError GetAuthError(JNIEnv* env);
jboolean HasUnrecoverableError(JNIEnv* env);
jboolean RequiresClientUpgrade(JNIEnv* env);
base::android::ScopedJavaLocalRef<jobject> GetAccountInfo(JNIEnv* env);
jboolean HasSyncConsent(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);
void KeepAccountSettingsPrefsOnlyForUsers(
JNIEnv* env,
const base::android::JavaParamRef<jobjectArray>& gaia_ids);
private:
// A reference to the sync service for this profile.
const raw_ptr<SyncService> native_sync_service_;
// Java-side SyncServiceImpl object.
base::android::ScopedJavaGlobalRef<jobject> java_ref_;
// Prevents Sync from running until configuration is complete.
std::unique_ptr<SyncSetupInProgressHandle> sync_blocker_;
};
} // namespace syncer
namespace jni_zero {
template <>
inline syncer::SyncService* FromJniType<syncer::SyncService*>(
JNIEnv* env,
const base::android::JavaRef<jobject>& obj) {
return syncer::SyncServiceAndroidBridge::FromJavaObject(obj);
}
} // namespace jni_zero
#endif // COMPONENTS_SYNC_ANDROID_SYNC_SERVICE_ANDROID_BRIDGE_H_
|