Index: chrome/browser/sync/glue/typed_url_model_associator.cc |
diff --git a/chrome/browser/sync/glue/typed_url_model_associator.cc b/chrome/browser/sync/glue/typed_url_model_associator.cc |
index 08e47d43d27a5e7acdf438a4cd5f6dbabfae7a54..c2c1330a12911504a0068f60ce44bec4215efb35 100644 |
--- a/chrome/browser/sync/glue/typed_url_model_associator.cc |
+++ b/chrome/browser/sync/glue/typed_url_model_associator.cc |
@@ -201,8 +201,14 @@ bool TypedUrlModelAssociator::AssociateModels(SyncError* error) { |
sync_child_id = sync_child_node.GetSuccessorId(); |
// Ignore old sync nodes that don't have any transition data stored with |
- // them (will be deleted below). |
- if (typed_url.visit_transitions_size() == 0) { |
+ // them, or transition data that does not match the visit data (will be |
+ // deleted below). |
+ if (typed_url.visit_transitions_size() == 0 || |
+ typed_url.visit_transitions_size() != typed_url.visits_size()) { |
+ // Generate a debug assertion to help track down http://crbug.com/91473, |
+ // even though we gracefully handle this case by throwing away this |
+ // node. |
+ DCHECK_EQ(typed_url.visits_size(), typed_url.visit_transitions_size()); |
VLOG(1) << "Deleting obsolete sync node with no visit transition info."; |
obsolete_nodes.push_back(sync_child_node.GetId()); |
continue; |
@@ -434,7 +440,7 @@ int TypedUrlModelAssociator::MergeUrls( |
DCHECK(!node.url().compare(url.url().spec())); |
DCHECK(!node.url().compare(new_url->url().spec())); |
DCHECK(visits->size()); |
- DCHECK_EQ(node.visits_size(), node.visit_transitions_size()); |
+ CHECK_EQ(node.visits_size(), node.visit_transitions_size()); |
// If we have an old-format node (before we added the visits and |
// visit_transitions arrays to the protobuf), just overwrite |
@@ -615,6 +621,7 @@ void TypedUrlModelAssociator::WriteToTypedUrlSpecifics( |
DCHECK_EQ(skip_count, 0); |
CHECK_GT(typed_url->visits_size(), 0); |
CHECK_LE(typed_url->visits_size(), kMaxTypedUrlVisits); |
+ CHECK_EQ(typed_url->visits_size(), typed_url->visit_transitions_size()); |
} |
// static |
@@ -659,7 +666,7 @@ void TypedUrlModelAssociator::DiffVisits( |
void TypedUrlModelAssociator::UpdateURLRowFromTypedUrlSpecifics( |
const sync_pb::TypedUrlSpecifics& typed_url, history::URLRow* new_url) { |
DCHECK_GT(typed_url.visits_size(), 0); |
- DCHECK_EQ(typed_url.visit_transitions_size(), typed_url.visits_size()); |
+ CHECK_EQ(typed_url.visit_transitions_size(), typed_url.visits_size()); |
new_url->set_title(UTF8ToUTF16(typed_url.title())); |
new_url->set_hidden(typed_url.hidden()); |
new_url->set_last_visit(base::Time::FromInternalValue( |