blob: fdbd05f878a082e37148c57d36540f9615d87611 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef NET_TEST_TEST_CONNECTION_COST_OBSERVER_H_
#define NET_TEST_TEST_CONNECTION_COST_OBSERVER_H_
#include <memory>
#include <vector>
#include "base/run_loop.h"
#include "base/sequence_checker.h"
#include "net/base/network_change_notifier.h"
namespace net {
class TestConnectionCostObserver final
: public NetworkChangeNotifier::ConnectionCostObserver {
public:
TestConnectionCostObserver();
~TestConnectionCostObserver() final;
void OnConnectionCostChanged(
NetworkChangeNotifier::ConnectionCost cost) final;
void WaitForConnectionCostChanged();
size_t cost_changed_calls() const;
std::vector<NetworkChangeNotifier::ConnectionCost> cost_changed_inputs()
const;
NetworkChangeNotifier::ConnectionCost last_cost_changed_input() const;
TestConnectionCostObserver(const TestConnectionCostObserver&) = delete;
TestConnectionCostObserver& operator=(const TestConnectionCostObserver&) =
delete;
private:
SEQUENCE_CHECKER(sequence_checker_);
// Set and used to block in `WaitForConnectionCostChanged()` until the next
// cost changed event occurs.
std::unique_ptr<base::RunLoop> run_loop_;
// Record each `OnConnectionCostChanged()` call.
std::vector<NetworkChangeNotifier::ConnectionCost> cost_changed_inputs_;
};
} // namespace net
#endif // NET_TEST_TEST_CONNECTION_COST_OBSERVER_H_