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

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: FOR_THE_HORDE 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 15 matching lines...) Expand all
26 const WeakHandle<SyncNotifierObserver>& delegate_observer); 26 const WeakHandle<SyncNotifierObserver>& delegate_observer);
27 27
28 // Helpers called on I/O thread. 28 // Helpers called on I/O thread.
29 void Initialize( 29 void Initialize(
30 const notifier::NotifierOptions& notifier_options, 30 const notifier::NotifierOptions& notifier_options,
31 const InvalidationVersionMap& initial_max_invalidation_versions, 31 const InvalidationVersionMap& initial_max_invalidation_versions,
32 const std::string& initial_invalidation_state, 32 const std::string& initial_invalidation_state,
33 const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, 33 const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker,
34 const std::string& client_info); 34 const std::string& client_info);
35 void Teardown(); 35 void Teardown();
36 void UpdateRegisteredIds(const ObjectIdSet& ids);
36 void SetUniqueId(const std::string& unique_id); 37 void SetUniqueId(const std::string& unique_id);
37 void SetStateDeprecated(const std::string& state); 38 void SetStateDeprecated(const std::string& state);
38 void UpdateCredentials(const std::string& email, const std::string& token); 39 void UpdateCredentials(const std::string& email, const std::string& token);
39 void UpdateEnabledTypes(ModelTypeSet enabled_types);
40 40
41 // SyncNotifierObserver implementation (all called on I/O thread by 41 // SyncNotifierObserver implementation (all called on I/O thread by
42 // InvalidationNotifier). 42 // InvalidationNotifier).
43 virtual void OnNotificationsEnabled() OVERRIDE; 43 virtual void OnNotificationsEnabled() OVERRIDE;
44 virtual void OnNotificationsDisabled( 44 virtual void OnNotificationsDisabled(
45 NotificationsDisabledReason reason) OVERRIDE; 45 NotificationsDisabledReason reason) OVERRIDE;
46 virtual void OnIncomingNotification( 46 virtual void OnIncomingNotification(
47 const ModelTypePayloadMap& type_payloads, 47 const ObjectIdPayloadMap& id_payloads,
48 IncomingNotificationSource source) OVERRIDE; 48 IncomingNotificationSource source) OVERRIDE;
49 49
50 private: 50 private:
51 friend class 51 friend class
52 base::RefCountedThreadSafe<NonBlockingInvalidationNotifier::Core>; 52 base::RefCountedThreadSafe<NonBlockingInvalidationNotifier::Core>;
53 // Called on parent or I/O thread. 53 // Called on parent or I/O thread.
54 ~Core(); 54 ~Core();
55 55
56 // The variables below should be used only on the I/O thread. 56 // The variables below should be used only on the I/O thread.
57 const WeakHandle<SyncNotifierObserver> delegate_observer_; 57 const WeakHandle<SyncNotifierObserver> delegate_observer_;
(...skipping 24 matching lines...) Expand all
82 network_task_runner_ = notifier_options.request_context_getter-> 82 network_task_runner_ = notifier_options.request_context_getter->
83 GetNetworkTaskRunner(); 83 GetNetworkTaskRunner();
84 DCHECK(network_task_runner_->BelongsToCurrentThread()); 84 DCHECK(network_task_runner_->BelongsToCurrentThread());
85 invalidation_notifier_.reset( 85 invalidation_notifier_.reset(
86 new InvalidationNotifier( 86 new InvalidationNotifier(
87 notifier::PushClient::CreateDefaultOnIOThread(notifier_options), 87 notifier::PushClient::CreateDefaultOnIOThread(notifier_options),
88 initial_max_invalidation_versions, 88 initial_max_invalidation_versions,
89 initial_invalidation_state, 89 initial_invalidation_state,
90 invalidation_state_tracker, 90 invalidation_state_tracker,
91 client_info)); 91 client_info));
92 invalidation_notifier_->AddObserver(this);
93 } 92 }
94 93
95 94
96 void NonBlockingInvalidationNotifier::Core::Teardown() { 95 void NonBlockingInvalidationNotifier::Core::Teardown() {
97 DCHECK(network_task_runner_->BelongsToCurrentThread()); 96 DCHECK(network_task_runner_->BelongsToCurrentThread());
98 invalidation_notifier_->RemoveObserver(this); 97 invalidation_notifier_->UpdateRegisteredIds(this, ObjectIdSet());
99 invalidation_notifier_.reset(); 98 invalidation_notifier_.reset();
100 network_task_runner_ = NULL; 99 network_task_runner_ = NULL;
101 } 100 }
102 101
102 void NonBlockingInvalidationNotifier::Core::UpdateRegisteredIds(
103 const ObjectIdSet& ids) {
104 DCHECK(network_task_runner_->BelongsToCurrentThread());
105 invalidation_notifier_->UpdateRegisteredIds(this, ids);
106 }
107
103 void NonBlockingInvalidationNotifier::Core::SetUniqueId( 108 void NonBlockingInvalidationNotifier::Core::SetUniqueId(
104 const std::string& unique_id) { 109 const std::string& unique_id) {
105 DCHECK(network_task_runner_->BelongsToCurrentThread()); 110 DCHECK(network_task_runner_->BelongsToCurrentThread());
106 invalidation_notifier_->SetUniqueId(unique_id); 111 invalidation_notifier_->SetUniqueId(unique_id);
107 } 112 }
108 113
109 void NonBlockingInvalidationNotifier::Core::SetStateDeprecated( 114 void NonBlockingInvalidationNotifier::Core::SetStateDeprecated(
110 const std::string& state) { 115 const std::string& state) {
111 DCHECK(network_task_runner_->BelongsToCurrentThread()); 116 DCHECK(network_task_runner_->BelongsToCurrentThread());
112 invalidation_notifier_->SetStateDeprecated(state); 117 invalidation_notifier_->SetStateDeprecated(state);
113 } 118 }
114 119
115 void NonBlockingInvalidationNotifier::Core::UpdateCredentials( 120 void NonBlockingInvalidationNotifier::Core::UpdateCredentials(
116 const std::string& email, const std::string& token) { 121 const std::string& email, const std::string& token) {
117 DCHECK(network_task_runner_->BelongsToCurrentThread()); 122 DCHECK(network_task_runner_->BelongsToCurrentThread());
118 invalidation_notifier_->UpdateCredentials(email, token); 123 invalidation_notifier_->UpdateCredentials(email, token);
119 } 124 }
120 125
121 void NonBlockingInvalidationNotifier::Core::UpdateEnabledTypes(
122 ModelTypeSet enabled_types) {
123 DCHECK(network_task_runner_->BelongsToCurrentThread());
124 invalidation_notifier_->UpdateEnabledTypes(enabled_types);
125 }
126
127 void NonBlockingInvalidationNotifier::Core::OnNotificationsEnabled() { 126 void NonBlockingInvalidationNotifier::Core::OnNotificationsEnabled() {
128 DCHECK(network_task_runner_->BelongsToCurrentThread()); 127 DCHECK(network_task_runner_->BelongsToCurrentThread());
129 delegate_observer_.Call(FROM_HERE, 128 delegate_observer_.Call(FROM_HERE,
130 &SyncNotifierObserver::OnNotificationsEnabled); 129 &SyncNotifierObserver::OnNotificationsEnabled);
131 } 130 }
132 131
133 void NonBlockingInvalidationNotifier::Core::OnNotificationsDisabled( 132 void NonBlockingInvalidationNotifier::Core::OnNotificationsDisabled(
134 NotificationsDisabledReason reason) { 133 NotificationsDisabledReason reason) {
135 DCHECK(network_task_runner_->BelongsToCurrentThread()); 134 DCHECK(network_task_runner_->BelongsToCurrentThread());
136 delegate_observer_.Call( 135 delegate_observer_.Call(
137 FROM_HERE, &SyncNotifierObserver::OnNotificationsDisabled, reason); 136 FROM_HERE, &SyncNotifierObserver::OnNotificationsDisabled, reason);
138 } 137 }
139 138
140 void NonBlockingInvalidationNotifier::Core::OnIncomingNotification( 139 void NonBlockingInvalidationNotifier::Core::OnIncomingNotification(
141 const ModelTypePayloadMap& type_payloads, 140 const ObjectIdPayloadMap& id_payloads, IncomingNotificationSource source) {
142 IncomingNotificationSource source) {
143 DCHECK(network_task_runner_->BelongsToCurrentThread()); 141 DCHECK(network_task_runner_->BelongsToCurrentThread());
144 delegate_observer_.Call(FROM_HERE, 142 delegate_observer_.Call(FROM_HERE,
145 &SyncNotifierObserver::OnIncomingNotification, 143 &SyncNotifierObserver::OnIncomingNotification,
146 type_payloads, 144 id_payloads,
147 source); 145 source);
148 } 146 }
149 147
150 NonBlockingInvalidationNotifier::NonBlockingInvalidationNotifier( 148 NonBlockingInvalidationNotifier::NonBlockingInvalidationNotifier(
151 const notifier::NotifierOptions& notifier_options, 149 const notifier::NotifierOptions& notifier_options,
152 const InvalidationVersionMap& initial_max_invalidation_versions, 150 const InvalidationVersionMap& initial_max_invalidation_versions,
153 const std::string& initial_invalidation_state, 151 const std::string& initial_invalidation_state,
154 const WeakHandle<InvalidationStateTracker>& 152 const WeakHandle<InvalidationStateTracker>&
155 invalidation_state_tracker, 153 invalidation_state_tracker,
156 const std::string& client_info) 154 const std::string& client_info)
(...skipping 21 matching lines...) Expand all
178 NonBlockingInvalidationNotifier::~NonBlockingInvalidationNotifier() { 176 NonBlockingInvalidationNotifier::~NonBlockingInvalidationNotifier() {
179 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 177 DCHECK(parent_task_runner_->BelongsToCurrentThread());
180 if (!network_task_runner_->PostTask( 178 if (!network_task_runner_->PostTask(
181 FROM_HERE, 179 FROM_HERE,
182 base::Bind(&NonBlockingInvalidationNotifier::Core::Teardown, 180 base::Bind(&NonBlockingInvalidationNotifier::Core::Teardown,
183 core_.get()))) { 181 core_.get()))) {
184 NOTREACHED(); 182 NOTREACHED();
185 } 183 }
186 } 184 }
187 185
188 void NonBlockingInvalidationNotifier::AddObserver( 186 void NonBlockingInvalidationNotifier::UpdateRegisteredIds(
189 SyncNotifierObserver* observer) { 187 SyncNotifierObserver* handler, const ObjectIdSet& ids) {
190 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 188 DCHECK(parent_task_runner_->BelongsToCurrentThread());
191 observers_.AddObserver(observer); 189 const ObjectIdSet& registered_ids = helper_.UpdateRegisteredIds(handler, ids);
akalin 2012/07/21 01:14:10 actually, rename this to "all_registered_ids"
dcheng 2012/07/21 14:06:53 Done.
192 } 190 if (!network_task_runner_->PostTask(
193 191 FROM_HERE,
194 void NonBlockingInvalidationNotifier::RemoveObserver( 192 base::Bind(
195 SyncNotifierObserver* observer) { 193 &NonBlockingInvalidationNotifier::Core::UpdateRegisteredIds,
196 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 194 core_.get(),
197 observers_.RemoveObserver(observer); 195 registered_ids))) {
196 NOTREACHED();
197 }
198 } 198 }
199 199
200 void NonBlockingInvalidationNotifier::SetUniqueId( 200 void NonBlockingInvalidationNotifier::SetUniqueId(
201 const std::string& unique_id) { 201 const std::string& unique_id) {
202 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 202 DCHECK(parent_task_runner_->BelongsToCurrentThread());
203 if (!network_task_runner_->PostTask( 203 if (!network_task_runner_->PostTask(
204 FROM_HERE, 204 FROM_HERE,
205 base::Bind(&NonBlockingInvalidationNotifier::Core::SetUniqueId, 205 base::Bind(&NonBlockingInvalidationNotifier::Core::SetUniqueId,
206 core_.get(), unique_id))) { 206 core_.get(), unique_id))) {
207 NOTREACHED(); 207 NOTREACHED();
(...skipping 16 matching lines...) Expand all
224 const std::string& email, const std::string& token) { 224 const std::string& email, const std::string& token) {
225 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 225 DCHECK(parent_task_runner_->BelongsToCurrentThread());
226 if (!network_task_runner_->PostTask( 226 if (!network_task_runner_->PostTask(
227 FROM_HERE, 227 FROM_HERE,
228 base::Bind(&NonBlockingInvalidationNotifier::Core::UpdateCredentials, 228 base::Bind(&NonBlockingInvalidationNotifier::Core::UpdateCredentials,
229 core_.get(), email, token))) { 229 core_.get(), email, token))) {
230 NOTREACHED(); 230 NOTREACHED();
231 } 231 }
232 } 232 }
233 233
234 void NonBlockingInvalidationNotifier::UpdateEnabledTypes(
235 ModelTypeSet enabled_types) {
236 DCHECK(parent_task_runner_->BelongsToCurrentThread());
237 if (!network_task_runner_->PostTask(
238 FROM_HERE,
239 base::Bind(&NonBlockingInvalidationNotifier::Core::UpdateEnabledTypes,
240 core_.get(), enabled_types))) {
241 NOTREACHED();
242 }
243 }
244
245 void NonBlockingInvalidationNotifier::SendNotification( 234 void NonBlockingInvalidationNotifier::SendNotification(
246 ModelTypeSet changed_types) { 235 ModelTypeSet changed_types) {
247 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 236 DCHECK(parent_task_runner_->BelongsToCurrentThread());
248 // InvalidationClient doesn't implement SendNotification(), so no 237 // InvalidationClient doesn't implement SendNotification(), so no
249 // need to forward on the call. 238 // need to forward on the call.
250 } 239 }
251 240
252 void NonBlockingInvalidationNotifier::OnNotificationsEnabled() { 241 void NonBlockingInvalidationNotifier::OnNotificationsEnabled() {
253 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 242 DCHECK(parent_task_runner_->BelongsToCurrentThread());
254 FOR_EACH_OBSERVER(SyncNotifierObserver, observers_, 243 helper_.EmitOnNotificationsEnabled();
255 OnNotificationsEnabled());
256 } 244 }
257 245
258 void NonBlockingInvalidationNotifier::OnNotificationsDisabled( 246 void NonBlockingInvalidationNotifier::OnNotificationsDisabled(
259 NotificationsDisabledReason reason) { 247 NotificationsDisabledReason reason) {
260 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 248 DCHECK(parent_task_runner_->BelongsToCurrentThread());
261 FOR_EACH_OBSERVER(SyncNotifierObserver, observers_, 249 helper_.EmitOnNotificationsDisabled(reason);
262 OnNotificationsDisabled(reason));
263 } 250 }
264 251
265 void NonBlockingInvalidationNotifier::OnIncomingNotification( 252 void NonBlockingInvalidationNotifier::OnIncomingNotification(
266 const ModelTypePayloadMap& type_payloads, 253 const ObjectIdPayloadMap& id_payloads,
267 IncomingNotificationSource source) { 254 IncomingNotificationSource source) {
268 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 255 DCHECK(parent_task_runner_->BelongsToCurrentThread());
269 FOR_EACH_OBSERVER(SyncNotifierObserver, observers_, 256 helper_.DispatchInvalidationsToHandlers(id_payloads, source);
270 OnIncomingNotification(type_payloads, source));
271 } 257 }
272 258
273 } // namespace syncer 259 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698