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

Side by Side Diff: chrome/browser/sync/engine/syncer_proto_util.cc

Issue 3305003: New authorization framework for sync. ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 3 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/engine/syncer_proto_util.h" 5 #include "chrome/browser/sync/engine/syncer_proto_util.h"
6 6
7 #include "base/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "chrome/browser/sync/engine/auth_watcher.h"
10 #include "chrome/browser/sync/engine/net/server_connection_manager.h" 9 #include "chrome/browser/sync/engine/net/server_connection_manager.h"
11 #include "chrome/browser/sync/engine/syncer.h" 10 #include "chrome/browser/sync/engine/syncer.h"
11 #include "chrome/browser/sync/engine/syncer_types.h"
12 #include "chrome/browser/sync/engine/syncer_util.h" 12 #include "chrome/browser/sync/engine/syncer_util.h"
13 #include "chrome/browser/sync/protocol/service_constants.h" 13 #include "chrome/browser/sync/protocol/service_constants.h"
14 #include "chrome/browser/sync/sessions/sync_session.h" 14 #include "chrome/browser/sync/sessions/sync_session.h"
15 #include "chrome/browser/sync/syncable/directory_manager.h" 15 #include "chrome/browser/sync/syncable/directory_manager.h"
16 #include "chrome/browser/sync/syncable/syncable-inl.h" 16 #include "chrome/browser/sync/syncable/syncable-inl.h"
17 #include "chrome/browser/sync/syncable/syncable.h" 17 #include "chrome/browser/sync/syncable/syncable.h"
18 18
19 using std::string; 19 using std::string;
20 using std::stringstream; 20 using std::stringstream;
21 using syncable::BASE_VERSION; 21 using syncable::BASE_VERSION;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 // static 117 // static
118 void SyncerProtoUtil::AddRequestBirthday(syncable::Directory* dir, 118 void SyncerProtoUtil::AddRequestBirthday(syncable::Directory* dir,
119 ClientToServerMessage* msg) { 119 ClientToServerMessage* msg) {
120 if (!dir->store_birthday().empty()) { 120 if (!dir->store_birthday().empty()) {
121 msg->set_store_birthday(dir->store_birthday()); 121 msg->set_store_birthday(dir->store_birthday());
122 } 122 }
123 } 123 }
124 124
125 // static 125 // static
126 bool SyncerProtoUtil::PostAndProcessHeaders(ServerConnectionManager* scm, 126 bool SyncerProtoUtil::PostAndProcessHeaders(ServerConnectionManager* scm,
127 AuthWatcher* auth_watcher, 127 sessions::SyncSession* session,
128 const ClientToServerMessage& msg, 128 const ClientToServerMessage& msg,
129 ClientToServerResponse* response) { 129 ClientToServerResponse* response) {
130 130
131 std::string tx, rx; 131 std::string tx, rx;
132 msg.SerializeToString(&tx); 132 msg.SerializeToString(&tx);
133 133
134 HttpResponse http_response; 134 HttpResponse http_response;
135 ServerConnectionManager::PostBufferParams params = { 135 ServerConnectionManager::PostBufferParams params = {
136 tx, &rx, &http_response 136 tx, &rx, &http_response
137 }; 137 };
138 138
139 ScopedServerStatusWatcher server_status_watcher(scm, &http_response); 139 ScopedServerStatusWatcher server_status_watcher(scm, &http_response);
140 if (!scm->PostBufferWithCachedAuth(&params, &server_status_watcher)) { 140 if (!scm->PostBufferWithCachedAuth(&params, &server_status_watcher)) {
141 LOG(WARNING) << "Error posting from syncer:" << http_response; 141 LOG(WARNING) << "Error posting from syncer:" << http_response;
142 return false; 142 return false;
143 } else { 143 } else {
144 std::string new_token = 144 std::string new_token =
145 http_response.update_client_auth_header; 145 http_response.update_client_auth_header;
146 if (!new_token.empty()) { 146 if (!new_token.empty()) {
147 // We could also do this in the SCM's PostBufferWithAuth. 147 SyncerEvent event(SyncerEvent::UPDATED_TOKEN);
148 // But then we could be in the middle of authentication, which seems 148 event.updated_token = new_token;
149 // like a bad time to update the token. A consequence of this is that 149 session->context()->syncer_event_channel()->Notify(event);
150 // we can't reset the cookie in response to auth attempts, but this
151 // should be OK.
152 auth_watcher->RenewAuthToken(new_token);
153 } 150 }
154 151
155 if (response->ParseFromString(rx)) { 152 if (response->ParseFromString(rx)) {
156 // TODO(tim): This is an egregious layering violation (bug 35060). 153 // TODO(tim): This is an egregious layering violation (bug 35060).
157 switch (response->error_code()) { 154 switch (response->error_code()) {
158 case ClientToServerResponse::ACCESS_DENIED: 155 case ClientToServerResponse::ACCESS_DENIED:
159 case ClientToServerResponse::AUTH_INVALID: 156 case ClientToServerResponse::AUTH_INVALID:
160 case ClientToServerResponse::USER_NOT_ACTIVATED: 157 case ClientToServerResponse::USER_NOT_ACTIVATED:
161 // Fires on ScopedServerStatusWatcher 158 // Fires on ScopedServerStatusWatcher
162 http_response.server_status = HttpResponse::SYNC_AUTH_ERROR; 159 http_response.server_status = HttpResponse::SYNC_AUTH_ERROR;
(...skipping 19 matching lines...) Expand all
182 msg.get_updates().from_timestamp() == 0)) 179 msg.get_updates().from_timestamp() == 0))
183 << "Must call AddRequestBirthday to set birthday."; 180 << "Must call AddRequestBirthday to set birthday.";
184 181
185 ScopedDirLookup dir(session->context()->directory_manager(), 182 ScopedDirLookup dir(session->context()->directory_manager(),
186 session->context()->account_name()); 183 session->context()->account_name());
187 if (!dir.good()) { 184 if (!dir.good()) {
188 return false; 185 return false;
189 } 186 }
190 187
191 if (!PostAndProcessHeaders(session->context()->connection_manager(), 188 if (!PostAndProcessHeaders(session->context()->connection_manager(),
192 session->context()->auth_watcher(), 189 session,
193 msg, 190 msg,
194 response)) { 191 response)) {
195 return false; 192 return false;
196 } 193 }
197 194
198 if (!VerifyResponseBirthday(dir, response)) { 195 if (!VerifyResponseBirthday(dir, response)) {
199 session->status_controller()->set_syncer_stuck(true); 196 session->status_controller()->set_syncer_stuck(true);
200 session->delegate()->OnShouldStopSyncingPermanently(); 197 session->delegate()->OnShouldStopSyncingPermanently();
201 return false; 198 return false;
202 } 199 }
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 const sync_pb::ClientToServerResponse& response) { 344 const sync_pb::ClientToServerResponse& response) {
348 // Add more handlers as needed. 345 // Add more handlers as needed.
349 std::string output; 346 std::string output;
350 if (response.has_get_updates()) { 347 if (response.has_get_updates()) {
351 output.append(GetUpdatesResponseString(response.get_updates())); 348 output.append(GetUpdatesResponseString(response.get_updates()));
352 } 349 }
353 return output; 350 return output;
354 } 351 }
355 352
356 } // namespace browser_sync 353 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698