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 12 matching lines...) Expand all Loading... |
23 public InvalidationHandler { | 23 public InvalidationHandler { |
24 public: | 24 public: |
25 // Called on parent thread. |delegate_observer| should be | 25 // Called on parent thread. |delegate_observer| should be |
26 // initialized. | 26 // initialized. |
27 explicit Core( | 27 explicit Core( |
28 const WeakHandle<InvalidationHandler>& delegate_observer); | 28 const WeakHandle<InvalidationHandler>& delegate_observer); |
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 std::string& invalidator_client_id, |
33 const InvalidationStateMap& initial_invalidation_state_map, | 34 const InvalidationStateMap& initial_invalidation_state_map, |
34 const std::string& invalidation_bootstrap_data, | 35 const std::string& invalidation_bootstrap_data, |
35 const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, | 36 const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, |
36 const std::string& client_info); | 37 const std::string& client_info); |
37 void Teardown(); | 38 void Teardown(); |
38 void UpdateRegisteredIds(const ObjectIdSet& ids); | 39 void UpdateRegisteredIds(const ObjectIdSet& ids); |
39 void Acknowledge(const invalidation::ObjectId& id, | 40 void Acknowledge(const invalidation::ObjectId& id, |
40 const AckHandle& ack_handle); | 41 const AckHandle& ack_handle); |
41 void SetUniqueId(const std::string& unique_id); | |
42 void UpdateCredentials(const std::string& email, const std::string& token); | 42 void UpdateCredentials(const std::string& email, const std::string& token); |
43 | 43 |
44 // InvalidationHandler implementation (all called on I/O thread by | 44 // InvalidationHandler implementation (all called on I/O thread by |
45 // InvalidationNotifier). | 45 // InvalidationNotifier). |
46 virtual void OnInvalidatorStateChange(InvalidatorState reason) OVERRIDE; | 46 virtual void OnInvalidatorStateChange(InvalidatorState reason) OVERRIDE; |
47 virtual void OnIncomingInvalidation( | 47 virtual void OnIncomingInvalidation( |
48 const ObjectIdInvalidationMap& invalidation_map) OVERRIDE; | 48 const ObjectIdInvalidationMap& invalidation_map) OVERRIDE; |
49 | 49 |
50 private: | 50 private: |
51 friend class | 51 friend class |
(...skipping 13 matching lines...) Expand all Loading... |
65 const WeakHandle<InvalidationHandler>& delegate_observer) | 65 const WeakHandle<InvalidationHandler>& delegate_observer) |
66 : delegate_observer_(delegate_observer) { | 66 : delegate_observer_(delegate_observer) { |
67 DCHECK(delegate_observer_.IsInitialized()); | 67 DCHECK(delegate_observer_.IsInitialized()); |
68 } | 68 } |
69 | 69 |
70 NonBlockingInvalidator::Core::~Core() { | 70 NonBlockingInvalidator::Core::~Core() { |
71 } | 71 } |
72 | 72 |
73 void NonBlockingInvalidator::Core::Initialize( | 73 void NonBlockingInvalidator::Core::Initialize( |
74 const notifier::NotifierOptions& notifier_options, | 74 const notifier::NotifierOptions& notifier_options, |
| 75 const std::string& invalidator_client_id, |
75 const InvalidationStateMap& initial_invalidation_state_map, | 76 const InvalidationStateMap& initial_invalidation_state_map, |
76 const std::string& invalidation_bootstrap_data, | 77 const std::string& invalidation_bootstrap_data, |
77 const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, | 78 const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, |
78 const std::string& client_info) { | 79 const std::string& client_info) { |
79 DCHECK(notifier_options.request_context_getter); | 80 DCHECK(notifier_options.request_context_getter); |
80 DCHECK_EQ(notifier::NOTIFICATION_SERVER, | 81 DCHECK_EQ(notifier::NOTIFICATION_SERVER, |
81 notifier_options.notification_method); | 82 notifier_options.notification_method); |
82 network_task_runner_ = notifier_options.request_context_getter-> | 83 network_task_runner_ = notifier_options.request_context_getter-> |
83 GetNetworkTaskRunner(); | 84 GetNetworkTaskRunner(); |
84 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 85 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
85 invalidation_notifier_.reset( | 86 invalidation_notifier_.reset( |
86 new InvalidationNotifier( | 87 new InvalidationNotifier( |
87 notifier::PushClient::CreateDefaultOnIOThread(notifier_options), | 88 notifier::PushClient::CreateDefaultOnIOThread(notifier_options), |
| 89 invalidator_client_id, |
88 initial_invalidation_state_map, | 90 initial_invalidation_state_map, |
89 invalidation_bootstrap_data, | 91 invalidation_bootstrap_data, |
90 invalidation_state_tracker, | 92 invalidation_state_tracker, |
91 client_info)); | 93 client_info)); |
92 invalidation_notifier_->RegisterHandler(this); | 94 invalidation_notifier_->RegisterHandler(this); |
93 } | 95 } |
94 | 96 |
95 void NonBlockingInvalidator::Core::Teardown() { | 97 void NonBlockingInvalidator::Core::Teardown() { |
96 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 98 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
97 invalidation_notifier_->UnregisterHandler(this); | 99 invalidation_notifier_->UnregisterHandler(this); |
98 invalidation_notifier_.reset(); | 100 invalidation_notifier_.reset(); |
99 network_task_runner_ = NULL; | 101 network_task_runner_ = NULL; |
100 } | 102 } |
101 | 103 |
102 void NonBlockingInvalidator::Core::UpdateRegisteredIds(const ObjectIdSet& ids) { | 104 void NonBlockingInvalidator::Core::UpdateRegisteredIds(const ObjectIdSet& ids) { |
103 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 105 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
104 invalidation_notifier_->UpdateRegisteredIds(this, ids); | 106 invalidation_notifier_->UpdateRegisteredIds(this, ids); |
105 } | 107 } |
106 | 108 |
107 void NonBlockingInvalidator::Core::Acknowledge(const invalidation::ObjectId& id, | 109 void NonBlockingInvalidator::Core::Acknowledge(const invalidation::ObjectId& id, |
108 const AckHandle& ack_handle) { | 110 const AckHandle& ack_handle) { |
109 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 111 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
110 invalidation_notifier_->Acknowledge(id, ack_handle); | 112 invalidation_notifier_->Acknowledge(id, ack_handle); |
111 } | 113 } |
112 | 114 |
113 void NonBlockingInvalidator::Core::SetUniqueId(const std::string& unique_id) { | |
114 DCHECK(network_task_runner_->BelongsToCurrentThread()); | |
115 invalidation_notifier_->SetUniqueId(unique_id); | |
116 } | |
117 | |
118 void NonBlockingInvalidator::Core::UpdateCredentials(const std::string& email, | 115 void NonBlockingInvalidator::Core::UpdateCredentials(const std::string& email, |
119 const std::string& token) { | 116 const std::string& token) { |
120 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 117 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
121 invalidation_notifier_->UpdateCredentials(email, token); | 118 invalidation_notifier_->UpdateCredentials(email, token); |
122 } | 119 } |
123 | 120 |
124 void NonBlockingInvalidator::Core::OnInvalidatorStateChange( | 121 void NonBlockingInvalidator::Core::OnInvalidatorStateChange( |
125 InvalidatorState reason) { | 122 InvalidatorState reason) { |
126 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 123 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
127 delegate_observer_.Call( | 124 delegate_observer_.Call( |
128 FROM_HERE, &InvalidationHandler::OnInvalidatorStateChange, reason); | 125 FROM_HERE, &InvalidationHandler::OnInvalidatorStateChange, reason); |
129 } | 126 } |
130 | 127 |
131 void NonBlockingInvalidator::Core::OnIncomingInvalidation( | 128 void NonBlockingInvalidator::Core::OnIncomingInvalidation( |
132 const ObjectIdInvalidationMap& invalidation_map) { | 129 const ObjectIdInvalidationMap& invalidation_map) { |
133 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 130 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
134 delegate_observer_.Call(FROM_HERE, | 131 delegate_observer_.Call(FROM_HERE, |
135 &InvalidationHandler::OnIncomingInvalidation, | 132 &InvalidationHandler::OnIncomingInvalidation, |
136 invalidation_map); | 133 invalidation_map); |
137 } | 134 } |
138 | 135 |
139 NonBlockingInvalidator::NonBlockingInvalidator( | 136 NonBlockingInvalidator::NonBlockingInvalidator( |
140 const notifier::NotifierOptions& notifier_options, | 137 const notifier::NotifierOptions& notifier_options, |
| 138 const std::string& invalidator_client_id, |
141 const InvalidationStateMap& initial_invalidation_state_map, | 139 const InvalidationStateMap& initial_invalidation_state_map, |
142 const std::string& invalidation_bootstrap_data, | 140 const std::string& invalidation_bootstrap_data, |
143 const WeakHandle<InvalidationStateTracker>& | 141 const WeakHandle<InvalidationStateTracker>& |
144 invalidation_state_tracker, | 142 invalidation_state_tracker, |
145 const std::string& client_info) | 143 const std::string& client_info) |
146 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 144 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
147 core_( | 145 core_( |
148 new Core(MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()))), | 146 new Core(MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()))), |
149 parent_task_runner_( | 147 parent_task_runner_( |
150 base::ThreadTaskRunnerHandle::Get()), | 148 base::ThreadTaskRunnerHandle::Get()), |
151 network_task_runner_(notifier_options.request_context_getter-> | 149 network_task_runner_(notifier_options.request_context_getter-> |
152 GetNetworkTaskRunner()) { | 150 GetNetworkTaskRunner()) { |
153 if (!network_task_runner_->PostTask( | 151 if (!network_task_runner_->PostTask( |
154 FROM_HERE, | 152 FROM_HERE, |
155 base::Bind( | 153 base::Bind( |
156 &NonBlockingInvalidator::Core::Initialize, | 154 &NonBlockingInvalidator::Core::Initialize, |
157 core_.get(), | 155 core_.get(), |
158 notifier_options, | 156 notifier_options, |
| 157 invalidator_client_id, |
159 initial_invalidation_state_map, | 158 initial_invalidation_state_map, |
160 invalidation_bootstrap_data, | 159 invalidation_bootstrap_data, |
161 invalidation_state_tracker, | 160 invalidation_state_tracker, |
162 client_info))) { | 161 client_info))) { |
163 NOTREACHED(); | 162 NOTREACHED(); |
164 } | 163 } |
165 } | 164 } |
166 | 165 |
167 NonBlockingInvalidator::~NonBlockingInvalidator() { | 166 NonBlockingInvalidator::~NonBlockingInvalidator() { |
168 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 167 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 ack_handle))) { | 209 ack_handle))) { |
211 NOTREACHED(); | 210 NOTREACHED(); |
212 } | 211 } |
213 } | 212 } |
214 | 213 |
215 InvalidatorState NonBlockingInvalidator::GetInvalidatorState() const { | 214 InvalidatorState NonBlockingInvalidator::GetInvalidatorState() const { |
216 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 215 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
217 return registrar_.GetInvalidatorState(); | 216 return registrar_.GetInvalidatorState(); |
218 } | 217 } |
219 | 218 |
220 void NonBlockingInvalidator::SetUniqueId(const std::string& unique_id) { | |
221 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | |
222 if (!network_task_runner_->PostTask( | |
223 FROM_HERE, | |
224 base::Bind(&NonBlockingInvalidator::Core::SetUniqueId, | |
225 core_.get(), unique_id))) { | |
226 NOTREACHED(); | |
227 } | |
228 } | |
229 | |
230 void NonBlockingInvalidator::UpdateCredentials(const std::string& email, | 219 void NonBlockingInvalidator::UpdateCredentials(const std::string& email, |
231 const std::string& token) { | 220 const std::string& token) { |
232 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 221 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
233 if (!network_task_runner_->PostTask( | 222 if (!network_task_runner_->PostTask( |
234 FROM_HERE, | 223 FROM_HERE, |
235 base::Bind(&NonBlockingInvalidator::Core::UpdateCredentials, | 224 base::Bind(&NonBlockingInvalidator::Core::UpdateCredentials, |
236 core_.get(), email, token))) { | 225 core_.get(), email, token))) { |
237 NOTREACHED(); | 226 NOTREACHED(); |
238 } | 227 } |
239 } | 228 } |
(...skipping 10 matching lines...) Expand all Loading... |
250 registrar_.UpdateInvalidatorState(state); | 239 registrar_.UpdateInvalidatorState(state); |
251 } | 240 } |
252 | 241 |
253 void NonBlockingInvalidator::OnIncomingInvalidation( | 242 void NonBlockingInvalidator::OnIncomingInvalidation( |
254 const ObjectIdInvalidationMap& invalidation_map) { | 243 const ObjectIdInvalidationMap& invalidation_map) { |
255 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 244 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
256 registrar_.DispatchInvalidationsToHandlers(invalidation_map); | 245 registrar_.DispatchInvalidationsToHandlers(invalidation_map); |
257 } | 246 } |
258 | 247 |
259 } // namespace syncer | 248 } // namespace syncer |
OLD | NEW |