blob: fe132fb4489ec0b17d5734f46b5d020afecebcde [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.
#include "content/browser/download/network_download_url_loader_factory_getter.h"
#include "components/download/public/common/download_task_runner.h"
#include "content/browser/url_loader_factory_getter.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#include "services/network/public/cpp/wrapper_shared_url_loader_factory.h"
namespace content {
NetworkDownloadURLLoaderFactoryGetter::NetworkDownloadURLLoaderFactoryGetter(
scoped_refptr<URLLoaderFactoryGetter> url_loader_factory_getter,
network::mojom::URLLoaderFactoryPtrInfo proxy_factory_ptr_info,
network::mojom::URLLoaderFactoryRequest proxy_factory_request)
: url_loader_factory_getter_(url_loader_factory_getter),
proxy_factory_ptr_info_(std::move(proxy_factory_ptr_info)),
proxy_factory_request_(std::move(proxy_factory_request)) {}
NetworkDownloadURLLoaderFactoryGetter::
~NetworkDownloadURLLoaderFactoryGetter() = default;
scoped_refptr<network::SharedURLLoaderFactory>
NetworkDownloadURLLoaderFactoryGetter::GetURLLoaderFactory() {
DCHECK(download::GetIOTaskRunner());
DCHECK(download::GetIOTaskRunner()->BelongsToCurrentThread());
if (lazy_factory_)
return lazy_factory_;
if (proxy_factory_request_.is_pending()) {
url_loader_factory_getter_->CloneNetworkFactory(
std::move(proxy_factory_request_));
lazy_factory_ =
base::MakeRefCounted<network::WrapperSharedURLLoaderFactory>(
std::move(proxy_factory_ptr_info_));
} else {
lazy_factory_ = url_loader_factory_getter_->GetNetworkFactory();
}
return lazy_factory_;
}
} // namespace content