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

Side by Side Diff: chrome/browser/sync/engine/syncapi.cc

Issue 6902101: Refactor sync passphrase setup flow and fix passphrase tests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: de Morgan's law simplification. Created 9 years, 7 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
OLDNEW
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/engine/syncapi.h" 5 #include "chrome/browser/sync/engine/syncapi.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <bitset> 8 #include <bitset>
9 #include <iomanip> 9 #include <iomanip>
10 #include <list> 10 #include <list>
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 std::wstring* out) { 164 std::wstring* out) {
165 int length_to_copy = server_name.length(); 165 int length_to_copy = server_name.length();
166 if (IsNameServerIllegalAfterTrimming(server_name) && 166 if (IsNameServerIllegalAfterTrimming(server_name) &&
167 EndsWithSpace(server_name)) 167 EndsWithSpace(server_name))
168 --length_to_copy; 168 --length_to_copy;
169 if (!UTF8ToWide(server_name.c_str(), length_to_copy, out)) { 169 if (!UTF8ToWide(server_name.c_str(), length_to_copy, out)) {
170 NOTREACHED() << "Could not convert server name from UTF8 to wide"; 170 NOTREACHED() << "Could not convert server name from UTF8 to wide";
171 } 171 }
172 } 172 }
173 173
174 // Helper function that converts a PassphraseRequiredReason value to a string.
175 std::string PassphraseRequiredReasonToString(
176 PassphraseRequiredReason reason) {
177 switch (reason) {
178 case REASON_PASSPHRASE_NOT_REQUIRED:
179 return "REASON_PASSPHRASE_NOT_REQUIRED";
180 case REASON_ENCRYPTION:
181 return "REASON_ENCRYPTION";
182 case REASON_DECRYPTION:
183 return "REASON_DECRYPTION";
184 case REASON_SET_PASSPHRASE_FAILED:
185 return "REASON_SET_PASSPHRASE_FAILED";
186 default:
187 NOTREACHED();
188 return "INVALID_REASON";
189 }
190 }
191
174 UserShare::UserShare() {} 192 UserShare::UserShare() {}
175 193
176 UserShare::~UserShare() {} 194 UserShare::~UserShare() {}
177 195
178 //////////////////////////////////// 196 ////////////////////////////////////
179 // BaseNode member definitions. 197 // BaseNode member definitions.
180 198
181 BaseNode::BaseNode() {} 199 BaseNode::BaseNode() {}
182 200
183 BaseNode::~BaseNode() {} 201 BaseNode::~BaseNode() {}
(...skipping 1599 matching lines...) Expand 10 before | Expand all | Expand 10 after
1783 return; 1801 return;
1784 } 1802 }
1785 1803
1786 nigori.CopyFrom(node.GetNigoriSpecifics()); 1804 nigori.CopyFrom(node.GetNigoriSpecifics());
1787 if (!nigori.encrypted().blob().empty()) { 1805 if (!nigori.encrypted().blob().empty()) {
1788 if (cryptographer->CanDecrypt(nigori.encrypted())) { 1806 if (cryptographer->CanDecrypt(nigori.encrypted())) {
1789 cryptographer->SetKeys(nigori.encrypted()); 1807 cryptographer->SetKeys(nigori.encrypted());
1790 } else { 1808 } else {
1791 cryptographer->SetPendingKeys(nigori.encrypted()); 1809 cryptographer->SetPendingKeys(nigori.encrypted());
1792 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, 1810 FOR_EACH_OBSERVER(SyncManager::Observer, observers_,
1793 OnPassphraseRequired(true)); 1811 OnPassphraseRequired(sync_api::REASON_DECRYPTION));
1794 } 1812 }
1795 } 1813 }
1796 } 1814 }
1797 1815
1798 // Refresh list of encrypted datatypes. 1816 // Refresh list of encrypted datatypes.
1799 syncable::ModelTypeSet encrypted_types = 1817 syncable::ModelTypeSet encrypted_types =
1800 syncable::GetEncryptedDataTypesFromNigori(nigori); 1818 syncable::GetEncryptedDataTypesFromNigori(nigori);
1801 1819
1802 // Ensure any datatypes that need encryption are encrypted. 1820 // Ensure any datatypes that need encryption are encrypted.
1803 EncryptDataTypes(encrypted_types); 1821 EncryptDataTypes(encrypted_types);
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1945 const std::string& passphrase, bool is_explicit) { 1963 const std::string& passphrase, bool is_explicit) {
1946 // All accesses to the cryptographer are protected by a transaction. 1964 // All accesses to the cryptographer are protected by a transaction.
1947 WriteTransaction trans(GetUserShare()); 1965 WriteTransaction trans(GetUserShare());
1948 Cryptographer* cryptographer = trans.GetCryptographer(); 1966 Cryptographer* cryptographer = trans.GetCryptographer();
1949 KeyParams params = {"localhost", "dummy", passphrase}; 1967 KeyParams params = {"localhost", "dummy", passphrase};
1950 1968
1951 if (cryptographer->has_pending_keys()) { 1969 if (cryptographer->has_pending_keys()) {
1952 if (!cryptographer->DecryptPendingKeys(params)) { 1970 if (!cryptographer->DecryptPendingKeys(params)) {
1953 VLOG(1) << "Passphrase failed to decrypt pending keys."; 1971 VLOG(1) << "Passphrase failed to decrypt pending keys.";
1954 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, 1972 FOR_EACH_OBSERVER(SyncManager::Observer, observers_,
1955 OnPassphraseFailed()); 1973 OnPassphraseRequired(sync_api::REASON_SET_PASSPHRASE_FAILED));
1956 return; 1974 return;
1957 } 1975 }
1958 1976
1959 // TODO(tim): If this is the first time the user has entered a passphrase 1977 // TODO(tim): If this is the first time the user has entered a passphrase
1960 // since the protocol changed to store passphrase preferences in the cloud, 1978 // since the protocol changed to store passphrase preferences in the cloud,
1961 // make sure we update this preference. See bug 62103. 1979 // make sure we update this preference. See bug 62103.
1962 if (is_explicit) 1980 if (is_explicit)
1963 SetUsingExplicitPassphrasePrefForMigration(&trans); 1981 SetUsingExplicitPassphrasePrefForMigration(&trans);
1964 1982
1965 // Nudge the syncer so that encrypted datatype updates that were waiting for 1983 // Nudge the syncer so that encrypted datatype updates that were waiting for
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after
2487 if (!nigori.encrypted().blob().empty()) { 2505 if (!nigori.encrypted().blob().empty()) {
2488 DCHECK(!cryptographer->CanDecrypt(nigori.encrypted())); 2506 DCHECK(!cryptographer->CanDecrypt(nigori.encrypted()));
2489 cryptographer->SetPendingKeys(nigori.encrypted()); 2507 cryptographer->SetPendingKeys(nigori.encrypted());
2490 } 2508 }
2491 } 2509 }
2492 2510
2493 // If we've completed a sync cycle and the cryptographer isn't ready 2511 // If we've completed a sync cycle and the cryptographer isn't ready
2494 // yet, prompt the user for a passphrase. 2512 // yet, prompt the user for a passphrase.
2495 if (cryptographer->has_pending_keys()) { 2513 if (cryptographer->has_pending_keys()) {
2496 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, 2514 FOR_EACH_OBSERVER(SyncManager::Observer, observers_,
2497 OnPassphraseRequired(true)); 2515 OnPassphraseRequired(sync_api::REASON_DECRYPTION));
2498 } else if (!cryptographer->is_ready()) { 2516 } else if (!cryptographer->is_ready()) {
2499 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, 2517 FOR_EACH_OBSERVER(SyncManager::Observer, observers_,
2500 OnPassphraseRequired(false)); 2518 OnPassphraseRequired(sync_api::REASON_ENCRYPTION));
2501 } else { 2519 } else {
2502 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, 2520 FOR_EACH_OBSERVER(SyncManager::Observer, observers_,
2503 OnEncryptionComplete(encrypted_types)); 2521 OnEncryptionComplete(encrypted_types));
2504 } 2522 }
2505 } 2523 }
2506 } 2524 }
2507 2525
2508 if (!initialized()) 2526 if (!initialized())
2509 return; 2527 return;
2510 2528
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
2821 void SyncManager::TriggerOnIncomingNotificationForTest( 2839 void SyncManager::TriggerOnIncomingNotificationForTest(
2822 const syncable::ModelTypeBitSet& model_types) { 2840 const syncable::ModelTypeBitSet& model_types) {
2823 syncable::ModelTypePayloadMap model_types_with_payloads = 2841 syncable::ModelTypePayloadMap model_types_with_payloads =
2824 syncable::ModelTypePayloadMapFromBitSet(model_types, 2842 syncable::ModelTypePayloadMapFromBitSet(model_types,
2825 std::string()); 2843 std::string());
2826 2844
2827 data_->OnIncomingNotification(model_types_with_payloads); 2845 data_->OnIncomingNotification(model_types_with_payloads);
2828 } 2846 }
2829 2847
2830 } // namespace sync_api 2848 } // namespace sync_api
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698