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 #include "chrome/browser/safe_browsing/permission_reporter.h" | 5 #include "chrome/browser/safe_browsing/permission_reporter.h" |
6 | 6 |
7 #include <functional> | 7 #include <functional> |
8 | 8 |
9 #include "base/hash.h" | 9 #include "base/hash.h" |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
11 #include "base/time/default_clock.h" | 11 #include "base/time/default_clock.h" |
12 #include "chrome/browser/permissions/permission_request.h" | 12 #include "chrome/browser/permissions/permission_request.h" |
13 #include "chrome/common/safe_browsing/permission_report.pb.h" | 13 #include "chrome/common/safe_browsing/permission_report.pb.h" |
14 #include "components/variations/active_field_trials.h" | 14 #include "components/variations/active_field_trials.h" |
15 #include "content/public/browser/permission_type.h" | |
16 #include "net/url_request/report_sender.h" | 15 #include "net/url_request/report_sender.h" |
17 | 16 |
18 using content::PermissionType; | |
19 | |
20 namespace safe_browsing { | 17 namespace safe_browsing { |
21 | 18 |
22 namespace { | 19 namespace { |
23 // URL to upload permission action reports. | 20 // URL to upload permission action reports. |
24 const char kPermissionActionReportingUploadUrl[] = | 21 const char kPermissionActionReportingUploadUrl[] = |
25 "https://safebrowsing.googleusercontent.com/safebrowsing/clientreport/" | 22 "https://safebrowsing.googleusercontent.com/safebrowsing/clientreport/" |
26 "chrome-permissions"; | 23 "chrome-permissions"; |
27 | 24 |
28 const int kMaximumReportsPerOriginPerPermissionPerMinute = 5; | 25 const int kMaximumReportsPerOriginPerPermissionPerMinute = 5; |
29 | 26 |
30 PermissionReport::PermissionType PermissionTypeForReport( | 27 PermissionReport::PermissionType PermissionTypeForReport( |
31 PermissionType permission) { | 28 ContentSettingsType permission) { |
32 switch (permission) { | 29 switch (permission) { |
33 case PermissionType::MIDI_SYSEX: | 30 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: |
34 return PermissionReport::MIDI_SYSEX; | 31 return PermissionReport::MIDI_SYSEX; |
35 case PermissionType::PUSH_MESSAGING: | 32 case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING: |
36 return PermissionReport::PUSH_MESSAGING; | 33 return PermissionReport::PUSH_MESSAGING; |
37 case PermissionType::NOTIFICATIONS: | 34 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: |
38 return PermissionReport::NOTIFICATIONS; | 35 return PermissionReport::NOTIFICATIONS; |
39 case PermissionType::GEOLOCATION: | 36 case CONTENT_SETTINGS_TYPE_GEOLOCATION: |
40 return PermissionReport::GEOLOCATION; | 37 return PermissionReport::GEOLOCATION; |
41 case PermissionType::PROTECTED_MEDIA_IDENTIFIER: | 38 case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER: |
42 return PermissionReport::PROTECTED_MEDIA_IDENTIFIER; | 39 return PermissionReport::PROTECTED_MEDIA_IDENTIFIER; |
43 case PermissionType::MIDI: | 40 case CONTENT_SETTINGS_TYPE_DURABLE_STORAGE: |
44 return PermissionReport::MIDI; | |
45 case PermissionType::DURABLE_STORAGE: | |
46 return PermissionReport::DURABLE_STORAGE; | 41 return PermissionReport::DURABLE_STORAGE; |
47 case PermissionType::AUDIO_CAPTURE: | 42 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC: |
48 return PermissionReport::AUDIO_CAPTURE; | 43 return PermissionReport::AUDIO_CAPTURE; |
49 case PermissionType::VIDEO_CAPTURE: | 44 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: |
50 return PermissionReport::VIDEO_CAPTURE; | 45 return PermissionReport::VIDEO_CAPTURE; |
51 case PermissionType::BACKGROUND_SYNC: | 46 case CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC: |
52 return PermissionReport::BACKGROUND_SYNC; | 47 return PermissionReport::BACKGROUND_SYNC; |
53 case PermissionType::FLASH: | 48 case CONTENT_SETTINGS_TYPE_PLUGINS: |
54 return PermissionReport::FLASH; | 49 return PermissionReport::FLASH; |
55 case PermissionType::NUM: | 50 default: |
56 break; | 51 break; |
57 } | 52 } |
58 | 53 |
59 NOTREACHED(); | 54 NOTREACHED(); |
60 return PermissionReport::UNKNOWN_PERMISSION; | 55 return PermissionReport::UNKNOWN_PERMISSION; |
61 } | 56 } |
62 | 57 |
63 PermissionReport::Action PermissionActionForReport(PermissionAction action) { | 58 PermissionReport::Action PermissionActionForReport(PermissionAction action) { |
64 switch (action) { | 59 switch (action) { |
65 case GRANTED: | 60 case GRANTED: |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 variations::GetFieldTrialActiveGroupIds(&active_group_ids); | 199 variations::GetFieldTrialActiveGroupIds(&active_group_ids); |
205 for (auto active_group_id : active_group_ids) { | 200 for (auto active_group_id : active_group_ids) { |
206 PermissionReport::FieldTrial* field_trial = report.add_field_trials(); | 201 PermissionReport::FieldTrial* field_trial = report.add_field_trials(); |
207 field_trial->set_name_id(active_group_id.name); | 202 field_trial->set_name_id(active_group_id.name); |
208 field_trial->set_group_id(active_group_id.group); | 203 field_trial->set_group_id(active_group_id.group); |
209 } | 204 } |
210 return report.SerializeToString(output); | 205 return report.SerializeToString(output); |
211 } | 206 } |
212 | 207 |
213 bool PermissionReporter::IsReportThresholdExceeded( | 208 bool PermissionReporter::IsReportThresholdExceeded( |
214 content::PermissionType permission, | 209 ContentSettingsType permission, |
215 const GURL& origin) { | 210 const GURL& origin) { |
216 std::queue<base::Time>& log = report_logs_[{permission, origin}]; | 211 std::queue<base::Time>& log = report_logs_[{permission, origin}]; |
217 base::Time current_time = clock_->Now(); | 212 base::Time current_time = clock_->Now(); |
218 // Remove entries that are sent more than one minute ago. | 213 // Remove entries that are sent more than one minute ago. |
219 while (!log.empty() && | 214 while (!log.empty() && |
220 current_time - log.front() > base::TimeDelta::FromMinutes(1)) { | 215 current_time - log.front() > base::TimeDelta::FromMinutes(1)) { |
221 log.pop(); | 216 log.pop(); |
222 } | 217 } |
223 if (log.size() < kMaximumReportsPerOriginPerPermissionPerMinute) { | 218 if (log.size() < kMaximumReportsPerOriginPerPermissionPerMinute) { |
224 log.push(current_time); | 219 log.push(current_time); |
225 return false; | 220 return false; |
226 } else { | 221 } else { |
227 return true; | 222 return true; |
228 } | 223 } |
229 } | 224 } |
230 | 225 |
231 } // namespace safe_browsing | 226 } // namespace safe_browsing |
OLD | NEW |