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

Side by Side Diff: components/invalidation/invalidation_logger.cc

Issue 1191393008: Introduce a layering in the invalidation component as public and impl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Explicitly forbid content to prevent future additions Created 5 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
OLDNEW
(Empty)
1 // Copyright 2014 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 "components/invalidation/invalidation_logger.h"
6
7 #include "base/memory/scoped_ptr.h"
8 #include "base/values.h"
9 #include "components/invalidation/invalidation_handler.h"
10 #include "components/invalidation/invalidation_logger_observer.h"
11
12 namespace invalidation {
13 class InvalidationLoggerObserver;
14
15 InvalidationLogger::InvalidationLogger()
16 : last_invalidator_state_(syncer::TRANSIENT_INVALIDATION_ERROR),
17 last_invalidator_state_timestamp_(base::Time::Now()) { }
18
19 InvalidationLogger::~InvalidationLogger() {}
20
21 void InvalidationLogger::OnRegistration(const std::string& registrar_name) {
22 registered_handlers_.insert(registrar_name);
23 EmitRegisteredHandlers();
24 }
25
26 void InvalidationLogger::OnUnregistration(const std::string& registrar_name) {
27 DCHECK(registered_handlers_.find(registrar_name) !=
28 registered_handlers_.end());
29 std::multiset<std::string>::iterator it =
30 registered_handlers_.find(registrar_name);
31 // Delete only one instance of registrar_name.
32 registered_handlers_.erase(it);
33 EmitRegisteredHandlers();
34 }
35
36 void InvalidationLogger::EmitRegisteredHandlers() {
37 FOR_EACH_OBSERVER(InvalidationLoggerObserver, observer_list_,
38 OnRegistrationChange(registered_handlers_));
39 }
40
41 void InvalidationLogger::OnStateChange(
42 const syncer::InvalidatorState& new_state) {
43 // Prevent spurious same state emissions from updating the timestamp.
44 if (new_state != last_invalidator_state_)
45 last_invalidator_state_timestamp_ = base::Time::Now();
46 last_invalidator_state_ = new_state;
47 EmitState();
48 }
49
50 void InvalidationLogger::EmitState() {
51 FOR_EACH_OBSERVER(InvalidationLoggerObserver,
52 observer_list_,
53 OnStateChange(last_invalidator_state_,
54 last_invalidator_state_timestamp_));
55 }
56
57 void InvalidationLogger::OnUpdateIds(
58 std::map<std::string, syncer::ObjectIdSet> updated_ids) {
59 for (std::map<std::string, syncer::ObjectIdSet>::const_iterator it =
60 updated_ids.begin(); it != updated_ids.end(); ++it) {
61 latest_ids_[it->first] = syncer::ObjectIdSet(it->second);
62 }
63 EmitUpdatedIds();
64 }
65
66 void InvalidationLogger::EmitUpdatedIds() {
67 for (std::map<std::string, syncer::ObjectIdSet>::const_iterator it =
68 latest_ids_.begin(); it != latest_ids_.end(); ++it) {
69 const syncer::ObjectIdSet& object_ids_for_handler = it->second;
70 syncer::ObjectIdCountMap per_object_invalidation_count;
71 for (syncer::ObjectIdSet::const_iterator oid_it =
72 object_ids_for_handler.begin();
73 oid_it != object_ids_for_handler.end();
74 ++oid_it) {
75 per_object_invalidation_count[*oid_it] = invalidation_count_[*oid_it];
76 }
77 FOR_EACH_OBSERVER(InvalidationLoggerObserver,
78 observer_list_,
79 OnUpdateIds(it->first, per_object_invalidation_count));
80 }
81 }
82
83 void InvalidationLogger::OnDebugMessage(const base::DictionaryValue& details) {
84 FOR_EACH_OBSERVER(
85 InvalidationLoggerObserver, observer_list_, OnDebugMessage(details));
86 }
87
88 void InvalidationLogger::OnInvalidation(
89 const syncer::ObjectIdInvalidationMap& details) {
90 std::vector<syncer::Invalidation> internal_invalidations;
91 details.GetAllInvalidations(&internal_invalidations);
92 for (std::vector<syncer::Invalidation>::const_iterator it =
93 internal_invalidations.begin();
94 it != internal_invalidations.end();
95 ++it) {
96 invalidation_count_[it->object_id()]++;
97 }
98 FOR_EACH_OBSERVER(
99 InvalidationLoggerObserver, observer_list_, OnInvalidation(details));
100 }
101
102 void InvalidationLogger::EmitContent() {
103 EmitState();
104 EmitUpdatedIds();
105 EmitRegisteredHandlers();
106 }
107
108 void InvalidationLogger::RegisterObserver(
109 InvalidationLoggerObserver* debug_observer) {
110 observer_list_.AddObserver(debug_observer);
111 }
112
113 void InvalidationLogger::UnregisterObserver(
114 InvalidationLoggerObserver* debug_observer) {
115 observer_list_.RemoveObserver(debug_observer);
116 }
117
118 bool InvalidationLogger::IsObserverRegistered(
119 const InvalidationLoggerObserver* debug_observer) const {
120 return observer_list_.HasObserver(debug_observer);
121 }
122 } // namespace invalidation
OLDNEW
« no previous file with comments | « components/invalidation/invalidation_logger.h ('k') | components/invalidation/invalidation_logger_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698