12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // Copyright 2017 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.
- #include "services/network/proxy_config_service_mojo.h"
- #include <utility>
- #include "base/observer_list.h"
- namespace network {
- ProxyConfigServiceMojo::ProxyConfigServiceMojo(
- mojo::PendingReceiver<mojom::ProxyConfigClient>
- proxy_config_client_receiver,
- absl::optional<net::ProxyConfigWithAnnotation> initial_proxy_config,
- mojo::PendingRemote<mojom::ProxyConfigPollerClient> proxy_poller_client) {
- DCHECK(initial_proxy_config || proxy_config_client_receiver.is_valid());
- if (initial_proxy_config)
- OnProxyConfigUpdated(*initial_proxy_config);
- if (proxy_config_client_receiver.is_valid()) {
- receiver_.Bind(std::move(proxy_config_client_receiver));
- // Only use the |proxy_poller_client| if there's a
- // |proxy_config_client_receiver|.
- if (!proxy_poller_client) {
- // NullRemote() could be passed in unit tests. In that case, it can't be
- // bound.
- return;
- }
- proxy_poller_client_.Bind(std::move(proxy_poller_client));
- }
- }
- ProxyConfigServiceMojo::~ProxyConfigServiceMojo() {}
- void ProxyConfigServiceMojo::OnProxyConfigUpdated(
- const net::ProxyConfigWithAnnotation& proxy_config) {
- // Do nothing if the proxy configuration is unchanged.
- if (!config_pending_ && config_.value().Equals(proxy_config.value()))
- return;
- config_pending_ = false;
- config_ = proxy_config;
- for (auto& observer : observers_)
- observer.OnProxyConfigChanged(config_, CONFIG_VALID);
- }
- void ProxyConfigServiceMojo::FlushProxyConfig(
- FlushProxyConfigCallback callback) {
- std::move(callback).Run();
- }
- void ProxyConfigServiceMojo::AddObserver(Observer* observer) {
- observers_.AddObserver(observer);
- }
- void ProxyConfigServiceMojo::RemoveObserver(Observer* observer) {
- observers_.RemoveObserver(observer);
- }
- net::ProxyConfigService::ConfigAvailability
- ProxyConfigServiceMojo::GetLatestProxyConfig(
- net::ProxyConfigWithAnnotation* config) {
- if (config_pending_) {
- *config = net::ProxyConfigWithAnnotation();
- return CONFIG_PENDING;
- }
- *config = config_;
- return CONFIG_VALID;
- }
- void ProxyConfigServiceMojo::OnLazyPoll() {
- // TODO(mmenke): These should either be rate limited, or the other process
- // should use another signal of activity.
- if (proxy_poller_client_)
- proxy_poller_client_->OnLazyProxyConfigPoll();
- }
- } // namespace network
|