Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1194)

Side by Side Diff: chrome/browser/permissions/permission_uma_util.cc

Issue 2711513005: Remove deprecated and out of date permissions metrics. (Closed)
Patch Set: Re-rebase Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "chrome/browser/permissions/permission_uma_util.h" 5 #include "chrome/browser/permissions/permission_uma_util.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
11 #include "base/strings/stringprintf.h" 11 #include "base/strings/stringprintf.h"
12 #include "base/time/time.h" 12 #include "base/time/time.h"
13 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/permissions/permission_decision_auto_blocker.h" 14 #include "chrome/browser/permissions/permission_decision_auto_blocker.h"
15 #include "chrome/browser/permissions/permission_manager.h"
16 #include "chrome/browser/permissions/permission_request.h" 15 #include "chrome/browser/permissions/permission_request.h"
17 #include "chrome/browser/permissions/permission_util.h" 16 #include "chrome/browser/permissions/permission_util.h"
18 #include "chrome/browser/profiles/profile.h" 17 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 18 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
20 #include "chrome/browser/safe_browsing/ui_manager.h" 19 #include "chrome/browser/safe_browsing/ui_manager.h"
21 #include "chrome/browser/sync/profile_sync_service_factory.h" 20 #include "chrome/browser/sync/profile_sync_service_factory.h"
22 #include "chrome/common/chrome_switches.h" 21 #include "chrome/common/chrome_switches.h"
23 #include "chrome/common/pref_names.h" 22 #include "chrome/common/pref_names.h"
24 #include "components/browser_sync/profile_sync_service.h" 23 #include "components/browser_sync/profile_sync_service.h"
25 #include "components/prefs/pref_service.h" 24 #include "components/prefs/pref_service.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 action_str = "Revoked"; 83 action_str = "Revoked";
85 break; 84 break;
86 default: 85 default:
87 NOTREACHED(); 86 NOTREACHED();
88 break; 87 break;
89 } 88 }
90 89
91 std::string permission_str = PermissionUtil::GetPermissionString(permission); 90 std::string permission_str = PermissionUtil::GetPermissionString(permission);
92 if (permission_str.empty()) 91 if (permission_str.empty())
93 return ""; 92 return "";
94 return base::StringPrintf("ContentSettings.PermissionActions_%s.%s.Url", 93 return base::StringPrintf("ContentSettings.PermissionActions_%s.%s.Url2",
95 permission_str.c_str(), action_str.c_str()); 94 permission_str.c_str(), action_str.c_str());
96 } 95 }
97 96
98 void RecordPermissionRequest(ContentSettingsType content_type, 97 void RecordPermissionRequest(ContentSettingsType content_type,
99 const GURL& requesting_origin, 98 const GURL& requesting_origin,
100 const GURL& embedding_origin, 99 const GURL& embedding_origin,
101 Profile* profile) { 100 Profile* profile) {
102 rappor::RapporServiceImpl* rappor_service = 101 rappor::RapporServiceImpl* rappor_service =
103 g_browser_process->rappor_service(); 102 g_browser_process->rappor_service();
104 if (rappor_service) { 103 if (rappor_service) {
105 if (content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) { 104 if (content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) {
106 // TODO(dominickn): remove this deprecated metric - crbug.com/605836.
107 rappor::SampleDomainAndRegistryFromGURL(
108 rappor_service, "ContentSettings.PermissionRequested.Geolocation.Url",
109 requesting_origin);
110 rappor_service->RecordSampleString( 105 rappor_service->RecordSampleString(
111 "ContentSettings.PermissionRequested.Geolocation.Url2", 106 "ContentSettings.PermissionRequested.Geolocation.Url2",
112 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, 107 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE,
113 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); 108 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin));
114 } else if (content_type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS) { 109 } else if (content_type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS) {
115 // TODO(dominickn): remove this deprecated metric - crbug.com/605836.
116 rappor::SampleDomainAndRegistryFromGURL(
117 rappor_service,
118 "ContentSettings.PermissionRequested.Notifications.Url",
119 requesting_origin);
120 rappor_service->RecordSampleString( 110 rappor_service->RecordSampleString(
121 "ContentSettings.PermissionRequested.Notifications.Url2", 111 "ContentSettings.PermissionRequested.Notifications.Url2",
122 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, 112 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE,
123 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); 113 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin));
124 } else if (content_type == CONTENT_SETTINGS_TYPE_MIDI || 114 } else if (content_type == CONTENT_SETTINGS_TYPE_MIDI ||
125 content_type == CONTENT_SETTINGS_TYPE_MIDI_SYSEX) { 115 content_type == CONTENT_SETTINGS_TYPE_MIDI_SYSEX) {
126 // TODO(dominickn): remove this deprecated metric - crbug.com/605836.
127 rappor::SampleDomainAndRegistryFromGURL(
128 rappor_service, "ContentSettings.PermissionRequested.Midi.Url",
129 requesting_origin);
130 rappor_service->RecordSampleString( 116 rappor_service->RecordSampleString(
131 "ContentSettings.PermissionRequested.Midi.Url2", 117 "ContentSettings.PermissionRequested.Midi.Url2",
132 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, 118 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE,
133 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); 119 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin));
134 } else if (content_type == 120 } else if (content_type ==
135 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER) { 121 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER) {
136 rappor_service->RecordSampleString( 122 rappor_service->RecordSampleString(
137 "ContentSettings.PermissionRequested.ProtectedMedia.Url2", 123 "ContentSettings.PermissionRequested.ProtectedMedia.Url2",
138 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, 124 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE,
139 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); 125 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin));
(...skipping 13 matching lines...) Expand all
153 UMA_HISTOGRAM_ENUMERATION( 139 UMA_HISTOGRAM_ENUMERATION(
154 "ContentSettings.PermissionRequested_SecureOrigin", 140 "ContentSettings.PermissionRequested_SecureOrigin",
155 static_cast<base::HistogramBase::Sample>(permission), 141 static_cast<base::HistogramBase::Sample>(permission),
156 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); 142 static_cast<base::HistogramBase::Sample>(PermissionType::NUM));
157 } else { 143 } else {
158 UMA_HISTOGRAM_ENUMERATION( 144 UMA_HISTOGRAM_ENUMERATION(
159 "ContentSettings.PermissionRequested_InsecureOrigin", 145 "ContentSettings.PermissionRequested_InsecureOrigin",
160 static_cast<base::HistogramBase::Sample>(permission), 146 static_cast<base::HistogramBase::Sample>(permission),
161 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); 147 static_cast<base::HistogramBase::Sample>(PermissionType::NUM));
162 } 148 }
163
164 // In order to gauge the compatibility risk of implementing an improved
165 // iframe permissions security model, we would like to know the ratio of
166 // same-origin to cross-origin permission requests. Our estimate of this
167 // ratio could be somewhat biased by repeated requests coming from a
168 // single frame, but we expect this to be insignificant.
169 if (requesting_origin.GetOrigin() != embedding_origin.GetOrigin()) {
170 PermissionManager* manager = PermissionManager::Get(profile);
171 if (!manager)
172 return;
173 blink::mojom::PermissionStatus embedding_permission_status =
174 manager->GetPermissionStatus(content_type, embedding_origin,
175 embedding_origin);
176
177 base::HistogramBase* histogram = base::LinearHistogram::FactoryGet(
178 "Permissions.Requested.CrossOrigin_" +
179 PermissionUtil::GetPermissionString(content_type),
180 1, static_cast<int>(blink::mojom::PermissionStatus::LAST),
181 static_cast<int>(blink::mojom::PermissionStatus::LAST) + 1,
182 base::HistogramBase::kUmaTargetedHistogramFlag);
183 histogram->Add(static_cast<int>(embedding_permission_status));
184 } else {
185 UMA_HISTOGRAM_ENUMERATION(
186 "Permissions.Requested.SameOrigin",
187 static_cast<base::HistogramBase::Sample>(permission),
188 static_cast<base::HistogramBase::Sample>(PermissionType::NUM));
189 }
190 } 149 }
191 150
192 } // anonymous namespace 151 } // anonymous namespace
193 152
194 // PermissionReportInfo ------------------------------------------------------- 153 // PermissionReportInfo -------------------------------------------------------
195 PermissionReportInfo::PermissionReportInfo( 154 PermissionReportInfo::PermissionReportInfo(
196 const GURL& origin, 155 const GURL& origin,
197 ContentSettingsType permission, 156 ContentSettingsType permission,
198 PermissionAction action, 157 PermissionAction action,
199 PermissionSourceUI source_ui, 158 PermissionSourceUI source_ui,
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 PermissionPersistDecision::UNSPECIFIED, 645 PermissionPersistDecision::UNSPECIFIED,
687 autoblocker->GetDismissCount(requesting_origin, permission), 646 autoblocker->GetDismissCount(requesting_origin, permission),
688 autoblocker->GetIgnoreCount(requesting_origin, permission)); 647 autoblocker->GetIgnoreCount(requesting_origin, permission));
689 g_browser_process->safe_browsing_service() 648 g_browser_process->safe_browsing_service()
690 ->ui_manager()->ReportPermissionAction(report_info); 649 ->ui_manager()->ReportPermissionAction(report_info);
691 } 650 }
692 651
693 bool secure_origin = content::IsOriginSecure(requesting_origin); 652 bool secure_origin = content::IsOriginSecure(requesting_origin);
694 653
695 switch (permission) { 654 switch (permission) {
655 // Geolocation, MidiSysEx, Push, Durable Storage, and Media permissions are
656 // disabled on insecure origins, so there's no need to record metrics for
657 // secure/insecue.
696 case CONTENT_SETTINGS_TYPE_GEOLOCATION: 658 case CONTENT_SETTINGS_TYPE_GEOLOCATION:
697 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Geolocation", 659 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.Geolocation",
698 "Permissions.Action.SecureOrigin.Geolocation", 660 static_cast<int>(action),
699 "Permissions.Action.InsecureOrigin.Geolocation", 661 static_cast<int>(PermissionAction::NUM));
700 action);
701 break; 662 break;
702 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 663 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
703 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Notifications", 664 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Notifications",
704 "Permissions.Action.SecureOrigin.Notifications", 665 "Permissions.Action.SecureOrigin.Notifications",
705 "Permissions.Action.InsecureOrigin.Notifications", 666 "Permissions.Action.InsecureOrigin.Notifications",
706 action); 667 action);
707 break; 668 break;
708 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: 669 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
709 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.MidiSysEx", 670 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.MidiSysEx",
710 "Permissions.Action.SecureOrigin.MidiSysEx", 671 static_cast<int>(action),
711 "Permissions.Action.InsecureOrigin.MidiSysEx", 672 static_cast<int>(PermissionAction::NUM));
712 action);
713 break; 673 break;
714 case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING: 674 case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING:
715 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.PushMessaging", 675 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.PushMessaging",
716 "Permissions.Action.SecureOrigin.PushMessaging", 676 static_cast<int>(action),
717 "Permissions.Action.InsecureOrigin.PushMessaging", 677 static_cast<int>(PermissionAction::NUM));
718 action);
719 break; 678 break;
720 case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER: 679 case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER:
721 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.ProtectedMedia", 680 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.ProtectedMedia",
722 "Permissions.Action.SecureOrigin.ProtectedMedia", 681 "Permissions.Action.SecureOrigin.ProtectedMedia",
723 "Permissions.Action.InsecureOrigin.ProtectedMedia", 682 "Permissions.Action.InsecureOrigin.ProtectedMedia",
724 action); 683 action);
725 break; 684 break;
726 case CONTENT_SETTINGS_TYPE_DURABLE_STORAGE: 685 case CONTENT_SETTINGS_TYPE_DURABLE_STORAGE:
727 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.DurableStorage", 686 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.DurableStorage",
728 "Permissions.Action.SecureOrigin.DurableStorage", 687 static_cast<int>(action),
729 "Permissions.Action.InsecureOrigin.DurableStorage", 688 static_cast<int>(PermissionAction::NUM));
730 action);
731 break; 689 break;
732 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC: 690 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC:
733 // Media permissions are disabled on insecure origins, so there's no
734 // need to record metrics for secure/insecue.
735 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.AudioCapture", 691 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.AudioCapture",
736 static_cast<int>(action), 692 static_cast<int>(action),
737 static_cast<int>(PermissionAction::NUM)); 693 static_cast<int>(PermissionAction::NUM));
738 break; 694 break;
739 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: 695 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA:
740 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.VideoCapture", 696 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.VideoCapture",
741 static_cast<int>(action), 697 static_cast<int>(action),
742 static_cast<int>(PermissionAction::NUM)); 698 static_cast<int>(PermissionAction::NUM));
743 break; 699 break;
744 case CONTENT_SETTINGS_TYPE_PLUGINS: 700 case CONTENT_SETTINGS_TYPE_PLUGINS:
745 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Flash", 701 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Flash",
746 "Permissions.Action.SecureOrigin.Flash", 702 "Permissions.Action.SecureOrigin.Flash",
747 "Permissions.Action.InsecureOrigin.Flash", action); 703 "Permissions.Action.InsecureOrigin.Flash", action);
748 break; 704 break;
749 // The user is not prompted for these permissions, thus there is no 705 // The user is not prompted for these permissions, thus there is no
750 // permission action recorded for them. 706 // permission action recorded for them.
751 default: 707 default:
752 NOTREACHED() << "PERMISSION " 708 NOTREACHED() << "PERMISSION "
753 << PermissionUtil::GetPermissionString(permission) 709 << PermissionUtil::GetPermissionString(permission)
754 << " not accounted for"; 710 << " not accounted for";
755 } 711 }
756 712
757 // Retrieve the name of the RAPPOR metric. Currently, the new metric name is 713 const std::string rappor_metric = GetRapporMetric(permission, action);
758 // the deprecated name with "2" on the end, e.g.
759 // ContentSettings.PermissionActions_Geolocation.Granted.Url2. For simplicity,
760 // we retrieve the deprecated name and append the "2" for the new name.
761 // TODO(dominickn): remove the deprecated metric and replace it solely with
762 // the new one in GetRapporMetric - crbug.com/605836.
763 const std::string deprecated_metric = GetRapporMetric(permission, action);
764 rappor::RapporServiceImpl* rappor_service = 714 rappor::RapporServiceImpl* rappor_service =
765 g_browser_process->rappor_service(); 715 g_browser_process->rappor_service();
766 if (!deprecated_metric.empty() && rappor_service) { 716 if (!rappor_metric.empty() && rappor_service) {
767 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric,
768 requesting_origin);
769
770 std::string rappor_metric = deprecated_metric + "2";
771 rappor_service->RecordSampleString( 717 rappor_service->RecordSampleString(
772 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, 718 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE,
773 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); 719 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin));
774 } 720 }
775 } 721 }
OLDNEW
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698