Add ICU message format support
[chromium-blink-merge.git] / chrome / browser / sync / profile_sync_service_android.h
blob3bb270e6eed5809715398219ea76e4d5d84a9202
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_ANDROID_H_
6 #define CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_ANDROID_H_
8 #include <jni.h>
9 #include <map>
11 #include "base/android/jni_weak_ref.h"
12 #include "base/callback.h"
13 #include "base/compiler_specific.h"
14 #include "base/time/time.h"
15 #include "components/invalidation/public/invalidation_util.h"
16 #include "components/sync_driver/sync_prefs.h"
17 #include "components/sync_driver/sync_service_observer.h"
18 #include "google/cacheinvalidation/include/types.h"
19 #include "google_apis/gaia/google_service_auth_error.h"
21 class Profile;
22 class ProfileSyncService;
24 // Android wrapper of the ProfileSyncService which provides access from the Java
25 // layer. Note that on Android, there's only a single profile, and therefore
26 // a single instance of this wrapper. The name of the Java class is
27 // ProfileSyncService.
28 // This class should only be accessed from the UI thread.
29 class ProfileSyncServiceAndroid : public sync_driver::SyncServiceObserver {
30 public:
32 ProfileSyncServiceAndroid(JNIEnv* env, jobject obj);
34 // This method should be called once right after contructing the object.
35 void Init();
37 // Called from Java when the user manually enables sync
38 void RequestStart(JNIEnv* env, jobject obj);
40 // Called from Java when the user manually disables sync
41 void RequestStop(JNIEnv* env, jobject obj);
43 // Called from Java when the user signs out of Chrome
44 void SignOutSync(JNIEnv* env, jobject obj);
46 // Called from Java when we get a signal that the Directory should be saved.
47 void FlushDirectory(JNIEnv* env, jobject obj);
49 // Returns a string version of browser_sync::SyncBackendHost::StatusSummary
50 base::android::ScopedJavaLocalRef<jstring> QuerySyncStatusSummary(
51 JNIEnv* env, jobject obj);
53 // Retrieves all Sync data as JSON. This method is asynchronous; all data is
54 // passed to |callback| upon completion.
55 void GetAllNodes(JNIEnv* env, jobject obj, jobject callback);
57 // Called from Java early during startup to ensure we use the correct
58 // unique machine tag in session sync.
59 // This must be called before the |SessionModelAssociator| is initialized.
60 void SetSyncSessionsId(JNIEnv* env, jobject obj, jstring tag);
62 // Returns true if the sync backend is initialized.
63 jboolean IsSyncInitialized(JNIEnv* env, jobject obj);
65 // Returns true if the sync is currently being setup for the first time.
66 jboolean IsFirstSetupInProgress(JNIEnv* env, jobject obj);
68 // Returns true if encrypting everything is allowed.
69 jboolean IsEncryptEverythingAllowed(JNIEnv* env, jobject obj);
71 // Returns true if the user is currently encrypting everything.
72 jboolean IsEncryptEverythingEnabled(JNIEnv* env, jobject obj);
74 // Returns true if the sync code needs a passphrase for either encryption or
75 // decryption (can need a passphrase for encryption if the user is turning on
76 // encryption and no passphrase has been set yet).
77 jboolean IsPassphraseRequired(JNIEnv* env, jobject obj);
79 // Returns true if the sync code needs a decryption passphrase for one of the
80 // currently enabled types.
81 jboolean IsPassphraseRequiredForDecryption(JNIEnv* env, jobject obj);
83 // Returns true if the sync code needs a decryption passphrase for *any* type,
84 // even types that aren't supported on this platform (like passwords).
85 jboolean IsPassphraseRequiredForExternalType(JNIEnv* env, jobject obj);
87 // Returns true if the sync code needs a custom decryption passphrase.
88 // Can not be called if the sync backend is not initialized.
89 jboolean IsUsingSecondaryPassphrase(JNIEnv* env, jobject obj);
91 // Returns true if the decryption passphrase works (was able to decrypt the
92 // stored sync data). Should only be called if
93 // IsPassphraseRequiredForDecryption() returns true.
94 jboolean SetDecryptionPassphrase(JNIEnv* env,
95 jobject obj,
96 jstring passphrase);
98 // Encrypts the user's data with the passed custom passphrase.
99 void SetEncryptionPassphrase(JNIEnv* env,
100 jobject obj,
101 jstring passphrase);
103 // Returns whether the cryptographer is ready (i.e. encrypted types can be
104 // handled).
105 jboolean IsCryptographerReady(JNIEnv* env, jobject);
107 // Returns the actual passphrase type being used for encryption. This is a
108 // value from the enum defined in syncer::PassphraseType and must be matched
109 // in Java.
110 jint GetPassphraseType(JNIEnv* env, jobject obj);
112 // Returns true if the current explicit passphrase time is defined.
113 jboolean HasExplicitPassphraseTime(JNIEnv* env, jobject);
115 // Returns the current explicit passphrase time.
116 jlong GetExplicitPassphraseTime(JNIEnv* env, jobject);
118 base::android::ScopedJavaLocalRef<jstring>
119 GetSyncEnterGooglePassphraseBodyWithDateText(
120 JNIEnv* env, jobject);
122 base::android::ScopedJavaLocalRef<jstring>
123 GetSyncEnterCustomPassphraseBodyWithDateText(
124 JNIEnv* env, jobject);
126 base::android::ScopedJavaLocalRef<jstring>
127 GetCurrentSignedInAccountText(
128 JNIEnv* env, jobject);
130 base::android::ScopedJavaLocalRef<jstring>
131 GetSyncEnterCustomPassphraseBodyText(
132 JNIEnv* env, jobject);
134 // Returns true if sync has been migrated.
135 jboolean IsSyncKeystoreMigrationDone(JNIEnv* env, jobject obj);
137 // Get the set of active data types. These are the types currently being
138 // synced. Note that control types are always included here.
139 // Returns a bit map of the values from
140 // profile_sync_service_android.cc.
141 jlong GetActiveDataTypes(JNIEnv* env, jobject obj);
143 // Get the set of preferred data types. These are the types that the user
144 // has requested be synced.
145 // Returns a bit map of the values from
146 // profile_sync_service_android.cc.
147 jlong GetPreferredDataTypes(JNIEnv* env, jobject obj);
149 // Enables the passed data types.
150 // If |sync_everything| is true, then all data types are enabled and the
151 // contents of |model_type_selection| is
152 // ignored.
153 // Otherwise, the values of |model_type_selection| must contain a bit map of
154 // values from profile_sync_service_android.cc.
155 void SetPreferredDataTypes(JNIEnv* env,
156 jobject obj,
157 jboolean sync_everything,
158 jlong model_type_selection);
160 // Tells sync that we're currently configuring so no data types should be
161 // downloaded yet.
162 void SetSetupInProgress(JNIEnv* env, jobject obj, jboolean in_progress);
164 // Tells sync that sync setup is complete so we can start syncing now.
165 void SetSyncSetupCompleted(JNIEnv* env, jobject obj);
167 // Returns true if sync setup has been completed.
168 jboolean HasSyncSetupCompleted(JNIEnv* env, jobject obj);
170 // See ProfileSyncService::IsSyncRequested().
171 jboolean IsSyncRequested(JNIEnv* env, jobject obj);
173 // See ProfileSyncService::IsSyncActive().
174 jboolean IsSyncActive(JNIEnv* env, jobject obj);
176 // Returns true if sync is configured to "sync everything".
177 jboolean HasKeepEverythingSynced(JNIEnv* env, jobject obj);
179 // Turns on encryption for all data types. This is an asynchronous operation
180 // which happens after the current configuration pass is done, so a call to
181 // this routine must be followed by a call to SetEnabledDataTypes().
182 void EnableEncryptEverything(JNIEnv* env, jobject obj);
184 // Returns true if sync has encountered an unrecoverable error.
185 jboolean HasUnrecoverableError(JNIEnv* env, jobject obj);
187 // Returns sync internals in a JSON-formatted Java string.
188 base::android::ScopedJavaLocalRef<jstring> GetAboutInfoForTest(JNIEnv* env,
189 jobject obj);
191 // Returns the integer value corresponding to the current auth error state
192 // (GoogleServiceAuthError.State).
193 jint GetAuthError(JNIEnv* env, jobject obj);
195 // sync_driver::SyncServiceObserver:
196 void OnStateChanged() override;
198 // Getter/setter for out of band (system notification) passphrase prompt.
199 jboolean IsPassphrasePrompted(JNIEnv* env, jobject obj);
200 void SetPassphrasePrompted(JNIEnv* env, jobject obj, jboolean prompted);
202 // Returns a timestamp for when a sync was last executed. The return value is
203 // the internal value of base::Time.
204 jlong GetLastSyncedTimeForTest(JNIEnv* env, jobject obj);
206 // Overrides ProfileSyncService's NetworkResources object. This is used to
207 // set up the Sync FakeServer for testing.
208 void OverrideNetworkResourcesForTest(JNIEnv* env,
209 jobject obj,
210 jlong network_resources);
212 // Public for tests.
213 static jlong ModelTypeSetToSelection(syncer::ModelTypeSet model_types);
215 // Converts a bitmap of model types to a set of Java ModelTypes, and returns
216 // their string descriptions separated by commas.
217 static std::string ModelTypeSelectionToStringForTest(
218 jlong model_type_selection);
220 static ProfileSyncServiceAndroid* GetProfileSyncServiceAndroid();
222 // Registers the ProfileSyncServiceAndroid's native methods through JNI.
223 static bool Register(JNIEnv* env);
225 private:
226 typedef std::map<invalidation::ObjectId,
227 int64,
228 syncer::ObjectIdLessThan> ObjectIdVersionMap;
230 ~ProfileSyncServiceAndroid() override;
231 // Remove observers to profile sync service.
232 void RemoveObserver();
234 Profile* profile_;
235 ProfileSyncService* sync_service_;
236 // The class that handles getting, setting, and persisting sync
237 // preferences.
238 scoped_ptr<sync_driver::SyncPrefs> sync_prefs_;
240 // Java-side ProfileSyncService object.
241 JavaObjectWeakGlobalRef weak_java_profile_sync_service_;
243 DISALLOW_COPY_AND_ASSIGN(ProfileSyncServiceAndroid);
246 #endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_ANDROID_H_