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

Side by Side Diff: chrome/browser/sync/glue/android_invalidator_bridge.cc

Issue 12022041: Separate local and remote sync invalidations (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Respond to review comments Created 7 years, 10 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 "chrome/browser/sync/glue/chrome_sync_notification_bridge.h" 5 #include "chrome/browser/sync/glue/android_invalidator_bridge.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "chrome/common/chrome_notification_types.h" 11 #include "chrome/common/chrome_notification_types.h"
12 #include "content/public/browser/browser_thread.h" 12 #include "content/public/browser/browser_thread.h"
13 #include "content/public/browser/notification_service.h" 13 #include "content/public/browser/notification_service.h"
14 #include "sync/internal_api/public/base/model_type.h" 14 #include "sync/internal_api/public/base/model_type.h"
15 #include "sync/notifier/invalidation_handler.h" 15 #include "sync/notifier/invalidation_handler.h"
16 #include "sync/notifier/invalidator_registrar.h" 16 #include "sync/notifier/invalidator_registrar.h"
17 17
18 using content::BrowserThread; 18 using content::BrowserThread;
19 19
20 namespace browser_sync { 20 namespace browser_sync {
21 21
22 class ChromeSyncNotificationBridge::Core 22 class AndroidInvalidatorBridge::Core
23 : public base::RefCountedThreadSafe<Core> { 23 : public base::RefCountedThreadSafe<Core> {
24 public: 24 public:
25 // Created on UI thread. 25 // Created on UI thread.
26 explicit Core( 26 explicit Core(
27 const scoped_refptr<base::SequencedTaskRunner>& sync_task_runner); 27 const scoped_refptr<base::SequencedTaskRunner>& sync_task_runner);
28 28
29 // All member functions below must be called on the sync task runner. 29 // All member functions below must be called on the sync task runner.
30 30
31 void InitializeOnSyncThread(); 31 void InitializeOnSyncThread();
32 void CleanupOnSyncThread(); 32 void CleanupOnSyncThread();
(...skipping 16 matching lines...) Expand all
49 49
50 // Destroyed on the UI thread or on |sync_task_runner_|. 50 // Destroyed on the UI thread or on |sync_task_runner_|.
51 ~Core(); 51 ~Core();
52 52
53 const scoped_refptr<base::SequencedTaskRunner> sync_task_runner_; 53 const scoped_refptr<base::SequencedTaskRunner> sync_task_runner_;
54 54
55 // Used only on |sync_task_runner_|. 55 // Used only on |sync_task_runner_|.
56 scoped_ptr<syncer::InvalidatorRegistrar> invalidator_registrar_; 56 scoped_ptr<syncer::InvalidatorRegistrar> invalidator_registrar_;
57 }; 57 };
58 58
59 ChromeSyncNotificationBridge::Core::Core( 59 AndroidInvalidatorBridge::Core::Core(
60 const scoped_refptr<base::SequencedTaskRunner>& sync_task_runner) 60 const scoped_refptr<base::SequencedTaskRunner>& sync_task_runner)
61 : sync_task_runner_(sync_task_runner) { 61 : sync_task_runner_(sync_task_runner) {
62 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 62 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
63 DCHECK(sync_task_runner_.get()); 63 DCHECK(sync_task_runner_.get());
64 } 64 }
65 65
66 ChromeSyncNotificationBridge::Core::~Core() { 66 AndroidInvalidatorBridge::Core::~Core() {
67 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || 67 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
68 sync_task_runner_->RunsTasksOnCurrentThread()); 68 sync_task_runner_->RunsTasksOnCurrentThread());
69 DCHECK(!invalidator_registrar_.get()); 69 DCHECK(!invalidator_registrar_.get());
70 } 70 }
71 71
72 void ChromeSyncNotificationBridge::Core::InitializeOnSyncThread() { 72 void AndroidInvalidatorBridge::Core::InitializeOnSyncThread() {
73 invalidator_registrar_.reset(new syncer::InvalidatorRegistrar()); 73 invalidator_registrar_.reset(new syncer::InvalidatorRegistrar());
74 } 74 }
75 75
76 void ChromeSyncNotificationBridge::Core::CleanupOnSyncThread() { 76 void AndroidInvalidatorBridge::Core::CleanupOnSyncThread() {
77 invalidator_registrar_.reset(); 77 invalidator_registrar_.reset();
78 } 78 }
79 79
80 void ChromeSyncNotificationBridge::Core::RegisterHandler( 80 void AndroidInvalidatorBridge::Core::RegisterHandler(
81 syncer::InvalidationHandler* handler) { 81 syncer::InvalidationHandler* handler) {
82 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); 82 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread());
83 invalidator_registrar_->RegisterHandler(handler); 83 invalidator_registrar_->RegisterHandler(handler);
84 } 84 }
85 85
86 void ChromeSyncNotificationBridge::Core::UpdateRegisteredIds( 86 void AndroidInvalidatorBridge::Core::UpdateRegisteredIds(
87 syncer::InvalidationHandler* handler, 87 syncer::InvalidationHandler* handler,
88 const syncer::ObjectIdSet& ids) { 88 const syncer::ObjectIdSet& ids) {
89 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); 89 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread());
90 invalidator_registrar_->UpdateRegisteredIds(handler, ids); 90 invalidator_registrar_->UpdateRegisteredIds(handler, ids);
91 } 91 }
92 92
93 void ChromeSyncNotificationBridge::Core::UnregisterHandler( 93 void AndroidInvalidatorBridge::Core::UnregisterHandler(
94 syncer::InvalidationHandler* handler) { 94 syncer::InvalidationHandler* handler) {
95 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); 95 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread());
96 invalidator_registrar_->UnregisterHandler(handler); 96 invalidator_registrar_->UnregisterHandler(handler);
97 } 97 }
98 98
99 void ChromeSyncNotificationBridge::Core::EmitInvalidation( 99 void AndroidInvalidatorBridge::Core::EmitInvalidation(
100 const syncer::ObjectIdInvalidationMap& invalidation_map, 100 const syncer::ObjectIdInvalidationMap& invalidation_map,
101 syncer::IncomingInvalidationSource invalidation_source) { 101 syncer::IncomingInvalidationSource invalidation_source) {
102 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); 102 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread());
103 const syncer::ObjectIdInvalidationMap& effective_invalidation_map = 103 const syncer::ObjectIdInvalidationMap& effective_invalidation_map =
104 invalidation_map.empty() ? 104 invalidation_map.empty() ?
105 ObjectIdSetToInvalidationMap( 105 ObjectIdSetToInvalidationMap(
106 invalidator_registrar_->GetAllRegisteredIds(), std::string()) : 106 invalidator_registrar_->GetAllRegisteredIds(), std::string()) :
107 invalidation_map; 107 invalidation_map;
108 108
109 invalidator_registrar_->DispatchInvalidationsToHandlers( 109 invalidator_registrar_->DispatchInvalidationsToHandlers(
110 effective_invalidation_map, invalidation_source); 110 effective_invalidation_map, invalidation_source);
111 } 111 }
112 112
113 bool ChromeSyncNotificationBridge::Core::IsHandlerRegisteredForTest( 113 bool AndroidInvalidatorBridge::Core::IsHandlerRegisteredForTest(
114 syncer::InvalidationHandler* handler) const { 114 syncer::InvalidationHandler* handler) const {
115 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); 115 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread());
116 return invalidator_registrar_->IsHandlerRegisteredForTest(handler); 116 return invalidator_registrar_->IsHandlerRegisteredForTest(handler);
117 } 117 }
118 118
119 syncer::ObjectIdSet 119 syncer::ObjectIdSet
120 ChromeSyncNotificationBridge::Core::GetRegisteredIdsForTest( 120 AndroidInvalidatorBridge::Core::GetRegisteredIdsForTest(
121 syncer::InvalidationHandler* handler) const { 121 syncer::InvalidationHandler* handler) const {
122 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); 122 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread());
123 return invalidator_registrar_->GetRegisteredIds(handler); 123 return invalidator_registrar_->GetRegisteredIds(handler);
124 } 124 }
125 125
126 ChromeSyncNotificationBridge::ChromeSyncNotificationBridge( 126 AndroidInvalidatorBridge::AndroidInvalidatorBridge(
127 const Profile* profile, 127 const Profile* profile,
128 const scoped_refptr<base::SequencedTaskRunner>& sync_task_runner) 128 const scoped_refptr<base::SequencedTaskRunner>& sync_task_runner)
129 : sync_task_runner_(sync_task_runner), 129 : sync_task_runner_(sync_task_runner),
130 core_(new Core(sync_task_runner_)) { 130 core_(new Core(sync_task_runner_)) {
131 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 131 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
132 DCHECK(profile); 132 DCHECK(profile);
133 registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_LOCAL,
134 content::Source<Profile>(profile));
135 registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_REMOTE, 133 registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_REMOTE,
136 content::Source<Profile>(profile)); 134 content::Source<Profile>(profile));
137 135
138 if (!sync_task_runner_->PostTask( 136 if (!sync_task_runner_->PostTask(
139 FROM_HERE, base::Bind(&Core::InitializeOnSyncThread, core_))) { 137 FROM_HERE, base::Bind(&Core::InitializeOnSyncThread, core_))) {
140 NOTREACHED(); 138 NOTREACHED();
141 } 139 }
142 } 140 }
143 141
144 ChromeSyncNotificationBridge::~ChromeSyncNotificationBridge() {} 142 AndroidInvalidatorBridge::~AndroidInvalidatorBridge() {}
145 143
146 void ChromeSyncNotificationBridge::StopForShutdown() { 144 void AndroidInvalidatorBridge::StopForShutdown() {
147 if (!sync_task_runner_->PostTask( 145 if (!sync_task_runner_->PostTask(
148 FROM_HERE, base::Bind(&Core::CleanupOnSyncThread, core_))) { 146 FROM_HERE, base::Bind(&Core::CleanupOnSyncThread, core_))) {
149 NOTREACHED(); 147 NOTREACHED();
150 } 148 }
151 } 149 }
152 150
153 void ChromeSyncNotificationBridge::RegisterHandler( 151 void AndroidInvalidatorBridge::RegisterHandler(
154 syncer::InvalidationHandler* handler) { 152 syncer::InvalidationHandler* handler) {
155 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); 153 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread());
156 core_->RegisterHandler(handler); 154 core_->RegisterHandler(handler);
157 } 155 }
158 156
159 void ChromeSyncNotificationBridge::UpdateRegisteredIds( 157 void AndroidInvalidatorBridge::UpdateRegisteredIds(
160 syncer::InvalidationHandler* handler, 158 syncer::InvalidationHandler* handler,
161 const syncer::ObjectIdSet& ids) { 159 const syncer::ObjectIdSet& ids) {
162 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); 160 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread());
163 core_->UpdateRegisteredIds(handler, ids); 161 core_->UpdateRegisteredIds(handler, ids);
164 } 162 }
165 163
166 void ChromeSyncNotificationBridge::UnregisterHandler( 164 void AndroidInvalidatorBridge::UnregisterHandler(
167 syncer::InvalidationHandler* handler) { 165 syncer::InvalidationHandler* handler) {
168 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); 166 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread());
169 core_->UnregisterHandler(handler); 167 core_->UnregisterHandler(handler);
170 } 168 }
171 169
172 bool ChromeSyncNotificationBridge::IsHandlerRegisteredForTest( 170 syncer::InvalidatorState AndroidInvalidatorBridge::GetInvalidatorState() const {
171 return syncer::INVALIDATIONS_ENABLED;
172 }
173
174 void AndroidInvalidatorBridge::SetUniqueId(const std::string& unique_id) { }
175
176 void AndroidInvalidatorBridge::SetStateDeprecated(const std::string& state) { }
177
178 void AndroidInvalidatorBridge::UpdateCredentials(
179 const std::string& email, const std::string& token) { }
180
181 void AndroidInvalidatorBridge::SendInvalidation(
182 const syncer::ObjectIdInvalidationMap& invalidation_map) { }
183
184 bool AndroidInvalidatorBridge::IsHandlerRegisteredForTest(
173 syncer::InvalidationHandler* handler) const { 185 syncer::InvalidationHandler* handler) const {
174 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); 186 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread());
175 return core_->IsHandlerRegisteredForTest(handler); 187 return core_->IsHandlerRegisteredForTest(handler);
176 } 188 }
177 189
178 syncer::ObjectIdSet ChromeSyncNotificationBridge::GetRegisteredIdsForTest( 190 syncer::ObjectIdSet AndroidInvalidatorBridge::GetRegisteredIdsForTest(
179 syncer::InvalidationHandler* handler) const { 191 syncer::InvalidationHandler* handler) const {
180 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); 192 DCHECK(sync_task_runner_->RunsTasksOnCurrentThread());
181 return core_->GetRegisteredIdsForTest(handler); 193 return core_->GetRegisteredIdsForTest(handler);
182 } 194 }
183 195
184 void ChromeSyncNotificationBridge::Observe( 196 void AndroidInvalidatorBridge::Observe(
185 int type, 197 int type,
186 const content::NotificationSource& source, 198 const content::NotificationSource& source,
187 const content::NotificationDetails& details) { 199 const content::NotificationDetails& details) {
188 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 200 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
201 DCHECK_EQ(type, chrome::NOTIFICATION_SYNC_REFRESH_REMOTE);
189 202
190 syncer::IncomingInvalidationSource invalidation_source; 203 syncer::IncomingInvalidationSource invalidation_source
191 if (type == chrome::NOTIFICATION_SYNC_REFRESH_LOCAL) { 204 = syncer::REMOTE_INVALIDATION;
Nicolas Zea 2013/01/30 00:50:50 move '=' onto end of previous line
192 invalidation_source = syncer::LOCAL_INVALIDATION;
193 } else if (type == chrome::NOTIFICATION_SYNC_REFRESH_REMOTE) {
194 invalidation_source = syncer::REMOTE_INVALIDATION;
195 } else {
196 NOTREACHED() << "Unexpected invalidation type: " << type;
197 return;
198 }
199 205
200 // TODO(akalin): Use ObjectIdInvalidationMap here instead. We'll have to 206 // TODO(akalin): Use ObjectIdInvalidationMap here instead. We'll have to
201 // make sure all emitters of the relevant notifications also use 207 // make sure all emitters of the relevant notifications also use
202 // ObjectIdInvalidationMap. 208 // ObjectIdInvalidationMap.
203 content::Details<const syncer::ModelTypeInvalidationMap> 209 content::Details<const syncer::ModelTypeInvalidationMap>
204 state_details(details); 210 state_details(details);
205 const syncer::ModelTypeInvalidationMap& invalidation_map = 211 const syncer::ModelTypeInvalidationMap& invalidation_map =
206 *(state_details.ptr()); 212 *(state_details.ptr());
207 if (!sync_task_runner_->PostTask( 213 if (!sync_task_runner_->PostTask(
208 FROM_HERE, 214 FROM_HERE,
209 base::Bind(&Core::EmitInvalidation, 215 base::Bind(&Core::EmitInvalidation,
210 core_, 216 core_,
211 ModelTypeInvalidationMapToObjectIdInvalidationMap( 217 ModelTypeInvalidationMapToObjectIdInvalidationMap(
212 invalidation_map), 218 invalidation_map),
213 invalidation_source))) { 219 invalidation_source))) {
214 NOTREACHED(); 220 NOTREACHED();
215 } 221 }
216 } 222 }
217 223
218 } // namespace browser_sync 224 } // namespace browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/glue/android_invalidator_bridge.h ('k') | chrome/browser/sync/glue/android_invalidator_bridge_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698