| OLD | NEW |
| 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 "sync/notifier/p2p_invalidator.h" | 5 #include "sync/notifier/p2p_invalidator.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/json/json_reader.h" | 9 #include "base/json/json_reader.h" |
| 10 #include "base/json/json_writer.h" | 10 #include "base/json/json_writer.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 std::string P2PNotificationTargetToString(P2PNotificationTarget target) { | 33 std::string P2PNotificationTargetToString(P2PNotificationTarget target) { |
| 34 switch (target) { | 34 switch (target) { |
| 35 case NOTIFY_SELF: | 35 case NOTIFY_SELF: |
| 36 return kNotifySelf; | 36 return kNotifySelf; |
| 37 case NOTIFY_OTHERS: | 37 case NOTIFY_OTHERS: |
| 38 return kNotifyOthers; | 38 return kNotifyOthers; |
| 39 case NOTIFY_ALL: | 39 case NOTIFY_ALL: |
| 40 return kNotifyAll; | 40 return kNotifyAll; |
| 41 default: | 41 default: |
| 42 NOTREACHED(); | 42 NOTREACHED(); |
| 43 return ""; | 43 return std::string(); |
| 44 } | 44 } |
| 45 } | 45 } |
| 46 | 46 |
| 47 P2PNotificationTarget P2PNotificationTargetFromString( | 47 P2PNotificationTarget P2PNotificationTargetFromString( |
| 48 const std::string& target_str) { | 48 const std::string& target_str) { |
| 49 if (target_str == kNotifySelf) { | 49 if (target_str == kNotifySelf) { |
| 50 return NOTIFY_SELF; | 50 return NOTIFY_SELF; |
| 51 } | 51 } |
| 52 if (target_str == kNotifyOthers) { | 52 if (target_str == kNotifyOthers) { |
| 53 return NOTIFY_OTHERS; | 53 return NOTIFY_OTHERS; |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 // TODO(akalin): Handle arbitrary object IDs (http://crbug.com/140411). | 164 // TODO(akalin): Handle arbitrary object IDs (http://crbug.com/140411). |
| 165 DCHECK(thread_checker_.CalledOnValidThread()); | 165 DCHECK(thread_checker_.CalledOnValidThread()); |
| 166 ObjectIdSet new_ids; | 166 ObjectIdSet new_ids; |
| 167 const ObjectIdSet& old_ids = registrar_.GetRegisteredIds(handler); | 167 const ObjectIdSet& old_ids = registrar_.GetRegisteredIds(handler); |
| 168 std::set_difference(ids.begin(), ids.end(), | 168 std::set_difference(ids.begin(), ids.end(), |
| 169 old_ids.begin(), old_ids.end(), | 169 old_ids.begin(), old_ids.end(), |
| 170 std::inserter(new_ids, new_ids.end()), | 170 std::inserter(new_ids, new_ids.end()), |
| 171 ObjectIdLessThan()); | 171 ObjectIdLessThan()); |
| 172 registrar_.UpdateRegisteredIds(handler, ids); | 172 registrar_.UpdateRegisteredIds(handler, ids); |
| 173 const P2PNotificationData notification_data( | 173 const P2PNotificationData notification_data( |
| 174 invalidator_client_id_, NOTIFY_SELF, | 174 invalidator_client_id_, |
| 175 ObjectIdSetToInvalidationMap(new_ids, "")); | 175 NOTIFY_SELF, |
| 176 ObjectIdSetToInvalidationMap(new_ids, std::string())); |
| 176 SendNotificationData(notification_data); | 177 SendNotificationData(notification_data); |
| 177 } | 178 } |
| 178 | 179 |
| 179 void P2PInvalidator::UnregisterHandler(InvalidationHandler* handler) { | 180 void P2PInvalidator::UnregisterHandler(InvalidationHandler* handler) { |
| 180 DCHECK(thread_checker_.CalledOnValidThread()); | 181 DCHECK(thread_checker_.CalledOnValidThread()); |
| 181 registrar_.UnregisterHandler(handler); | 182 registrar_.UnregisterHandler(handler); |
| 182 } | 183 } |
| 183 | 184 |
| 184 void P2PInvalidator::Acknowledge(const invalidation::ObjectId& id, | 185 void P2PInvalidator::Acknowledge(const invalidation::ObjectId& id, |
| 185 const AckHandle& ack_handle) { | 186 const AckHandle& ack_handle) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 SendNotificationData(notification_data); | 218 SendNotificationData(notification_data); |
| 218 } | 219 } |
| 219 | 220 |
| 220 void P2PInvalidator::OnNotificationsEnabled() { | 221 void P2PInvalidator::OnNotificationsEnabled() { |
| 221 DCHECK(thread_checker_.CalledOnValidThread()); | 222 DCHECK(thread_checker_.CalledOnValidThread()); |
| 222 bool just_turned_on = (notifications_enabled_ == false); | 223 bool just_turned_on = (notifications_enabled_ == false); |
| 223 notifications_enabled_ = true; | 224 notifications_enabled_ = true; |
| 224 registrar_.UpdateInvalidatorState(INVALIDATIONS_ENABLED); | 225 registrar_.UpdateInvalidatorState(INVALIDATIONS_ENABLED); |
| 225 if (just_turned_on) { | 226 if (just_turned_on) { |
| 226 const P2PNotificationData notification_data( | 227 const P2PNotificationData notification_data( |
| 227 invalidator_client_id_, NOTIFY_SELF, | 228 invalidator_client_id_, |
| 228 ObjectIdSetToInvalidationMap(registrar_.GetAllRegisteredIds(), "")); | 229 NOTIFY_SELF, |
| 230 ObjectIdSetToInvalidationMap(registrar_.GetAllRegisteredIds(), |
| 231 std::string())); |
| 229 SendNotificationData(notification_data); | 232 SendNotificationData(notification_data); |
| 230 } | 233 } |
| 231 } | 234 } |
| 232 | 235 |
| 233 void P2PInvalidator::OnNotificationsDisabled( | 236 void P2PInvalidator::OnNotificationsDisabled( |
| 234 notifier::NotificationsDisabledReason reason) { | 237 notifier::NotificationsDisabledReason reason) { |
| 235 DCHECK(thread_checker_.CalledOnValidThread()); | 238 DCHECK(thread_checker_.CalledOnValidThread()); |
| 236 registrar_.UpdateInvalidatorState(FromNotifierReason(reason)); | 239 registrar_.UpdateInvalidatorState(FromNotifierReason(reason)); |
| 237 } | 240 } |
| 238 | 241 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 249 return; | 252 return; |
| 250 } | 253 } |
| 251 if (notification.channel != kSyncP2PNotificationChannel) { | 254 if (notification.channel != kSyncP2PNotificationChannel) { |
| 252 LOG(WARNING) << "Notification from unexpected source " | 255 LOG(WARNING) << "Notification from unexpected source " |
| 253 << notification.channel; | 256 << notification.channel; |
| 254 } | 257 } |
| 255 P2PNotificationData notification_data; | 258 P2PNotificationData notification_data; |
| 256 if (!notification_data.ResetFromString(notification.data)) { | 259 if (!notification_data.ResetFromString(notification.data)) { |
| 257 LOG(WARNING) << "Could not parse notification data from " | 260 LOG(WARNING) << "Could not parse notification data from " |
| 258 << notification.data; | 261 << notification.data; |
| 259 notification_data = | 262 notification_data = P2PNotificationData( |
| 260 P2PNotificationData( | 263 invalidator_client_id_, |
| 261 invalidator_client_id_, NOTIFY_ALL, | 264 NOTIFY_ALL, |
| 262 ObjectIdSetToInvalidationMap(registrar_.GetAllRegisteredIds(), "")); | 265 ObjectIdSetToInvalidationMap(registrar_.GetAllRegisteredIds(), |
| 266 std::string())); |
| 263 } | 267 } |
| 264 if (!notification_data.IsTargeted(invalidator_client_id_)) { | 268 if (!notification_data.IsTargeted(invalidator_client_id_)) { |
| 265 DVLOG(1) << "Not a target of the notification -- " | 269 DVLOG(1) << "Not a target of the notification -- " |
| 266 << "not emitting notification"; | 270 << "not emitting notification"; |
| 267 return; | 271 return; |
| 268 } | 272 } |
| 269 registrar_.DispatchInvalidationsToHandlers( | 273 registrar_.DispatchInvalidationsToHandlers( |
| 270 notification_data.GetIdInvalidationMap()); | 274 notification_data.GetIdInvalidationMap()); |
| 271 } | 275 } |
| 272 | 276 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 285 return; | 289 return; |
| 286 } | 290 } |
| 287 notifier::Notification notification; | 291 notifier::Notification notification; |
| 288 notification.channel = kSyncP2PNotificationChannel; | 292 notification.channel = kSyncP2PNotificationChannel; |
| 289 notification.data = notification_data.ToString(); | 293 notification.data = notification_data.ToString(); |
| 290 DVLOG(1) << "Sending XMPP notification: " << notification.ToString(); | 294 DVLOG(1) << "Sending XMPP notification: " << notification.ToString(); |
| 291 push_client_->SendNotification(notification); | 295 push_client_->SendNotification(notification); |
| 292 } | 296 } |
| 293 | 297 |
| 294 } // namespace syncer | 298 } // namespace syncer |
| OLD | NEW |