Index: components/gcm_driver/gcm_driver_android.cc |
diff --git a/components/gcm_driver/gcm_driver_android.cc b/components/gcm_driver/gcm_driver_android.cc |
index adfd08b63ffcc5750c3491b497e80c61481322a4..f0baa829e5047ecfae3b7ce2839636f25327f829 100644 |
--- a/components/gcm_driver/gcm_driver_android.cc |
+++ b/components/gcm_driver/gcm_driver_android.cc |
@@ -25,7 +25,8 @@ namespace gcm { |
GCMDriverAndroid::GCMDriverAndroid( |
const base::FilePath& store_path, |
const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner) |
- : GCMDriver(store_path, blocking_task_runner) { |
+ : GCMDriver(store_path, blocking_task_runner), |
+ recorder_(this) { |
JNIEnv* env = AttachCurrentThread(); |
java_ref_.Reset( |
Java_GCMDriver_create(env, |
@@ -49,6 +50,8 @@ void GCMDriverAndroid::OnRegisterFinished( |
GCMClient::Result result = success ? GCMClient::SUCCESS |
: GCMClient::UNKNOWN_ERROR; |
+ recorder_.RecordRegistrationResponse(app_id, success); |
+ |
RegisterFinished(app_id, registration_id, result); |
} |
@@ -61,6 +64,8 @@ void GCMDriverAndroid::OnUnregisterFinished( |
GCMClient::Result result = success ? GCMClient::SUCCESS |
: GCMClient::UNKNOWN_ERROR; |
+ recorder_.RecordUnregistrationResponse(app_id, success); |
+ |
UnregisterFinished(app_id, result); |
} |
@@ -74,6 +79,8 @@ void GCMDriverAndroid::OnMessageReceived( |
const JavaParamRef<jobjectArray>& j_data_keys_and_values) { |
std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); |
+ int message_byte_size = 0; |
+ |
IncomingMessage message; |
message.sender_id = ConvertJavaStringToUTF8(env, j_sender_id); |
message.collapse_key = ConvertJavaStringToUTF8(env, j_collapse_key); |
@@ -84,14 +91,19 @@ void GCMDriverAndroid::OnMessageReceived( |
&data_keys_and_values); |
for (size_t i = 0; i + 1 < data_keys_and_values.size(); i += 2) { |
message.data[data_keys_and_values[i]] = data_keys_and_values[i+1]; |
+ message_byte_size += data_keys_and_values[i+1].size(); |
} |
// Convert j_raw_data from byte[] to binary std::string. |
if (j_raw_data) { |
std::vector<uint8_t> raw_data; |
JavaByteArrayToByteVector(env, j_raw_data, &raw_data); |
message.raw_data.assign(raw_data.begin(), raw_data.end()); |
+ |
+ message_byte_size += message.raw_data.size(); |
} |
+ recorder_.RecordDataMessageReceived(app_id, message_byte_size); |
+ |
DispatchMessage(app_id, message); |
} |
@@ -144,13 +156,29 @@ bool GCMDriverAndroid::IsConnected() const { |
void GCMDriverAndroid::GetGCMStatistics( |
const GetGCMStatisticsCallback& callback, |
- bool clear_logs) { |
- NOTIMPLEMENTED(); |
+ ClearActivityLogs clear_logs) { |
+ DCHECK(!callback.is_null()); |
+ |
+ get_gcm_statistics_callback_ = callback; |
+ |
+ if (clear_logs == CLEAR_LOGS) |
+ recorder_.Clear(); |
+ |
+ GCMClient::GCMStatistics stats; |
+ stats.is_recording = recorder_.is_recording(); |
+ |
+ recorder_.CollectActivities(&stats.recorded_activities); |
+ |
+ callback.Run(stats); |
} |
void GCMDriverAndroid::SetGCMRecording(const GetGCMStatisticsCallback& callback, |
bool recording) { |
- NOTIMPLEMENTED(); |
+ DCHECK(!callback.is_null()); |
+ |
+ recorder_.set_is_recording(recording); |
+ |
+ GetGCMStatistics(callback, recording ? KEEP_LOGS : CLEAR_LOGS); |
} |
void GCMDriverAndroid::SetAccountTokens( |
@@ -191,6 +219,12 @@ void GCMDriverAndroid::AddHeartbeatInterval(const std::string& scope, |
void GCMDriverAndroid::RemoveHeartbeatInterval(const std::string& scope) { |
} |
+void GCMDriverAndroid::OnActivityRecorded() { |
+ DCHECK(!get_gcm_statistics_callback_.is_null()); |
+ |
+ GetGCMStatistics(get_gcm_statistics_callback_, KEEP_LOGS); |
+} |
+ |
GCMClient::Result GCMDriverAndroid::EnsureStarted( |
GCMClient::StartMode start_mode) { |
// TODO(johnme): Maybe we should check if GMS is available? |
@@ -201,6 +235,9 @@ void GCMDriverAndroid::RegisterImpl( |
const std::string& app_id, const std::vector<std::string>& sender_ids) { |
DCHECK_EQ(1u, sender_ids.size()); |
JNIEnv* env = AttachCurrentThread(); |
+ |
+ recorder_.RecordRegistrationSent(app_id); |
+ |
Java_GCMDriver_register(env, java_ref_.obj(), |
ConvertUTF8ToJavaString(env, app_id).obj(), |
ConvertUTF8ToJavaString(env, sender_ids[0]).obj()); |
@@ -213,6 +250,9 @@ void GCMDriverAndroid::UnregisterImpl(const std::string& app_id) { |
void GCMDriverAndroid::UnregisterWithSenderIdImpl( |
const std::string& app_id, const std::string& sender_id) { |
JNIEnv* env = AttachCurrentThread(); |
+ |
+ recorder_.RecordUnregistrationSent(app_id); |
+ |
Java_GCMDriver_unregister(env, java_ref_.obj(), |
ConvertUTF8ToJavaString(env, app_id).obj(), |
ConvertUTF8ToJavaString(env, sender_id).obj()); |