blob: b0da071577cd036c2d5a4df0562776325cbe7718 [file]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "services/device/geolocation/public_ip_address_geolocation_provider.h"
#include "base/functional/bind.h"
#include "services/device/geolocation/public_ip_address_geolocator.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
namespace device {
PublicIpAddressGeolocationProvider::PublicIpAddressGeolocationProvider(
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
network::NetworkConnectionTracker* network_connection_tracker,
const std::string& api_key) {
// Bind sequence_checker_ to the initialization sequence.
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
public_ip_address_location_notifier_ =
std::make_unique<PublicIpAddressLocationNotifier>(
std::move(url_loader_factory), network_connection_tracker, api_key);
}
PublicIpAddressGeolocationProvider::~PublicIpAddressGeolocationProvider() {}
void PublicIpAddressGeolocationProvider::Bind(
mojo::PendingReceiver<mojom::PublicIpAddressGeolocationProvider> receiver) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(public_ip_address_location_notifier_);
provider_receiver_set_.Add(this, std::move(receiver));
}
void PublicIpAddressGeolocationProvider::CreateGeolocation(
const net::MutablePartialNetworkTrafficAnnotationTag& tag,
mojo::PendingReceiver<mojom::Geolocation> receiver) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(public_ip_address_location_notifier_);
geolocation_receiver_set_.Add(
std::make_unique<PublicIpAddressGeolocator>(
static_cast<net::PartialNetworkTrafficAnnotationTag>(tag),
public_ip_address_location_notifier_.get(),
base::BindRepeating(
&mojo::UniqueReceiverSet<mojom::Geolocation>::ReportBadMessage,
base::Unretained(&geolocation_receiver_set_))),
std::move(receiver));
}
} // namespace device