1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/security_interstitials/core/https_only_mode_metrics.h"
#include "base/metrics/histogram_functions.h"
namespace security_interstitials::https_only_mode {
namespace {
InterstitialReason GetInterstitialReason(
const HttpInterstitialState& interstitial_state) {
// This should follow the order in
// PopulateHttpsOnlyModeStringsForBlockingPage() in
// https_only_mode_ui_utils.cc.
if (interstitial_state.enabled_by_advanced_protection) {
return InterstitialReason::kAdvancedProtection;
}
if (interstitial_state.enabled_by_engagement_heuristic) {
return InterstitialReason::kSiteEngagementHeuristic;
}
if (interstitial_state.enabled_by_typically_secure_browsing) {
return InterstitialReason::kTypicallySecureUserHeuristic;
}
if (interstitial_state.enabled_by_pref) {
return InterstitialReason::kPref;
}
if (interstitial_state.enabled_by_incognito) {
return InterstitialReason::kIncognito;
}
if (interstitial_state.enabled_in_balanced_mode) {
return InterstitialReason::kBalanced;
}
return InterstitialReason::kUnknown;
}
} // namespace
const char kEventHistogram[] = "Security.HttpsFirstMode.NavigationEvent";
const char kEventHistogramWithEngagementHeuristic[] =
"Security.HttpsFirstModeWithEngagementHeuristic.NavigationEvent";
const char kNavigationRequestSecurityLevelHistogram[] =
"Security.NavigationRequestSecurityLevel";
const char kSiteEngagementHeuristicStateHistogram[] =
"Security.HttpsFirstModeWithEngagementHeuristic.State";
const char kSiteEngagementHeuristicHostCountHistogram[] =
"Security.HttpsFirstModeWithEngagementHeuristic.HostCount";
const char kSiteEngagementHeuristicAccumulatedHostCountHistogram[] =
"Security.HttpsFirstModeWithEngagementHeuristic.AccumulatedHostCount";
const char kSiteEngagementHeuristicEnforcementDurationHistogram[] =
"Security.HttpsFirstModeWithEngagementHeuristic.Duration";
const char kInterstitialReasonHistogram[] =
"Security.HttpsFirstMode.InterstitialReason";
// TODO(crbug.com/40248833): Rename these metrics now that they apply to both
// HTTPS-First Mode and HTTPS Upgrades.
void RecordHttpsFirstModeNavigation(
Event event,
const HttpInterstitialState& interstitial_state) {
base::UmaHistogramEnumeration(kEventHistogram, event);
if (!interstitial_state.enabled_by_pref &&
!interstitial_state.enabled_in_balanced_mode &&
interstitial_state.enabled_by_engagement_heuristic) {
// Only record the engagement heuristic histogram if HTTPS-First Mode wasn't
// enabled by the UI setting.
base::UmaHistogramEnumeration(kEventHistogramWithEngagementHeuristic,
event);
}
}
void RecordNavigationRequestSecurityLevel(
NavigationRequestSecurityLevel level) {
base::UmaHistogramEnumeration(kNavigationRequestSecurityLevelHistogram,
level);
}
void RecordSiteEngagementHeuristicState(SiteEngagementHeuristicState state) {
base::UmaHistogramEnumeration(kSiteEngagementHeuristicStateHistogram, state);
}
void RecordSiteEngagementHeuristicCurrentHostCounts(size_t current_count,
size_t accumulated_count) {
base::UmaHistogramCounts1000(kSiteEngagementHeuristicHostCountHistogram,
current_count);
base::UmaHistogramCounts1000(
kSiteEngagementHeuristicAccumulatedHostCountHistogram, accumulated_count);
}
void RecordSiteEngagementHeuristicEnforcementDuration(
base::TimeDelta enforcement_duration) {
base::UmaHistogramTimes(kSiteEngagementHeuristicEnforcementDurationHistogram,
enforcement_duration);
}
void RecordInterstitialReason(const HttpInterstitialState& interstitial_state) {
base::UmaHistogramEnumeration(kInterstitialReasonHistogram,
GetInterstitialReason(interstitial_state));
}
} // namespace security_interstitials::https_only_mode
|