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

Side by Side Diff: chrome/browser/sync/notifier/chrome_invalidation_client.cc

Issue 2861034: Decomped registration logic into its own class. (Closed)
Patch Set: synced to head Created 10 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
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/notifier/chrome_invalidation_client.h" 5 #include "chrome/browser/sync/notifier/chrome_invalidation_client.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "chrome/browser/sync/notifier/cache_invalidation_packet_handler.h" 11 #include "chrome/browser/sync/notifier/cache_invalidation_packet_handler.h"
12 #include "chrome/browser/sync/notifier/invalidation_util.h" 12 #include "chrome/browser/sync/notifier/invalidation_util.h"
13 #include "chrome/browser/sync/notifier/registration_manager.h"
13 #include "chrome/browser/sync/syncable/model_type.h" 14 #include "chrome/browser/sync/syncable/model_type.h"
14 15
15 namespace sync_notifier { 16 namespace sync_notifier {
16 17
17 ChromeInvalidationClient::Listener::~Listener() {} 18 ChromeInvalidationClient::Listener::~Listener() {}
18 19
19 ChromeInvalidationClient::ChromeInvalidationClient() 20 ChromeInvalidationClient::ChromeInvalidationClient()
20 : listener_(NULL) { 21 : listener_(NULL) {
21 DCHECK(non_thread_safe_.CalledOnValidThread()); 22 DCHECK(non_thread_safe_.CalledOnValidThread());
22 } 23 }
(...skipping 16 matching lines...) Expand all
39 listener_ = listener; 40 listener_ = listener;
40 41
41 invalidation::ClientType client_type; 42 invalidation::ClientType client_type;
42 client_type.set_type(invalidation::ClientType::CHROME_SYNC); 43 client_type.set_type(invalidation::ClientType::CHROME_SYNC);
43 invalidation_client_.reset( 44 invalidation_client_.reset(
44 invalidation::InvalidationClient::Create( 45 invalidation::InvalidationClient::Create(
45 &chrome_system_resources_, client_type, client_id, this)); 46 &chrome_system_resources_, client_type, client_id, this));
46 cache_invalidation_packet_handler_.reset( 47 cache_invalidation_packet_handler_.reset(
47 new CacheInvalidationPacketHandler(xmpp_client, 48 new CacheInvalidationPacketHandler(xmpp_client,
48 invalidation_client_.get())); 49 invalidation_client_.get()));
50 registration_manager_.reset(
51 new RegistrationManager(invalidation_client_.get()));
49 RegisterTypes(); 52 RegisterTypes();
50 } 53 }
51 54
52 void ChromeInvalidationClient::Stop() { 55 void ChromeInvalidationClient::Stop() {
53 DCHECK(non_thread_safe_.CalledOnValidThread()); 56 DCHECK(non_thread_safe_.CalledOnValidThread());
54 if (!invalidation_client_.get()) { 57 if (!invalidation_client_.get()) {
55 DCHECK(!cache_invalidation_packet_handler_.get()); 58 DCHECK(!cache_invalidation_packet_handler_.get());
56 return; 59 return;
57 } 60 }
58 61
59 chrome_system_resources_.StopScheduler(); 62 chrome_system_resources_.StopScheduler();
60 63
64 registration_manager_.reset();
61 cache_invalidation_packet_handler_.reset(); 65 cache_invalidation_packet_handler_.reset();
62 invalidation_client_.reset(); 66 invalidation_client_.reset();
63 listener_ = NULL; 67 listener_ = NULL;
64 } 68 }
65 69
66 void ChromeInvalidationClient::RegisterTypes() { 70 void ChromeInvalidationClient::RegisterTypes() {
67 DCHECK(non_thread_safe_.CalledOnValidThread()); 71 DCHECK(non_thread_safe_.CalledOnValidThread());
68 72
69 // TODO(akalin): Make this configurable instead of listening to 73 // TODO(akalin): Make this configurable instead of listening to
70 // notifications for all possible types. 74 // notifications for all possible types.
71 for (int i = syncable::FIRST_REAL_MODEL_TYPE; 75 for (int i = syncable::FIRST_REAL_MODEL_TYPE;
72 i < syncable::MODEL_TYPE_COUNT; ++i) { 76 i < syncable::MODEL_TYPE_COUNT; ++i) {
73 syncable::ModelType model_type = syncable::ModelTypeFromInt(i); 77 registration_manager_->RegisterType(syncable::ModelTypeFromInt(i));
74 std::string notification_type;
75 if (!syncable::RealModelTypeToNotificationType(
76 model_type, &notification_type)) {
77 LOG(ERROR) << "Could not get notification type for model type "
78 << syncable::ModelTypeToString(model_type);
79 continue;
80 }
81 invalidation::ObjectId object_id;
82 object_id.mutable_name()->set_string_value(notification_type);
83 object_id.set_source(invalidation::ObjectId::CHROME_SYNC);
84 invalidation_client_->Register(
85 object_id,
86 invalidation::NewPermanentCallback(
87 this, &ChromeInvalidationClient::OnRegister));
88 } 78 }
89 } 79 }
90 80
91 namespace {
92
93 bool GetInvalidationModelType(const invalidation::Invalidation& invalidation,
94 syncable::ModelType* model_type) {
95 return
96 syncable::NotificationTypeToRealModelType(
97 invalidation.object_id().name().string_value(), model_type);
98 }
99
100 } // namespace
101
102 void ChromeInvalidationClient::Invalidate( 81 void ChromeInvalidationClient::Invalidate(
103 const invalidation::Invalidation& invalidation, 82 const invalidation::Invalidation& invalidation,
104 invalidation::Closure* callback) { 83 invalidation::Closure* callback) {
105 DCHECK(non_thread_safe_.CalledOnValidThread()); 84 DCHECK(non_thread_safe_.CalledOnValidThread());
106 DCHECK(invalidation::IsCallbackRepeatable(callback)); 85 DCHECK(invalidation::IsCallbackRepeatable(callback));
107 LOG(INFO) << "Invalidate: " << InvalidationToString(invalidation); 86 LOG(INFO) << "Invalidate: " << InvalidationToString(invalidation);
108 syncable::ModelType model_type; 87 syncable::ModelType model_type;
109 if (GetInvalidationModelType(invalidation, &model_type)) { 88 if (ObjectIdToRealModelType(invalidation.object_id(), &model_type)) {
110 listener_->OnInvalidate(model_type); 89 listener_->OnInvalidate(model_type);
111 } else { 90 } else {
112 LOG(WARNING) << "Could not get invalidation model type; " 91 LOG(WARNING) << "Could not get invalidation model type; "
113 << "invalidating everything"; 92 << "invalidating everything";
114 listener_->OnInvalidateAll(); 93 listener_->OnInvalidateAll();
115 } 94 }
116 RunAndDeleteClosure(callback); 95 RunAndDeleteClosure(callback);
117 } 96 }
118 97
119 void ChromeInvalidationClient::InvalidateAll( 98 void ChromeInvalidationClient::InvalidateAll(
120 invalidation::Closure* callback) { 99 invalidation::Closure* callback) {
121 DCHECK(non_thread_safe_.CalledOnValidThread()); 100 DCHECK(non_thread_safe_.CalledOnValidThread());
122 DCHECK(invalidation::IsCallbackRepeatable(callback)); 101 DCHECK(invalidation::IsCallbackRepeatable(callback));
123 LOG(INFO) << "InvalidateAll"; 102 LOG(INFO) << "InvalidateAll";
124 listener_->OnInvalidateAll(); 103 listener_->OnInvalidateAll();
125 RunAndDeleteClosure(callback); 104 RunAndDeleteClosure(callback);
126 } 105 }
127 106
128 void ChromeInvalidationClient::AllRegistrationsLost( 107 void ChromeInvalidationClient::AllRegistrationsLost(
129 invalidation::Closure* callback) { 108 invalidation::Closure* callback) {
130 DCHECK(non_thread_safe_.CalledOnValidThread()); 109 DCHECK(non_thread_safe_.CalledOnValidThread());
131 DCHECK(invalidation::IsCallbackRepeatable(callback)); 110 DCHECK(invalidation::IsCallbackRepeatable(callback));
132 LOG(INFO) << "AllRegistrationsLost; reregistering"; 111 LOG(INFO) << "AllRegistrationsLost";
133 RegisterTypes(); 112 registration_manager_->MarkAllRegistrationsLost();
134 RunAndDeleteClosure(callback); 113 RunAndDeleteClosure(callback);
135 } 114 }
136 115
137 void ChromeInvalidationClient::RegistrationLost( 116 void ChromeInvalidationClient::RegistrationLost(
138 const invalidation::ObjectId& object_id, 117 const invalidation::ObjectId& object_id,
139 invalidation::Closure* callback) { 118 invalidation::Closure* callback) {
140 DCHECK(non_thread_safe_.CalledOnValidThread()); 119 DCHECK(non_thread_safe_.CalledOnValidThread());
141 DCHECK(invalidation::IsCallbackRepeatable(callback)); 120 DCHECK(invalidation::IsCallbackRepeatable(callback));
142 LOG(INFO) << "RegistrationLost; reregistering: " 121 LOG(INFO) << "RegistrationLost: " << ObjectIdToString(object_id);
143 << ObjectIdToString(object_id); 122 syncable::ModelType model_type;
144 RegisterTypes(); 123 if (ObjectIdToRealModelType(object_id, &model_type)) {
124 registration_manager_->MarkRegistrationLost(model_type);
125 } else {
126 LOG(WARNING) << "Could not get object id model type; ignoring";
127 }
145 RunAndDeleteClosure(callback); 128 RunAndDeleteClosure(callback);
146 } 129 }
147 130
148 void ChromeInvalidationClient::OnRegister(
149 const invalidation::RegistrationUpdateResult& result) {
150 DCHECK(non_thread_safe_.CalledOnValidThread());
151 // TODO(akalin): Do something meaningful here.
152 LOG(INFO) << "Registered: " << RegistrationUpdateResultToString(result);
153 }
154
155 } // namespace sync_notifier 131 } // namespace sync_notifier
OLDNEW
« no previous file with comments | « chrome/browser/sync/notifier/chrome_invalidation_client.h ('k') | chrome/browser/sync/notifier/invalidation_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698