Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Side by Side Diff: components/gcm_driver/gcm_driver_android.cc

Issue 1515153003: Enable chrome://gcm-internals on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/gcm_driver/gcm_driver_android.h ('k') | components/gcm_driver/gcm_driver_desktop.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/gcm_driver/gcm_driver_android.h" 5 #include "components/gcm_driver/gcm_driver_android.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/android/context_utils.h" 9 #include "base/android/context_utils.h"
10 #include "base/android/jni_android.h" 10 #include "base/android/jni_android.h"
11 #include "base/android/jni_array.h" 11 #include "base/android/jni_array.h"
12 #include "base/android/jni_string.h" 12 #include "base/android/jni_string.h"
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "jni/GCMDriver_jni.h" 15 #include "jni/GCMDriver_jni.h"
16 16
17 using base::android::AppendJavaStringArrayToStringVector; 17 using base::android::AppendJavaStringArrayToStringVector;
18 using base::android::AttachCurrentThread; 18 using base::android::AttachCurrentThread;
19 using base::android::ConvertJavaStringToUTF8; 19 using base::android::ConvertJavaStringToUTF8;
20 using base::android::ConvertUTF8ToJavaString; 20 using base::android::ConvertUTF8ToJavaString;
21 using base::android::JavaByteArrayToByteVector; 21 using base::android::JavaByteArrayToByteVector;
22 22
23 namespace gcm { 23 namespace gcm {
24 24
25 GCMDriverAndroid::GCMDriverAndroid( 25 GCMDriverAndroid::GCMDriverAndroid(
26 const base::FilePath& store_path, 26 const base::FilePath& store_path,
27 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner) 27 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner)
28 : GCMDriver(store_path, blocking_task_runner) { 28 : GCMDriver(store_path, blocking_task_runner),
29 recorder_(this) {
29 JNIEnv* env = AttachCurrentThread(); 30 JNIEnv* env = AttachCurrentThread();
30 java_ref_.Reset( 31 java_ref_.Reset(
31 Java_GCMDriver_create(env, 32 Java_GCMDriver_create(env,
32 reinterpret_cast<intptr_t>(this), 33 reinterpret_cast<intptr_t>(this),
33 base::android::GetApplicationContext())); 34 base::android::GetApplicationContext()));
34 } 35 }
35 36
36 GCMDriverAndroid::~GCMDriverAndroid() { 37 GCMDriverAndroid::~GCMDriverAndroid() {
37 JNIEnv* env = AttachCurrentThread(); 38 JNIEnv* env = AttachCurrentThread();
38 Java_GCMDriver_destroy(env, java_ref_.obj()); 39 Java_GCMDriver_destroy(env, java_ref_.obj());
39 } 40 }
40 41
41 void GCMDriverAndroid::OnRegisterFinished( 42 void GCMDriverAndroid::OnRegisterFinished(
42 JNIEnv* env, 43 JNIEnv* env,
43 const JavaParamRef<jobject>& obj, 44 const JavaParamRef<jobject>& obj,
44 const JavaParamRef<jstring>& j_app_id, 45 const JavaParamRef<jstring>& j_app_id,
45 const JavaParamRef<jstring>& j_registration_id, 46 const JavaParamRef<jstring>& j_registration_id,
46 jboolean success) { 47 jboolean success) {
47 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); 48 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
48 std::string registration_id = ConvertJavaStringToUTF8(env, j_registration_id); 49 std::string registration_id = ConvertJavaStringToUTF8(env, j_registration_id);
49 GCMClient::Result result = success ? GCMClient::SUCCESS 50 GCMClient::Result result = success ? GCMClient::SUCCESS
50 : GCMClient::UNKNOWN_ERROR; 51 : GCMClient::UNKNOWN_ERROR;
51 52
53 recorder_.RecordRegistrationResponse(app_id, success);
54
52 RegisterFinished(app_id, registration_id, result); 55 RegisterFinished(app_id, registration_id, result);
53 } 56 }
54 57
55 void GCMDriverAndroid::OnUnregisterFinished( 58 void GCMDriverAndroid::OnUnregisterFinished(
56 JNIEnv* env, 59 JNIEnv* env,
57 const JavaParamRef<jobject>& obj, 60 const JavaParamRef<jobject>& obj,
58 const JavaParamRef<jstring>& j_app_id, 61 const JavaParamRef<jstring>& j_app_id,
59 jboolean success) { 62 jboolean success) {
60 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); 63 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
61 GCMClient::Result result = success ? GCMClient::SUCCESS 64 GCMClient::Result result = success ? GCMClient::SUCCESS
62 : GCMClient::UNKNOWN_ERROR; 65 : GCMClient::UNKNOWN_ERROR;
63 66
67 recorder_.RecordUnregistrationResponse(app_id, success);
68
64 UnregisterFinished(app_id, result); 69 UnregisterFinished(app_id, result);
65 } 70 }
66 71
67 void GCMDriverAndroid::OnMessageReceived( 72 void GCMDriverAndroid::OnMessageReceived(
68 JNIEnv* env, 73 JNIEnv* env,
69 const JavaParamRef<jobject>& obj, 74 const JavaParamRef<jobject>& obj,
70 const JavaParamRef<jstring>& j_app_id, 75 const JavaParamRef<jstring>& j_app_id,
71 const JavaParamRef<jstring>& j_sender_id, 76 const JavaParamRef<jstring>& j_sender_id,
72 const JavaParamRef<jstring>& j_collapse_key, 77 const JavaParamRef<jstring>& j_collapse_key,
73 const JavaParamRef<jbyteArray>& j_raw_data, 78 const JavaParamRef<jbyteArray>& j_raw_data,
74 const JavaParamRef<jobjectArray>& j_data_keys_and_values) { 79 const JavaParamRef<jobjectArray>& j_data_keys_and_values) {
75 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); 80 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
76 81
82 int message_byte_size = 0;
83
77 IncomingMessage message; 84 IncomingMessage message;
78 message.sender_id = ConvertJavaStringToUTF8(env, j_sender_id); 85 message.sender_id = ConvertJavaStringToUTF8(env, j_sender_id);
79 message.collapse_key = ConvertJavaStringToUTF8(env, j_collapse_key); 86 message.collapse_key = ConvertJavaStringToUTF8(env, j_collapse_key);
80 // Expand j_data_keys_and_values from array to map. 87 // Expand j_data_keys_and_values from array to map.
81 std::vector<std::string> data_keys_and_values; 88 std::vector<std::string> data_keys_and_values;
82 AppendJavaStringArrayToStringVector(env, 89 AppendJavaStringArrayToStringVector(env,
83 j_data_keys_and_values, 90 j_data_keys_and_values,
84 &data_keys_and_values); 91 &data_keys_and_values);
85 for (size_t i = 0; i + 1 < data_keys_and_values.size(); i += 2) { 92 for (size_t i = 0; i + 1 < data_keys_and_values.size(); i += 2) {
86 message.data[data_keys_and_values[i]] = data_keys_and_values[i+1]; 93 message.data[data_keys_and_values[i]] = data_keys_and_values[i+1];
94 message_byte_size += data_keys_and_values[i+1].size();
87 } 95 }
88 // Convert j_raw_data from byte[] to binary std::string. 96 // Convert j_raw_data from byte[] to binary std::string.
89 if (j_raw_data) { 97 if (j_raw_data) {
90 std::vector<uint8_t> raw_data; 98 std::vector<uint8_t> raw_data;
91 JavaByteArrayToByteVector(env, j_raw_data, &raw_data); 99 JavaByteArrayToByteVector(env, j_raw_data, &raw_data);
92 message.raw_data.assign(raw_data.begin(), raw_data.end()); 100 message.raw_data.assign(raw_data.begin(), raw_data.end());
101
102 message_byte_size += message.raw_data.size();
93 } 103 }
94 104
105 recorder_.RecordDataMessageReceived(app_id, message_byte_size);
106
95 DispatchMessage(app_id, message); 107 DispatchMessage(app_id, message);
96 } 108 }
97 109
98 void GCMDriverAndroid::OnMessagesDeleted( 110 void GCMDriverAndroid::OnMessagesDeleted(
99 JNIEnv* env, 111 JNIEnv* env,
100 const JavaParamRef<jobject>& obj, 112 const JavaParamRef<jobject>& obj,
101 const JavaParamRef<jstring>& j_app_id) { 113 const JavaParamRef<jstring>& j_app_id) {
102 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); 114 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
103 115
104 GetAppHandler(app_id)->OnMessagesDeleted(app_id); 116 GetAppHandler(app_id)->OnMessagesDeleted(app_id);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 return true; 149 return true;
138 } 150 }
139 151
140 bool GCMDriverAndroid::IsConnected() const { 152 bool GCMDriverAndroid::IsConnected() const {
141 // TODO(gcm): hook up to GCM connected status 153 // TODO(gcm): hook up to GCM connected status
142 return true; 154 return true;
143 } 155 }
144 156
145 void GCMDriverAndroid::GetGCMStatistics( 157 void GCMDriverAndroid::GetGCMStatistics(
146 const GetGCMStatisticsCallback& callback, 158 const GetGCMStatisticsCallback& callback,
147 bool clear_logs) { 159 ClearActivityLogs clear_logs) {
148 NOTIMPLEMENTED(); 160 DCHECK(!callback.is_null());
161
162 get_gcm_statistics_callback_ = callback;
163
164 if (clear_logs == CLEAR_LOGS)
165 recorder_.Clear();
166
167 GCMClient::GCMStatistics stats;
168 stats.is_recording = recorder_.is_recording();
169
170 recorder_.CollectActivities(&stats.recorded_activities);
171
172 callback.Run(stats);
149 } 173 }
150 174
151 void GCMDriverAndroid::SetGCMRecording(const GetGCMStatisticsCallback& callback, 175 void GCMDriverAndroid::SetGCMRecording(const GetGCMStatisticsCallback& callback,
152 bool recording) { 176 bool recording) {
153 NOTIMPLEMENTED(); 177 DCHECK(!callback.is_null());
178
179 recorder_.set_is_recording(recording);
180
181 GetGCMStatistics(callback, recording ? KEEP_LOGS : CLEAR_LOGS);
154 } 182 }
155 183
156 void GCMDriverAndroid::SetAccountTokens( 184 void GCMDriverAndroid::SetAccountTokens(
157 const std::vector<GCMClient::AccountTokenInfo>& account_tokens) { 185 const std::vector<GCMClient::AccountTokenInfo>& account_tokens) {
158 NOTIMPLEMENTED(); 186 NOTIMPLEMENTED();
159 } 187 }
160 188
161 void GCMDriverAndroid::UpdateAccountMapping( 189 void GCMDriverAndroid::UpdateAccountMapping(
162 const AccountMapping& account_mapping) { 190 const AccountMapping& account_mapping) {
163 NOTIMPLEMENTED(); 191 NOTIMPLEMENTED();
(...skipping 20 matching lines...) Expand all
184 return NULL; 212 return NULL;
185 } 213 }
186 214
187 void GCMDriverAndroid::AddHeartbeatInterval(const std::string& scope, 215 void GCMDriverAndroid::AddHeartbeatInterval(const std::string& scope,
188 int interval_ms) { 216 int interval_ms) {
189 } 217 }
190 218
191 void GCMDriverAndroid::RemoveHeartbeatInterval(const std::string& scope) { 219 void GCMDriverAndroid::RemoveHeartbeatInterval(const std::string& scope) {
192 } 220 }
193 221
222 void GCMDriverAndroid::OnActivityRecorded() {
223 DCHECK(!get_gcm_statistics_callback_.is_null());
224
225 GetGCMStatistics(get_gcm_statistics_callback_, KEEP_LOGS);
226 }
227
194 GCMClient::Result GCMDriverAndroid::EnsureStarted( 228 GCMClient::Result GCMDriverAndroid::EnsureStarted(
195 GCMClient::StartMode start_mode) { 229 GCMClient::StartMode start_mode) {
196 // TODO(johnme): Maybe we should check if GMS is available? 230 // TODO(johnme): Maybe we should check if GMS is available?
197 return GCMClient::SUCCESS; 231 return GCMClient::SUCCESS;
198 } 232 }
199 233
200 void GCMDriverAndroid::RegisterImpl( 234 void GCMDriverAndroid::RegisterImpl(
201 const std::string& app_id, const std::vector<std::string>& sender_ids) { 235 const std::string& app_id, const std::vector<std::string>& sender_ids) {
202 DCHECK_EQ(1u, sender_ids.size()); 236 DCHECK_EQ(1u, sender_ids.size());
203 JNIEnv* env = AttachCurrentThread(); 237 JNIEnv* env = AttachCurrentThread();
238
239 recorder_.RecordRegistrationSent(app_id);
240
204 Java_GCMDriver_register(env, java_ref_.obj(), 241 Java_GCMDriver_register(env, java_ref_.obj(),
205 ConvertUTF8ToJavaString(env, app_id).obj(), 242 ConvertUTF8ToJavaString(env, app_id).obj(),
206 ConvertUTF8ToJavaString(env, sender_ids[0]).obj()); 243 ConvertUTF8ToJavaString(env, sender_ids[0]).obj());
207 } 244 }
208 245
209 void GCMDriverAndroid::UnregisterImpl(const std::string& app_id) { 246 void GCMDriverAndroid::UnregisterImpl(const std::string& app_id) {
210 NOTREACHED(); 247 NOTREACHED();
211 } 248 }
212 249
213 void GCMDriverAndroid::UnregisterWithSenderIdImpl( 250 void GCMDriverAndroid::UnregisterWithSenderIdImpl(
214 const std::string& app_id, const std::string& sender_id) { 251 const std::string& app_id, const std::string& sender_id) {
215 JNIEnv* env = AttachCurrentThread(); 252 JNIEnv* env = AttachCurrentThread();
253
254 recorder_.RecordUnregistrationSent(app_id);
255
216 Java_GCMDriver_unregister(env, java_ref_.obj(), 256 Java_GCMDriver_unregister(env, java_ref_.obj(),
217 ConvertUTF8ToJavaString(env, app_id).obj(), 257 ConvertUTF8ToJavaString(env, app_id).obj(),
218 ConvertUTF8ToJavaString(env, sender_id).obj()); 258 ConvertUTF8ToJavaString(env, sender_id).obj());
219 } 259 }
220 260
221 void GCMDriverAndroid::SendImpl(const std::string& app_id, 261 void GCMDriverAndroid::SendImpl(const std::string& app_id,
222 const std::string& receiver_id, 262 const std::string& receiver_id,
223 const OutgoingMessage& message) { 263 const OutgoingMessage& message) {
224 NOTIMPLEMENTED(); 264 NOTIMPLEMENTED();
225 } 265 }
226 266
227 } // namespace gcm 267 } // namespace gcm
OLDNEW
« no previous file with comments | « components/gcm_driver/gcm_driver_android.h ('k') | components/gcm_driver/gcm_driver_desktop.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698