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

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

Issue 12847003: Separate invalidator and sync client ID (part 2/2) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix sync_listen_notifications utility Created 7 years, 9 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_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
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
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
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
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
OLDNEW
« no previous file with comments | « sync/notifier/non_blocking_invalidator.h ('k') | sync/notifier/non_blocking_invalidator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698