blob: 54cabcfd9eaaacaa75c81f9816b5eb156321590e [file] [log] [blame]
// Copyright 2018 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 COMPONENTS_DATA_REDUCTION_PROXY_CORE_COMMON_DATA_REDUCTION_PROXY_THROTTLE_MANAGER_H_
#define COMPONENTS_DATA_REDUCTION_PROXY_CORE_COMMON_DATA_REDUCTION_PROXY_THROTTLE_MANAGER_H_
#include "base/observer_list.h"
#include "base/sequence_checker.h"
#include "components/data_reduction_proxy/core/common/data_reduction_proxy.mojom.h"
#include "mojo/public/cpp/bindings/binding.h"
namespace data_reduction_proxy {
class DataReductionProxyServer;
// Helper that encapsulates the shared state between
// DataReductionProxyURLThrottles, whose main responsibility is keeping the
// shared mojo connections required by the throttles.
class DataReductionProxyThrottleManager
: public mojom::DataReductionProxyThrottleConfigObserver {
public:
// Observes |data_reduction_proxy| for changes to the config, and starts
// off with the initial value (possibly empty) |initial_config|.
DataReductionProxyThrottleManager(
mojom::DataReductionProxy* data_reduction_proxy,
mojom::DataReductionProxyThrottleConfigPtr initial_config);
~DataReductionProxyThrottleManager() override;
// mojom::DataReductionProxyThrottleConfigObserver implementation.
void OnThrottleConfigChanged(
mojom::DataReductionProxyThrottleConfigPtr config) override;
// Called by throttles living on the manager's sequence when they want to
// sign up for / sign out of receiving
// mojom::DataReductionProxyThrottleConfigObserver events.
void AddSameSequenceObserver(
mojom::DataReductionProxyThrottleConfigObserver* observer);
void RemoveSameSequenceObserver(
mojom::DataReductionProxyThrottleConfigObserver* observer);
mojom::DataReductionProxy* data_reduction_proxy() {
return shared_data_reduction_proxy_;
}
mojom::DataReductionProxyThrottleConfigPtr last_proxy_config() const {
return last_proxy_config_.Clone();
}
static mojom::DataReductionProxyThrottleConfigPtr CreateConfig(
const std::vector<DataReductionProxyServer>& proxies_for_http);
private:
// Most DataReductionProxyURLThrottles will live on the manager's sequence.
// It makes sense for all of them to reuse the manager's mojo pipes set up
// for the interfaces mojom::DataReductionProxy and
// mojom::DataReductionProxyThrottleConfigObserver.
mojom::DataReductionProxy* const shared_data_reduction_proxy_;
base::ObserverList<mojom::DataReductionProxyThrottleConfigObserver>::Unchecked
same_sequence_observers_;
mojo::Binding<
data_reduction_proxy::mojom::DataReductionProxyThrottleConfigObserver>
binding_;
// The last seen config values.
mojom::DataReductionProxyThrottleConfigPtr last_proxy_config_;
SEQUENCE_CHECKER(sequence_checker_);
DISALLOW_COPY_AND_ASSIGN(DataReductionProxyThrottleManager);
};
} // namespace data_reduction_proxy
#endif // COMPONENTS_DATA_REDUCTION_PROXY_CORE_COMMON_DATA_REDUCTION_PROXY_THROTTLE_MANAGER_H_