#ifndef CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_MANAGER_H_
#define CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_MANAGER_H_
#include <memory>
#include <string>
#include "base/callback_list.h"
#include "base/functional/callback_forward.h"
#include "chrome/browser/default_browser/default_browser_controller.h"
namespace default_browser {
class DefaultBrowserMonitor;
using DefaultBrowserCheckCompletionCallback =
base::OnceCallback<void(DefaultBrowserState)>;
class DefaultBrowserManager {
public:
class ShellDelegate {
public:
virtual ~ShellDelegate() = 0;
virtual void StartCheckIsDefault(
shell_integration::DefaultWebClientWorkerCallback callback) = 0;
#if BUILDFLAG(IS_WIN)
virtual void StartCheckDefaultClientProgId(
const std::string& scheme,
base::OnceCallback<void(const std::u16string&)> callback) = 0;
#endif
};
explicit DefaultBrowserManager(std::unique_ptr<ShellDelegate> shell_delegate);
~DefaultBrowserManager();
DefaultBrowserManager(const DefaultBrowserManager&) = delete;
DefaultBrowserManager& operator=(const DefaultBrowserManager&) = delete;
static std::unique_ptr<ShellDelegate> CreateDefaultDelegate();
static std::unique_ptr<DefaultBrowserController> CreateControllerFor(
DefaultBrowserEntrypointType ui_entrypoint);
void GetDefaultBrowserState(DefaultBrowserCheckCompletionCallback callback);
base::CallbackListSubscription RegisterDefaultBrowserChanged(
base::RepeatingClosure callback);
private:
void OnDefaultBrowserCheckResult(
default_browser::DefaultBrowserCheckCompletionCallback callback,
default_browser::DefaultBrowserState default_state);
const std::unique_ptr<ShellDelegate> shell_delegate_;
std::unique_ptr<DefaultBrowserMonitor> monitor_;
};
}
#endif