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

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

Issue 294123004: Move some sync/notifier to components/invalidation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 6 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
« no previous file with comments | « sync/notifier/invalidator_registrar.h ('k') | sync/notifier/invalidator_registrar_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "sync/notifier/invalidator_registrar.h"
6
7 #include <cstddef>
8 #include <iterator>
9 #include <utility>
10
11 #include "base/logging.h"
12 #include "sync/notifier/object_id_invalidation_map.h"
13
14 namespace syncer {
15
16 InvalidatorRegistrar::InvalidatorRegistrar()
17 : state_(DEFAULT_INVALIDATION_ERROR) {}
18
19 InvalidatorRegistrar::~InvalidatorRegistrar() {
20 DCHECK(thread_checker_.CalledOnValidThread());
21 CHECK(!handlers_.might_have_observers());
22 CHECK(handler_to_ids_map_.empty());
23 }
24
25 void InvalidatorRegistrar::RegisterHandler(InvalidationHandler* handler) {
26 DCHECK(thread_checker_.CalledOnValidThread());
27 CHECK(handler);
28 CHECK(!handlers_.HasObserver(handler));
29 handlers_.AddObserver(handler);
30 }
31
32 void InvalidatorRegistrar::UpdateRegisteredIds(
33 InvalidationHandler* handler,
34 const ObjectIdSet& ids) {
35 DCHECK(thread_checker_.CalledOnValidThread());
36 CHECK(handler);
37 CHECK(handlers_.HasObserver(handler));
38
39 for (HandlerIdsMap::const_iterator it = handler_to_ids_map_.begin();
40 it != handler_to_ids_map_.end(); ++it) {
41 if (it->first == handler) {
42 continue;
43 }
44
45 std::vector<invalidation::ObjectId> intersection;
46 std::set_intersection(
47 it->second.begin(), it->second.end(),
48 ids.begin(), ids.end(),
49 std::inserter(intersection, intersection.end()),
50 ObjectIdLessThan());
51 CHECK(intersection.empty())
52 << "Duplicate registration: trying to register "
53 << ObjectIdToString(*intersection.begin()) << " for "
54 << handler << " when it's already registered for "
55 << it->first;
56 }
57
58 if (ids.empty()) {
59 handler_to_ids_map_.erase(handler);
60 } else {
61 handler_to_ids_map_[handler] = ids;
62 }
63 }
64
65 void InvalidatorRegistrar::UnregisterHandler(InvalidationHandler* handler) {
66 DCHECK(thread_checker_.CalledOnValidThread());
67 CHECK(handler);
68 CHECK(handlers_.HasObserver(handler));
69 handlers_.RemoveObserver(handler);
70 handler_to_ids_map_.erase(handler);
71 }
72
73 ObjectIdSet InvalidatorRegistrar::GetRegisteredIds(
74 InvalidationHandler* handler) const {
75 DCHECK(thread_checker_.CalledOnValidThread());
76 HandlerIdsMap::const_iterator lookup = handler_to_ids_map_.find(handler);
77 if (lookup != handler_to_ids_map_.end()) {
78 return lookup->second;
79 } else {
80 return ObjectIdSet();
81 }
82 }
83
84 ObjectIdSet InvalidatorRegistrar::GetAllRegisteredIds() const {
85 DCHECK(thread_checker_.CalledOnValidThread());
86 ObjectIdSet registered_ids;
87 for (HandlerIdsMap::const_iterator it = handler_to_ids_map_.begin();
88 it != handler_to_ids_map_.end(); ++it) {
89 registered_ids.insert(it->second.begin(), it->second.end());
90 }
91 return registered_ids;
92 }
93
94 void InvalidatorRegistrar::DispatchInvalidationsToHandlers(
95 const ObjectIdInvalidationMap& invalidation_map) {
96 DCHECK(thread_checker_.CalledOnValidThread());
97 // If we have no handlers, there's nothing to do.
98 if (!handlers_.might_have_observers()) {
99 return;
100 }
101
102 for (HandlerIdsMap::iterator it = handler_to_ids_map_.begin();
103 it != handler_to_ids_map_.end(); ++it) {
104 ObjectIdInvalidationMap to_emit =
105 invalidation_map.GetSubsetWithObjectIds(it->second);
106 if (!to_emit.Empty()) {
107 it->first->OnIncomingInvalidation(to_emit);
108 }
109 }
110 }
111
112 void InvalidatorRegistrar::UpdateInvalidatorState(InvalidatorState state) {
113 DCHECK(thread_checker_.CalledOnValidThread());
114 DVLOG(1) << "New invalidator state: " << InvalidatorStateToString(state_)
115 << " -> " << InvalidatorStateToString(state);
116 state_ = state;
117 FOR_EACH_OBSERVER(InvalidationHandler, handlers_,
118 OnInvalidatorStateChange(state));
119 }
120
121 InvalidatorState InvalidatorRegistrar::GetInvalidatorState() const {
122 DCHECK(thread_checker_.CalledOnValidThread());
123 return state_;
124 }
125
126 std::map<std::string, ObjectIdSet>
127 InvalidatorRegistrar::GetSanitizedHandlersIdsMap() {
128 DCHECK(thread_checker_.CalledOnValidThread());
129 std::map<std::string, ObjectIdSet> clean_handlers_to_ids;
130 for (HandlerIdsMap::const_iterator it = handler_to_ids_map_.begin();
131 it != handler_to_ids_map_.end();
132 ++it) {
133 clean_handlers_to_ids[it->first->GetOwnerName()] = ObjectIdSet(it->second);
134 }
135 return clean_handlers_to_ids;
136 }
137
138 bool InvalidatorRegistrar::IsHandlerRegisteredForTest(
139 InvalidationHandler* handler) const {
140 DCHECK(thread_checker_.CalledOnValidThread());
141 return handlers_.HasObserver(handler);
142 }
143
144 void InvalidatorRegistrar::DetachFromThreadForTest() {
145 DCHECK(thread_checker_.CalledOnValidThread());
146 thread_checker_.DetachFromThread();
147 }
148
149 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/notifier/invalidator_registrar.h ('k') | sync/notifier/invalidator_registrar_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698