blob: a3d53fdc93a3b20d597158aa80d7a5bb0d32e911 [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_MONITOR_H_
#define CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_MONITOR_H_
#include <memory>
#include "base/callback_list.h"
#include "base/functional/callback_forward.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "build/build_config.h"
class RegistryWatcher;
namespace default_browser {
// Provides a platform-agnostic object for observing changes to the system's
// default browser setting. Observers are notified on the DefaultBrowserManager
// thread.
class DefaultBrowserMonitor {
public:
DefaultBrowserMonitor();
~DefaultBrowserMonitor();
DefaultBrowserMonitor(const DefaultBrowserMonitor&) = delete;
const DefaultBrowserMonitor& operator=(const DefaultBrowserMonitor&) = delete;
// Starts the monitoring process. The implementation will be platform
// specific.
void StartMonitor();
// Registers a callback to be run on the DefaultBrowserManager thread when a
// change is detected.
base::CallbackListSubscription RegisterDefaultBrowserChanged(
base::RepeatingClosure callback);
protected:
void NotifyObservers();
private:
#if BUILDFLAG(IS_WIN)
// The callback executed on the DefaultBrowserManager thread when the Worker
// detects a change.
void OnDefaultBrowserChangedWin();
// The monitor owns the watcher.
std::unique_ptr<RegistryWatcher> registry_watcher_;
#endif // BUILDFLAG(IS_WIN)
base::RepeatingClosureList callback_list_;
// Enforces that this class is used on same sequence.
SEQUENCE_CHECKER(sequence_checker_);
base::WeakPtrFactory<DefaultBrowserMonitor> weak_ptr_factory_{this};
};
} // namespace default_browser
#endif // CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_MONITOR_H_