blob: bbc5069c9f3dfb888ca1b3a29464bad38f109d45 [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.
#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)>;
// DefaultBrowserManager is the long-lived central coordinator and the public
// API for the default browser framework. It is responsible for selecting the
// correct setter and creating a controller, and provide general APIs for
// default-browser utilities.
class DefaultBrowserManager {
public:
// Delegate for performing shell-dependent operations.
class ShellDelegate {
public:
virtual ~ShellDelegate() = 0;
// Asynchronously checks whether the browser is the default.
virtual void StartCheckIsDefault(
shell_integration::DefaultWebClientWorkerCallback callback) = 0;
#if BUILDFLAG(IS_WIN)
// Asynchronously fetches the program ID of the default client for the
// given `scheme`.
virtual void StartCheckDefaultClientProgId(
const std::string& scheme,
base::OnceCallback<void(const std::u16string&)> callback) = 0;
#endif // BUILDFLAG(IS_WIN)
};
explicit DefaultBrowserManager(std::unique_ptr<ShellDelegate> shell_delegate);
~DefaultBrowserManager();
DefaultBrowserManager(const DefaultBrowserManager&) = delete;
DefaultBrowserManager& operator=(const DefaultBrowserManager&) = delete;
static std::unique_ptr<ShellDelegate> CreateDefaultDelegate();
// Selects an appropriate setter, and create and returns a unique pointer to a
// controller instance.
static std::unique_ptr<DefaultBrowserController> CreateControllerFor(
DefaultBrowserEntrypointType ui_entrypoint);
// Utility method to check the current default browser state asynchronously.
void GetDefaultBrowserState(DefaultBrowserCheckCompletionCallback callback);
// Registers a callback that will be invoked on the manager thread whenever
// the system's default browser for HTTP/HTTPS protocols changes. The returned
// subscription object MUST be kept in scope for as long as the caller wishes
// to receive notifications. Destroying the subscription object will
// unregister the callback.
//
// For now, only Windows platform will notify when a change occur.
base::CallbackListSubscription RegisterDefaultBrowserChanged(
base::RepeatingClosure callback);
private:
void OnDefaultBrowserCheckResult(
default_browser::DefaultBrowserCheckCompletionCallback callback,
default_browser::DefaultBrowserState default_state);
// Delegate for handling shell operations, such as checking and setting
// default browser.
const std::unique_ptr<ShellDelegate> shell_delegate_;
// The platform default browser change monitor that handles the low-level
// logic for detecting when the system's default browser has changed.
std::unique_ptr<DefaultBrowserMonitor> monitor_;
};
} // namespace default_browser
#endif // CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_MANAGER_H_