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

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

Issue 116533006: Control invalidations network channel from TiclInvalidationService (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 7 years 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
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"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/single_thread_task_runner.h" 12 #include "base/single_thread_task_runner.h"
13 #include "base/thread_task_runner_handle.h" 13 #include "base/thread_task_runner_handle.h"
14 #include "base/threading/thread.h" 14 #include "base/threading/thread.h"
15 #include "jingle/notifier/listener/push_client.h" 15 #include "jingle/notifier/listener/push_client.h"
16 #include "sync/notifier/invalidation_notifier.h" 16 #include "sync/notifier/invalidation_notifier.h"
17 #include "sync/notifier/object_id_invalidation_map.h" 17 #include "sync/notifier/object_id_invalidation_map.h"
18 #include "sync/notifier/sync_system_resources.h"
18 19
19 namespace syncer { 20 namespace syncer {
20 21
22 struct NonBlockingInvalidator::InitializeOptions {
pavely 2013/12/20 00:04:16 Number of parameters to NonBlockingInvalidator::Co
23 InitializeOptions(
24 NetworkChannelCreator network_channel_creator,
25 const std::string& invalidator_client_id,
26 const UnackedInvalidationsMap& saved_invalidations,
27 const std::string& invalidation_bootstrap_data,
28 const WeakHandle<InvalidationStateTracker>&
29 invalidation_state_tracker,
30 const std::string& client_info,
31 scoped_refptr<net::URLRequestContextGetter> request_context_getter)
32 : network_channel_creator(network_channel_creator),
33 invalidator_client_id(invalidator_client_id),
34 saved_invalidations(saved_invalidations),
35 invalidation_bootstrap_data(invalidation_bootstrap_data),
36 invalidation_state_tracker(invalidation_state_tracker),
37 client_info(client_info),
38 request_context_getter(request_context_getter) {
39 }
40
41 NetworkChannelCreator network_channel_creator;
42 std::string invalidator_client_id;
43 UnackedInvalidationsMap saved_invalidations;
44 std::string invalidation_bootstrap_data;
45 WeakHandle<InvalidationStateTracker> invalidation_state_tracker;
46 std::string client_info;
47 scoped_refptr<net::URLRequestContextGetter> request_context_getter;
48 };
49
50
21 class NonBlockingInvalidator::Core 51 class NonBlockingInvalidator::Core
22 : public base::RefCountedThreadSafe<NonBlockingInvalidator::Core>, 52 : public base::RefCountedThreadSafe<NonBlockingInvalidator::Core>,
23 // InvalidationHandler to observe the InvalidationNotifier we create. 53 // InvalidationHandler to observe the InvalidationNotifier we create.
24 public InvalidationHandler { 54 public InvalidationHandler {
25 public: 55 public:
26 // Called on parent thread. |delegate_observer| should be 56 // Called on parent thread. |delegate_observer| should be
27 // initialized. 57 // initialized.
28 explicit Core( 58 explicit Core(
29 const WeakHandle<InvalidationHandler>& delegate_observer); 59 const WeakHandle<InvalidationHandler>& delegate_observer);
30 60
31 // Helpers called on I/O thread. 61 // Helpers called on I/O thread.
32 void Initialize( 62 void Initialize(
33 const notifier::NotifierOptions& notifier_options, 63 const NonBlockingInvalidator::InitializeOptions& initialize_options);
34 const std::string& invalidator_client_id,
35 const UnackedInvalidationsMap& saved_invalidations,
36 const std::string& invalidation_bootstrap_data,
37 const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker,
38 const std::string& client_info);
39 void Teardown(); 64 void Teardown();
40 void UpdateRegisteredIds(const ObjectIdSet& ids); 65 void UpdateRegisteredIds(const ObjectIdSet& ids);
41 void UpdateCredentials(const std::string& email, const std::string& token); 66 void UpdateCredentials(const std::string& email, const std::string& token);
42 67
43 // InvalidationHandler implementation (all called on I/O thread by 68 // InvalidationHandler implementation (all called on I/O thread by
44 // InvalidationNotifier). 69 // InvalidationNotifier).
45 virtual void OnInvalidatorStateChange(InvalidatorState reason) OVERRIDE; 70 virtual void OnInvalidatorStateChange(InvalidatorState reason) OVERRIDE;
46 virtual void OnIncomingInvalidation( 71 virtual void OnIncomingInvalidation(
47 const ObjectIdInvalidationMap& invalidation_map) OVERRIDE; 72 const ObjectIdInvalidationMap& invalidation_map) OVERRIDE;
48 73
(...skipping 14 matching lines...) Expand all
63 NonBlockingInvalidator::Core::Core( 88 NonBlockingInvalidator::Core::Core(
64 const WeakHandle<InvalidationHandler>& delegate_observer) 89 const WeakHandle<InvalidationHandler>& delegate_observer)
65 : delegate_observer_(delegate_observer) { 90 : delegate_observer_(delegate_observer) {
66 DCHECK(delegate_observer_.IsInitialized()); 91 DCHECK(delegate_observer_.IsInitialized());
67 } 92 }
68 93
69 NonBlockingInvalidator::Core::~Core() { 94 NonBlockingInvalidator::Core::~Core() {
70 } 95 }
71 96
72 void NonBlockingInvalidator::Core::Initialize( 97 void NonBlockingInvalidator::Core::Initialize(
73 const notifier::NotifierOptions& notifier_options, 98 const NonBlockingInvalidator::InitializeOptions& initialize_options) {
74 const std::string& invalidator_client_id, 99 DCHECK(initialize_options.request_context_getter.get());
75 const UnackedInvalidationsMap& saved_invalidations, 100 network_task_runner_ =
76 const std::string& invalidation_bootstrap_data, 101 initialize_options.request_context_getter->GetNetworkTaskRunner();
77 const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker,
78 const std::string& client_info) {
79 DCHECK(notifier_options.request_context_getter.get());
80 DCHECK_EQ(notifier::NOTIFICATION_SERVER,
81 notifier_options.notification_method);
82 network_task_runner_ = notifier_options.request_context_getter->
83 GetNetworkTaskRunner();
84 DCHECK(network_task_runner_->BelongsToCurrentThread()); 102 DCHECK(network_task_runner_->BelongsToCurrentThread());
103 scoped_ptr<SyncNetworkChannel> network_channel =
104 initialize_options.network_channel_creator.Run();
85 invalidation_notifier_.reset( 105 invalidation_notifier_.reset(
86 new InvalidationNotifier( 106 new InvalidationNotifier(
87 notifier::PushClient::CreateDefaultOnIOThread(notifier_options), 107 network_channel.Pass(),
88 invalidator_client_id, 108 initialize_options.invalidator_client_id,
89 saved_invalidations, 109 initialize_options.saved_invalidations,
90 invalidation_bootstrap_data, 110 initialize_options.invalidation_bootstrap_data,
91 invalidation_state_tracker, 111 initialize_options.invalidation_state_tracker,
92 client_info)); 112 initialize_options.client_info));
93 invalidation_notifier_->RegisterHandler(this); 113 invalidation_notifier_->RegisterHandler(this);
94 } 114 }
95 115
96 void NonBlockingInvalidator::Core::Teardown() { 116 void NonBlockingInvalidator::Core::Teardown() {
97 DCHECK(network_task_runner_->BelongsToCurrentThread()); 117 DCHECK(network_task_runner_->BelongsToCurrentThread());
98 invalidation_notifier_->UnregisterHandler(this); 118 invalidation_notifier_->UnregisterHandler(this);
99 invalidation_notifier_.reset(); 119 invalidation_notifier_.reset();
100 network_task_runner_ = NULL; 120 network_task_runner_ = NULL;
101 } 121 }
102 122
(...skipping 17 matching lines...) Expand all
120 140
121 void NonBlockingInvalidator::Core::OnIncomingInvalidation( 141 void NonBlockingInvalidator::Core::OnIncomingInvalidation(
122 const ObjectIdInvalidationMap& invalidation_map) { 142 const ObjectIdInvalidationMap& invalidation_map) {
123 DCHECK(network_task_runner_->BelongsToCurrentThread()); 143 DCHECK(network_task_runner_->BelongsToCurrentThread());
124 delegate_observer_.Call(FROM_HERE, 144 delegate_observer_.Call(FROM_HERE,
125 &InvalidationHandler::OnIncomingInvalidation, 145 &InvalidationHandler::OnIncomingInvalidation,
126 invalidation_map); 146 invalidation_map);
127 } 147 }
128 148
129 NonBlockingInvalidator::NonBlockingInvalidator( 149 NonBlockingInvalidator::NonBlockingInvalidator(
130 const notifier::NotifierOptions& notifier_options, 150 NetworkChannelCreator network_channel_creator,
131 const std::string& invalidator_client_id, 151 const std::string& invalidator_client_id,
132 const UnackedInvalidationsMap& saved_invalidations, 152 const UnackedInvalidationsMap& saved_invalidations,
133 const std::string& invalidation_bootstrap_data, 153 const std::string& invalidation_bootstrap_data,
134 const WeakHandle<InvalidationStateTracker>& 154 const WeakHandle<InvalidationStateTracker>&
135 invalidation_state_tracker, 155 invalidation_state_tracker,
136 const std::string& client_info) 156 const std::string& client_info,
157 const scoped_refptr<net::URLRequestContextGetter>& request_context_getter)
137 : parent_task_runner_(base::ThreadTaskRunnerHandle::Get()), 158 : parent_task_runner_(base::ThreadTaskRunnerHandle::Get()),
138 network_task_runner_( 159 network_task_runner_(request_context_getter->GetNetworkTaskRunner()),
139 notifier_options.request_context_getter->GetNetworkTaskRunner()),
140 weak_ptr_factory_(this) { 160 weak_ptr_factory_(this) {
141 core_ = new Core(MakeWeakHandle(weak_ptr_factory_.GetWeakPtr())); 161 core_ = new Core(MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()));
142 162
163 InitializeOptions initialize_options(
164 network_channel_creator,
165 invalidator_client_id,
166 saved_invalidations,
167 invalidation_bootstrap_data,
168 invalidation_state_tracker,
169 client_info,
170 request_context_getter);
171
143 if (!network_task_runner_->PostTask( 172 if (!network_task_runner_->PostTask(
144 FROM_HERE, 173 FROM_HERE,
145 base::Bind( 174 base::Bind(
146 &NonBlockingInvalidator::Core::Initialize, 175 &NonBlockingInvalidator::Core::Initialize,
147 core_.get(), 176 core_.get(),
148 notifier_options, 177 initialize_options))) {
149 invalidator_client_id,
150 saved_invalidations,
151 invalidation_bootstrap_data,
152 invalidation_state_tracker,
153 client_info))) {
154 NOTREACHED(); 178 NOTREACHED();
155 } 179 }
156 } 180 }
157 181
158 NonBlockingInvalidator::~NonBlockingInvalidator() { 182 NonBlockingInvalidator::~NonBlockingInvalidator() {
159 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 183 DCHECK(parent_task_runner_->BelongsToCurrentThread());
160 if (!network_task_runner_->PostTask( 184 if (!network_task_runner_->PostTask(
161 FROM_HERE, 185 FROM_HERE,
162 base::Bind(&NonBlockingInvalidator::Core::Teardown, 186 base::Bind(&NonBlockingInvalidator::Core::Teardown,
163 core_.get()))) { 187 core_.get()))) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 233 DCHECK(parent_task_runner_->BelongsToCurrentThread());
210 registrar_.UpdateInvalidatorState(state); 234 registrar_.UpdateInvalidatorState(state);
211 } 235 }
212 236
213 void NonBlockingInvalidator::OnIncomingInvalidation( 237 void NonBlockingInvalidator::OnIncomingInvalidation(
214 const ObjectIdInvalidationMap& invalidation_map) { 238 const ObjectIdInvalidationMap& invalidation_map) {
215 DCHECK(parent_task_runner_->BelongsToCurrentThread()); 239 DCHECK(parent_task_runner_->BelongsToCurrentThread());
216 registrar_.DispatchInvalidationsToHandlers(invalidation_map); 240 registrar_.DispatchInvalidationsToHandlers(invalidation_map);
217 } 241 }
218 242
243 NetworkChannelCreator
244 NonBlockingInvalidator::MakePushClientChannelCreator(
245 const notifier::NotifierOptions& notifier_options) {
246 return base::Bind(SyncNetworkChannel::CreatePushClientChannel,
247 notifier_options);
248 }
249
250 NetworkChannelCreator
251 NonBlockingInvalidator::MakeGCMNetworkChannelCreator() {
252 return base::Bind(SyncNetworkChannel::CreateGCMNetworkChannel);
253 }
254
219 } // namespace syncer 255 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698