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

Side by Side Diff: chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_handler.cc

Issue 56113003: Implement new invalidations ack tracking system (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Modify drive TODO comment + rebase Created 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/extensions/api/push_messaging/push_messaging_invalidati on_handler.h" 5 #include "chrome/browser/extensions/api/push_messaging/push_messaging_invalidati on_handler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 118
119 void PushMessagingInvalidationHandler::OnInvalidatorStateChange( 119 void PushMessagingInvalidationHandler::OnInvalidatorStateChange(
120 syncer::InvalidatorState state) { 120 syncer::InvalidatorState state) {
121 DCHECK(thread_checker_.CalledOnValidThread()); 121 DCHECK(thread_checker_.CalledOnValidThread());
122 // Nothing to do. 122 // Nothing to do.
123 } 123 }
124 124
125 void PushMessagingInvalidationHandler::OnIncomingInvalidation( 125 void PushMessagingInvalidationHandler::OnIncomingInvalidation(
126 const syncer::ObjectIdInvalidationMap& invalidation_map) { 126 const syncer::ObjectIdInvalidationMap& invalidation_map) {
127 DCHECK(thread_checker_.CalledOnValidThread()); 127 DCHECK(thread_checker_.CalledOnValidThread());
128 invalidation_map.AcknowledgeAll();
129
128 syncer::ObjectIdSet ids = invalidation_map.GetObjectIds(); 130 syncer::ObjectIdSet ids = invalidation_map.GetObjectIds();
129 for (syncer::ObjectIdSet::const_iterator it = ids.begin(); 131 for (syncer::ObjectIdSet::const_iterator it = ids.begin();
130 it != ids.end(); ++it) { 132 it != ids.end(); ++it) {
131 const syncer::SingleObjectInvalidationSet& list = 133 const syncer::SingleObjectInvalidationSet& list =
132 invalidation_map.ForObject(*it); 134 invalidation_map.ForObject(*it);
133 const syncer::Invalidation& invalidation = list.back(); 135 const syncer::Invalidation& invalidation = list.back();
134 service_->AcknowledgeInvalidation(*it, invalidation.ack_handle());
135 136
136 std::string payload; 137 std::string payload;
137 if (invalidation.is_unknown_version()) { 138 if (invalidation.is_unknown_version()) {
138 payload = std::string(); 139 payload = std::string();
139 } else { 140 } else {
140 payload = list.back().payload(); 141 payload = list.back().payload();
141 } 142 }
142 143
143 syncer::ObjectIdSet::iterator suppressed_id = 144 syncer::ObjectIdSet::iterator suppressed_id = suppressed_ids_.find(*it);
144 suppressed_ids_.find(*it);
145 if (suppressed_id != suppressed_ids_.end()) { 145 if (suppressed_id != suppressed_ids_.end()) {
146 suppressed_ids_.erase(suppressed_id); 146 suppressed_ids_.erase(suppressed_id);
147 continue; 147 continue;
148 } 148 }
149 DVLOG(2) << "Incoming push message, id is: " 149 DVLOG(2) << "Incoming push message, id is: "
150 << syncer::ObjectIdToString(*it) 150 << syncer::ObjectIdToString(*it)
151 << " and payload is:" << payload; 151 << " and payload is:" << payload;
152 152
153 std::string extension_id; 153 std::string extension_id;
154 int subchannel; 154 int subchannel;
155 if (ObjectIdToExtensionAndSubchannel(*it, &extension_id, &subchannel)) { 155 if (ObjectIdToExtensionAndSubchannel(*it, &extension_id, &subchannel)) {
156 DVLOG(2) << "Sending push message to reciever, extension is " 156 const syncer::SingleObjectInvalidationSet& invalidation_list =
157 << extension_id << ", subchannel is " << subchannel 157 invalidation_map.ForObject(*it);
158 << ", and payload is " << payload; 158
159 delegate_->OnMessage(extension_id, subchannel, payload); 159 // We always forward unknown version invalidation when we receive one.
160 if (invalidation_list.StartsWithUnknownVersion()) {
161 DVLOG(2) << "Sending push message to reciever, extension is "
162 << extension_id << ", subchannel is " << subchannel
163 << "and payload was lost";
164 delegate_->OnMessage(extension_id, subchannel, std::string());
165 }
166
167 // If we receive a new max version for this object, forward its payload.
168 const syncer::Invalidation& max_invalidation = invalidation_list.back();
169 if (!max_invalidation.is_unknown_version() &&
170 max_invalidation.version() > max_object_version_map_[*it]) {
171 max_object_version_map_[*it] = max_invalidation.version();
172 DVLOG(2) << "Sending push message to reciever, extension is "
173 << extension_id << ", subchannel is " << subchannel
174 << ", and payload is " << max_invalidation.payload();
175 delegate_->OnMessage(extension_id,
176 subchannel,
177 max_invalidation.payload());
178 }
160 } 179 }
161 } 180 }
162 } 181 }
163 182
164 void PushMessagingInvalidationHandler::UpdateRegistrations() { 183 void PushMessagingInvalidationHandler::UpdateRegistrations() {
165 syncer::ObjectIdSet ids; 184 syncer::ObjectIdSet ids;
166 for (std::set<std::string>::const_iterator it = 185 for (std::set<std::string>::const_iterator it =
167 registered_extensions_.begin(); it != registered_extensions_.end(); 186 registered_extensions_.begin(); it != registered_extensions_.end();
168 ++it) { 187 ++it) {
169 const syncer::ObjectIdSet& object_ids = ExtensionIdToObjectIds(*it); 188 const syncer::ObjectIdSet& object_ids = ExtensionIdToObjectIds(*it);
170 ids.insert(object_ids.begin(), object_ids.end()); 189 ids.insert(object_ids.begin(), object_ids.end());
171 } 190 }
172 service_->UpdateRegisteredInvalidationIds(this, ids); 191 service_->UpdateRegisteredInvalidationIds(this, ids);
173 } 192 }
174 193
175 } // namespace extensions 194 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698