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

Unified Diff: chrome/browser/sync/util/cryptographer.h

Issue 8356026: [Sync] Cache encrypted types info in ProfileSyncService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments (retry) Created 9 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/sync/protocol/client_debug_info.proto ('k') | chrome/browser/sync/util/cryptographer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/util/cryptographer.h
diff --git a/chrome/browser/sync/util/cryptographer.h b/chrome/browser/sync/util/cryptographer.h
index ac2d4eb90732a5a12a870da1f070abddf2012fda..e78e3f388a31bd7bed28d2b6ded37ab7d4151b01 100644
--- a/chrome/browser/sync/util/cryptographer.h
+++ b/chrome/browser/sync/util/cryptographer.h
@@ -12,6 +12,7 @@
#include "base/gtest_prod_util.h"
#include "base/memory/linked_ptr.h"
#include "base/memory/scoped_ptr.h"
+#include "base/observer_list.h"
#include "chrome/browser/sync/protocol/nigori_specifics.pb.h"
#include "chrome/browser/sync/syncable/model_type.h"
#include "chrome/browser/sync/util/nigori.h"
@@ -43,6 +44,31 @@ struct KeyParams {
// delayed until after it can be decrypted.
class Cryptographer {
public:
+ // All Observer methods are done synchronously, so they're called
+ // under a transaction (since all Cryptographer operations are done
+ // under a transaction).
+ class Observer {
+ public:
+ // Called when the set of encrypted types or the encrypt
+ // everything flag has been changed. Note that this doesn't
+ // necessarily mean that encryption has completed for the given
+ // types.
+ //
+ // |encrypted_types| will always be a superset of
+ // SensitiveTypes(). If |encrypt_everything| is true,
+ // |encrypted_types| will be the set of all known types.
+ //
+ // Until this function is called, observers can assume that the
+ // set of encrypted types is SensitiveTypes() and that the encrypt
+ // everything flag is false.
+ virtual void OnEncryptedTypesChanged(
+ const syncable::ModelTypeSet& encrypted_types,
+ bool encrypt_everything) = 0;
+
+ protected:
+ virtual ~Observer();
+ };
+
Cryptographer();
~Cryptographer();
@@ -54,6 +80,10 @@ class Cryptographer {
NEEDS_PASSPHRASE
};
+ // Manage observers.
+ void AddObserver(Observer* observer);
+ void RemoveObserver(Observer* observer);
+
// |restored_bootstrap_token| can be provided via this method to bootstrap
// Cryptographer instance into the ready state (is_ready will be true).
// It must be a string that was previously built by the
@@ -142,24 +172,30 @@ class Cryptographer {
// Update the nigori to reflect the current set of encrypted types.
void UpdateNigoriFromEncryptedTypes(sync_pb::NigoriSpecifics* nigori) const;
- // Setter/getter for whether all current and future datatypes should be
- // encrypted. Once set you cannot unset without reading from a new nigori
- // node.
+ // Setter/getter for whether all current and future datatypes should
+ // be encrypted. Once set you cannot unset without reading from a
+ // new nigori node. set_encrypt_everything() emits a notification
+ // the first time it's called.
void set_encrypt_everything();
bool encrypt_everything() const;
- // Set all types in |new_types| as requiring encryption (in addition to the
- // currently encrypted types). Note: once a type requires encryption it can
- // never stop requiring encryption without clearing the server data.
- void SetEncryptedTypes(syncable::ModelTypeSet new_types);
-
// Return the set of encrypted types.
syncable::ModelTypeSet GetEncryptedTypes() const;
+ // Forwards to SetEncryptedTypes.
+ void SetEncryptedTypesForTest(
+ const syncable::ModelTypeSet& encrypted_types);
+
private:
FRIEND_TEST_ALL_PREFIXES(CryptographerTest, PackUnpack);
typedef std::map<std::string, linked_ptr<const Nigori> > NigoriMap;
+ // Changes the set of encrypted types and emits a notification if
+ // necessary.
+ void SetEncryptedTypes(const syncable::ModelTypeSet& encrypted_types);
+
+ void EmitEncryptedTypesChangedNotification();
+
// Helper method to instantiate Nigori instances for each set of key
// parameters in |bag| and setting the default encryption key to
// |default_key_name|.
@@ -173,6 +209,8 @@ class Cryptographer {
bool PackBootstrapToken(const Nigori* nigori, std::string* pack_into) const;
Nigori* UnpackBootstrapToken(const std::string& token) const;
+ ObserverList<Observer> observers_;
+
NigoriMap nigoris_; // The Nigoris we know about, mapped by key name.
NigoriMap::value_type* default_nigori_; // The Nigori used for encryption.
« no previous file with comments | « chrome/browser/sync/protocol/client_debug_info.proto ('k') | chrome/browser/sync/util/cryptographer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698