diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-02-13 10:55:42 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-03-05 13:33:38 +0000 |
commit | 248b70b82a40964d5594eb04feca0fa36716185d (patch) | |
tree | 44e31d9dd0ac2cb79f48633eefbc5496e013c347 /chromium/chrome/browser/net/file_downloader.cc | |
parent | cabfcdd1db482729ded525feae56911a99792773 (diff) | |
download | qtwebengine-chromium-248b70b82a40964d5594eb04feca0fa36716185d.tar.gz |
BASELINE: Update Chromium to 79.0.3945.147
And new simplified snapshot filter
Change-Id: I7c692bedd5b3833f05565bd6f6939115350b233a
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/chrome/browser/net/file_downloader.cc')
-rw-r--r-- | chromium/chrome/browser/net/file_downloader.cc | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/chromium/chrome/browser/net/file_downloader.cc b/chromium/chrome/browser/net/file_downloader.cc new file mode 100644 index 00000000000..93edaf36fa1 --- /dev/null +++ b/chromium/chrome/browser/net/file_downloader.cc @@ -0,0 +1,106 @@ +// Copyright 2015 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 "chrome/browser/net/file_downloader.h" + +#include "base/bind.h" +#include "base/files/file_path.h" +#include "base/files/file_util.h" +#include "base/logging.h" +#include "base/task/post_task.h" +#include "base/task/task_traits.h" +#include "base/task_runner_util.h" +#include "content/public/browser/browser_context.h" +#include "content/public/browser/browser_thread.h" +#include "content/public/browser/storage_partition.h" +#include "net/base/load_flags.h" +#include "net/http/http_status_code.h" +#include "services/network/public/cpp/resource_request.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" +#include "services/network/public/cpp/simple_url_loader.h" +#include "url/gurl.h" + +const int kNumFileDownloaderRetries = 1; + +FileDownloader::FileDownloader( + const GURL& url, + const base::FilePath& path, + bool overwrite, + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + DownloadFinishedCallback callback, + const net::NetworkTrafficAnnotationTag& traffic_annotation) + : url_loader_factory_(url_loader_factory), + callback_(std::move(callback)), + local_path_(path) { + auto resource_request = std::make_unique<network::ResourceRequest>(); + resource_request->url = url; + resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit; + simple_url_loader_ = network::SimpleURLLoader::Create( + std::move(resource_request), traffic_annotation); + simple_url_loader_->SetRetryOptions( + kNumFileDownloaderRetries, + network::SimpleURLLoader::RetryMode::RETRY_ON_NETWORK_CHANGE); + if (overwrite) { + simple_url_loader_->DownloadToTempFile( + url_loader_factory_.get(), + base::BindOnce(&FileDownloader::OnSimpleDownloadComplete, + base::Unretained(this))); + } else { + base::PostTaskAndReplyWithResult( + base::CreateTaskRunner( + {base::ThreadPool(), base::MayBlock(), + base::TaskPriority::BEST_EFFORT, + base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}) + .get(), + FROM_HERE, base::Bind(&base::PathExists, local_path_), + base::Bind(&FileDownloader::OnFileExistsCheckDone, + weak_ptr_factory_.GetWeakPtr())); + } +} + +FileDownloader::~FileDownloader() {} + +void FileDownloader::OnSimpleDownloadComplete(base::FilePath response_path) { + if (response_path.empty()) { + if (simple_url_loader_->ResponseInfo() && + simple_url_loader_->ResponseInfo()->headers) { + int response_code = + simple_url_loader_->ResponseInfo()->headers->response_code(); + DLOG(WARNING) << "HTTP error " << response_code + << " while trying to download " + << simple_url_loader_->GetFinalURL().spec(); + } + std::move(callback_).Run(FAILED); + return; + } + + base::PostTaskAndReplyWithResult( + base::CreateTaskRunner({base::ThreadPool(), base::MayBlock(), + base::TaskPriority::BEST_EFFORT, + base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}) + .get(), + FROM_HERE, base::Bind(&base::Move, response_path, local_path_), + base::Bind(&FileDownloader::OnFileMoveDone, + weak_ptr_factory_.GetWeakPtr())); +} + +void FileDownloader::OnFileExistsCheckDone(bool exists) { + if (exists) { + std::move(callback_).Run(EXISTS); + } else { + simple_url_loader_->DownloadToTempFile( + url_loader_factory_.get(), + base::BindOnce(&FileDownloader::OnSimpleDownloadComplete, + base::Unretained(this))); + } +} + +void FileDownloader::OnFileMoveDone(bool success) { + if (!success) { + DLOG(WARNING) << "Could not move file to " + << local_path_.LossyDisplayName(); + } + + std::move(callback_).Run(success ? DOWNLOADED : FAILED); +} |