Chromium Code Reviews| Index: sync/engine/conflict_resolver.cc |
| diff --git a/sync/engine/conflict_resolver.cc b/sync/engine/conflict_resolver.cc |
| index 0af30977c331e8840fe7ef27a77362114de875af..f1f15914152f2d631122324a50d0f34f1d1eb941 100644 |
| --- a/sync/engine/conflict_resolver.cc |
| +++ b/sync/engine/conflict_resolver.cc |
| @@ -115,8 +115,11 @@ void ConflictResolver::ProcessSimpleConflict(WriteTransaction* trans, |
| // safely ignore the server changes as redundant. |
| // f) Otherwise, it's in general safer to ignore local changes, with the |
| // exception of deletion conflicts (choose to undelete) and conflicts |
| - // where the non_unique_name or parent don't match. |
| - if (!entry.GetServerIsDel()) { |
| + // where the non_unique_name or parent don't match. Another exception is |
|
Nicolas Zea
2016/02/11 23:41:50
nit: may as well put this into its own e) bullet
asargent_no_longer_on_chrome
2016/02/18 00:53:45
Done.
|
| + // the case of extensions and apps, where we want uninstalls to win over |
| + // local modifications to avoid "back from the dead" reinstalls. |
| + ModelType type = entry.GetModelType(); |
| + if (!entry.GetServerIsDel() || (type == EXTENSIONS || type == APPS)) { |
| // TODO(nick): The current logic is arbitrary; instead, it ought to be made |
| // consistent with the ModelAssociator behavior for a datatype. It would |
| // be nice if we could route this back to ModelAssociator code to pick one |