blob: 5cf2cc9148f70189779088674d20f1111b000941 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_SAFE_BROWSING_CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_STATS_H_
#define COMPONENTS_SAFE_BROWSING_CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_STATS_H_
#include "components/download/public/common/download_danger_type.h"
#include "components/download/public/common/download_stats.h"
#include "components/safe_browsing/content/common/file_type_policies.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace base {
class FilePath;
class Time;
} // namespace base
// The functions in this file are for logging UMA metrics related to downloads.
namespace safe_browsing {
// Enum representing different attributes for file types that are allowed on
// user gestures. This enum is used for logging UMA histograms, so entries must
// not be removed or reordered. Please update the enums.xml file if new values
// are added.
enum class UserGestureFileTypeAttributes {
// The total number of checks. This value should be used as the denominator
// when calculating the percentage of a specific attribute below.
TOTAL_TYPE_CHECKED = 0,
// The download is initiated with a user gesture.
HAS_USER_GESTURE = 1,
// The referrer of the download was visited before.
HAS_REFERRER_VISIT = 2,
// The referrer of the download is initiated with a user gesture and was
// visited before.
// The download is considered safe in this case.
HAS_BOTH_USER_GESTURE_AND_REFERRER_VISIT = 3,
// The user has bypassed download warnings before.
HAS_BYPASSED_DOWNLOAD_WARNING = 4,
kMaxValue = HAS_BYPASSED_DOWNLOAD_WARNING
};
// Records that a download warning was shown on the download shelf.
void RecordDangerousDownloadWarningShown(
download::DownloadDangerType danger_type,
const base::FilePath& file_path,
bool is_https,
bool has_user_gesture);
// Records that a download warning was bypassed from the download shelf or the
// chrome://downloads page.
void RecordDangerousDownloadWarningBypassed(
download::DownloadDangerType danger_type,
const base::FilePath& file_path,
bool is_https,
bool has_user_gesture);
// Records that a download was opened from the download shelf or the
// chrome://downloads page.
void RecordDownloadOpened(download::DownloadDangerType danger_type,
download::DownloadContent download_content,
base::Time download_opened_time,
base::Time download_end_time,
bool show_download_in_folder);
// Records that latency between when a download was opened (via the shelf or
// chrome://downloads) by extension type.
void RecordDownloadOpenedFileType(download::DownloadContent download_content,
base::Time download_opened_time,
base::Time download_end_time);
// Records the attributes of a download.
void RecordDownloadFileTypeAttributes(
DownloadFileType::DangerLevel danger_level,
bool has_user_gesture,
bool visited_referrer_before,
absl::optional<base::Time> latest_bypass_time);
} // namespace safe_browsing
#endif // COMPONENTS_SAFE_BROWSING_CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_STATS_H_