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/non_blocking_invalidator.h" | 5 #include "sync/notifier/non_blocking_invalidator.h" |
6 | 6 |
7 #include <cstddef> | 7 #include <cstddef> |
8 | 8 |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 | 29 |
30 // Helpers called on I/O thread. | 30 // Helpers called on I/O thread. |
31 void Initialize( | 31 void Initialize( |
32 const notifier::NotifierOptions& notifier_options, | 32 const notifier::NotifierOptions& notifier_options, |
33 const InvalidationStateMap& initial_invalidation_state_map, | 33 const InvalidationStateMap& initial_invalidation_state_map, |
34 const std::string& invalidation_bootstrap_data, | 34 const std::string& invalidation_bootstrap_data, |
35 const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, | 35 const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, |
36 const std::string& client_info); | 36 const std::string& client_info); |
37 void Teardown(); | 37 void Teardown(); |
38 void UpdateRegisteredIds(const ObjectIdSet& ids); | 38 void UpdateRegisteredIds(const ObjectIdSet& ids); |
| 39 void Acknowledge(const invalidation::ObjectId& id, |
| 40 const AckHandle& ack_handle); |
39 void SetUniqueId(const std::string& unique_id); | 41 void SetUniqueId(const std::string& unique_id); |
40 void UpdateCredentials(const std::string& email, const std::string& token); | 42 void UpdateCredentials(const std::string& email, const std::string& token); |
41 | 43 |
42 // InvalidationHandler implementation (all called on I/O thread by | 44 // InvalidationHandler implementation (all called on I/O thread by |
43 // InvalidationNotifier). | 45 // InvalidationNotifier). |
44 virtual void OnInvalidatorStateChange(InvalidatorState reason) OVERRIDE; | 46 virtual void OnInvalidatorStateChange(InvalidatorState reason) OVERRIDE; |
45 virtual void OnIncomingInvalidation( | 47 virtual void OnIncomingInvalidation( |
46 const ObjectIdInvalidationMap& invalidation_map) OVERRIDE; | 48 const ObjectIdInvalidationMap& invalidation_map) OVERRIDE; |
47 | 49 |
48 private: | 50 private: |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 invalidation_notifier_->UnregisterHandler(this); | 97 invalidation_notifier_->UnregisterHandler(this); |
96 invalidation_notifier_.reset(); | 98 invalidation_notifier_.reset(); |
97 network_task_runner_ = NULL; | 99 network_task_runner_ = NULL; |
98 } | 100 } |
99 | 101 |
100 void NonBlockingInvalidator::Core::UpdateRegisteredIds(const ObjectIdSet& ids) { | 102 void NonBlockingInvalidator::Core::UpdateRegisteredIds(const ObjectIdSet& ids) { |
101 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 103 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
102 invalidation_notifier_->UpdateRegisteredIds(this, ids); | 104 invalidation_notifier_->UpdateRegisteredIds(this, ids); |
103 } | 105 } |
104 | 106 |
| 107 void NonBlockingInvalidator::Core::Acknowledge(const invalidation::ObjectId& id, |
| 108 const AckHandle& ack_handle) { |
| 109 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| 110 invalidation_notifier_->Acknowledge(id, ack_handle); |
| 111 } |
| 112 |
105 void NonBlockingInvalidator::Core::SetUniqueId(const std::string& unique_id) { | 113 void NonBlockingInvalidator::Core::SetUniqueId(const std::string& unique_id) { |
106 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 114 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
107 invalidation_notifier_->SetUniqueId(unique_id); | 115 invalidation_notifier_->SetUniqueId(unique_id); |
108 } | 116 } |
109 | 117 |
110 void NonBlockingInvalidator::Core::UpdateCredentials(const std::string& email, | 118 void NonBlockingInvalidator::Core::UpdateCredentials(const std::string& email, |
111 const std::string& token) { | 119 const std::string& token) { |
112 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 120 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
113 invalidation_notifier_->UpdateCredentials(email, token); | 121 invalidation_notifier_->UpdateCredentials(email, token); |
114 } | 122 } |
115 | 123 |
116 void NonBlockingInvalidator::Core::OnInvalidatorStateChange( | 124 void NonBlockingInvalidator::Core::OnInvalidatorStateChange( |
117 InvalidatorState reason) { | 125 InvalidatorState reason) { |
118 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 126 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
119 delegate_observer_.Call( | 127 delegate_observer_.Call( |
120 FROM_HERE, &InvalidationHandler::OnInvalidatorStateChange, reason); | 128 FROM_HERE, &InvalidationHandler::OnInvalidatorStateChange, reason); |
121 } | 129 } |
122 | 130 |
123 void NonBlockingInvalidator::Core::OnIncomingInvalidation( | 131 void NonBlockingInvalidator::Core::OnIncomingInvalidation( |
124 const ObjectIdInvalidationMap& invalidation_map) { | 132 const ObjectIdInvalidationMap& invalidation_map) { |
125 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 133 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
126 delegate_observer_.Call(FROM_HERE, | 134 delegate_observer_.Call(FROM_HERE, |
127 &InvalidationHandler::OnIncomingInvalidation, | 135 &InvalidationHandler::OnIncomingInvalidation, |
128 invalidation_map); | 136 invalidation_map); |
129 } | 137 } |
130 | 138 |
131 NonBlockingInvalidator::NonBlockingInvalidator( | 139 NonBlockingInvalidator::NonBlockingInvalidator( |
132 const notifier::NotifierOptions& notifier_options, | 140 const notifier::NotifierOptions& notifier_options, |
133 const InvalidationStateMap& initial_max_invalidation_versions, | 141 const InvalidationStateMap& initial_invalidation_state_map, |
134 const std::string& invalidation_bootstrap_data, | 142 const std::string& invalidation_bootstrap_data, |
135 const WeakHandle<InvalidationStateTracker>& | 143 const WeakHandle<InvalidationStateTracker>& |
136 invalidation_state_tracker, | 144 invalidation_state_tracker, |
137 const std::string& client_info) | 145 const std::string& client_info) |
138 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 146 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
139 core_( | 147 core_( |
140 new Core(MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()))), | 148 new Core(MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()))), |
141 parent_task_runner_( | 149 parent_task_runner_( |
142 base::ThreadTaskRunnerHandle::Get()), | 150 base::ThreadTaskRunnerHandle::Get()), |
143 network_task_runner_(notifier_options.request_context_getter-> | 151 network_task_runner_(notifier_options.request_context_getter-> |
144 GetNetworkTaskRunner()) { | 152 GetNetworkTaskRunner()) { |
145 if (!network_task_runner_->PostTask( | 153 if (!network_task_runner_->PostTask( |
146 FROM_HERE, | 154 FROM_HERE, |
147 base::Bind( | 155 base::Bind( |
148 &NonBlockingInvalidator::Core::Initialize, | 156 &NonBlockingInvalidator::Core::Initialize, |
149 core_.get(), | 157 core_.get(), |
150 notifier_options, | 158 notifier_options, |
151 initial_max_invalidation_versions, | 159 initial_invalidation_state_map, |
152 invalidation_bootstrap_data, | 160 invalidation_bootstrap_data, |
153 invalidation_state_tracker, | 161 invalidation_state_tracker, |
154 client_info))) { | 162 client_info))) { |
155 NOTREACHED(); | 163 NOTREACHED(); |
156 } | 164 } |
157 } | 165 } |
158 | 166 |
159 NonBlockingInvalidator::~NonBlockingInvalidator() { | 167 NonBlockingInvalidator::~NonBlockingInvalidator() { |
160 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 168 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
161 if (!network_task_runner_->PostTask( | 169 if (!network_task_runner_->PostTask( |
(...skipping 21 matching lines...) Expand all Loading... |
183 registrar_.GetAllRegisteredIds()))) { | 191 registrar_.GetAllRegisteredIds()))) { |
184 NOTREACHED(); | 192 NOTREACHED(); |
185 } | 193 } |
186 } | 194 } |
187 | 195 |
188 void NonBlockingInvalidator::UnregisterHandler(InvalidationHandler* handler) { | 196 void NonBlockingInvalidator::UnregisterHandler(InvalidationHandler* handler) { |
189 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 197 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
190 registrar_.UnregisterHandler(handler); | 198 registrar_.UnregisterHandler(handler); |
191 } | 199 } |
192 | 200 |
| 201 void NonBlockingInvalidator::Acknowledge(const invalidation::ObjectId& id, |
| 202 const AckHandle& ack_handle) { |
| 203 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
| 204 if (!network_task_runner_->PostTask( |
| 205 FROM_HERE, |
| 206 base::Bind( |
| 207 &NonBlockingInvalidator::Core::Acknowledge, |
| 208 core_.get(), |
| 209 id, |
| 210 ack_handle))) { |
| 211 NOTREACHED(); |
| 212 } |
| 213 } |
| 214 |
193 InvalidatorState NonBlockingInvalidator::GetInvalidatorState() const { | 215 InvalidatorState NonBlockingInvalidator::GetInvalidatorState() const { |
194 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 216 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
195 return registrar_.GetInvalidatorState(); | 217 return registrar_.GetInvalidatorState(); |
196 } | 218 } |
197 | 219 |
198 void NonBlockingInvalidator::SetUniqueId(const std::string& unique_id) { | 220 void NonBlockingInvalidator::SetUniqueId(const std::string& unique_id) { |
199 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 221 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
200 if (!network_task_runner_->PostTask( | 222 if (!network_task_runner_->PostTask( |
201 FROM_HERE, | 223 FROM_HERE, |
202 base::Bind(&NonBlockingInvalidator::Core::SetUniqueId, | 224 base::Bind(&NonBlockingInvalidator::Core::SetUniqueId, |
(...skipping 25 matching lines...) Expand all Loading... |
228 registrar_.UpdateInvalidatorState(state); | 250 registrar_.UpdateInvalidatorState(state); |
229 } | 251 } |
230 | 252 |
231 void NonBlockingInvalidator::OnIncomingInvalidation( | 253 void NonBlockingInvalidator::OnIncomingInvalidation( |
232 const ObjectIdInvalidationMap& invalidation_map) { | 254 const ObjectIdInvalidationMap& invalidation_map) { |
233 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 255 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
234 registrar_.DispatchInvalidationsToHandlers(invalidation_map); | 256 registrar_.DispatchInvalidationsToHandlers(invalidation_map); |
235 } | 257 } |
236 | 258 |
237 } // namespace syncer | 259 } // namespace syncer |
OLD | NEW |