1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef SYNC_SYNCABLE_TEST_FAKE_SYNC_ENCRYPTION_HANDLER_H_
6#define SYNC_SYNCABLE_TEST_FAKE_SYNC_ENCRYPTION_HANDLER_H_
7
8#include <string>
9
10#include "base/compiler_specific.h"
11#include "base/observer_list.h"
12#include "sync/internal_api/public/sync_encryption_handler.h"
13#include "sync/syncable/nigori_handler.h"
14#include "sync/test/fake_encryptor.h"
15#include "sync/util/cryptographer.h"
16
17namespace syncer {
18
19// A fake sync encryption handler capable of keeping track of the encryption
20// state without opening any transactions or interacting with the nigori node.
21// Note that this only performs basic interactions with the cryptographer
22// (setting pending keys, installing keys).
23// Note: NOT thread safe. If threads attempt to check encryption state
24// while another thread is modifying it, races can occur.
25class FakeSyncEncryptionHandler : public SyncEncryptionHandler,
26                                  public syncable::NigoriHandler {
27 public:
28  FakeSyncEncryptionHandler();
29  virtual ~FakeSyncEncryptionHandler();
30
31  // SyncEncryptionHandler implementation.
32  virtual void AddObserver(Observer* observer) OVERRIDE;
33  virtual void RemoveObserver(Observer* observer) OVERRIDE;
34  virtual void Init() OVERRIDE;
35  virtual void SetEncryptionPassphrase(const std::string& passphrase,
36                                       bool is_explicit) OVERRIDE;
37  virtual void SetDecryptionPassphrase(const std::string& passphrase) OVERRIDE;
38  virtual void EnableEncryptEverything() OVERRIDE;
39  virtual bool EncryptEverythingEnabled() const OVERRIDE;
40  virtual PassphraseType GetPassphraseType() const OVERRIDE;
41
42  // NigoriHandler implemenation.
43  virtual void ApplyNigoriUpdate(
44      const sync_pb::NigoriSpecifics& nigori,
45      syncable::BaseTransaction* const trans) OVERRIDE;
46  virtual void UpdateNigoriFromEncryptedTypes(
47      sync_pb::NigoriSpecifics* nigori,
48      syncable::BaseTransaction* const trans) const OVERRIDE;
49  virtual bool NeedKeystoreKey(
50      syncable::BaseTransaction* const trans) const OVERRIDE;
51  virtual bool SetKeystoreKeys(
52      const google::protobuf::RepeatedPtrField<google::protobuf::string>& keys,
53      syncable::BaseTransaction* const trans) OVERRIDE;
54  virtual ModelTypeSet GetEncryptedTypes(
55      syncable::BaseTransaction* const trans) const OVERRIDE;
56
57  Cryptographer* cryptographer() { return &cryptographer_; }
58
59 private:
60  ObserverList<SyncEncryptionHandler::Observer> observers_;
61  ModelTypeSet encrypted_types_;
62  bool encrypt_everything_;
63  PassphraseType passphrase_type_;
64
65  FakeEncryptor encryptor_;
66  Cryptographer cryptographer_;
67  std::string keystore_key_;
68};
69
70}  // namespace syncer
71
72#endif  // SYNC_INTERNAL_API_PUBLIC_TEST_FAKE_SYNC_ENCRYPTION_HANDLER_H_
73