blob: 0e58a66bc0e686d9b9b47a9a5708722e587caf6d [file]
// 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.
#ifndef CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_CONTROLLER_H_
#define CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_CONTROLLER_H_
#include <memory>
#include "base/functional/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/default_browser/default_browser_setter.h"
#include "chrome/browser/shell_integration.h"
namespace default_browser {
using DefaultBrowserControllerCompletionCallback =
base::OnceCallback<void(DefaultBrowserState)>;
// UMA enum for tracking entrypoints to Default Browser settings flows.
// These values are persisted to logs. Entries should not be
// renumbered and numeric values should never be reused.
//
// LINT.IfChange(DefaultBrowserEntrypointType)
enum class DefaultBrowserEntrypointType {
// Infobar shown during startup when Chrome is not the default browser.
kStartupInfobar = 0,
// Default browser Settings page UI.
kSettingsPage = 1,
// Default browser change detected os notification.
kChangeDetectedNotification = 2,
// Bubble dialog anchored to app menu button.
kBubbleDialog = 3,
// Modal dialog with settings illustration.
kModalDialogWithSettingsIllustration = 4,
// Modal dialog without settings illustration.
kModalDialogWithoutSettingsIllustration = 5,
kMaxValue = kModalDialogWithoutSettingsIllustration,
};
// LINT.ThenChange(//tools/metrics/histograms/metadata/ui/histograms.xml:DefaultBrowserEntrypointType)
// UMA enum for tracking interactions a user can have when presented with
// default browser setting methods.
// These values are persisted to logs. Entries should not be
// renumbered and numeric values should never be reused.
//
// LINT.IfChange(DefaultBrowserInteractionType)
enum class DefaultBrowserInteractionType {
kAccepted = 0,
kIgnored = 1,
kDismissed = 2,
kMaxValue = kDismissed
};
// LINT.ThenChange(//tools/metrics/histograms/metadata/ui/enums.xml:DefaultBrowserUserInteraction)
// DefaultBrowserController acts a bridge between UI and the setter, is
// responsible for managing the setter based on user input, and recording
// metrics.
class DefaultBrowserController {
public:
DefaultBrowserController(std::unique_ptr<DefaultBrowserSetter> setter,
DefaultBrowserEntrypointType ui_entrypoint);
~DefaultBrowserController();
DefaultBrowserController(const DefaultBrowserController&) = delete;
DefaultBrowserController& operator=(const DefaultBrowserController&) = delete;
DefaultBrowserSetterType GetSetterType() const;
// Called by UI based on user interactions.
void OnShown();
void OnAccepted(
DefaultBrowserControllerCompletionCallback on_setter_completion_callback);
void OnIgnored();
void OnDismissed();
private:
void OnSetterExecutionComplete(DefaultBrowserState default_browser_state);
void IncrementShownMetric();
void RecordInteractionMetric(DefaultBrowserInteractionType interaction);
void RecordResultMetric(bool success);
// Stores the callback that gets triggered when setter completes execution.
DefaultBrowserControllerCompletionCallback completion_callback_;
std::unique_ptr<DefaultBrowserSetter> setter_;
// Stores the UI entrypoint type that requested this controller.
const DefaultBrowserEntrypointType ui_entrypoint_;
base::WeakPtrFactory<DefaultBrowserController> weak_ptr_factory_{this};
};
} // namespace default_browser
#endif // CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_CONTROLLER_H_