OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 CHROME_BROWSER_ANDROID_DATA_USAGE_EXTERNAL_DATA_USE_OBSERVER_H_ | 5 #ifndef CHROME_BROWSER_ANDROID_DATA_USAGE_EXTERNAL_DATA_USE_OBSERVER_H_ |
6 #define CHROME_BROWSER_ANDROID_DATA_USAGE_EXTERNAL_DATA_USE_OBSERVER_H_ | 6 #define CHROME_BROWSER_ANDROID_DATA_USAGE_EXTERNAL_DATA_USE_OBSERVER_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <string> | 10 #include <string> |
(...skipping 27 matching lines...) Expand all Loading... |
38 | 38 |
39 // This class allows platform APIs that are external to Chromium to observe how | 39 // This class allows platform APIs that are external to Chromium to observe how |
40 // much data is used by Chromium on the current Android device. This class | 40 // much data is used by Chromium on the current Android device. This class |
41 // receives regular expressions from the platform. It also registers as a data | 41 // receives regular expressions from the platform. It also registers as a data |
42 // use observer with DataUseAggregator, filters the received observations by | 42 // use observer with DataUseAggregator, filters the received observations by |
43 // applying the regex matching to the URLs of the requests, and notifies the | 43 // applying the regex matching to the URLs of the requests, and notifies the |
44 // filtered data use to the platform. This class is not thread safe, and must | 44 // filtered data use to the platform. This class is not thread safe, and must |
45 // only be accessed on IO thread. | 45 // only be accessed on IO thread. |
46 class ExternalDataUseObserver : public data_usage::DataUseAggregator::Observer { | 46 class ExternalDataUseObserver : public data_usage::DataUseAggregator::Observer { |
47 public: | 47 public: |
| 48 // Result of data usage report submission. This enum must remain synchronized |
| 49 // with the enum of the same name in metrics/histograms/histograms.xml. |
| 50 enum DataUsageReportSubmissionResult { |
| 51 // Submission of data use report to the external observer was successful. |
| 52 DATAUSAGE_REPORT_SUBMISSION_SUCCESSFUL = 0, |
| 53 // Submission of data use report to the external observer returned error. |
| 54 DATAUSAGE_REPORT_SUBMISSION_FAILED = 1, |
| 55 // Submission of data use report to the external observer timed out. |
| 56 DATAUSAGE_REPORT_SUBMISSION_TIMED_OUT = 2, |
| 57 // Data use report was lost before an attempt was made to submit it. |
| 58 DATAUSAGE_REPORT_SUBMISSION_LOST = 3, |
| 59 DATAUSAGE_REPORT_SUBMISSION_MAX = 4 |
| 60 }; |
| 61 |
48 // External data use observer field trial name. | 62 // External data use observer field trial name. |
49 static const char kExternalDataUseObserverFieldTrial[]; | 63 static const char kExternalDataUseObserverFieldTrial[]; |
50 | 64 |
51 ExternalDataUseObserver( | 65 ExternalDataUseObserver( |
52 data_usage::DataUseAggregator* data_use_aggregator, | 66 data_usage::DataUseAggregator* data_use_aggregator, |
53 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, | 67 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, |
54 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner); | 68 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner); |
55 ~ExternalDataUseObserver() override; | 69 ~ExternalDataUseObserver() override; |
56 | 70 |
57 DataUseTabModel* GetDataUseTabModel() const; | 71 DataUseTabModel* GetDataUseTabModel() const; |
(...skipping 18 matching lines...) Expand all Loading... |
76 | 90 |
77 DataUseTabModel* data_use_tab_model() const { | 91 DataUseTabModel* data_use_tab_model() const { |
78 return data_use_tab_model_.get(); | 92 return data_use_tab_model_.get(); |
79 } | 93 } |
80 | 94 |
81 private: | 95 private: |
82 friend class DataUseTabModelTest; | 96 friend class DataUseTabModelTest; |
83 friend class ExternalDataUseObserverTest; | 97 friend class ExternalDataUseObserverTest; |
84 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, BufferDataUseReports); | 98 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, BufferDataUseReports); |
85 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, BufferSize); | 99 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, BufferSize); |
| 100 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, DataUseReportTimedOut); |
86 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, HashFunction); | 101 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, HashFunction); |
87 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, LabelRemoved); | 102 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, LabelRemoved); |
88 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, MultipleMatchingRules); | 103 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, MultipleMatchingRules); |
89 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, | 104 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, |
90 PeriodicFetchMatchingRules); | 105 PeriodicFetchMatchingRules); |
91 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, ReportsMergedCorrectly); | 106 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, ReportsMergedCorrectly); |
92 FRIEND_TEST_ALL_PREFIXES(DataUseUITabModelTest, ReportTabEventsTest); | 107 FRIEND_TEST_ALL_PREFIXES(DataUseUITabModelTest, ReportTabEventsTest); |
93 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, | 108 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, |
94 TimestampsMergedCorrectly); | 109 TimestampsMergedCorrectly); |
95 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, Variations); | 110 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, Variations); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 | 196 |
182 // Aggregator that sends data use observations to |this|. | 197 // Aggregator that sends data use observations to |this|. |
183 data_usage::DataUseAggregator* data_use_aggregator_; | 198 data_usage::DataUseAggregator* data_use_aggregator_; |
184 | 199 |
185 // Maintains tab sessions. | 200 // Maintains tab sessions. |
186 scoped_ptr<DataUseTabModel> data_use_tab_model_; | 201 scoped_ptr<DataUseTabModel> data_use_tab_model_; |
187 | 202 |
188 // True if callback from |FetchMatchingRulesDone| is currently pending. | 203 // True if callback from |FetchMatchingRulesDone| is currently pending. |
189 bool matching_rules_fetch_pending_; | 204 bool matching_rules_fetch_pending_; |
190 | 205 |
191 // True if callback from |SubmitDataUseReportCallback| is currently pending. | 206 // Time when the currently pending data use report was submitted. |
192 bool submit_data_report_pending_; | 207 // |last_data_report_submitted_ticks_| is null if no data use report is |
| 208 // currently pending. |
| 209 base::TimeTicks last_data_report_submitted_ticks_; |
| 210 |
| 211 // |pending_report_bytes_| is the total byte count in the data use report that |
| 212 // is currently pending. |
| 213 int64_t pending_report_bytes_; |
193 | 214 |
194 // Buffered data reports that need to be submitted to the | 215 // Buffered data reports that need to be submitted to the |
195 // |external_data_use_observer_bridge_|. | 216 // |external_data_use_observer_bridge_|. |
196 DataUseReports buffered_data_reports_; | 217 DataUseReports buffered_data_reports_; |
197 | 218 |
198 // |ui_task_runner_| is used to call ExternalDataUseObserverBridge methods on | 219 // |ui_task_runner_| is used to call ExternalDataUseObserverBridge methods on |
199 // UI thread. | 220 // UI thread. |
200 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; | 221 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; |
201 | 222 |
202 // Time when the data use reports were last received from DataUseAggregator. | 223 // Time when the data use reports were last received from DataUseAggregator. |
(...skipping 11 matching lines...) Expand all Loading... |
214 // reports. | 235 // reports. |
215 int64_t total_bytes_buffered_; | 236 int64_t total_bytes_buffered_; |
216 | 237 |
217 // Duration after which matching rules are periodically fetched. | 238 // Duration after which matching rules are periodically fetched. |
218 const base::TimeDelta fetch_matching_rules_duration_; | 239 const base::TimeDelta fetch_matching_rules_duration_; |
219 | 240 |
220 // Minimum number of bytes that should be buffered before a data use report is | 241 // Minimum number of bytes that should be buffered before a data use report is |
221 // submitted. | 242 // submitted. |
222 const int64_t data_use_report_min_bytes_; | 243 const int64_t data_use_report_min_bytes_; |
223 | 244 |
| 245 // If a data use report is pending for more than |data_report_submit_timeout_| |
| 246 // duration, it is considered as timed out. |
| 247 const base::TimeDelta data_report_submit_timeout_; |
| 248 |
224 base::ThreadChecker thread_checker_; | 249 base::ThreadChecker thread_checker_; |
225 | 250 |
226 base::WeakPtrFactory<ExternalDataUseObserver> weak_factory_; | 251 base::WeakPtrFactory<ExternalDataUseObserver> weak_factory_; |
227 | 252 |
228 DISALLOW_COPY_AND_ASSIGN(ExternalDataUseObserver); | 253 DISALLOW_COPY_AND_ASSIGN(ExternalDataUseObserver); |
229 }; | 254 }; |
230 | 255 |
231 } // namespace android | 256 } // namespace android |
232 | 257 |
233 } // namespace chrome | 258 } // namespace chrome |
234 | 259 |
235 #endif // CHROME_BROWSER_ANDROID_DATA_USAGE_EXTERNAL_DATA_USE_OBSERVER_H_ | 260 #endif // CHROME_BROWSER_ANDROID_DATA_USAGE_EXTERNAL_DATA_USE_OBSERVER_H_ |
OLD | NEW |