blob: 21fb6a5d7a2390f8787c6651745313982a5ed638 [file] [log] [blame]
// Copyright 2020 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 "components/update_client/crx_downloader_factory.h"
#include "build/build_config.h"
#if defined(OS_WIN)
#include "components/update_client/background_downloader_win.h"
#endif
#include "components/update_client/crx_downloader.h"
#include "components/update_client/network.h"
#include "components/update_client/url_fetcher_downloader.h"
namespace update_client {
namespace {
class CrxDownloaderFactoryChromium : public CrxDownloaderFactory {
public:
explicit CrxDownloaderFactoryChromium(
scoped_refptr<NetworkFetcherFactory> network_fetcher_factory)
: network_fetcher_factory_(network_fetcher_factory) {}
// Overrides for CrxDownloaderFactory.
scoped_refptr<CrxDownloader> MakeCrxDownloader(
bool background_download_enabled) const override;
private:
~CrxDownloaderFactoryChromium() override = default;
scoped_refptr<NetworkFetcherFactory> network_fetcher_factory_;
};
scoped_refptr<CrxDownloader> CrxDownloaderFactoryChromium::MakeCrxDownloader(
bool background_download_enabled) const {
scoped_refptr<CrxDownloader> url_fetcher_downloader =
base::MakeRefCounted<UrlFetcherDownloader>(nullptr,
network_fetcher_factory_);
#if defined(OS_WIN)
// If background downloads are allowed, then apply the BITS service
// background downloader first.
if (background_download_enabled) {
return base::MakeRefCounted<BackgroundDownloader>(url_fetcher_downloader);
}
#endif
return url_fetcher_downloader;
}
} // namespace
scoped_refptr<CrxDownloaderFactory> MakeCrxDownloaderFactory(
scoped_refptr<NetworkFetcherFactory> network_fetcher_factory) {
return base::MakeRefCounted<CrxDownloaderFactoryChromium>(
network_fetcher_factory);
}
} // namespace update_client