blob: e10282af91c661a6eaf3a697b2196ac2db8d23d3 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_TELEMETRY_SERVICE_VERDICT_HANDLER_H_
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_TELEMETRY_SERVICE_VERDICT_HANDLER_H_
#include "base/memory/raw_ptr.h"
#include "chrome/browser/extensions/blocklist.h"
#include "extensions/browser/extension_registry.h"
namespace extensions {
class ExtensionPrefs;
class ExtensionService;
// These values are logged to UMA. Entries should not be renumbered and
// numeric values should never be reused. Please keep in sync with
// "SBExtensionTelemetryDisableReason" in
// src/tools/metrics/histograms/enums.xml.
enum class ExtensionTelemetryDisableReason {
kUnknown = 0,
kMalware = 1,
kMaxValue = kMalware
};
// Manages the Extension Telemetry service verdict states in extension pref.
class ExtensionTelemetryServiceVerdictHandler {
public:
ExtensionTelemetryServiceVerdictHandler(ExtensionPrefs* extension_prefs,
ExtensionRegistry* registry,
ExtensionService* extension_service);
ExtensionTelemetryServiceVerdictHandler(
const ExtensionTelemetryServiceVerdictHandler&) = delete;
ExtensionTelemetryServiceVerdictHandler& operator=(
const ExtensionTelemetryServiceVerdictHandler&) = delete;
~ExtensionTelemetryServiceVerdictHandler() = default;
// Performs action based on verdicts received from the Extension Telemetry
// server. Currently, the verdicts are limited to off-store extensions. It's
// possible that the action is already performed for a verdict, in this case,
// nothing is done.
//
// |state_map| represents the converted blocklist states from verdicts. For
// each state, the following action is performed:
// MALWARE - Unloads the extension and adds it to the Extension Telemetry
// service malware blocklist.
// NOT_BLOCKLISTED - Reloads the extension and removes it from the Extension
// Telemetry service malware blocklist.
void PerformActionBasedOnVerdicts(
const Blocklist::BlocklistStateMap& state_map);
private:
raw_ptr<ExtensionPrefs> extension_prefs_ = nullptr;
raw_ptr<ExtensionRegistry> registry_ = nullptr;
raw_ptr<ExtensionService> extension_service_ = nullptr;
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_TELEMETRY_SERVICE_VERDICT_HANDLER_H_