mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-12-01 01:36:09 +03:00
121 lines
4.2 KiB
C++
121 lines
4.2 KiB
C++
// Copyright 2016 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef NET_NQE_SOCKET_WATCHER_H_
|
|
#define NET_NQE_SOCKET_WATCHER_H_
|
|
|
|
#include <memory>
|
|
|
|
#include "base/callback.h"
|
|
#include "base/memory/ref_counted.h"
|
|
#include "base/memory/weak_ptr.h"
|
|
#include "base/optional.h"
|
|
#include "base/threading/thread_checker.h"
|
|
#include "base/time/time.h"
|
|
#include "net/base/net_export.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 SingleThreadTaskRunner;
|
|
class TickClock;
|
|
class TimeDelta;
|
|
} // namespace base
|
|
|
|
namespace net {
|
|
|
|
class AddressList;
|
|
|
|
namespace {
|
|
|
|
typedef base::Callback<void(SocketPerformanceWatcherFactory::Protocol protocol,
|
|
const base::TimeDelta& rtt,
|
|
const base::Optional<nqe::internal::IPHash>& host)>
|
|
OnUpdatedRTTAvailableCallback;
|
|
|
|
typedef base::Callback<bool(base::TimeTicks)> ShouldNotifyRTTCallback;
|
|
|
|
} // namespace
|
|
|
|
namespace nqe {
|
|
|
|
namespace internal {
|
|
|
|
// SocketWatcher implements SocketPerformanceWatcher, and is not thread-safe.
|
|
class NET_EXPORT_PRIVATE SocketWatcher : public SocketPerformanceWatcher {
|
|
public:
|
|
// Creates a SocketWatcher which can be used to watch a socket that uses
|
|
// |protocol| as the transport layer protocol. The socket watcher will call
|
|
// |updated_rtt_observation_callback| on |task_runner| every time a new RTT
|
|
// observation is available. |address_list| is the list of addresses that
|
|
// the socket may connect to. |min_notification_interval| is the minimum
|
|
// interval betweeen consecutive notifications to this socket watcher.
|
|
// |allow_rtt_private_address| is true if |updated_rtt_observation_callback|
|
|
// should be called when RTT observation from a socket connected to private
|
|
// address is received. |tick_clock| is guaranteed to be non-null.
|
|
// |should_notify_rtt_callback| callback should be called back on
|
|
// |task_runner| by the created socket watchers to check if RTT observation
|
|
// should be taken and notified.
|
|
SocketWatcher(SocketPerformanceWatcherFactory::Protocol protocol,
|
|
const AddressList& address_list,
|
|
base::TimeDelta min_notification_interval,
|
|
bool allow_rtt_private_address,
|
|
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
|
|
OnUpdatedRTTAvailableCallback updated_rtt_observation_callback,
|
|
ShouldNotifyRTTCallback should_notify_rtt_callback,
|
|
const base::TickClock* tick_clock);
|
|
|
|
~SocketWatcher() override;
|
|
|
|
// SocketPerformanceWatcher implementation:
|
|
bool ShouldNotifyUpdatedRTT() const override;
|
|
void OnUpdatedRTTAvailable(const base::TimeDelta& rtt) override;
|
|
void OnConnectionChanged() override;
|
|
|
|
private:
|
|
// Transport layer protocol used by the socket that |this| is watching.
|
|
const SocketPerformanceWatcherFactory::Protocol protocol_;
|
|
|
|
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
|
|
|
// Called every time a new RTT observation is available.
|
|
OnUpdatedRTTAvailableCallback updated_rtt_observation_callback_;
|
|
|
|
// Called to determine if the RTT notification should be notified using
|
|
// |updated_rtt_observation_callback_|.
|
|
ShouldNotifyRTTCallback should_notify_rtt_callback_;
|
|
|
|
// Minimum interval betweeen consecutive incoming notifications.
|
|
const base::TimeDelta rtt_notifications_minimum_interval_;
|
|
|
|
// True if the RTT observations from this socket can be notified using
|
|
// |updated_rtt_observation_callback_|.
|
|
const bool run_rtt_callback_;
|
|
|
|
// Time when this was last notified of updated RTT.
|
|
base::TimeTicks last_rtt_notification_;
|
|
|
|
const base::TickClock* tick_clock_;
|
|
|
|
base::ThreadChecker thread_checker_;
|
|
|
|
// True if the first RTT notification from the QUIC connection has been
|
|
// received.
|
|
bool first_quic_rtt_notification_received_;
|
|
|
|
// A unique identifier for the remote host that this socket connects to.
|
|
const base::Optional<IPHash> host_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(SocketWatcher);
|
|
};
|
|
|
|
} // namespace internal
|
|
|
|
} // namespace nqe
|
|
|
|
} // namespace net
|
|
|
|
#endif // NET_NQE_SOCKET_WATCHER_H_
|