OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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_FILE_METRICS_PROVIDER_H_ | 5 #ifndef COMPONENTS_METRICS_FILE_METRICS_PROVIDER_H_ |
6 #define COMPONENTS_METRICS_FILE_METRICS_PROVIDER_H_ | 6 #define COMPONENTS_METRICS_FILE_METRICS_PROVIDER_H_ |
7 | 7 |
8 #include <list> | 8 #include <list> |
9 #include <memory> | 9 #include <memory> |
10 #include <string> | 10 #include <string> |
11 | 11 |
12 #include "base/callback.h" | 12 #include "base/callback.h" |
13 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
14 #include "base/gtest_prod_util.h" | 14 #include "base/gtest_prod_util.h" |
15 #include "base/memory/weak_ptr.h" | 15 #include "base/memory/weak_ptr.h" |
16 #include "base/metrics/statistics_recorder.h" | 16 #include "base/metrics/statistics_recorder.h" |
17 #include "base/threading/thread_checker.h" | 17 #include "base/sequence_checker.h" |
18 #include "base/time/time.h" | 18 #include "base/time/time.h" |
19 #include "components/metrics/metrics_provider.h" | 19 #include "components/metrics/metrics_provider.h" |
20 | 20 |
21 class PrefRegistrySimple; | 21 class PrefRegistrySimple; |
22 class PrefService; | 22 class PrefService; |
23 | 23 |
24 namespace base { | 24 namespace base { |
25 class TaskRunner; | 25 class TaskRunner; |
26 } | 26 } |
27 | 27 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 ASSOCIATE_INTERNAL_PROFILE, | 88 ASSOCIATE_INTERNAL_PROFILE, |
89 | 89 |
90 // Like above but fall back to ASSOCIATE_PREVIOUS_RUN if there is no | 90 // Like above but fall back to ASSOCIATE_PREVIOUS_RUN if there is no |
91 // embedded profile. This has a small cost during startup as that is | 91 // embedded profile. This has a small cost during startup as that is |
92 // when previous-run metrics are sent so the file has be checked at | 92 // when previous-run metrics are sent so the file has be checked at |
93 // that time even though actual transfer will be delayed if an | 93 // that time even though actual transfer will be delayed if an |
94 // embedded profile is found. | 94 // embedded profile is found. |
95 ASSOCIATE_INTERNAL_PROFILE_OR_PREVIOUS_RUN, | 95 ASSOCIATE_INTERNAL_PROFILE_OR_PREVIOUS_RUN, |
96 }; | 96 }; |
97 | 97 |
98 FileMetricsProvider(const scoped_refptr<base::TaskRunner>& task_runner, | 98 explicit FileMetricsProvider(PrefService* local_state); |
99 PrefService* local_state); | |
100 ~FileMetricsProvider() override; | 99 ~FileMetricsProvider() override; |
101 | 100 |
102 // Indicates a file or directory to be monitored and how the file or files | 101 // Indicates a file or directory to be monitored and how the file or files |
103 // within that directory are used. Because some metadata may need to persist | 102 // within that directory are used. Because some metadata may need to persist |
104 // across process restarts, preferences entries are used based on the | 103 // across process restarts, preferences entries are used based on the |
105 // |prefs_key| name. Call RegisterPrefs() with the same name to create the | 104 // |prefs_key| name. Call RegisterPrefs() with the same name to create the |
106 // necessary keys in advance. Set |prefs_key| empty (nullptr will work) if | 105 // necessary keys in advance. Set |prefs_key| empty (nullptr will work) if |
107 // no persistence is required. ACTIVE files shouldn't have a pref key as | 106 // no persistence is required. ACTIVE files shouldn't have a pref key as |
108 // they update internal state about what has been previously sent. | 107 // they update internal state about what has been previously sent. |
109 void RegisterSource(const base::FilePath& path, | 108 void RegisterSource(const base::FilePath& path, |
110 SourceType type, | 109 SourceType type, |
111 SourceAssociation source_association, | 110 SourceAssociation source_association, |
112 const base::StringPiece prefs_key); | 111 const base::StringPiece prefs_key); |
113 | 112 |
114 // Registers all necessary preferences for maintaining persistent state | 113 // Registers all necessary preferences for maintaining persistent state |
115 // about a monitored file across process restarts. The |prefs_key| is | 114 // about a monitored file across process restarts. The |prefs_key| is |
116 // typically the filename. | 115 // typically the filename. |
117 static void RegisterPrefs(PrefRegistrySimple* prefs, | 116 static void RegisterPrefs(PrefRegistrySimple* prefs, |
118 const base::StringPiece prefs_key); | 117 const base::StringPiece prefs_key); |
119 | 118 |
| 119 // Sets the task runner to use for testing. |
| 120 static void SetTaskRunnerForTesting( |
| 121 const scoped_refptr<base::TaskRunner>& task_runner); |
| 122 |
120 private: | 123 private: |
121 friend class FileMetricsProviderTest; | 124 friend class FileMetricsProviderTest; |
122 | 125 |
123 // The different results that can occur accessing a file. | 126 // The different results that can occur accessing a file. |
124 enum AccessResult { | 127 enum AccessResult { |
125 // File was successfully mapped. | 128 // File was successfully mapped. |
126 ACCESS_RESULT_SUCCESS, | 129 ACCESS_RESULT_SUCCESS, |
127 | 130 |
128 // File does not exist. | 131 // File does not exist. |
129 ACCESS_RESULT_DOESNT_EXIST, | 132 ACCESS_RESULT_DOESNT_EXIST, |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 SourceInfoList sources_with_profile_; | 219 SourceInfoList sources_with_profile_; |
217 | 220 |
218 // A list of sources for a previous run. These are held separately because | 221 // A list of sources for a previous run. These are held separately because |
219 // they are not subject to the periodic background checking that handles | 222 // they are not subject to the periodic background checking that handles |
220 // metrics for the current run. | 223 // metrics for the current run. |
221 SourceInfoList sources_for_previous_run_; | 224 SourceInfoList sources_for_previous_run_; |
222 | 225 |
223 // The preferences-service used to store persistent state about sources. | 226 // The preferences-service used to store persistent state about sources. |
224 PrefService* pref_service_; | 227 PrefService* pref_service_; |
225 | 228 |
226 base::ThreadChecker thread_checker_; | 229 SEQUENCE_CHECKER(sequence_checker_); |
227 base::WeakPtrFactory<FileMetricsProvider> weak_factory_; | 230 base::WeakPtrFactory<FileMetricsProvider> weak_factory_; |
228 | 231 |
229 DISALLOW_COPY_AND_ASSIGN(FileMetricsProvider); | 232 DISALLOW_COPY_AND_ASSIGN(FileMetricsProvider); |
230 }; | 233 }; |
231 | 234 |
232 } // namespace metrics | 235 } // namespace metrics |
233 | 236 |
234 #endif // COMPONENTS_METRICS_FILE_METRICS_PROVIDER_H_ | 237 #endif // COMPONENTS_METRICS_FILE_METRICS_PROVIDER_H_ |
OLD | NEW |