| 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 |