| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef COMPONENTS_METRICS_PERSISTED_LOGS_H_ | 5 #ifndef COMPONENTS_METRICS_PERSISTED_LOGS_H_ |
| 6 #define COMPONENTS_METRICS_PERSISTED_LOGS_H_ | 6 #define COMPONENTS_METRICS_PERSISTED_LOGS_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include <string> | 10 #include <string> |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 // Calling code is responsible for ensuring that the lifetime of |local_state| | 44 // Calling code is responsible for ensuring that the lifetime of |local_state| |
| 45 // is longer than the lifetime of PersistedLogs. | 45 // is longer than the lifetime of PersistedLogs. |
| 46 // | 46 // |
| 47 // When saving logs to disk, stores either the first |min_log_count| logs, or | 47 // When saving logs to disk, stores either the first |min_log_count| logs, or |
| 48 // at least |min_log_bytes| bytes of logs, whichever is greater. | 48 // at least |min_log_bytes| bytes of logs, whichever is greater. |
| 49 // | 49 // |
| 50 // If the optional |max_log_size| parameter is non-zero, all logs larger than | 50 // If the optional |max_log_size| parameter is non-zero, all logs larger than |
| 51 // that limit will be skipped when writing to disk. | 51 // that limit will be skipped when writing to disk. |
| 52 PersistedLogs(PrefService* local_state, | 52 PersistedLogs(PrefService* local_state, |
| 53 const char* pref_name, | 53 const char* pref_name, |
| 54 const char* outdated_pref_name, |
| 54 size_t min_log_count, | 55 size_t min_log_count, |
| 55 size_t min_log_bytes, | 56 size_t min_log_bytes, |
| 56 size_t max_log_size); | 57 size_t max_log_size); |
| 57 ~PersistedLogs(); | 58 ~PersistedLogs(); |
| 58 | 59 |
| 59 // Write list to storage. | 60 // Write list to storage. |
| 60 void SerializeLogs() const; | 61 void SerializeLogs() const; |
| 61 | 62 |
| 62 // Reads the list from the preference. | 63 // Reads the list from the preference. |
| 63 LogReadStatus DeserializeLogs(); | 64 LogReadStatus DeserializeLogs(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 80 DCHECK(has_staged_log()); | 81 DCHECK(has_staged_log()); |
| 81 return list_[staged_log_index_].compressed_log_data; | 82 return list_[staged_log_index_].compressed_log_data; |
| 82 } | 83 } |
| 83 | 84 |
| 84 // Returns the element in the front of the list. | 85 // Returns the element in the front of the list. |
| 85 const std::string& staged_log_hash() const { | 86 const std::string& staged_log_hash() const { |
| 86 DCHECK(has_staged_log()); | 87 DCHECK(has_staged_log()); |
| 87 return list_[staged_log_index_].hash; | 88 return list_[staged_log_index_].hash; |
| 88 } | 89 } |
| 89 | 90 |
| 91 // Returns the timestamp of the element in the front of the list. |
| 92 const std::string& staged_log_timestamp() const { |
| 93 DCHECK(has_staged_log()); |
| 94 return list_[staged_log_index_].timestamp; |
| 95 } |
| 96 |
| 90 // The number of elements currently stored. | 97 // The number of elements currently stored. |
| 91 size_t size() const { return list_.size(); } | 98 size_t size() const { return list_.size(); } |
| 92 | 99 |
| 93 // True if there are no stored logs. | 100 // True if there are no stored logs. |
| 94 bool empty() const { return list_.empty(); } | 101 bool empty() const { return list_.empty(); } |
| 95 | 102 |
| 96 private: | 103 private: |
| 97 // Writes the list to the ListValue. | 104 // Writes the list to the ListValue. |
| 98 void WriteLogsToPrefList(base::ListValue* list) const; | 105 void WriteLogsToPrefList(base::ListValue* list) const; |
| 99 | 106 |
| 100 // Reads the list from the ListValue. | 107 // Reads the list from the ListValue. |
| 101 LogReadStatus ReadLogsFromPrefList(const base::ListValue& list); | 108 LogReadStatus ReadLogsFromPrefList(const base::ListValue& list); |
| 102 | 109 |
| 110 // Reads the list from the ListValue in the old Log-hash pair format. |
| 111 LogReadStatus ReadLogsFromOldFormatPrefList(const base::ListValue& list); |
| 112 |
| 103 // A weak pointer to the PrefService object to read and write the preference | 113 // A weak pointer to the PrefService object to read and write the preference |
| 104 // from. Calling code should ensure this object continues to exist for the | 114 // from. Calling code should ensure this object continues to exist for the |
| 105 // lifetime of the PersistedLogs object. | 115 // lifetime of the PersistedLogs object. |
| 106 PrefService* local_state_; | 116 PrefService* local_state_; |
| 107 | 117 |
| 108 // The name of the preference to serialize logs to/from. | 118 // The name of the preference to serialize logs to/from. |
| 109 const char* pref_name_; | 119 const char* pref_name_; |
| 110 | 120 |
| 121 // The name of the preference to serialize logs to/from which may contain log |
| 122 // in the old formatting. |
| 123 const char* outdated_pref_name_; |
| 124 |
| 111 // We will keep at least this |min_log_count_| logs or |min_log_bytes_| bytes | 125 // We will keep at least this |min_log_count_| logs or |min_log_bytes_| bytes |
| 112 // of logs, whichever is greater, when writing to disk. These apply after | 126 // of logs, whichever is greater, when writing to disk. These apply after |
| 113 // skipping logs greater than |max_log_size_|. | 127 // skipping logs greater than |max_log_size_|. |
| 114 const size_t min_log_count_; | 128 const size_t min_log_count_; |
| 115 const size_t min_log_bytes_; | 129 const size_t min_log_bytes_; |
| 116 | 130 |
| 117 // Logs greater than this size will not be written to disk. | 131 // Logs greater than this size will not be written to disk. |
| 118 const size_t max_log_size_; | 132 const size_t max_log_size_; |
| 119 | 133 |
| 120 struct LogHashPair { | 134 struct LogInfo { |
| 121 // Initializes the members based on uncompressed |log_data|. | 135 // Initializes the members based on uncompressed |log_data| and |
| 122 void Init(const std::string& log_data); | 136 // |log_timestamp|. |
| 137 void Init(const std::string& log_data, const std::string& log_timestamp); |
| 123 | 138 |
| 124 // Compressed log data - a serialized protobuf that's been gzipped. | 139 // Compressed log data - a serialized protobuf that's been gzipped. |
| 125 std::string compressed_log_data; | 140 std::string compressed_log_data; |
| 126 | 141 |
| 127 // The SHA1 hash of log, stored to catch errors from memory corruption. | 142 // The SHA1 hash of log, stored to catch errors from memory corruption. |
| 128 std::string hash; | 143 std::string hash; |
| 144 |
| 145 // The timestamp of when the log was created as a time_t value. |
| 146 std::string timestamp; |
| 129 }; | 147 }; |
| 130 // A list of all of the stored logs, stored with SHA1 hashes to check for | 148 // A list of all of the stored logs, stored with SHA1 hashes to check for |
| 131 // corruption while they are stored in memory. | 149 // corruption while they are stored in memory. |
| 132 std::vector<LogHashPair> list_; | 150 std::vector<LogInfo> list_; |
| 133 | 151 |
| 134 // The index and type of the log staged for upload. If nothing has been | 152 // The index and type of the log staged for upload. If nothing has been |
| 135 // staged, the index will be -1. | 153 // staged, the index will be -1. |
| 136 int staged_log_index_; | 154 int staged_log_index_; |
| 137 | 155 |
| 138 DISALLOW_COPY_AND_ASSIGN(PersistedLogs); | 156 DISALLOW_COPY_AND_ASSIGN(PersistedLogs); |
| 139 }; | 157 }; |
| 140 | 158 |
| 141 } // namespace metrics | 159 } // namespace metrics |
| 142 | 160 |
| 143 #endif // COMPONENTS_METRICS_PERSISTED_LOGS_H_ | 161 #endif // COMPONENTS_METRICS_PERSISTED_LOGS_H_ |
| OLD | NEW |