| Index: google_apis/gcm/engine/gcm_store_impl.cc
|
| diff --git a/google_apis/gcm/engine/gcm_store_impl.cc b/google_apis/gcm/engine/gcm_store_impl.cc
|
| index daf7d362fd90adb3005a612c7d894a872e4e2fd4..9844f8aafc53fbde3521c056986603375e632094 100644
|
| --- a/google_apis/gcm/engine/gcm_store_impl.cc
|
| +++ b/google_apis/gcm/engine/gcm_store_impl.cc
|
| @@ -372,11 +372,11 @@ void GCMStoreImpl::Backend::RemoveOutgoingMessages(
|
| mcs_proto::DataMessageStanza data_message;
|
| // Skip the initial tag byte and parse the rest to extract the message.
|
| if (data_message.ParseFromString(outgoing_message.substr(1))) {
|
| - DCHECK(!data_message.from().empty());
|
| - if (removed_message_counts.count(data_message.from()) != 0)
|
| - removed_message_counts[data_message.from()]++;
|
| + DCHECK(!data_message.category().empty());
|
| + if (removed_message_counts.count(data_message.category()) != 0)
|
| + removed_message_counts[data_message.category()]++;
|
| else
|
| - removed_message_counts[data_message.from()] = 1;
|
| + removed_message_counts[data_message.category()] = 1;
|
| }
|
| DVLOG(1) << "Removing outgoing message with id " << *iter;
|
| s = db_->Delete(write_options, MakeSlice(key));
|
| @@ -688,7 +688,7 @@ bool GCMStoreImpl::AddOutgoingMessage(const std::string& persistent_id,
|
| const UpdateCallback& callback) {
|
| DCHECK_EQ(message.tag(), kDataMessageStanzaTag);
|
| std::string app_id = reinterpret_cast<const mcs_proto::DataMessageStanza*>(
|
| - &message.GetProtobuf())->from();
|
| + &message.GetProtobuf())->category();
|
| DCHECK(!app_id.empty());
|
| if (app_message_counts_.count(app_id) == 0)
|
| app_message_counts_[app_id] = 0;
|
| @@ -710,6 +710,25 @@ bool GCMStoreImpl::AddOutgoingMessage(const std::string& persistent_id,
|
| return false;
|
| }
|
|
|
| +void GCMStoreImpl::OverwriteOutgoingMessage(const std::string& persistent_id,
|
| + const MCSMessage& message,
|
| + const UpdateCallback& callback) {
|
| + DCHECK_EQ(message.tag(), kDataMessageStanzaTag);
|
| + std::string app_id = reinterpret_cast<const mcs_proto::DataMessageStanza*>(
|
| + &message.GetProtobuf())->category();
|
| + DCHECK(!app_id.empty());
|
| + // There should already be pending messages for this app.
|
| + DCHECK(app_message_counts_.count(app_id));
|
| + // TODO(zea): consider verifying the specific message already exists.
|
| + blocking_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&GCMStoreImpl::Backend::AddOutgoingMessage,
|
| + backend_,
|
| + persistent_id,
|
| + message,
|
| + callback));
|
| +}
|
| +
|
| void GCMStoreImpl::RemoveOutgoingMessage(const std::string& persistent_id,
|
| const UpdateCallback& callback) {
|
| blocking_task_runner_->PostTask(
|
| @@ -779,12 +798,12 @@ void GCMStoreImpl::LoadContinuation(const LoadCallback& callback,
|
| iter != result->outgoing_messages.end(); ++iter) {
|
| const mcs_proto::DataMessageStanza* data_message =
|
| reinterpret_cast<mcs_proto::DataMessageStanza*>(iter->second.get());
|
| - DCHECK(!data_message->from().empty());
|
| - if (app_message_counts_.count(data_message->from()) == 0)
|
| - app_message_counts_[data_message->from()] = 1;
|
| + DCHECK(!data_message->category().empty());
|
| + if (app_message_counts_.count(data_message->category()) == 0)
|
| + app_message_counts_[data_message->category()] = 1;
|
| else
|
| - app_message_counts_[data_message->from()]++;
|
| - if (app_message_counts_[data_message->from()] == kMessagesPerAppLimit)
|
| + app_message_counts_[data_message->category()]++;
|
| + if (app_message_counts_[data_message->category()] == kMessagesPerAppLimit)
|
| num_throttled_apps++;
|
| }
|
| UMA_HISTOGRAM_COUNTS("GCM.NumThrottledApps", num_throttled_apps);
|
|
|