OLD | NEW |
| (Empty) |
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_DEBUG_INFO_EVENT_LISTENER_H_ | |
6 #define SYNC_INTERNAL_API_DEBUG_INFO_EVENT_LISTENER_H_ | |
7 | |
8 #include <deque> | |
9 #include <string> | |
10 #include <vector> | |
11 | |
12 #include "base/compiler_specific.h" | |
13 #include "base/gtest_prod_util.h" | |
14 #include "base/macros.h" | |
15 #include "sync/base/sync_export.h" | |
16 #include "sync/internal_api/public/base/model_type.h" | |
17 #include "sync/internal_api/public/data_type_debug_info_listener.h" | |
18 #include "sync/internal_api/public/sessions/sync_session_snapshot.h" | |
19 #include "sync/internal_api/public/sync_encryption_handler.h" | |
20 #include "sync/internal_api/public/sync_manager.h" | |
21 #include "sync/internal_api/public/util/weak_handle.h" | |
22 #include "sync/js/js_backend.h" | |
23 #include "sync/protocol/sync.pb.h" | |
24 #include "sync/sessions/debug_info_getter.h" | |
25 | |
26 namespace syncer { | |
27 | |
28 // In order to track datatype association results, we need at least as many | |
29 // entries as datatypes. Reserve additional space for other kinds of events that | |
30 // are likely to happen during first sync or startup. | |
31 const unsigned int kMaxEntries = MODEL_TYPE_COUNT + 10; | |
32 | |
33 // Listens to events and records them in a queue. And passes the events to | |
34 // syncer when requested. | |
35 // This class is not thread safe and should only be accessed on the sync thread. | |
36 class SYNC_EXPORT DebugInfoEventListener | |
37 : public SyncManager::Observer, | |
38 public SyncEncryptionHandler::Observer, | |
39 public sessions::DebugInfoGetter, | |
40 public DataTypeDebugInfoListener { | |
41 public: | |
42 DebugInfoEventListener(); | |
43 ~DebugInfoEventListener() override; | |
44 | |
45 // SyncManager::Observer implementation. | |
46 void OnSyncCycleCompleted( | |
47 const sessions::SyncSessionSnapshot& snapshot) override; | |
48 void OnInitializationComplete( | |
49 const WeakHandle<JsBackend>& js_backend, | |
50 const WeakHandle<DataTypeDebugInfoListener>& debug_listener, | |
51 bool success, | |
52 ModelTypeSet restored_types) override; | |
53 void OnConnectionStatusChange(ConnectionStatus connection_status) override; | |
54 void OnActionableError(const SyncProtocolError& sync_error) override; | |
55 void OnMigrationRequested(ModelTypeSet types) override; | |
56 void OnProtocolEvent(const ProtocolEvent& event) override; | |
57 | |
58 // SyncEncryptionHandler::Observer implementation. | |
59 void OnPassphraseRequired( | |
60 PassphraseRequiredReason reason, | |
61 const sync_pb::EncryptedData& pending_keys) override; | |
62 void OnPassphraseAccepted() override; | |
63 void OnBootstrapTokenUpdated(const std::string& bootstrap_token, | |
64 BootstrapTokenType type) override; | |
65 void OnEncryptedTypesChanged(ModelTypeSet encrypted_types, | |
66 bool encrypt_everything) override; | |
67 void OnEncryptionComplete() override; | |
68 void OnCryptographerStateChanged(Cryptographer* cryptographer) override; | |
69 void OnPassphraseTypeChanged(PassphraseType type, | |
70 base::Time explicit_passphrase_time) override; | |
71 void OnLocalSetPassphraseEncryption( | |
72 const SyncEncryptionHandler::NigoriState& nigori_state) override; | |
73 | |
74 // Sync manager events. | |
75 void OnNudgeFromDatatype(ModelType datatype); | |
76 | |
77 // DebugInfoGetter implementation. | |
78 void GetDebugInfo(sync_pb::DebugInfo* debug_info) override; | |
79 | |
80 // DebugInfoGetter implementation. | |
81 void ClearDebugInfo() override; | |
82 | |
83 // DataTypeDebugInfoListener implementation. | |
84 void OnDataTypeConfigureComplete( | |
85 const std::vector<DataTypeConfigurationStats>& configuration_stats) | |
86 override; | |
87 | |
88 // Returns a weak pointer to this object. | |
89 base::WeakPtr<DataTypeDebugInfoListener> GetWeakPtr(); | |
90 | |
91 private: | |
92 FRIEND_TEST_ALL_PREFIXES(DebugInfoEventListenerTest, VerifyEventsAdded); | |
93 FRIEND_TEST_ALL_PREFIXES(DebugInfoEventListenerTest, VerifyQueueSize); | |
94 FRIEND_TEST_ALL_PREFIXES(DebugInfoEventListenerTest, VerifyGetEvents); | |
95 FRIEND_TEST_ALL_PREFIXES(DebugInfoEventListenerTest, VerifyClearEvents); | |
96 | |
97 void AddEventToQueue(const sync_pb::DebugEventInfo& event_info); | |
98 void CreateAndAddEvent(sync_pb::SyncEnums::SingletonDebugEventType type); | |
99 | |
100 typedef std::deque<sync_pb::DebugEventInfo> DebugEventInfoQueue; | |
101 DebugEventInfoQueue events_; | |
102 | |
103 // True indicates we had to drop one or more events to keep our limit of | |
104 // |kMaxEntries|. | |
105 bool events_dropped_; | |
106 | |
107 // Cryptographer has keys that are not yet decrypted. | |
108 bool cryptographer_has_pending_keys_; | |
109 | |
110 // Cryptographer is initialized and does not have pending keys. | |
111 bool cryptographer_ready_; | |
112 | |
113 base::ThreadChecker thread_checker_; | |
114 | |
115 base::WeakPtrFactory<DebugInfoEventListener> weak_ptr_factory_; | |
116 | |
117 DISALLOW_COPY_AND_ASSIGN(DebugInfoEventListener); | |
118 }; | |
119 | |
120 } // namespace syncer | |
121 | |
122 #endif // SYNC_INTERNAL_API_DEBUG_INFO_EVENT_LISTENER_H_ | |
OLD | NEW |