OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/password_change_processor.h" | 5 #include "chrome/browser/sync/glue/password_change_processor.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
74 } | 74 } |
75 | 75 |
76 PasswordStoreChangeList* changes = | 76 PasswordStoreChangeList* changes = |
77 content::Details<PasswordStoreChangeList>(details).ptr(); | 77 content::Details<PasswordStoreChangeList>(details).ptr(); |
78 for (PasswordStoreChangeList::iterator change = changes->begin(); | 78 for (PasswordStoreChangeList::iterator change = changes->begin(); |
79 change != changes->end(); ++change) { | 79 change != changes->end(); ++change) { |
80 std::string tag = PasswordModelAssociator::MakeTag(change->form()); | 80 std::string tag = PasswordModelAssociator::MakeTag(change->form()); |
81 switch (change->type()) { | 81 switch (change->type()) { |
82 case PasswordStoreChange::ADD: { | 82 case PasswordStoreChange::ADD: { |
83 sync_api::WriteNode sync_node(&trans); | 83 sync_api::WriteNode sync_node(&trans); |
84 if (!sync_node.InitUniqueByCreation(syncable::PASSWORDS, | 84 if (sync_node.InitUniqueByCreation(syncable::PASSWORDS, |
85 password_root, tag)) { | 85 password_root, tag)) { |
86 error_handler()->OnUnrecoverableError(FROM_HERE, | 86 PasswordModelAssociator::WriteToSyncNode(change->form(), &sync_node); |
87 "Failed to create password sync node."); | 87 model_associator_->Associate(&tag, sync_node.GetId()); |
88 return; | 88 break; |
89 } else { | |
90 // Maybe this node already exists and we should update it. | |
91 // | |
92 // If the PasswordStore is told to add an entry but an entry with the | |
93 // same name already exists, it will overwrite it. It will report | |
94 // this change as an ADD rather than an UPDATE. Ideally, it would be | |
95 // able to tell us what action was actually taken, rather than what | |
96 // action was requested. If it did so, we wouldn't need to fall back | |
97 // to trying to update an existing password node here. | |
98 // | |
99 // TODO: Remove this. See crbug.com/87855. | |
100 int64 sync_id = model_associator_->GetSyncIdFromChromeId(tag); | |
101 if (sync_api::kInvalidId == sync_id) { | |
102 error_handler()->OnUnrecoverableError(FROM_HERE, | |
103 "Unable to create or lookup password node"); | |
104 return; | |
105 } | |
106 if (!sync_node.InitByIdLookup(sync_id)) { | |
107 error_handler()->OnUnrecoverableError(FROM_HERE, | |
108 "Unable to create or lookup password node"); | |
Mike Mammarella
2011/12/08 04:32:04
Grammar nit: "look up" is two words as a verb.
rlarocque
2011/12/09 18:53:42
Done.
| |
109 return; | |
110 } | |
111 PasswordModelAssociator::WriteToSyncNode(change->form(), &sync_node); | |
112 break; | |
89 } | 113 } |
90 | |
91 PasswordModelAssociator::WriteToSyncNode(change->form(), &sync_node); | |
92 model_associator_->Associate(&tag, sync_node.GetId()); | |
93 break; | |
94 } | 114 } |
95 case PasswordStoreChange::UPDATE: { | 115 case PasswordStoreChange::UPDATE: { |
96 sync_api::WriteNode sync_node(&trans); | 116 sync_api::WriteNode sync_node(&trans); |
97 int64 sync_id = model_associator_->GetSyncIdFromChromeId(tag); | 117 int64 sync_id = model_associator_->GetSyncIdFromChromeId(tag); |
98 if (sync_api::kInvalidId == sync_id) { | 118 if (sync_api::kInvalidId == sync_id) { |
99 error_handler()->OnUnrecoverableError(FROM_HERE, | 119 error_handler()->OnUnrecoverableError(FROM_HERE, |
100 "Unexpected notification for: "); | 120 "Unexpected notification for: "); |
101 return; | 121 return; |
102 } else { | 122 } else { |
103 if (!sync_node.InitByIdLookup(sync_id)) { | 123 if (!sync_node.InitByIdLookup(sync_id)) { |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
233 | 253 |
234 void PasswordChangeProcessor::StopObserving() { | 254 void PasswordChangeProcessor::StopObserving() { |
235 DCHECK(expected_loop_ == MessageLoop::current()); | 255 DCHECK(expected_loop_ == MessageLoop::current()); |
236 notification_registrar_.Remove( | 256 notification_registrar_.Remove( |
237 this, | 257 this, |
238 chrome::NOTIFICATION_LOGINS_CHANGED, | 258 chrome::NOTIFICATION_LOGINS_CHANGED, |
239 content::Source<PasswordStore>(password_store_)); | 259 content::Source<PasswordStore>(password_store_)); |
240 } | 260 } |
241 | 261 |
242 } // namespace browser_sync | 262 } // namespace browser_sync |
OLD | NEW |