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 SetUniqueId(const std::string& unique_id); | |
40 void UpdateCredentials(const std::string& email, const std::string& token); | 40 void UpdateCredentials(const std::string& email, const std::string& token); |
41 | 41 |
42 // InvalidationHandler implementation (all called on I/O thread by | 42 // InvalidationHandler implementation (all called on I/O thread by |
43 // InvalidationNotifier). | 43 // InvalidationNotifier). |
44 virtual void OnInvalidatorStateChange(InvalidatorState reason) OVERRIDE; | 44 virtual void OnInvalidatorStateChange(InvalidatorState reason) OVERRIDE; |
45 virtual void OnIncomingInvalidation( | 45 virtual void OnIncomingInvalidation( |
46 const ObjectIdInvalidationMap& invalidation_map, | 46 const ObjectIdInvalidationMap& invalidation_map, |
47 IncomingInvalidationSource source) OVERRIDE; | 47 IncomingInvalidationSource source) OVERRIDE; |
48 | 48 |
49 private: | 49 private: |
(...skipping 14 matching lines...) Expand all Loading... |
64 const WeakHandle<InvalidationHandler>& delegate_observer) | 64 const WeakHandle<InvalidationHandler>& delegate_observer) |
65 : delegate_observer_(delegate_observer) { | 65 : delegate_observer_(delegate_observer) { |
66 DCHECK(delegate_observer_.IsInitialized()); | 66 DCHECK(delegate_observer_.IsInitialized()); |
67 } | 67 } |
68 | 68 |
69 NonBlockingInvalidator::Core::~Core() { | 69 NonBlockingInvalidator::Core::~Core() { |
70 } | 70 } |
71 | 71 |
72 void NonBlockingInvalidator::Core::Initialize( | 72 void NonBlockingInvalidator::Core::Initialize( |
73 const notifier::NotifierOptions& notifier_options, | 73 const notifier::NotifierOptions& notifier_options, |
| 74 const std::string& invalidator_client_id, |
74 const InvalidationStateMap& initial_invalidation_state_map, | 75 const InvalidationStateMap& initial_invalidation_state_map, |
75 const std::string& invalidation_bootstrap_data, | 76 const std::string& invalidation_bootstrap_data, |
76 const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, | 77 const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, |
77 const std::string& client_info) { | 78 const std::string& client_info) { |
78 DCHECK(notifier_options.request_context_getter); | 79 DCHECK(notifier_options.request_context_getter); |
79 DCHECK_EQ(notifier::NOTIFICATION_SERVER, | 80 DCHECK_EQ(notifier::NOTIFICATION_SERVER, |
80 notifier_options.notification_method); | 81 notifier_options.notification_method); |
81 network_task_runner_ = notifier_options.request_context_getter-> | 82 network_task_runner_ = notifier_options.request_context_getter-> |
82 GetNetworkTaskRunner(); | 83 GetNetworkTaskRunner(); |
83 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 84 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
84 invalidation_notifier_.reset( | 85 invalidation_notifier_.reset( |
85 new InvalidationNotifier( | 86 new InvalidationNotifier( |
86 notifier::PushClient::CreateDefaultOnIOThread(notifier_options), | 87 notifier::PushClient::CreateDefaultOnIOThread(notifier_options), |
| 88 invalidator_client_id, |
87 initial_invalidation_state_map, | 89 initial_invalidation_state_map, |
88 invalidation_bootstrap_data, | 90 invalidation_bootstrap_data, |
89 invalidation_state_tracker, | 91 invalidation_state_tracker, |
90 client_info)); | 92 client_info)); |
91 invalidation_notifier_->RegisterHandler(this); | 93 invalidation_notifier_->RegisterHandler(this); |
92 } | 94 } |
93 | 95 |
94 void NonBlockingInvalidator::Core::Teardown() { | 96 void NonBlockingInvalidator::Core::Teardown() { |
95 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 97 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
96 invalidation_notifier_->UnregisterHandler(this); | 98 invalidation_notifier_->UnregisterHandler(this); |
97 invalidation_notifier_.reset(); | 99 invalidation_notifier_.reset(); |
98 network_task_runner_ = NULL; | 100 network_task_runner_ = NULL; |
99 } | 101 } |
100 | 102 |
101 void NonBlockingInvalidator::Core::UpdateRegisteredIds(const ObjectIdSet& ids) { | 103 void NonBlockingInvalidator::Core::UpdateRegisteredIds(const ObjectIdSet& ids) { |
102 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 104 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
103 invalidation_notifier_->UpdateRegisteredIds(this, ids); | 105 invalidation_notifier_->UpdateRegisteredIds(this, ids); |
104 } | 106 } |
105 | 107 |
106 void NonBlockingInvalidator::Core::SetUniqueId(const std::string& unique_id) { | |
107 DCHECK(network_task_runner_->BelongsToCurrentThread()); | |
108 invalidation_notifier_->SetUniqueId(unique_id); | |
109 } | |
110 | |
111 void NonBlockingInvalidator::Core::UpdateCredentials(const std::string& email, | 108 void NonBlockingInvalidator::Core::UpdateCredentials(const std::string& email, |
112 const std::string& token) { | 109 const std::string& token) { |
113 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 110 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
114 invalidation_notifier_->UpdateCredentials(email, token); | 111 invalidation_notifier_->UpdateCredentials(email, token); |
115 } | 112 } |
116 | 113 |
117 void NonBlockingInvalidator::Core::OnInvalidatorStateChange( | 114 void NonBlockingInvalidator::Core::OnInvalidatorStateChange( |
118 InvalidatorState reason) { | 115 InvalidatorState reason) { |
119 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 116 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
120 delegate_observer_.Call( | 117 delegate_observer_.Call( |
121 FROM_HERE, &InvalidationHandler::OnInvalidatorStateChange, reason); | 118 FROM_HERE, &InvalidationHandler::OnInvalidatorStateChange, reason); |
122 } | 119 } |
123 | 120 |
124 void NonBlockingInvalidator::Core::OnIncomingInvalidation( | 121 void NonBlockingInvalidator::Core::OnIncomingInvalidation( |
125 const ObjectIdInvalidationMap& invalidation_map, | 122 const ObjectIdInvalidationMap& invalidation_map, |
126 IncomingInvalidationSource source) { | 123 IncomingInvalidationSource source) { |
127 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 124 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
128 delegate_observer_.Call(FROM_HERE, | 125 delegate_observer_.Call(FROM_HERE, |
129 &InvalidationHandler::OnIncomingInvalidation, | 126 &InvalidationHandler::OnIncomingInvalidation, |
130 invalidation_map, | 127 invalidation_map, |
131 source); | 128 source); |
132 } | 129 } |
133 | 130 |
134 NonBlockingInvalidator::NonBlockingInvalidator( | 131 NonBlockingInvalidator::NonBlockingInvalidator( |
135 const notifier::NotifierOptions& notifier_options, | 132 const notifier::NotifierOptions& notifier_options, |
| 133 const std::string& invalidator_client_id, |
136 const InvalidationStateMap& initial_max_invalidation_versions, | 134 const InvalidationStateMap& initial_max_invalidation_versions, |
137 const std::string& invalidation_bootstrap_data, | 135 const std::string& invalidation_bootstrap_data, |
138 const WeakHandle<InvalidationStateTracker>& | 136 const WeakHandle<InvalidationStateTracker>& |
139 invalidation_state_tracker, | 137 invalidation_state_tracker, |
140 const std::string& client_info) | 138 const std::string& client_info) |
141 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 139 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
142 core_( | 140 core_( |
143 new Core(MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()))), | 141 new Core(MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()))), |
144 parent_task_runner_( | 142 parent_task_runner_( |
145 base::ThreadTaskRunnerHandle::Get()), | 143 base::ThreadTaskRunnerHandle::Get()), |
146 network_task_runner_(notifier_options.request_context_getter-> | 144 network_task_runner_(notifier_options.request_context_getter-> |
147 GetNetworkTaskRunner()) { | 145 GetNetworkTaskRunner()), |
| 146 invalidator_client_id_(invalidator_client_id) { |
148 if (!network_task_runner_->PostTask( | 147 if (!network_task_runner_->PostTask( |
149 FROM_HERE, | 148 FROM_HERE, |
150 base::Bind( | 149 base::Bind( |
151 &NonBlockingInvalidator::Core::Initialize, | 150 &NonBlockingInvalidator::Core::Initialize, |
152 core_.get(), | 151 core_.get(), |
153 notifier_options, | 152 notifier_options, |
| 153 invalidator_client_id_, |
154 initial_max_invalidation_versions, | 154 initial_max_invalidation_versions, |
155 invalidation_bootstrap_data, | 155 invalidation_bootstrap_data, |
156 invalidation_state_tracker, | 156 invalidation_state_tracker, |
157 client_info))) { | 157 client_info))) { |
158 NOTREACHED(); | 158 NOTREACHED(); |
159 } | 159 } |
160 } | 160 } |
161 | 161 |
162 NonBlockingInvalidator::~NonBlockingInvalidator() { | 162 NonBlockingInvalidator::~NonBlockingInvalidator() { |
163 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 163 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
(...skipping 27 matching lines...) Expand all Loading... |
191 void NonBlockingInvalidator::UnregisterHandler(InvalidationHandler* handler) { | 191 void NonBlockingInvalidator::UnregisterHandler(InvalidationHandler* handler) { |
192 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 192 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
193 registrar_.UnregisterHandler(handler); | 193 registrar_.UnregisterHandler(handler); |
194 } | 194 } |
195 | 195 |
196 InvalidatorState NonBlockingInvalidator::GetInvalidatorState() const { | 196 InvalidatorState NonBlockingInvalidator::GetInvalidatorState() const { |
197 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 197 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
198 return registrar_.GetInvalidatorState(); | 198 return registrar_.GetInvalidatorState(); |
199 } | 199 } |
200 | 200 |
201 void NonBlockingInvalidator::SetUniqueId(const std::string& unique_id) { | |
202 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | |
203 if (!network_task_runner_->PostTask( | |
204 FROM_HERE, | |
205 base::Bind(&NonBlockingInvalidator::Core::SetUniqueId, | |
206 core_.get(), unique_id))) { | |
207 NOTREACHED(); | |
208 } | |
209 } | |
210 | |
211 void NonBlockingInvalidator::UpdateCredentials(const std::string& email, | 201 void NonBlockingInvalidator::UpdateCredentials(const std::string& email, |
212 const std::string& token) { | 202 const std::string& token) { |
213 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 203 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
214 if (!network_task_runner_->PostTask( | 204 if (!network_task_runner_->PostTask( |
215 FROM_HERE, | 205 FROM_HERE, |
216 base::Bind(&NonBlockingInvalidator::Core::UpdateCredentials, | 206 base::Bind(&NonBlockingInvalidator::Core::UpdateCredentials, |
217 core_.get(), email, token))) { | 207 core_.get(), email, token))) { |
218 NOTREACHED(); | 208 NOTREACHED(); |
219 } | 209 } |
220 } | 210 } |
(...skipping 11 matching lines...) Expand all Loading... |
232 } | 222 } |
233 | 223 |
234 void NonBlockingInvalidator::OnIncomingInvalidation( | 224 void NonBlockingInvalidator::OnIncomingInvalidation( |
235 const ObjectIdInvalidationMap& invalidation_map, | 225 const ObjectIdInvalidationMap& invalidation_map, |
236 IncomingInvalidationSource source) { | 226 IncomingInvalidationSource source) { |
237 DCHECK(parent_task_runner_->BelongsToCurrentThread()); | 227 DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
238 registrar_.DispatchInvalidationsToHandlers(invalidation_map, source); | 228 registrar_.DispatchInvalidationsToHandlers(invalidation_map, source); |
239 } | 229 } |
240 | 230 |
241 } // namespace syncer | 231 } // namespace syncer |
OLD | NEW |