#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)>;
enum class DefaultBrowserEntrypointType {
kStartupInfobar = 0,
kSettingsPage = 1,
kMaxValue = kSettingsPage
};
enum class DefaultBrowserInteractionType {
kAccepted = 0,
kIgnored = 1,
kDismissed = 2,
kMaxValue = kDismissed
};
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;
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);
DefaultBrowserControllerCompletionCallback completion_callback_;
std::unique_ptr<DefaultBrowserSetter> setter_;
const DefaultBrowserEntrypointType ui_entrypoint_;
base::WeakPtrFactory<DefaultBrowserController> weak_ptr_factory_{this};
};
}
#endif