blob: 7cfcd632a37918814a5127434c0329541a666c5d [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"
johnme6576ecf2017-04-03 19:26:2811#include "base/bind.h"
[email protected]21b77652014-05-31 01:21:0912#include "base/compiler_specific.h"
13#include "base/macros.h"
peterbfa736e2015-07-28 16:19:5514#include "base/memory/ref_counted.h"
[email protected]21b77652014-05-31 01:21:0915#include "components/gcm_driver/gcm_driver.h"
peter1ed82982015-12-21 17:22:4916#include "components/gcm_driver/gcm_stats_recorder_android.h"
[email protected]21b77652014-05-31 01:21:0917
peterbfa736e2015-07-28 16:19:5518namespace base {
19class FilePath;
20class SequencedTaskRunner;
21}
22
[email protected]d8e44d22014-05-15 23:14:0523namespace gcm {
24
[email protected]385c64ef2014-06-03 23:16:5425// GCMDriver implementation for Android, using Android GCM APIs.
peter1ed82982015-12-21 17:22:4926class GCMDriverAndroid : public GCMDriver,
27 public GCMStatsRecorderAndroid::Delegate {
[email protected]d8e44d22014-05-15 23:14:0528 public:
peterbfa736e2015-07-28 16:19:5529 GCMDriverAndroid(
30 const base::FilePath& store_path,
31 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner);
dchenge27b1ef2015-02-04 23:34:1132 ~GCMDriverAndroid() override;
[email protected]21b77652014-05-31 01:21:0933
[email protected]385c64ef2014-06-03 23:16:5434 // Methods called from Java via JNI:
tornec56e1bf22015-12-11 19:14:3435 void OnRegisterFinished(
36 JNIEnv* env,
37 const base::android::JavaParamRef<jobject>& obj,
38 const base::android::JavaParamRef<jstring>& app_id,
39 const base::android::JavaParamRef<jstring>& registration_id,
40 jboolean success);
[email protected]385c64ef2014-06-03 23:16:5441 void OnUnregisterFinished(JNIEnv* env,
tornec56e1bf22015-12-11 19:14:3442 const base::android::JavaParamRef<jobject>& obj,
43 const base::android::JavaParamRef<jstring>& app_id,
44 jboolean success);
45 void OnMessageReceived(
46 JNIEnv* env,
47 const base::android::JavaParamRef<jobject>& obj,
48 const base::android::JavaParamRef<jstring>& app_id,
49 const base::android::JavaParamRef<jstring>& sender_id,
50 const base::android::JavaParamRef<jstring>& collapse_key,
51 const base::android::JavaParamRef<jbyteArray>& raw_data,
52 const base::android::JavaParamRef<jobjectArray>& data_keys_and_values);
[email protected]385c64ef2014-06-03 23:16:5453
[email protected]21b77652014-05-31 01:21:0954 // Register JNI methods.
johnme2f8daf92016-04-15 18:17:4455 static bool RegisterJni(JNIEnv* env);
[email protected]21b77652014-05-31 01:21:0956
[email protected]c27c10792014-06-05 15:27:2357 // GCMDriver implementation:
johnme6576ecf2017-04-03 19:26:2858 void ValidateRegistration(
59 const std::string& app_id,
60 const std::vector<std::string>& sender_ids,
61 const std::string& registration_id,
62 const ValidateRegistrationCallback& callback) override;
dchenge27b1ef2015-02-04 23:34:1163 void OnSignedIn() override;
64 void OnSignedOut() override;
65 void Enable() override;
66 void AddConnectionObserver(GCMConnectionObserver* observer) override;
67 void RemoveConnectionObserver(GCMConnectionObserver* observer) override;
68 void Disable() override;
69 GCMClient* GetGCMClientForTesting() const override;
70 bool IsStarted() const override;
71 bool IsConnected() const override;
72 void GetGCMStatistics(const GetGCMStatisticsCallback& callback,
peter1ed82982015-12-21 17:22:4973 ClearActivityLogs clear_logs) override;
dchenge27b1ef2015-02-04 23:34:1174 void SetGCMRecording(const GetGCMStatisticsCallback& callback,
75 bool recording) override;
76 void SetAccountTokens(
mostynbfe59f482014-10-06 15:04:4677 const std::vector<GCMClient::AccountTokenInfo>& account_tokens) override;
dchenge27b1ef2015-02-04 23:34:1178 void UpdateAccountMapping(const AccountMapping& account_mapping) override;
79 void RemoveAccountMapping(const std::string& account_id) override;
80 base::Time GetLastTokenFetchTime() override;
81 void SetLastTokenFetchTime(const base::Time& time) override;
82 void WakeFromSuspendForHeartbeat(bool wake) override;
johnme54a3e1482016-03-11 19:13:2283 InstanceIDHandler* GetInstanceIDHandlerInternal() override;
fgorski22754462015-05-14 00:05:2284 void AddHeartbeatInterval(const std::string& scope, int interval_ms) override;
85 void RemoveHeartbeatInterval(const std::string& scope) override;
[email protected]c27c10792014-06-05 15:27:2386
peter1ed82982015-12-21 17:22:4987 // GCMStatsRecorder::Delegate implementation:
88 void OnActivityRecorded() override;
89
[email protected]c27c10792014-06-05 15:27:2390 protected:
91 // GCMDriver implementation:
dchenge27b1ef2015-02-04 23:34:1192 GCMClient::Result EnsureStarted(GCMClient::StartMode start_mode) override;
93 void RegisterImpl(const std::string& app_id,
94 const std::vector<std::string>& sender_ids) override;
95 void UnregisterImpl(const std::string& app_id) override;
johnme07b355a2015-02-19 17:00:5196 void UnregisterWithSenderIdImpl(const std::string& app_id,
97 const std::string& sender_id) override;
dchenge27b1ef2015-02-04 23:34:1198 void SendImpl(const std::string& app_id,
99 const std::string& receiver_id,
mvanouwerkerkf8633deb2015-07-13 11:04:06100 const OutgoingMessage& message) override;
peteree284ba52016-02-01 11:53:28101 void RecordDecryptionFailure(const std::string& app_id,
Peter Beverlooa376e98c2017-06-27 15:55:37102 GCMDecryptionResult result) override;
[email protected]c27c10792014-06-05 15:27:23103
[email protected]21b77652014-05-31 01:21:09104 private:
[email protected]385c64ef2014-06-03 23:16:54105 base::android::ScopedJavaGlobalRef<jobject> java_ref_;
106
peter1ed82982015-12-21 17:22:49107 // Callback for GetGCMStatistics.
108 GetGCMStatisticsCallback get_gcm_statistics_callback_;
109
110 // Recorder that logs GCM activities.
111 GCMStatsRecorderAndroid recorder_;
112
[email protected]21b77652014-05-31 01:21:09113 DISALLOW_COPY_AND_ASSIGN(GCMDriverAndroid);
[email protected]d8e44d22014-05-15 23:14:05114};
115
116} // namespace gcm
117
[email protected]21b77652014-05-31 01:21:09118#endif // COMPONENTS_GCM_DRIVER_GCM_DRIVER_ANDROID_H