Commit 80fdc9c2 authored by harrisonsean's avatar harrisonsean Committed by Commit Bot

[iOS][Safety Check] Add UMA metrics to safety check

Add overall interaction metrics (with actions) and individual
metrics for each of the checks.

Bug: 1078782
Change-Id: Ic778e9ef54e9f358e28eab5b4b7ac30a7ad5d99d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2442531Reviewed-by: default avatarRohit Rao <rohitrao@chromium.org>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Commit-Queue: Sean Harrison <harrisonsean@chromium.org>
Cr-Commit-Position: refs/heads/master@{#812912}
parent 803bd037
...@@ -71,6 +71,7 @@ include_rules = [ ...@@ -71,6 +71,7 @@ include_rules = [
"+components/reading_list", "+components/reading_list",
"+components/rlz", "+components/rlz",
"+components/safe_browsing", "+components/safe_browsing",
"+components/safety_check",
"+components/search", "+components/search",
"+components/search_engines", "+components/search_engines",
"+components/search_provider_logos", "+components/search_provider_logos",
......
...@@ -7,6 +7,24 @@ ...@@ -7,6 +7,24 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
// UMA histogram values for Safety check interactions. Some value don't apply to
// iOS. Note: this should stay in sync with SettingsSafetyCheckInteractions in
// enums.xml.
enum class SafetyCheckInteractions {
kStarted = 0,
kUpdatesRelaunch = 1,
kPasswordsManage = 2,
kSafeBrowsingManage = 3,
kExtensionsReview = 4,
kChromeCleanerReboot = 5,
kChromeCleanerReview = 6,
// New elements go above.
kMaxValue = kChromeCleanerReview,
};
// Address of page with safebrowsing settings pages.
extern NSString* const kSafeBrowsingSafetyCheckStringURL;
// The NSUserDefaults key for the timestamp of last time safety check found an // The NSUserDefaults key for the timestamp of last time safety check found an
// issue. // issue.
extern NSString* const kTimestampOfLastIssueFoundKey; extern NSString* const kTimestampOfLastIssueFoundKey;
......
...@@ -8,5 +8,8 @@ ...@@ -8,5 +8,8 @@
#error "This file requires ARC support." #error "This file requires ARC support."
#endif #endif
NSString* const kSafeBrowsingSafetyCheckStringURL =
@"chrome://settings/syncSetup";
NSString* const kTimestampOfLastIssueFoundKey = NSString* const kTimestampOfLastIssueFoundKey =
@"TimestampOfLastSafetyCheckIssueFound"; @"TimestampOfLastSafetyCheckIssueFound";
...@@ -6,6 +6,9 @@ ...@@ -6,6 +6,9 @@
#include "base/mac/foundation_util.h" #include "base/mac/foundation_util.h"
#include "base/memory/scoped_refptr.h" #include "base/memory/scoped_refptr.h"
#import "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/metrics/user_metrics.h"
#include "base/strings/sys_string_conversions.h" #include "base/strings/sys_string_conversions.h"
#include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/application_context.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
...@@ -24,6 +27,7 @@ ...@@ -24,6 +27,7 @@
#import "ios/chrome/browser/ui/settings/elements/enterprise_info_popover_view_controller.h" #import "ios/chrome/browser/ui/settings/elements/enterprise_info_popover_view_controller.h"
#import "ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.h" #import "ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.h"
#import "ios/chrome/browser/ui/settings/password/password_issues_coordinator.h" #import "ios/chrome/browser/ui/settings/password/password_issues_coordinator.h"
#import "ios/chrome/browser/ui/settings/safety_check/safety_check_constants.h"
#import "ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.h" #import "ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.h"
#import "ios/chrome/browser/ui/settings/safety_check/safety_check_navigation_commands.h" #import "ios/chrome/browser/ui/settings/safety_check/safety_check_navigation_commands.h"
#import "ios/chrome/browser/ui/settings/safety_check/safety_check_table_view_controller.h" #import "ios/chrome/browser/ui/settings/safety_check/safety_check_table_view_controller.h"
...@@ -124,7 +128,8 @@ ...@@ -124,7 +128,8 @@
- (void)didTapLinkURL:(NSURL*)URL { - (void)didTapLinkURL:(NSURL*)URL {
GURL convertedURL = net::GURLWithNSURL(URL); GURL convertedURL = net::GURLWithNSURL(URL);
const GURL safeBrowsingURL(kSafeBrowsingStringURL); const GURL safeBrowsingURL(
base::SysNSStringToUTF8(kSafeBrowsingSafetyCheckStringURL));
// Take the user to Sync and Google Services page in Bling instead of desktop // Take the user to Sync and Google Services page in Bling instead of desktop
// settings. // settings.
...@@ -189,6 +194,10 @@ ...@@ -189,6 +194,10 @@
- (void)showSafeBrowsingPreferencePage { - (void)showSafeBrowsingPreferencePage {
DCHECK(!self.googleServicesSettingsCoordinator); DCHECK(!self.googleServicesSettingsCoordinator);
base::RecordAction(
base::UserMetricsAction("Settings.SafetyCheck.ManageSafeBrowsing"));
base::UmaHistogramEnumeration("Settings.SafetyCheck.Interactions",
SafetyCheckInteractions::kSafeBrowsingManage);
self.googleServicesSettingsCoordinator = self.googleServicesSettingsCoordinator =
[[GoogleServicesSettingsCoordinator alloc] [[GoogleServicesSettingsCoordinator alloc]
initWithBaseNavigationController:self.baseNavigationController initWithBaseNavigationController:self.baseNavigationController
......
...@@ -5,6 +5,9 @@ ...@@ -5,6 +5,9 @@
#import "ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.h" #import "ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.h"
#include "base/mac/foundation_util.h" #include "base/mac/foundation_util.h"
#import "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/metrics/user_metrics.h"
#include "base/numerics/safe_conversions.h" #include "base/numerics/safe_conversions.h"
#include "base/strings/sys_string_conversions.h" #include "base/strings/sys_string_conversions.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
...@@ -15,6 +18,7 @@ ...@@ -15,6 +18,7 @@
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "components/safe_browsing/core/common/safe_browsing_prefs.h" #include "components/safe_browsing/core/common/safe_browsing_prefs.h"
#include "components/safe_browsing/core/features.h" #include "components/safe_browsing/core/features.h"
#include "components/safety_check/safety_check.h"
#include "components/version_info/version_info.h" #include "components/version_info/version_info.h"
#include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/application_context.h"
#import "ios/chrome/browser/omaha/omaha_service.h" #import "ios/chrome/browser/omaha/omaha_service.h"
...@@ -62,10 +66,16 @@ ...@@ -62,10 +66,16 @@
using l10n_util::GetNSString; using l10n_util::GetNSString;
using safe_browsing::kSafeBrowsingAvailableOnIOS; using safe_browsing::kSafeBrowsingAvailableOnIOS;
constexpr char kSafeBrowsingStringURL[] = "chrome://settings/syncSetup";
namespace { namespace {
constexpr char kSafetyCheckMetricsUpdates[] =
"Settings.SafetyCheck.UpdatesResult";
constexpr char kSafetyCheckMetricsPasswords[] =
"Settings.SafetyCheck.PasswordsResult";
constexpr char kSafetyCheckMetricsSafeBrowsing[] =
"Settings.SafetyCheck.SafeBrowsingResult";
constexpr char kSafetyCheckInteractions[] = "Settings.SafetyCheck.Interactions";
typedef NSArray<TableViewItem*>* ItemArray; typedef NSArray<TableViewItem*>* ItemArray;
typedef NS_ENUM(NSInteger, ItemType) { typedef NS_ENUM(NSInteger, ItemType) {
...@@ -385,6 +395,11 @@ typedef NS_ENUM(NSInteger, CheckStartStates) { ...@@ -385,6 +395,11 @@ typedef NS_ENUM(NSInteger, CheckStartStates) {
case UpdateCheckRowStateOutOfDate: { // i tap: Go to app store. case UpdateCheckRowStateOutOfDate: { // i tap: Go to app store.
NSString* updateLocation = [[NSUserDefaults standardUserDefaults] NSString* updateLocation = [[NSUserDefaults standardUserDefaults]
stringForKey:kIOSChromeUpgradeURLKey]; stringForKey:kIOSChromeUpgradeURLKey];
base::RecordAction(base::UserMetricsAction(
"Settings.SafetyCheck.RelaunchAfterUpdates"));
base::UmaHistogramEnumeration(
kSafetyCheckInteractions,
SafetyCheckInteractions::kUpdatesRelaunch);
[self.handler showUpdateAtLocation:updateLocation]; [self.handler showUpdateAtLocation:updateLocation];
break; break;
} }
...@@ -400,6 +415,11 @@ typedef NS_ENUM(NSInteger, CheckStartStates) { ...@@ -400,6 +415,11 @@ typedef NS_ENUM(NSInteger, CheckStartStates) {
case PasswordCheckRowStateError: // i tap: Show error popover. case PasswordCheckRowStateError: // i tap: Show error popover.
break; break;
case PasswordCheckRowStateUnSafe: // Go to password issues page. case PasswordCheckRowStateUnSafe: // Go to password issues page.
base::RecordAction(
base::UserMetricsAction("Settings.SafetyCheck.ManagePasswords"));
base::UmaHistogramEnumeration(
kSafetyCheckInteractions,
SafetyCheckInteractions::kPasswordsManage);
[self.handler showPasswordIssuesPage]; [self.handler showPasswordIssuesPage];
break; break;
} }
...@@ -477,7 +497,8 @@ typedef NS_ENUM(NSInteger, CheckStartStates) { ...@@ -477,7 +497,8 @@ typedef NS_ENUM(NSInteger, CheckStartStates) {
case SafeBrowsingItemType: { case SafeBrowsingItemType: {
NSString* message = l10n_util::GetNSString( NSString* message = l10n_util::GetNSString(
IDS_IOS_SETTINGS_SAFETY_CHECK_SAFE_BROWSING_DISABLED_INFO); IDS_IOS_SETTINGS_SAFETY_CHECK_SAFE_BROWSING_DISABLED_INFO);
GURL safeBrowsingURL(kSafeBrowsingStringURL); GURL safeBrowsingURL(
base::SysNSStringToUTF8(kSafeBrowsingSafetyCheckStringURL));
return [self attributedStringWithText:message link:safeBrowsingURL]; return [self attributedStringWithText:message link:safeBrowsingURL];
} }
case UpdateItemType: case UpdateItemType:
...@@ -497,27 +518,56 @@ typedef NS_ENUM(NSInteger, CheckStartStates) { ...@@ -497,27 +518,56 @@ typedef NS_ENUM(NSInteger, CheckStartStates) {
self.currentPasswordCheckState == PasswordCheckState::kRunning; self.currentPasswordCheckState == PasswordCheckState::kRunning;
self.currentPasswordCheckState = newState; self.currentPasswordCheckState = newState;
BOOL noCompromisedPasswords =
self.passwordCheckManager->GetCompromisedCredentials().empty();
switch (self.currentPasswordCheckState) { switch (self.currentPasswordCheckState) {
case PasswordCheckState::kRunning: case PasswordCheckState::kRunning:
return PasswordCheckRowStateRunning; return PasswordCheckRowStateRunning;
case PasswordCheckState::kNoPasswords: case PasswordCheckState::kNoPasswords:
return PasswordCheckRowStateDefault; return PasswordCheckRowStateDefault;
case PasswordCheckState::kSignedOut: case PasswordCheckState::kSignedOut:
base::UmaHistogramEnumeration(
kSafetyCheckMetricsPasswords,
safety_check::SafetyCheck::PasswordsStatus::kSignedOut);
return noCompromisedPasswords ? PasswordCheckRowStateError
: PasswordCheckRowStateUnSafe;
case PasswordCheckState::kOffline: case PasswordCheckState::kOffline:
base::UmaHistogramEnumeration(
kSafetyCheckMetricsPasswords,
safety_check::SafetyCheck::PasswordsStatus::kOffline);
return noCompromisedPasswords ? PasswordCheckRowStateError
: PasswordCheckRowStateUnSafe;
case PasswordCheckState::kQuotaLimit: case PasswordCheckState::kQuotaLimit:
base::UmaHistogramEnumeration(
kSafetyCheckMetricsPasswords,
safety_check::SafetyCheck::PasswordsStatus::kQuotaLimit);
return noCompromisedPasswords ? PasswordCheckRowStateError
: PasswordCheckRowStateUnSafe;
case PasswordCheckState::kOther: case PasswordCheckState::kOther:
return self.passwordCheckManager->GetCompromisedCredentials().empty() base::UmaHistogramEnumeration(
? PasswordCheckRowStateError kSafetyCheckMetricsPasswords,
: PasswordCheckRowStateUnSafe; safety_check::SafetyCheck::PasswordsStatus::kError);
return noCompromisedPasswords ? PasswordCheckRowStateError
: PasswordCheckRowStateUnSafe;
case PasswordCheckState::kCanceled: case PasswordCheckState::kCanceled:
case PasswordCheckState::kIdle: { case PasswordCheckState::kIdle: {
if (!self.passwordCheckManager->GetCompromisedCredentials().empty()) { if (noCompromisedPasswords) {
base::UmaHistogramEnumeration(
kSafetyCheckMetricsPasswords,
safety_check::SafetyCheck::PasswordsStatus::kCompromisedExist);
return PasswordCheckRowStateUnSafe; return PasswordCheckRowStateUnSafe;
} else if (self.currentPasswordCheckState == PasswordCheckState::kIdle) { } else if (self.currentPasswordCheckState == PasswordCheckState::kIdle) {
// Safe state is only possible after the state transitioned from // Safe state is only possible after the state transitioned from
// kRunning to kIdle. // kRunning to kIdle.
return (wasRunning) ? PasswordCheckRowStateSafe if (wasRunning) {
: PasswordCheckRowStateDefault; base::UmaHistogramEnumeration(
kSafetyCheckMetricsPasswords,
safety_check::SafetyCheck::PasswordsStatus::kSafe);
return PasswordCheckRowStateSafe;
} else {
return PasswordCheckRowStateDefault;
}
} }
return PasswordCheckRowStateDefault; return PasswordCheckRowStateDefault;
} }
...@@ -666,6 +716,20 @@ typedef NS_ENUM(NSInteger, CheckStartStates) { ...@@ -666,6 +716,20 @@ typedef NS_ENUM(NSInteger, CheckStartStates) {
self.passwordCheckRowState = PasswordCheckRowStateRunning; self.passwordCheckRowState = PasswordCheckRowStateRunning;
self.safeBrowsingCheckRowState = SafeBrowsingCheckRowStateRunning; self.safeBrowsingCheckRowState = SafeBrowsingCheckRowStateRunning;
// Record all running.
base::RecordAction(base::UserMetricsAction("Settings.SafetyCheck.Start"));
base::UmaHistogramEnumeration(kSafetyCheckInteractions,
SafetyCheckInteractions::kStarted);
base::UmaHistogramEnumeration(
kSafetyCheckMetricsUpdates,
safety_check::SafetyCheck::UpdateStatus::kChecking);
base::UmaHistogramEnumeration(
kSafetyCheckMetricsPasswords,
safety_check::SafetyCheck::PasswordsStatus::kChecking);
base::UmaHistogramEnumeration(
kSafetyCheckMetricsSafeBrowsing,
safety_check::SafetyCheck::SafeBrowsingStatus::kChecking);
// Change checkStartItem to cancel state. // Change checkStartItem to cancel state.
self.checkStartState = CheckStartStateCancel; self.checkStartState = CheckStartStateCancel;
...@@ -712,14 +776,19 @@ typedef NS_ENUM(NSInteger, CheckStartStates) { ...@@ -712,14 +776,19 @@ typedef NS_ENUM(NSInteger, CheckStartStates) {
// a check. This if block below allows safety check to push the disabled // a check. This if block below allows safety check to push the disabled
// state after check now is pressed. // state after check now is pressed.
if (self.currentPasswordCheckState == PasswordCheckState::kNoPasswords) { if (self.currentPasswordCheckState == PasswordCheckState::kNoPasswords) {
self.passwordCheckRowState = PasswordCheckRowStateDisabled;
// Want to show the loading wheel momentarily. // Want to show the loading wheel momentarily.
dispatch_after( dispatch_after(
dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)),
dispatch_get_main_queue(), ^{ dispatch_get_main_queue(), ^{
// Check if the check was cancelled while waiting. // Check if the check was cancelled while waiting.
if (self.checksRemaining) if (self.checksRemaining) {
self.passwordCheckRowState = PasswordCheckRowStateDisabled;
[self reconfigurePasswordCheckItem]; [self reconfigurePasswordCheckItem];
base::UmaHistogramEnumeration(
kSafetyCheckMetricsPasswords,
safety_check::SafetyCheck::PasswordsStatus::kNoPasswords);
}
}); });
} else { } else {
self.passwordCheckManager->StartPasswordCheck(); self.passwordCheckManager->StartPasswordCheck();
...@@ -776,8 +845,11 @@ typedef NS_ENUM(NSInteger, CheckStartStates) { ...@@ -776,8 +845,11 @@ typedef NS_ENUM(NSInteger, CheckStartStates) {
- (void)handleUpdateCheckOffline { - (void)handleUpdateCheckOffline {
if (self.updateCheckRowState == UpdateCheckRowStateRunning) { if (self.updateCheckRowState == UpdateCheckRowStateRunning) {
self.updateCheckRowState = UpdateCheckRowStateNetError; self.updateCheckRowState = UpdateCheckRowStateNetError;
[self reconfigureUpdateCheckItem]; [self reconfigureUpdateCheckItem];
base::UmaHistogramEnumeration(
kSafetyCheckMetricsUpdates,
safety_check::SafetyCheck::UpdateStatus::kFailedOffline);
} }
} }
...@@ -788,6 +860,10 @@ typedef NS_ENUM(NSInteger, CheckStartStates) { ...@@ -788,6 +860,10 @@ typedef NS_ENUM(NSInteger, CheckStartStates) {
if (self.updateCheckRowState == UpdateCheckRowStateRunning) { if (self.updateCheckRowState == UpdateCheckRowStateRunning) {
self.updateCheckRowState = UpdateCheckRowStateOmahaError; self.updateCheckRowState = UpdateCheckRowStateOmahaError;
[self reconfigureUpdateCheckItem]; [self reconfigureUpdateCheckItem];
base::UmaHistogramEnumeration(
kSafetyCheckMetricsUpdates,
safety_check::SafetyCheck::UpdateStatus::kFailed);
} }
return; return;
} }
...@@ -799,8 +875,14 @@ typedef NS_ENUM(NSInteger, CheckStartStates) { ...@@ -799,8 +875,14 @@ typedef NS_ENUM(NSInteger, CheckStartStates) {
return; return;
} }
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
if (details.is_up_to_date) { if (details.is_up_to_date) {
self.updateCheckRowState = UpdateCheckRowStateUpToDate; self.updateCheckRowState = UpdateCheckRowStateUpToDate;
base::UmaHistogramEnumeration(
kSafetyCheckMetricsUpdates,
safety_check::SafetyCheck::UpdateStatus::kUpdated);
[defaults setBool:details.is_up_to_date forKey:kIOSChromeUpToDateKey];
} else { } else {
// upgradeURL and next_version are only set if not up to date. // upgradeURL and next_version are only set if not up to date.
const GURL& upgradeUrl = details.upgrade_url; const GURL& upgradeUrl = details.upgrade_url;
...@@ -808,6 +890,10 @@ typedef NS_ENUM(NSInteger, CheckStartStates) { ...@@ -808,6 +890,10 @@ typedef NS_ENUM(NSInteger, CheckStartStates) {
if (!upgradeUrl.is_valid()) { if (!upgradeUrl.is_valid()) {
self.updateCheckRowState = UpdateCheckRowStateOmahaError; self.updateCheckRowState = UpdateCheckRowStateOmahaError;
[self reconfigureUpdateCheckItem]; [self reconfigureUpdateCheckItem];
base::UmaHistogramEnumeration(
kSafetyCheckMetricsUpdates,
safety_check::SafetyCheck::UpdateStatus::kFailed);
return; return;
} }
...@@ -815,18 +901,26 @@ typedef NS_ENUM(NSInteger, CheckStartStates) { ...@@ -815,18 +901,26 @@ typedef NS_ENUM(NSInteger, CheckStartStates) {
!base::Version(details.next_version).IsValid()) { !base::Version(details.next_version).IsValid()) {
self.updateCheckRowState = UpdateCheckRowStateOmahaError; self.updateCheckRowState = UpdateCheckRowStateOmahaError;
[self reconfigureUpdateCheckItem]; [self reconfigureUpdateCheckItem];
base::UmaHistogramEnumeration(
kSafetyCheckMetricsUpdates,
safety_check::SafetyCheck::UpdateStatus::kFailed);
return; return;
} }
self.updateCheckRowState = UpdateCheckRowStateOutOfDate; self.updateCheckRowState = UpdateCheckRowStateOutOfDate;
// Valid results, update NSUserDefaults.
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
base::UmaHistogramEnumeration(
kSafetyCheckMetricsUpdates,
safety_check::SafetyCheck::UpdateStatus::kOutdated);
// Valid results, update all NSUserDefaults.
[defaults setValue:base::SysUTF8ToNSString(upgradeUrl.spec()) [defaults setValue:base::SysUTF8ToNSString(upgradeUrl.spec())
forKey:kIOSChromeUpgradeURLKey]; forKey:kIOSChromeUpgradeURLKey];
[defaults setValue:base::SysUTF8ToNSString(details.next_version) [defaults setValue:base::SysUTF8ToNSString(details.next_version)
forKey:kIOSChromeNextVersionKey]; forKey:kIOSChromeNextVersionKey];
[defaults setBool:details.is_up_to_date forKey:kIOSChromeUpToDateKey]; [defaults setBool:details.is_up_to_date forKey:kIOSChromeUpToDateKey];
// Treat the safety check finding the device out of date as if the update // Treat the safety check finding the device out of date as if the update
// infobar was just shown to not overshow the infobar to the user. // infobar was just shown to not overshow the infobar to the user.
[defaults setObject:[NSDate date] forKey:kLastInfobarDisplayTimeKey]; [defaults setObject:[NSDate date] forKey:kLastInfobarDisplayTimeKey];
...@@ -854,13 +948,24 @@ typedef NS_ENUM(NSInteger, CheckStartStates) { ...@@ -854,13 +948,24 @@ typedef NS_ENUM(NSInteger, CheckStartStates) {
// Performs the Safe Browsing check and triggers the display update/ // Performs the Safe Browsing check and triggers the display update/
- (void)checkAndReconfigureSafeBrowsingState { - (void)checkAndReconfigureSafeBrowsingState {
if (!self.safeBrowsingPreferenceManaged) { if (!self.safeBrowsingPreferenceManaged) {
self.safeBrowsingCheckRowState = self.safeBrowsingPreference.value if (self.safeBrowsingPreference.value) {
? SafeBrowsingCheckRowStateSafe self.safeBrowsingCheckRowState = SafeBrowsingCheckRowStateSafe;
: SafeBrowsingCheckRowStateUnsafe; base::UmaHistogramEnumeration(
kSafetyCheckMetricsSafeBrowsing,
safety_check::SafetyCheck::SafeBrowsingStatus::kEnabled);
} else {
self.safeBrowsingCheckRowState = SafeBrowsingCheckRowStateUnsafe;
base::UmaHistogramEnumeration(
kSafetyCheckMetricsSafeBrowsing,
safety_check::SafetyCheck::SafeBrowsingStatus::kDisabled);
}
} }
if (self.safeBrowsingCheckRowState == SafeBrowsingCheckRowStateUnsafe && if (self.safeBrowsingCheckRowState == SafeBrowsingCheckRowStateUnsafe &&
self.safeBrowsingPreferenceManaged) { self.safeBrowsingPreferenceManaged) {
self.safeBrowsingCheckRowState = SafeBrowsingCheckRowStateManaged; self.safeBrowsingCheckRowState = SafeBrowsingCheckRowStateManaged;
base::UmaHistogramEnumeration(
kSafetyCheckMetricsSafeBrowsing,
safety_check::SafetyCheck::SafeBrowsingStatus::kDisabledByAdmin);
} }
[self reconfigureSafeBrowsingCheckItem]; [self reconfigureSafeBrowsingCheckItem];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment