blob: 8becd4f4bad75b788f31a66c79979537d65389c1 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/default_browser/default_browser_controller.h"
#include <string>
#include <utility>
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/metrics/histogram_functions.h"
#include "base/strings/string_util.h"
#include "chrome/browser/default_browser/default_browser_setter.h"
namespace default_browser {
namespace {
std::string GetHistogramName(const std::string& suffix,
const std::string& metric_type) {
return base::JoinString({"DefaultBrowser", suffix, metric_type}, ".");
}
std::string SetterTypeToString(DefaultBrowserSetterType setter_type) {
switch (setter_type) {
case DefaultBrowserSetterType::kShellIntegration:
return "ShellIntegration";
default:
NOTREACHED();
}
}
std::string UiEntrypointTypeToString(
DefaultBrowserEntrypointType ui_entrypoint) {
switch (ui_entrypoint) {
case DefaultBrowserEntrypointType::kSettingsPage:
return "SettingsPage";
case DefaultBrowserEntrypointType::kStartupInfobar:
return "InfoBar";
default:
NOTREACHED();
}
}
} // namespace
DefaultBrowserController::DefaultBrowserController(
std::unique_ptr<DefaultBrowserSetter> setter,
DefaultBrowserEntrypointType ui_entrypoint)
: setter_(std::move(setter)), ui_entrypoint_(ui_entrypoint) {}
DefaultBrowserController::~DefaultBrowserController() = default;
DefaultBrowserSetterType DefaultBrowserController::GetSetterType() const {
return setter_->GetType();
}
void DefaultBrowserController::OnShown() {
IncrementShownMetric();
}
void DefaultBrowserController::OnAccepted(
DefaultBrowserControllerCompletionCallback completion_callback) {
RecordInteractionMetric(DefaultBrowserInteractionType::kAccepted);
completion_callback_ = std::move(completion_callback);
setter_->Execute(
base::BindOnce(&DefaultBrowserController::OnSetterExecutionComplete,
weak_ptr_factory_.GetWeakPtr()));
}
void DefaultBrowserController::OnIgnored() {
RecordInteractionMetric(DefaultBrowserInteractionType::kIgnored);
}
void DefaultBrowserController::OnDismissed() {
RecordInteractionMetric(DefaultBrowserInteractionType::kDismissed);
}
void DefaultBrowserController::OnSetterExecutionComplete(
DefaultBrowserState default_browser_state) {
RecordResultMetric(default_browser_state == DefaultBrowserState::IS_DEFAULT);
std::move(completion_callback_).Run(default_browser_state);
}
void DefaultBrowserController::IncrementShownMetric() {
base::UmaHistogramCounts100(
GetHistogramName(UiEntrypointTypeToString(ui_entrypoint_), "Shown"), 1);
}
void DefaultBrowserController::RecordInteractionMetric(
DefaultBrowserInteractionType interaction) {
base::UmaHistogramEnumeration(
GetHistogramName(UiEntrypointTypeToString(ui_entrypoint_), "Interaction"),
interaction);
}
void DefaultBrowserController::RecordResultMetric(bool success) {
base::UmaHistogramBoolean(
GetHistogramName(SetterTypeToString(GetSetterType()), "Result"), success);
}
} // namespace default_browser