blob: 5944b85b1f3f7b3a648dfefbf14f557743ec74ce [file] [log] [blame]
[email protected]d8e44d22014-05-15 23:14:051// Copyright 2014 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.
4
5#ifndef COMPONENTS_GCM_DRIVER_GCM_DRIVER_ANDROID_H
6#define COMPONENTS_GCM_DRIVER_GCM_DRIVER_ANDROID_H
7
8#include <jni.h>
9
[email protected]385c64ef2014-06-03 23:16:5410#include "base/android/scoped_java_ref.h"
[email protected]21b77652014-05-31 01:21:0911#include "base/compiler_specific.h"
12#include "base/macros.h"
peterbfa736e2015-07-28 16:19:5513#include "base/memory/ref_counted.h"
[email protected]21b77652014-05-31 01:21:0914#include "components/gcm_driver/gcm_driver.h"
peter1ed82982015-12-21 17:22:4915#include "components/gcm_driver/gcm_stats_recorder_android.h"
[email protected]21b77652014-05-31 01:21:0916
peterbfa736e2015-07-28 16:19:5517namespace base {
18class FilePath;
19class SequencedTaskRunner;
20}
21
[email protected]d8e44d22014-05-15 23:14:0522namespace gcm {
23
[email protected]385c64ef2014-06-03 23:16:5424// GCMDriver implementation for Android, using Android GCM APIs.
peter1ed82982015-12-21 17:22:4925class GCMDriverAndroid : public GCMDriver,
26 public GCMStatsRecorderAndroid::Delegate {
[email protected]d8e44d22014-05-15 23:14:0527 public:
peterbfa736e2015-07-28 16:19:5528 GCMDriverAndroid(
29 const base::FilePath& store_path,
30 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner);
dchenge27b1ef2015-02-04 23:34:1131 ~GCMDriverAndroid() override;
[email protected]21b77652014-05-31 01:21:0932
[email protected]385c64ef2014-06-03 23:16:5433 // Methods called from Java via JNI:
tornec56e1bf22015-12-11 19:14:3434 void OnRegisterFinished(
35 JNIEnv* env,
36 const base::android::JavaParamRef<jobject>& obj,
37 const base::android::JavaParamRef<jstring>& app_id,
38 const base::android::JavaParamRef<jstring>& registration_id,
39 jboolean success);
[email protected]385c64ef2014-06-03 23:16:5440 void OnUnregisterFinished(JNIEnv* env,
tornec56e1bf22015-12-11 19:14:3441 const base::android::JavaParamRef<jobject>& obj,
42 const base::android::JavaParamRef<jstring>& app_id,
43 jboolean success);
44 void OnMessageReceived(
45 JNIEnv* env,
46 const base::android::JavaParamRef<jobject>& obj,
47 const base::android::JavaParamRef<jstring>& app_id,
48 const base::android::JavaParamRef<jstring>& sender_id,
49 const base::android::JavaParamRef<jstring>& collapse_key,
50 const base::android::JavaParamRef<jbyteArray>& raw_data,
51 const base::android::JavaParamRef<jobjectArray>& data_keys_and_values);
[email protected]385c64ef2014-06-03 23:16:5452
[email protected]21b77652014-05-31 01:21:0953 // Register JNI methods.
[email protected]d8e44d22014-05-15 23:14:0554 static bool RegisterBindings(JNIEnv* env);
[email protected]21b77652014-05-31 01:21:0955
[email protected]c27c10792014-06-05 15:27:2356 // GCMDriver implementation:
dchenge27b1ef2015-02-04 23:34:1157 void OnSignedIn() override;
58 void OnSignedOut() override;
59 void Enable() override;
60 void AddConnectionObserver(GCMConnectionObserver* observer) override;
61 void RemoveConnectionObserver(GCMConnectionObserver* observer) override;
62 void Disable() override;
63 GCMClient* GetGCMClientForTesting() const override;
64 bool IsStarted() const override;
65 bool IsConnected() const override;
66 void GetGCMStatistics(const GetGCMStatisticsCallback& callback,
peter1ed82982015-12-21 17:22:4967 ClearActivityLogs clear_logs) override;
dchenge27b1ef2015-02-04 23:34:1168 void SetGCMRecording(const GetGCMStatisticsCallback& callback,
69 bool recording) override;
70 void SetAccountTokens(
mostynbfe59f482014-10-06 15:04:4671 const std::vector<GCMClient::AccountTokenInfo>& account_tokens) override;
dchenge27b1ef2015-02-04 23:34:1172 void UpdateAccountMapping(const AccountMapping& account_mapping) override;
73 void RemoveAccountMapping(const std::string& account_id) override;
74 base::Time GetLastTokenFetchTime() override;
75 void SetLastTokenFetchTime(const base::Time& time) override;
76 void WakeFromSuspendForHeartbeat(bool wake) override;
johnme54a3e1482016-03-11 19:13:2277 InstanceIDHandler* GetInstanceIDHandlerInternal() override;
fgorski22754462015-05-14 00:05:2278 void AddHeartbeatInterval(const std::string& scope, int interval_ms) override;
79 void RemoveHeartbeatInterval(const std::string& scope) override;
[email protected]c27c10792014-06-05 15:27:2380
peter1ed82982015-12-21 17:22:4981 // GCMStatsRecorder::Delegate implementation:
82 void OnActivityRecorded() override;
83
[email protected]c27c10792014-06-05 15:27:2384 protected:
85 // GCMDriver implementation:
dchenge27b1ef2015-02-04 23:34:1186 GCMClient::Result EnsureStarted(GCMClient::StartMode start_mode) override;
87 void RegisterImpl(const std::string& app_id,
88 const std::vector<std::string>& sender_ids) override;
89 void UnregisterImpl(const std::string& app_id) override;
johnme07b355a2015-02-19 17:00:5190 void UnregisterWithSenderIdImpl(const std::string& app_id,
91 const std::string& sender_id) override;
dchenge27b1ef2015-02-04 23:34:1192 void SendImpl(const std::string& app_id,
93 const std::string& receiver_id,
mvanouwerkerkf8633deb2015-07-13 11:04:0694 const OutgoingMessage& message) override;
peteree284ba52016-02-01 11:53:2895 void RecordDecryptionFailure(const std::string& app_id,
peter266a2aa42016-02-19 18:51:3996 GCMEncryptionProvider::DecryptionResult result)
peteree284ba52016-02-01 11:53:2897 override;
[email protected]c27c10792014-06-05 15:27:2398
[email protected]21b77652014-05-31 01:21:0999 private:
[email protected]385c64ef2014-06-03 23:16:54100 base::android::ScopedJavaGlobalRef<jobject> java_ref_;
101
peter1ed82982015-12-21 17:22:49102 // Callback for GetGCMStatistics.
103 GetGCMStatisticsCallback get_gcm_statistics_callback_;
104
105 // Recorder that logs GCM activities.
106 GCMStatsRecorderAndroid recorder_;
107
[email protected]21b77652014-05-31 01:21:09108 DISALLOW_COPY_AND_ASSIGN(GCMDriverAndroid);
[email protected]d8e44d22014-05-15 23:14:05109};
110
111} // namespace gcm
112
[email protected]21b77652014-05-31 01:21:09113#endif // COMPONENTS_GCM_DRIVER_GCM_DRIVER_ANDROID_H