#ifndef NET_NQE_SOCKET_WATCHER_FACTORY_H_
#define NET_NQE_SOCKET_WATCHER_FACTORY_H_
#include <memory>
#include <optional>
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "base/sequence_checker.h"
#include "base/task/single_thread_task_runner.h"
#include "base/time/time.h"
#include "net/nqe/network_quality_estimator_util.h"
#include "net/socket/socket_performance_watcher.h"
#include "net/socket/socket_performance_watcher_factory.h"
namespace base {
class TickClock;
class TimeDelta;
}
namespace net {
namespace {
typedef base::RepeatingCallback<void(
SocketPerformanceWatcherFactory::Protocol protocol,
const base::TimeDelta& rtt,
const std::optional<nqe::internal::IPHash>& host)>
OnUpdatedRTTAvailableCallback;
typedef base::RepeatingCallback<bool(base::TimeTicks)> ShouldNotifyRTTCallback;
}
namespace nqe::internal {
class SocketWatcherFactory : public SocketPerformanceWatcherFactory {
public:
SocketWatcherFactory(
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
base::TimeDelta min_notification_interval,
OnUpdatedRTTAvailableCallback updated_rtt_observation_callback,
ShouldNotifyRTTCallback should_notify_rtt_callback,
const base::TickClock* tick_clock);
SocketWatcherFactory(const SocketWatcherFactory&) = delete;
SocketWatcherFactory& operator=(const SocketWatcherFactory&) = delete;
~SocketWatcherFactory() override;
std::unique_ptr<SocketPerformanceWatcher> CreateSocketPerformanceWatcher(
const Protocol protocol,
const IPAddress& address) override;
void SetUseLocalHostRequestsForTesting(bool use_localhost_requests) {
allow_rtt_private_address_ = use_localhost_requests;
}
void SetTickClockForTesting(const base::TickClock* tick_clock);
private:
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
const base::TimeDelta min_notification_interval_;
bool allow_rtt_private_address_ = false;
OnUpdatedRTTAvailableCallback updated_rtt_observation_callback_;
ShouldNotifyRTTCallback should_notify_rtt_callback_;
raw_ptr<const base::TickClock> tick_clock_;
};
}
}
#endif