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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
|
// 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_weak_ref.h"
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/time/time.h"
#include "components/invalidation/public/invalidation_util.h"
#include "components/sync_driver/sync_prefs.h"
#include "components/sync_driver/sync_service_observer.h"
#include "google/cacheinvalidation/include/types.h"
#include "google_apis/gaia/google_service_auth_error.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 sync_driver::SyncServiceObserver {
public:
ProfileSyncServiceAndroid(JNIEnv* env, jobject obj);
~ProfileSyncServiceAndroid() override;
// This method should be called once right after contructing the object.
// Returns false if we didn't get a ProfileSyncService.
bool Init();
// sync_driver::SyncServiceObserver:
void OnStateChanged() override;
// Pure ProfileSyncService calls.
jboolean IsSyncRequested(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void RequestStart(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void RequestStop(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SignOutSync(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jboolean IsSyncActive(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jboolean IsBackendInitialized(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SetSetupInProgress(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jboolean in_progress);
jboolean HasSyncSetupCompleted(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SetSyncSetupCompleted(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
base::android::ScopedJavaLocalRef<jintArray> GetActiveDataTypes(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
base::android::ScopedJavaLocalRef<jintArray> GetPreferredDataTypes(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SetPreferredDataTypes(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jboolean sync_everything,
const base::android::JavaParamRef<jintArray>& model_type_selection);
jboolean IsCryptographerReady(JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
jboolean IsEncryptEverythingAllowed(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jboolean IsEncryptEverythingEnabled(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void EnableEncryptEverything(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jboolean IsPassphraseRequiredForDecryption(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jboolean IsUsingSecondaryPassphrase(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
base::android::ScopedJavaLocalRef<jbyteArray> GetCustomPassphraseKey(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jint GetPassphraseType(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SetEncryptionPassphrase(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& passphrase);
jboolean SetDecryptionPassphrase(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& passphrase);
jboolean HasExplicitPassphraseTime(
JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
jlong GetExplicitPassphraseTime(JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
void FlushDirectory(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
base::android::ScopedJavaLocalRef<jstring> QuerySyncStatusSummary(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void GetAllNodes(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& callback);
jint GetAuthError(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
jboolean HasUnrecoverableError(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
// Pure SyncPrefs calls.
jboolean IsPassphrasePrompted(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SetPassphrasePrompted(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jboolean prompted);
void SetSyncSessionsId(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& tag);
jboolean HasKeepEverythingSynced(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
// UI string getters.
base::android::ScopedJavaLocalRef<jstring>
GetSyncEnterGooglePassphraseBodyWithDateText(
JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
base::android::ScopedJavaLocalRef<jstring>
GetSyncEnterCustomPassphraseBodyWithDateText(
JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
base::android::ScopedJavaLocalRef<jstring> GetCurrentSignedInAccountText(
JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
base::android::ScopedJavaLocalRef<jstring>
GetSyncEnterCustomPassphraseBodyText(
JNIEnv* env,
const base::android::JavaParamRef<jobject>&);
// Functionality only available for testing purposes.
// Returns sync internals in a JSON-formatted Java string.
base::android::ScopedJavaLocalRef<jstring> GetAboutInfoForTest(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
// Returns a timestamp for when a sync was last executed. The return value is
// the internal value of base::Time.
jlong GetLastSyncedTimeForTest(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
// Overrides ProfileSyncService's NetworkResources object. This is used to
// set up the Sync FakeServer for testing.
void OverrideNetworkResourcesForTest(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jlong network_resources);
static ProfileSyncServiceAndroid* GetProfileSyncServiceAndroid();
// Registers the ProfileSyncServiceAndroid's native methods through JNI.
static bool Register(JNIEnv* env);
private:
// Returns whether sync is allowed by Android.
bool IsSyncAllowedByAndroid() const;
// A reference to the Chrome profile object.
Profile* profile_;
// A reference to the sync service for this profile.
ProfileSyncService* sync_service_;
// The class that handles getting, setting, and persisting sync
// preferences.
scoped_ptr<sync_driver::SyncPrefs> sync_prefs_;
// Java-side ProfileSyncService object.
JavaObjectWeakGlobalRef weak_java_profile_sync_service_;
DISALLOW_COPY_AND_ASSIGN(ProfileSyncServiceAndroid);
};
#endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_ANDROID_H_
|