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

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

Issue 10803061: [Sync] Expose change location in GenericChangeProcessor errors (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | sync/api/sync_change.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/generic_change_processor.h" 5 #include "chrome/browser/sync/glue/generic_change_processor.h"
6 6
7 #include "base/location.h" 7 #include "base/location.h"
8 #include "base/string_number_conversions.h" 8 #include "base/string_number_conversions.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "content/public/browser/browser_thread.h" 10 #include "content/public/browser/browser_thread.h"
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 syncer::ModelType type, 201 syncer::ModelType type,
202 const std::string& type_str, 202 const std::string& type_str,
203 syncer::WriteNode* node, 203 syncer::WriteNode* node,
204 DataTypeErrorHandler* error_handler) { 204 DataTypeErrorHandler* error_handler) {
205 DCHECK_EQ(change.change_type(), syncer::SyncChange::ACTION_DELETE); 205 DCHECK_EQ(change.change_type(), syncer::SyncChange::ACTION_DELETE);
206 if (change.sync_data().IsLocal()) { 206 if (change.sync_data().IsLocal()) {
207 const std::string& tag = change.sync_data().GetTag(); 207 const std::string& tag = change.sync_data().GetTag();
208 if (tag.empty()) { 208 if (tag.empty()) {
209 syncer::SyncError error( 209 syncer::SyncError error(
210 FROM_HERE, 210 FROM_HERE,
211 "Failed to delete " + type_str + " node. Local data, empty tag.", 211 "Failed to delete " + type_str + " node. Local data, empty tag. " +
212 change.location().ToString(),
212 type); 213 type);
213 error_handler->OnSingleDatatypeUnrecoverableError(error.location(), 214 error_handler->OnSingleDatatypeUnrecoverableError(error.location(),
214 error.message()); 215 error.message());
215 NOTREACHED(); 216 NOTREACHED();
216 return error; 217 return error;
217 } 218 }
218 219
219 syncer::BaseNode::InitByLookupResult result = 220 syncer::BaseNode::InitByLookupResult result =
220 node->InitByClientTagLookup(change.sync_data().GetDataType(), tag); 221 node->InitByClientTagLookup(change.sync_data().GetDataType(), tag);
221 if (result != syncer::BaseNode::INIT_OK) { 222 if (result != syncer::BaseNode::INIT_OK) {
222 return LogLookupFailure( 223 return LogLookupFailure(
223 result, FROM_HERE, 224 result, FROM_HERE,
224 "Failed to delete " + type_str + " node. Local data, ", 225 "Failed to delete " + type_str + " node. Local data. " +
226 change.location().ToString(),
225 type, error_handler); 227 type, error_handler);
226 } 228 }
227 } else { 229 } else {
228 syncer::BaseNode::InitByLookupResult result = 230 syncer::BaseNode::InitByLookupResult result =
229 node->InitByIdLookup(change.sync_data().GetRemoteId()); 231 node->InitByIdLookup(change.sync_data().GetRemoteId());
230 if (result != syncer::BaseNode::INIT_OK) { 232 if (result != syncer::BaseNode::INIT_OK) {
231 return LogLookupFailure( 233 return LogLookupFailure(
232 result, FROM_HERE, 234 result, FROM_HERE,
233 "Failed to delete " + type_str + " node. Non-local data, ", 235 "Failed to delete " + type_str + " node. Non-local data. " +
236 change.location().ToString(),
234 type, error_handler); 237 type, error_handler);
235 } 238 }
236 } 239 }
237 node->Remove(); 240 node->Remove();
238 return syncer::SyncError(); 241 return syncer::SyncError();
239 } 242 }
240 243
241 } // namespace 244 } // namespace
242 245
243 // WARNING: this code is sensitive to compiler optimizations. Be careful 246 // WARNING: this code is sensitive to compiler optimizations. Be careful
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 error.message()); 283 error.message());
281 NOTREACHED(); 284 NOTREACHED();
282 LOG(ERROR) << "Create: no root node."; 285 LOG(ERROR) << "Create: no root node.";
283 return error; 286 return error;
284 } 287 }
285 syncer::WriteNode::InitUniqueByCreationResult result = 288 syncer::WriteNode::InitUniqueByCreationResult result =
286 sync_node.InitUniqueByCreation(change.sync_data().GetDataType(), 289 sync_node.InitUniqueByCreation(change.sync_data().GetDataType(),
287 root_node, 290 root_node,
288 change.sync_data().GetTag()); 291 change.sync_data().GetTag());
289 if (result != syncer::WriteNode::INIT_SUCCESS) { 292 if (result != syncer::WriteNode::INIT_SUCCESS) {
290 std::string error_prefix = "Failed to create " + type_str + " node: "; 293 std::string error_prefix = "Failed to create " + type_str + " node: " +
294 change.location().ToString() + ", ";
291 switch (result) { 295 switch (result) {
292 case syncer::WriteNode::INIT_FAILED_EMPTY_TAG: { 296 case syncer::WriteNode::INIT_FAILED_EMPTY_TAG: {
293 syncer::SyncError error; 297 syncer::SyncError error;
294 error.Reset(FROM_HERE, error_prefix + "empty tag", type); 298 error.Reset(FROM_HERE, error_prefix + "empty tag", type);
295 error_handler()->OnSingleDatatypeUnrecoverableError( 299 error_handler()->OnSingleDatatypeUnrecoverableError(
296 FROM_HERE, error.message()); 300 FROM_HERE, error.message());
297 LOG(ERROR) << "Create: Empty tag."; 301 LOG(ERROR) << "Create: Empty tag.";
298 return error; 302 return error;
299 } 303 }
300 case syncer::WriteNode::INIT_FAILED_ENTRY_ALREADY_EXISTS: { 304 case syncer::WriteNode::INIT_FAILED_ENTRY_ALREADY_EXISTS: {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 } 338 }
335 } 339 }
336 sync_node.SetTitle(UTF8ToWide(change.sync_data().GetTitle())); 340 sync_node.SetTitle(UTF8ToWide(change.sync_data().GetTitle()));
337 sync_node.SetEntitySpecifics(change.sync_data().GetSpecifics()); 341 sync_node.SetEntitySpecifics(change.sync_data().GetSpecifics());
338 } else if (change.change_type() == syncer::SyncChange::ACTION_UPDATE) { 342 } else if (change.change_type() == syncer::SyncChange::ACTION_UPDATE) {
339 // TODO(zea): consider having this logic for all possible changes? 343 // TODO(zea): consider having this logic for all possible changes?
340 syncer::BaseNode::InitByLookupResult result = 344 syncer::BaseNode::InitByLookupResult result =
341 sync_node.InitByClientTagLookup(change.sync_data().GetDataType(), 345 sync_node.InitByClientTagLookup(change.sync_data().GetDataType(),
342 change.sync_data().GetTag()); 346 change.sync_data().GetTag());
343 if (result != syncer::BaseNode::INIT_OK) { 347 if (result != syncer::BaseNode::INIT_OK) {
348 std::string error_prefix = "Failed to load " + type_str + " node. " +
349 change.location().ToString() + ", ";
344 if (result == syncer::BaseNode::INIT_FAILED_PRECONDITION) { 350 if (result == syncer::BaseNode::INIT_FAILED_PRECONDITION) {
345 syncer::SyncError error; 351 syncer::SyncError error;
346 error.Reset(FROM_HERE, 352 error.Reset(FROM_HERE,
347 "Failed to load entry w/empty tag for " + type_str + ".", 353 error_prefix + "empty tag",
348 type); 354 type);
349 error_handler()->OnSingleDatatypeUnrecoverableError( 355 error_handler()->OnSingleDatatypeUnrecoverableError(
350 FROM_HERE, error.message()); 356 FROM_HERE, error.message());
351 LOG(ERROR) << "Update: Empty tag."; 357 LOG(ERROR) << "Update: Empty tag.";
352 return error; 358 return error;
353 } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_NOT_GOOD) { 359 } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_NOT_GOOD) {
354 syncer::SyncError error; 360 syncer::SyncError error;
355 error.Reset(FROM_HERE, 361 error.Reset(FROM_HERE,
356 "Failed to load bad entry for " + type_str + ".", 362 error_prefix + "bad entry",
357 type); 363 type);
358 error_handler()->OnSingleDatatypeUnrecoverableError( 364 error_handler()->OnSingleDatatypeUnrecoverableError(
359 FROM_HERE, error.message()); 365 FROM_HERE, error.message());
360 LOG(ERROR) << "Update: bad entry."; 366 LOG(ERROR) << "Update: bad entry.";
361 return error; 367 return error;
362 } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL) { 368 } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL) {
363 syncer::SyncError error; 369 syncer::SyncError error;
364 error.Reset(FROM_HERE, 370 error.Reset(FROM_HERE,
365 "Failed to load deleted entry for " + type_str + ".", 371 error_prefix + "deleted entry",
366 type); 372 type);
367 error_handler()->OnSingleDatatypeUnrecoverableError( 373 error_handler()->OnSingleDatatypeUnrecoverableError(
368 FROM_HERE, error.message()); 374 FROM_HERE, error.message());
369 LOG(ERROR) << "Update: deleted entry."; 375 LOG(ERROR) << "Update: deleted entry.";
370 return error; 376 return error;
371 } else { 377 } else {
372 syncer::Cryptographer* crypto = trans.GetCryptographer(); 378 syncer::Cryptographer* crypto = trans.GetCryptographer();
373 syncer::ModelTypeSet encrypted_types(crypto->GetEncryptedTypes()); 379 syncer::ModelTypeSet encrypted_types(crypto->GetEncryptedTypes());
374 const sync_pb::EntitySpecifics& specifics = 380 const sync_pb::EntitySpecifics& specifics =
375 sync_node.GetEntry()->Get(syncer::syncable::SPECIFICS); 381 sync_node.GetEntry()->Get(syncer::syncable::SPECIFICS);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 } 426 }
421 } else { 427 } else {
422 sync_node.SetTitle(UTF8ToWide(change.sync_data().GetTitle())); 428 sync_node.SetTitle(UTF8ToWide(change.sync_data().GetTitle()));
423 sync_node.SetEntitySpecifics(change.sync_data().GetSpecifics()); 429 sync_node.SetEntitySpecifics(change.sync_data().GetSpecifics());
424 // TODO(sync): Support updating other parts of the sync node (title, 430 // TODO(sync): Support updating other parts of the sync node (title,
425 // successor, parent, etc.). 431 // successor, parent, etc.).
426 } 432 }
427 } else { 433 } else {
428 syncer::SyncError error( 434 syncer::SyncError error(
429 FROM_HERE, 435 FROM_HERE,
430 "Received unset syncer::SyncChange in the change processor.", 436 "Received unset SyncChange in the change processor, " +
437 change.location().ToString(),
431 type); 438 type);
432 error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, 439 error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
433 error.message()); 440 error.message());
434 NOTREACHED(); 441 NOTREACHED();
435 LOG(ERROR) << "Unset sync change."; 442 LOG(ERROR) << "Unset sync change.";
436 return error; 443 return error;
437 } 444 }
438 } 445 }
439 return syncer::SyncError(); 446 return syncer::SyncError();
440 } 447 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 void GenericChangeProcessor::StopImpl() { 487 void GenericChangeProcessor::StopImpl() {
481 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 488 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
482 } 489 }
483 490
484 syncer::UserShare* GenericChangeProcessor::share_handle() const { 491 syncer::UserShare* GenericChangeProcessor::share_handle() const {
485 DCHECK(CalledOnValidThread()); 492 DCHECK(CalledOnValidThread());
486 return share_handle_; 493 return share_handle_;
487 } 494 }
488 495
489 } // namespace browser_sync 496 } // namespace browser_sync
OLDNEW
« no previous file with comments | « no previous file | sync/api/sync_change.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698