// 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. #ifndef COMPONENTS_SECURITY_INTERSTITIALS_CORE_HTTPS_ONLY_MODE_METRICS_H_ #define COMPONENTS_SECURITY_INTERSTITIALS_CORE_HTTPS_ONLY_MODE_METRICS_H_ #include <cstddef> #include "base/time/time.h" namespace security_interstitials::https_only_mode { // The main histogram that records events about HTTPS-First Mode and HTTPS // Upgrades. extern const char kEventHistogram[]; // Same as kEventHistogram, but only recorded if the event happened on a // navigation where HFM was enabled due to the site engagement heuristic. extern const char kEventHistogramWithEngagementHeuristic[]; extern const char kNavigationRequestSecurityLevelHistogram[]; // Histogram that records enabled/disabled states for sites. If HFM gets enabled // or disabled due to Site Engagement on a site, records an entry. extern const char kSiteEngagementHeuristicStateHistogram[]; // Histogram that records the current number of host that have HFM enabled due // to the site engagement heuristic. Includes hosts that have HTTP allowed. extern const char kSiteEngagementHeuristicHostCountHistogram[]; // Histogram that records the accumulated number of host that have HFM enabled // at some point due to the site engagement heuristic. Includes hosts that have // HTTP allowed. extern const char kSiteEngagementHeuristicAccumulatedHostCountHistogram[]; // Histogram that records the duration a host has HFM enabled due to the site // engagement heuristic. Only recorded for hosts removed from the HFM list. // Recorded at the time of navigation when HFM upgrades trigger. extern const char kSiteEngagementHeuristicEnforcementDurationHistogram[]; // Histogram that records why HTTPS-First Mode interstitial was shown. Only one // reason is recorded per interstitial. extern const char kInterstitialReasonHistogram[]; // Recorded by HTTPS-First Mode and HTTPS-Upgrade logic when a navigation is // upgraded, or is eligible to be upgraded but wasn't. // // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class Event { … }; // Recorded by HTTPS-Upgrade logic when each step in a navigation request is // observed, recording information about the protocol used. For a request with // two redirects, this will be recorded three times (once for each redirect, // then for the final URL). // // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. Values may be added to offer greater // specificity in the future. Keep in sync with NavigationRequestSecurityLevel // in enums.xml. enum class NavigationRequestSecurityLevel { … }; // Recorded by the Site Engagement Heuristic logic, recording whether HFM should // be enabled on a site due to its HTTP and HTTPS site engagement scores. Only // recorded if the enabled/disabled state changes. // // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. Values may be added to offer greater // specificity in the future. Keep in sync with SiteEngagementHeuristicState // in enums.xml. enum class SiteEngagementHeuristicState { … }; // Stores the parameters to decide whether to show an interstitial for the // current site. // TODO(crbug.com/40937027): Consider making this a variant used to track which // specific feature is being applied to simplify code reasoning elsewhere. struct HttpInterstitialState { … }; // Helper to record an HTTPS-First Mode navigation event. void RecordHttpsFirstModeNavigation( Event event, const HttpInterstitialState& interstitial_state); // Helper to record a navigation request security level. void RecordNavigationRequestSecurityLevel(NavigationRequestSecurityLevel level); // Helper to record Site Engagement Heuristic enabled state. void RecordSiteEngagementHeuristicState(SiteEngagementHeuristicState state); // Helper to record metrics about the number of hosts affected by the Site // Engagement Heuristic. // `current_count` is the number of hosts that currently have HFM enabled. // `accumulated_count` is the number of accumulated hosts that had HFM enabled // at some point. void RecordSiteEngagementHeuristicCurrentHostCounts(size_t current_count, size_t accumulated_count); void RecordSiteEngagementHeuristicEnforcementDuration( base::TimeDelta enforcement_duration); // Recorded by the HTTPS-First Mode logic when showing the HTTPS-First Mode // interstitial. Only one reason is recorded even though multiple flags may be // true for the given navigation (e.g. Site Engagement + Advanced Protection). // // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. Values may be added to offer greater // specificity in the future. Keep in sync with HttpsFirstModeInterstitialReason // in security/enums.xml. enum class InterstitialReason { … }; void RecordInterstitialReason(const HttpInterstitialState& interstitial_state); } // namespace security_interstitials::https_only_mode #endif // COMPONENTS_SECURITY_INTERSTITIALS_CORE_HTTPS_ONLY_MODE_METRICS_H_