1// Copyright 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_INTERNAL_API_JS_SYNC_ENCRYPTION_HANDLER_OBSERVER_H_
6#define SYNC_INTERNAL_API_JS_SYNC_ENCRYPTION_HANDLER_OBSERVER_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/compiler_specific.h"
12#include "sync/base/sync_export.h"
13#include "sync/internal_api/public/sync_encryption_handler.h"
14#include "sync/internal_api/public/util/weak_handle.h"
15#include "sync/protocol/sync_protocol_error.h"
16
17namespace tracked_objects {
18class Location;
19}  // namespace tracked_objects
20
21namespace syncer {
22
23class JsEventDetails;
24class JsEventHandler;
25
26// Routes SyncEncryptionHandler events to a JsEventHandler.
27class SYNC_EXPORT_PRIVATE JsSyncEncryptionHandlerObserver
28    : public SyncEncryptionHandler::Observer {
29 public:
30  JsSyncEncryptionHandlerObserver();
31  virtual ~JsSyncEncryptionHandlerObserver();
32
33  void SetJsEventHandler(const WeakHandle<JsEventHandler>& event_handler);
34
35  // SyncEncryptionHandlerObserver::Observer implementation.
36  virtual void OnPassphraseRequired(
37      PassphraseRequiredReason reason,
38      const sync_pb::EncryptedData& pending_keys) OVERRIDE;
39  virtual void OnPassphraseAccepted() OVERRIDE;
40  virtual void OnBootstrapTokenUpdated(
41      const std::string& bootstrap_token,
42      BootstrapTokenType type) OVERRIDE;
43  virtual void OnEncryptedTypesChanged(
44      ModelTypeSet encrypted_types,
45      bool encrypt_everything) OVERRIDE;
46  virtual void OnEncryptionComplete() OVERRIDE;
47  virtual void OnCryptographerStateChanged(
48      Cryptographer* cryptographer) OVERRIDE;
49  virtual void OnPassphraseTypeChanged(
50      PassphraseType type,
51      base::Time explicit_passphrase_time) OVERRIDE;
52
53 private:
54  void HandleJsEvent(const tracked_objects::Location& from_here,
55                    const std::string& name, const JsEventDetails& details);
56
57  WeakHandle<JsEventHandler> event_handler_;
58
59  DISALLOW_COPY_AND_ASSIGN(JsSyncEncryptionHandlerObserver);
60};
61
62}  // namespace syncer
63
64#endif  // SYNC_INTERNAL_API_JS_SYNC_ENCRYPTION_HANDLER_OBSERVER_H_
65