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

Side by Side Diff: sync/notifier/non_blocking_invalidation_notifier.cc

Issue 10702074: Refactor sync-specific parts out of SyncNotifier/SyncNotifierObserver (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: DEPS Created 8 years, 5 months 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 "sync/notifier/non_blocking_invalidation_notifier.h" 5 #include "sync/notifier/non_blocking_invalidation_notifier.h"
6 6
7 #include "base/location.h" 7 #include "base/location.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
(...skipping 17 matching lines...) Expand all
28 28
29 // Helpers called on I/O thread. 29 // Helpers called on I/O thread.
30 void Initialize( 30 void Initialize(
31 const notifier::NotifierOptions& notifier_options, 31 const notifier::NotifierOptions& notifier_options,
32 const InvalidationVersionMap& initial_max_invalidation_versions, 32 const InvalidationVersionMap& initial_max_invalidation_versions,
33 const std::string& initial_invalidation_state, 33 const std::string& initial_invalidation_state,
34 const syncer::WeakHandle<InvalidationStateTracker>& 34 const syncer::WeakHandle<InvalidationStateTracker>&
35 invalidation_state_tracker, 35 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 SetUniqueId(const std::string& unique_id); 39 void SetUniqueId(const std::string& unique_id);
39 void SetStateDeprecated(const std::string& state); 40 void SetStateDeprecated(const std::string& state);
40 void UpdateCredentials(const std::string& email, const std::string& token); 41 void UpdateCredentials(const std::string& email, const std::string& token);
41 void UpdateEnabledTypes(syncer::ModelTypeSet enabled_types);
42 42
43 // SyncNotifierObserver implementation (all called on I/O thread by 43 // SyncNotifierObserver implementation (all called on I/O thread by
44 // InvalidationNotifier). 44 // InvalidationNotifier).
45 virtual void OnNotificationsEnabled() OVERRIDE; 45 virtual void OnNotificationsEnabled() OVERRIDE;
46 virtual void OnNotificationsDisabled( 46 virtual void OnNotificationsDisabled(
47 NotificationsDisabledReason reason) OVERRIDE; 47 NotificationsDisabledReason reason) OVERRIDE;
48 virtual void OnIncomingNotification( 48 virtual void OnIncomingNotification(
49 const syncer::ModelTypePayloadMap& type_payloads, 49 const ObjectIdPayloadMap& id_payloads,
50 IncomingNotificationSource source) OVERRIDE; 50 IncomingNotificationSource source) OVERRIDE;
51 51
52 private: 52 private:
53 friend class 53 friend class
54 base::RefCountedThreadSafe<NonBlockingInvalidationNotifier::Core>; 54 base::RefCountedThreadSafe<NonBlockingInvalidationNotifier::Core>;
55 // Called on parent or I/O thread. 55 // Called on parent or I/O thread.
56 ~Core(); 56 ~Core();
57 57
58 // The variables below should be used only on the I/O thread. 58 // The variables below should be used only on the I/O thread.
59 const syncer::WeakHandle<SyncNotifierObserver> delegate_observer_; 59 const syncer::WeakHandle<SyncNotifierObserver> delegate_observer_;
(...skipping 26 matching lines...) Expand all
86 network_task_runner_ = notifier_options.request_context_getter-> 86 network_task_runner_ = notifier_options.request_context_getter->
87 GetNetworkTaskRunner(); 87 GetNetworkTaskRunner();
88 DCHECK(network_task_runner_->BelongsToCurrentThread()); 88 DCHECK(network_task_runner_->BelongsToCurrentThread());
89 invalidation_notifier_.reset( 89 invalidation_notifier_.reset(
90 new InvalidationNotifier( 90 new InvalidationNotifier(
91 notifier::PushClient::CreateDefaultOnIOThread(notifier_options), 91 notifier::PushClient::CreateDefaultOnIOThread(notifier_options),
92 initial_max_invalidation_versions, 92 initial_max_invalidation_versions,
93 initial_invalidation_state, 93 initial_invalidation_state,
94 invalidation_state_tracker, 94 invalidation_state_tracker,
95 client_info)); 95 client_info));
96 invalidation_notifier_->AddObserver(this);
97 } 96 }
98 97
99 98
100 void NonBlockingInvalidationNotifier::Core::Teardown() { 99 void NonBlockingInvalidationNotifier::Core::Teardown() {
101 DCHECK(network_task_runner_->BelongsToCurrentThread()); 100 DCHECK(network_task_runner_->BelongsToCurrentThread());
102 invalidation_notifier_->RemoveObserver(this); 101 invalidation_notifier_->UpdateRegisteredIds(this, ObjectIdSet());
103 invalidation_notifier_.reset(); 102 invalidation_notifier_.reset();
104 network_task_runner_ = NULL; 103 network_task_runner_ = NULL;
105 } 104 }
106 105
106 void NonBlockingInvalidationNotifier::Core::UpdateRegisteredIds(
107 const ObjectIdSet& ids) {
108 DCHECK(network_task_runner_->BelongsToCurrentThread());
109 invalidation_notifier_->UpdateRegisteredIds(this, ids);
akalin 2012/07/19 00:42:06 don't we need to union ids with the set of all reg
dcheng 2012/07/19 18:31:05 SyncNotifierHelper::UpdateRegisteredIds() convenie
akalin 2012/07/19 23:07:26 Oh, I missed that. That's easy to miss. Maybe ad
dcheng 2012/07/20 00:57:04 Done. Not sure my comment is helpful though...
110 }
111
107 void NonBlockingInvalidationNotifier::Core::SetUniqueId( 112 void NonBlockingInvalidationNotifier::Core::SetUniqueId(
108 const std::string& unique_id) { 113 const std::string& unique_id) {
109 DCHECK(network_task_runner_->BelongsToCurrentThread()); 114 DCHECK(network_task_runner_->BelongsToCurrentThread());
110 invalidation_notifier_->SetUniqueId(unique_id); 115 invalidation_notifier_->SetUniqueId(unique_id);
111 } 116 }
112 117
113 void NonBlockingInvalidationNotifier::Core::SetStateDeprecated( 118 void NonBlockingInvalidationNotifier::Core::SetStateDeprecated(
114 const std::string& state) { 119 const std::string& state) {
115 DCHECK(network_task_runner_->BelongsToCurrentThread()); 120 DCHECK(network_task_runner_->BelongsToCurrentThread());
116 invalidation_notifier_->SetStateDeprecated(state); 121 invalidation_notifier_->SetStateDeprecated(state);
117 } 122 }
118 123
119 void NonBlockingInvalidationNotifier::Core::UpdateCredentials( 124 void NonBlockingInvalidationNotifier::Core::UpdateCredentials(
120 const std::string& email, const std::string& token) { 125 const std::string& email, const std::string& token) {
121 DCHECK(network_task_runner_->BelongsToCurrentThread()); 126 DCHECK(network_task_runner_->BelongsToCurrentThread());
122 invalidation_notifier_->UpdateCredentials(email, token); 127 invalidation_notifier_->UpdateCredentials(email, token);
123 } 128 }
124 129
125 void NonBlockingInvalidationNotifier::Core::UpdateEnabledTypes(
126 syncer::ModelTypeSet enabled_types) {
127 DCHECK(network_task_runner_->BelongsToCurrentThread());
128 invalidation_notifier_->UpdateEnabledTypes(enabled_types);
129 }
130
131 void NonBlockingInvalidationNotifier::Core::OnNotificationsEnabled() { 130 void NonBlockingInvalidationNotifier::Core::OnNotificationsEnabled() {
132 DCHECK(network_task_runner_->BelongsToCurrentThread()); 131 DCHECK(network_task_runner_->BelongsToCurrentThread());
133 delegate_observer_.Call(FROM_HERE, 132 delegate_observer_.Call(FROM_HERE,
134 &SyncNotifierObserver::OnNotificationsEnabled); 133 &SyncNotifierObserver::OnNotificationsEnabled);
135 } 134 }
136 135
137 void NonBlockingInvalidationNotifier::Core::OnNotificationsDisabled( 136 void NonBlockingInvalidationNotifier::Core::OnNotificationsDisabled(
138 NotificationsDisabledReason reason) { 137 NotificationsDisabledReason reason) {
139 DCHECK(network_task_runner_->BelongsToCurrentThread()); 138 DCHECK(network_task_runner_->BelongsToCurrentThread());
140 delegate_observer_.Call( 139 delegate_observer_.Call(
141 FROM_HERE, &SyncNotifierObserver::OnNotificationsDisabled, reason); 140 FROM_HERE, &SyncNotifierObserver::OnNotificationsDisabled, reason);
142 } 141 }
143 142
144 void NonBlockingInvalidationNotifier::Core::OnIncomingNotification( 143 void NonBlockingInvalidationNotifier::Core::OnIncomingNotification(
145 const syncer::ModelTypePayloadMap& type_payloads, 144 const ObjectIdPayloadMap& id_payloads, IncomingNotificationSource source) {
146 IncomingNotificationSource source) {
147 DCHECK(network_task_runner_->BelongsToCurrentThread()); 145 DCHECK(network_task_runner_->BelongsToCurrentThread());
148 delegate_observer_.Call(FROM_HERE, 146 delegate_observer_.Call(FROM_HERE,
149 &SyncNotifierObserver::OnIncomingNotification, 147 &SyncNotifierObserver::OnIncomingNotification,
150 type_payloads, 148 id_payloads,
151 source); 149 source);
152 } 150 }
153 151
154 NonBlockingInvalidationNotifier::NonBlockingInvalidationNotifier( 152 NonBlockingInvalidationNotifier::NonBlockingInvalidationNotifier(
155 const notifier::NotifierOptions& notifier_options, 153 const notifier::NotifierOptions& notifier_options,
156 const InvalidationVersionMap& initial_max_invalidation_versions, 154 const InvalidationVersionMap& initial_max_invalidation_versions,
157 const std::string& initial_invalidation_state, 155 const std::string& initial_invalidation_state,
158 const syncer::WeakHandle<InvalidationStateTracker>& 156 const syncer::WeakHandle<InvalidationStateTracker>&
159 invalidation_state_tracker, 157 invalidation_state_tracker,
160 const std::string& client_info) 158 const std::string& client_info)
(...skipping 22 matching lines...) Expand all
183 NonBlockingInvalidationNotifier::~NonBlockingInvalidationNotifier() { 181 NonBlockingInvalidationNotifier::~NonBlockingInvalidationNotifier() {
184 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 182 DCHECK(parent_task_runner_->BelongsToCurrentThread());
185 if (!network_task_runner_->PostTask( 183 if (!network_task_runner_->PostTask(
186 FROM_HERE, 184 FROM_HERE,
187 base::Bind(&NonBlockingInvalidationNotifier::Core::Teardown, 185 base::Bind(&NonBlockingInvalidationNotifier::Core::Teardown,
188 core_.get()))) { 186 core_.get()))) {
189 NOTREACHED(); 187 NOTREACHED();
190 } 188 }
191 } 189 }
192 190
193 void NonBlockingInvalidationNotifier::AddObserver( 191 void NonBlockingInvalidationNotifier::UpdateRegisteredIds(
194 SyncNotifierObserver* observer) { 192 SyncNotifierObserver* handler, const ObjectIdSet& ids) {
195 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 193 DCHECK(parent_task_runner_->BelongsToCurrentThread());
196 observers_.AddObserver(observer); 194 if (!network_task_runner_->PostTask(
197 } 195 FROM_HERE,
198 196 base::Bind(
199 void NonBlockingInvalidationNotifier::RemoveObserver( 197 &NonBlockingInvalidationNotifier::Core::UpdateRegisteredIds,
200 SyncNotifierObserver* observer) { 198 core_.get(),
201 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 199 helper_.UpdateRegisteredIds(handler, ids)))) {
202 observers_.RemoveObserver(observer); 200 NOTREACHED();
201 }
203 } 202 }
204 203
205 void NonBlockingInvalidationNotifier::SetUniqueId( 204 void NonBlockingInvalidationNotifier::SetUniqueId(
206 const std::string& unique_id) { 205 const std::string& unique_id) {
207 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 206 DCHECK(parent_task_runner_->BelongsToCurrentThread());
208 if (!network_task_runner_->PostTask( 207 if (!network_task_runner_->PostTask(
209 FROM_HERE, 208 FROM_HERE,
210 base::Bind(&NonBlockingInvalidationNotifier::Core::SetUniqueId, 209 base::Bind(&NonBlockingInvalidationNotifier::Core::SetUniqueId,
211 core_.get(), unique_id))) { 210 core_.get(), unique_id))) {
212 NOTREACHED(); 211 NOTREACHED();
(...skipping 16 matching lines...) Expand all
229 const std::string& email, const std::string& token) { 228 const std::string& email, const std::string& token) {
230 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 229 DCHECK(parent_task_runner_->BelongsToCurrentThread());
231 if (!network_task_runner_->PostTask( 230 if (!network_task_runner_->PostTask(
232 FROM_HERE, 231 FROM_HERE,
233 base::Bind(&NonBlockingInvalidationNotifier::Core::UpdateCredentials, 232 base::Bind(&NonBlockingInvalidationNotifier::Core::UpdateCredentials,
234 core_.get(), email, token))) { 233 core_.get(), email, token))) {
235 NOTREACHED(); 234 NOTREACHED();
236 } 235 }
237 } 236 }
238 237
239 void NonBlockingInvalidationNotifier::UpdateEnabledTypes(
240 syncer::ModelTypeSet enabled_types) {
241 DCHECK(parent_task_runner_->BelongsToCurrentThread());
242 if (!network_task_runner_->PostTask(
243 FROM_HERE,
244 base::Bind(&NonBlockingInvalidationNotifier::Core::UpdateEnabledTypes,
245 core_.get(), enabled_types))) {
246 NOTREACHED();
247 }
248 }
249
250 void NonBlockingInvalidationNotifier::SendNotification( 238 void NonBlockingInvalidationNotifier::SendNotification(
251 syncer::ModelTypeSet changed_types) { 239 syncer::ModelTypeSet changed_types) {
252 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 240 DCHECK(parent_task_runner_->BelongsToCurrentThread());
253 // InvalidationClient doesn't implement SendNotification(), so no 241 // InvalidationClient doesn't implement SendNotification(), so no
254 // need to forward on the call. 242 // need to forward on the call.
255 } 243 }
256 244
257 void NonBlockingInvalidationNotifier::OnNotificationsEnabled() { 245 void NonBlockingInvalidationNotifier::OnNotificationsEnabled() {
258 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 246 DCHECK(parent_task_runner_->BelongsToCurrentThread());
259 FOR_EACH_OBSERVER(SyncNotifierObserver, observers_, 247 FOR_EACH_OBSERVER(SyncNotifierObserver, *helper_.handlers(),
260 OnNotificationsEnabled()); 248 OnNotificationsEnabled());
261 } 249 }
262 250
263 void NonBlockingInvalidationNotifier::OnNotificationsDisabled( 251 void NonBlockingInvalidationNotifier::OnNotificationsDisabled(
264 NotificationsDisabledReason reason) { 252 NotificationsDisabledReason reason) {
265 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 253 DCHECK(parent_task_runner_->BelongsToCurrentThread());
266 FOR_EACH_OBSERVER(SyncNotifierObserver, observers_, 254 FOR_EACH_OBSERVER(SyncNotifierObserver, *helper_.handlers(),
267 OnNotificationsDisabled(reason)); 255 OnNotificationsDisabled(reason));
268 } 256 }
269 257
270 void NonBlockingInvalidationNotifier::OnIncomingNotification( 258 void NonBlockingInvalidationNotifier::OnIncomingNotification(
271 const syncer::ModelTypePayloadMap& type_payloads, 259 const ObjectIdPayloadMap& id_payloads,
272 IncomingNotificationSource source) { 260 IncomingNotificationSource source) {
273 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 261 DCHECK(parent_task_runner_->BelongsToCurrentThread());
274 FOR_EACH_OBSERVER(SyncNotifierObserver, observers_, 262 helper_.DispatchInvalidationsToHandlers(id_payloads, source);
275 OnIncomingNotification(type_payloads, source));
276 } 263 }
277 264
278 } // namespace syncer 265 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698