blob: dc19a9a29be3c07b9f9915690521f64f9f44a600 [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]c27c10792014-06-05 15:27:2354 // GCMDriver implementation:
johnme6576ecf2017-04-03 19:26:2855 void ValidateRegistration(
56 const std::string& app_id,
57 const std::vector<std::string>& sender_ids,
58 const std::string& registration_id,
59 const ValidateRegistrationCallback& callback) override;
dchenge27b1ef2015-02-04 23:34:1160 void OnSignedIn() override;
61 void OnSignedOut() override;
62 void Enable() override;
63 void AddConnectionObserver(GCMConnectionObserver* observer) override;
64 void RemoveConnectionObserver(GCMConnectionObserver* observer) override;
65 void Disable() override;
66 GCMClient* GetGCMClientForTesting() const override;
67 bool IsStarted() const override;
68 bool IsConnected() const override;
69 void GetGCMStatistics(const GetGCMStatisticsCallback& callback,
peter1ed82982015-12-21 17:22:4970 ClearActivityLogs clear_logs) override;
dchenge27b1ef2015-02-04 23:34:1171 void SetGCMRecording(const GetGCMStatisticsCallback& callback,
72 bool recording) override;
73 void SetAccountTokens(
mostynbfe59f482014-10-06 15:04:4674 const std::vector<GCMClient::AccountTokenInfo>& account_tokens) override;
dchenge27b1ef2015-02-04 23:34:1175 void UpdateAccountMapping(const AccountMapping& account_mapping) override;
76 void RemoveAccountMapping(const std::string& account_id) override;
77 base::Time GetLastTokenFetchTime() override;
78 void SetLastTokenFetchTime(const base::Time& time) override;
79 void WakeFromSuspendForHeartbeat(bool wake) override;
johnme54a3e1482016-03-11 19:13:2280 InstanceIDHandler* GetInstanceIDHandlerInternal() override;
fgorski22754462015-05-14 00:05:2281 void AddHeartbeatInterval(const std::string& scope, int interval_ms) override;
82 void RemoveHeartbeatInterval(const std::string& scope) override;
[email protected]c27c10792014-06-05 15:27:2383
peter1ed82982015-12-21 17:22:4984 // GCMStatsRecorder::Delegate implementation:
85 void OnActivityRecorded() override;
86
[email protected]c27c10792014-06-05 15:27:2387 protected:
88 // GCMDriver implementation:
dchenge27b1ef2015-02-04 23:34:1189 GCMClient::Result EnsureStarted(GCMClient::StartMode start_mode) override;
90 void RegisterImpl(const std::string& app_id,
91 const std::vector<std::string>& sender_ids) override;
92 void UnregisterImpl(const std::string& app_id) override;
johnme07b355a2015-02-19 17:00:5193 void UnregisterWithSenderIdImpl(const std::string& app_id,
94 const std::string& sender_id) override;
dchenge27b1ef2015-02-04 23:34:1195 void SendImpl(const std::string& app_id,
96 const std::string& receiver_id,
mvanouwerkerkf8633deb2015-07-13 11:04:0697 const OutgoingMessage& message) override;
peteree284ba52016-02-01 11:53:2898 void RecordDecryptionFailure(const std::string& app_id,
Peter Beverlooa376e98c2017-06-27 15:55:3799 GCMDecryptionResult result) override;
[email protected]c27c10792014-06-05 15:27:23100
[email protected]21b77652014-05-31 01:21:09101 private:
[email protected]385c64ef2014-06-03 23:16:54102 base::android::ScopedJavaGlobalRef<jobject> java_ref_;
103
peter1ed82982015-12-21 17:22:49104 // Callback for GetGCMStatistics.
105 GetGCMStatisticsCallback get_gcm_statistics_callback_;
106
107 // Recorder that logs GCM activities.
108 GCMStatsRecorderAndroid recorder_;
109
[email protected]21b77652014-05-31 01:21:09110 DISALLOW_COPY_AND_ASSIGN(GCMDriverAndroid);
[email protected]d8e44d22014-05-15 23:14:05111};
112
113} // namespace gcm
114
[email protected]21b77652014-05-31 01:21:09115#endif // COMPONENTS_GCM_DRIVER_GCM_DRIVER_ANDROID_H