| OLD | NEW |
| 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/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 } | 284 } |
| 285 | 285 |
| 286 syncer::SyncError AttemptDelete( | 286 syncer::SyncError AttemptDelete( |
| 287 const syncer::SyncChange& change, | 287 const syncer::SyncChange& change, |
| 288 syncer::ModelType type, | 288 syncer::ModelType type, |
| 289 const std::string& type_str, | 289 const std::string& type_str, |
| 290 syncer::WriteNode* node, | 290 syncer::WriteNode* node, |
| 291 DataTypeErrorHandler* error_handler) { | 291 DataTypeErrorHandler* error_handler) { |
| 292 DCHECK_EQ(change.change_type(), syncer::SyncChange::ACTION_DELETE); | 292 DCHECK_EQ(change.change_type(), syncer::SyncChange::ACTION_DELETE); |
| 293 if (change.sync_data().IsLocal()) { | 293 if (change.sync_data().IsLocal()) { |
| 294 const std::string& tag = change.sync_data().GetTag(); | 294 const std::string& tag = change.sync_data().AsLocal().GetTag(); |
| 295 if (tag.empty()) { | 295 if (tag.empty()) { |
| 296 syncer::SyncError error( | 296 syncer::SyncError error( |
| 297 FROM_HERE, | 297 FROM_HERE, |
| 298 syncer::SyncError::DATATYPE_ERROR, | 298 syncer::SyncError::DATATYPE_ERROR, |
| 299 "Failed to delete " + type_str + " node. Local data, empty tag. " + | 299 "Failed to delete " + type_str + " node. Local data, empty tag. " + |
| 300 change.location().ToString(), | 300 change.location().ToString(), |
| 301 type); | 301 type); |
| 302 error_handler->OnSingleDatatypeUnrecoverableError(error.location(), | 302 error_handler->OnSingleDatatypeUnrecoverableError(error.location(), |
| 303 error.message()); | 303 error.message()); |
| 304 NOTREACHED(); | 304 NOTREACHED(); |
| 305 return error; | 305 return error; |
| 306 } | 306 } |
| 307 | 307 |
| 308 syncer::BaseNode::InitByLookupResult result = | 308 syncer::BaseNode::InitByLookupResult result = |
| 309 node->InitByClientTagLookup(change.sync_data().GetDataType(), tag); | 309 node->InitByClientTagLookup(change.sync_data().GetDataType(), tag); |
| 310 if (result != syncer::BaseNode::INIT_OK) { | 310 if (result != syncer::BaseNode::INIT_OK) { |
| 311 return LogLookupFailure( | 311 return LogLookupFailure( |
| 312 result, FROM_HERE, | 312 result, FROM_HERE, |
| 313 "Failed to delete " + type_str + " node. Local data. " + | 313 "Failed to delete " + type_str + " node. Local data. " + |
| 314 change.location().ToString(), | 314 change.location().ToString(), |
| 315 type, error_handler); | 315 type, error_handler); |
| 316 } | 316 } |
| 317 } else { | 317 } else { |
| 318 syncer::BaseNode::InitByLookupResult result = | 318 syncer::BaseNode::InitByLookupResult result = |
| 319 node->InitByIdLookup(change.sync_data().GetRemoteId()); | 319 node->InitByIdLookup(change.sync_data().AsRemote().GetId()); |
| 320 if (result != syncer::BaseNode::INIT_OK) { | 320 if (result != syncer::BaseNode::INIT_OK) { |
| 321 return LogLookupFailure( | 321 return LogLookupFailure( |
| 322 result, FROM_HERE, | 322 result, FROM_HERE, |
| 323 "Failed to delete " + type_str + " node. Non-local data. " + | 323 "Failed to delete " + type_str + " node. Non-local data. " + |
| 324 change.location().ToString(), | 324 change.location().ToString(), |
| 325 type, error_handler); | 325 type, error_handler); |
| 326 } | 326 } |
| 327 } | 327 } |
| 328 if (IsActOnceDataType(type)) | 328 if (IsActOnceDataType(type)) |
| 329 node->Drop(); | 329 node->Drop(); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 type); | 410 type); |
| 411 error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, | 411 error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
| 412 error.message()); | 412 error.message()); |
| 413 NOTREACHED(); | 413 NOTREACHED(); |
| 414 LOG(ERROR) << "Create: no root node."; | 414 LOG(ERROR) << "Create: no root node."; |
| 415 return error; | 415 return error; |
| 416 } | 416 } |
| 417 syncer::WriteNode::InitUniqueByCreationResult result = | 417 syncer::WriteNode::InitUniqueByCreationResult result = |
| 418 sync_node->InitUniqueByCreation(change.sync_data().GetDataType(), | 418 sync_node->InitUniqueByCreation(change.sync_data().GetDataType(), |
| 419 root_node, | 419 root_node, |
| 420 change.sync_data().GetTag()); | 420 change.sync_data().AsLocal().GetTag()); |
| 421 if (result != syncer::WriteNode::INIT_SUCCESS) { | 421 if (result != syncer::WriteNode::INIT_SUCCESS) { |
| 422 std::string error_prefix = "Failed to create " + type_str + " node: " + | 422 std::string error_prefix = "Failed to create " + type_str + " node: " + |
| 423 change.location().ToString() + ", "; | 423 change.location().ToString() + ", "; |
| 424 switch (result) { | 424 switch (result) { |
| 425 case syncer::WriteNode::INIT_FAILED_EMPTY_TAG: { | 425 case syncer::WriteNode::INIT_FAILED_EMPTY_TAG: { |
| 426 syncer::SyncError error; | 426 syncer::SyncError error; |
| 427 error.Reset(FROM_HERE, error_prefix + "empty tag", type); | 427 error.Reset(FROM_HERE, error_prefix + "empty tag", type); |
| 428 error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, | 428 error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
| 429 error.message()); | 429 error.message()); |
| 430 LOG(ERROR) << "Create: Empty tag."; | 430 LOG(ERROR) << "Create: Empty tag."; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 479 // in breakpad uploads. | 479 // in breakpad uploads. |
| 480 syncer::SyncError GenericChangeProcessor::HandleActionUpdate( | 480 syncer::SyncError GenericChangeProcessor::HandleActionUpdate( |
| 481 const syncer::SyncChange& change, | 481 const syncer::SyncChange& change, |
| 482 const std::string& type_str, | 482 const std::string& type_str, |
| 483 const syncer::ModelType& type, | 483 const syncer::ModelType& type, |
| 484 const syncer::WriteTransaction& trans, | 484 const syncer::WriteTransaction& trans, |
| 485 syncer::WriteNode* sync_node) { | 485 syncer::WriteNode* sync_node) { |
| 486 // TODO(zea): consider having this logic for all possible changes? | 486 // TODO(zea): consider having this logic for all possible changes? |
| 487 syncer::BaseNode::InitByLookupResult result = | 487 syncer::BaseNode::InitByLookupResult result = |
| 488 sync_node->InitByClientTagLookup(change.sync_data().GetDataType(), | 488 sync_node->InitByClientTagLookup(change.sync_data().GetDataType(), |
| 489 change.sync_data().GetTag()); | 489 change.sync_data().AsLocal().GetTag()); |
| 490 if (result != syncer::BaseNode::INIT_OK) { | 490 if (result != syncer::BaseNode::INIT_OK) { |
| 491 std::string error_prefix = "Failed to load " + type_str + " node. " + | 491 std::string error_prefix = "Failed to load " + type_str + " node. " + |
| 492 change.location().ToString() + ", "; | 492 change.location().ToString() + ", "; |
| 493 if (result == syncer::BaseNode::INIT_FAILED_PRECONDITION) { | 493 if (result == syncer::BaseNode::INIT_FAILED_PRECONDITION) { |
| 494 syncer::SyncError error; | 494 syncer::SyncError error; |
| 495 error.Reset(FROM_HERE, error_prefix + "empty tag", type); | 495 error.Reset(FROM_HERE, error_prefix + "empty tag", type); |
| 496 error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, | 496 error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
| 497 error.message()); | 497 error.message()); |
| 498 LOG(ERROR) << "Update: Empty tag."; | 498 LOG(ERROR) << "Update: Empty tag."; |
| 499 return error; | 499 return error; |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 void GenericChangeProcessor::StartImpl(Profile* profile) { | 617 void GenericChangeProcessor::StartImpl(Profile* profile) { |
| 618 DCHECK(CalledOnValidThread()); | 618 DCHECK(CalledOnValidThread()); |
| 619 } | 619 } |
| 620 | 620 |
| 621 syncer::UserShare* GenericChangeProcessor::share_handle() const { | 621 syncer::UserShare* GenericChangeProcessor::share_handle() const { |
| 622 DCHECK(CalledOnValidThread()); | 622 DCHECK(CalledOnValidThread()); |
| 623 return share_handle_; | 623 return share_handle_; |
| 624 } | 624 } |
| 625 | 625 |
| 626 } // namespace browser_sync | 626 } // namespace browser_sync |
| OLD | NEW |