// Copyright 2021 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 "weblayer/browser/background_fetch/background_fetch_download.h" #include "base/strings/utf_string_conversions.h" #include "components/background_fetch/job_details.h" #include "content/public/browser/background_fetch_description.h" #include "url/origin.h" #include "weblayer/browser/background_fetch/background_fetch_delegate_impl.h" using background_fetch::JobDetails; namespace weblayer { BackgroundFetchDownload::BackgroundFetchDownload( BackgroundFetchDelegateImpl* controller, const std::string& job_id, const JobDetails* job) : controller_(controller), job_id_(job_id), job_(job) { // The only other kind of DownloadImpl uses the DownloadItem's ID as its // notification ID, and that's constrained to positive integers. static int id = 0; if (id > 0) id = 0; notification_id_ = --id; } BackgroundFetchDownload::~BackgroundFetchDownload() = default; DownloadState BackgroundFetchDownload::GetState() { switch (job_->job_state) { case JobDetails::State::kPendingWillStartDownloading: case JobDetails::State::kStartedAndDownloading: return DownloadState::kInProgress; case JobDetails::State::kPendingWillStartPaused: case JobDetails::State::kStartedButPaused: return DownloadState::kPaused; case JobDetails::State::kCancelled: return DownloadState::kCancelled; case JobDetails::State::kDownloadsComplete: case JobDetails::State::kJobComplete: return DownloadState::kComplete; } } int64_t BackgroundFetchDownload::GetTotalBytes() { return job_->GetTotalBytes(); } int64_t BackgroundFetchDownload::GetReceivedBytes() { return job_->GetProcessedBytes(); } void BackgroundFetchDownload::Pause() { controller_->PauseDownload(job_id_); } void BackgroundFetchDownload::Resume() { controller_->ResumeDownload(job_id_); } void BackgroundFetchDownload::Cancel() { controller_->CancelDownload(job_id_); } base::FilePath BackgroundFetchDownload::GetLocation() { NOTREACHED(); return {}; } std::u16string BackgroundFetchDownload::GetFileNameToReportToUser() { return base::UTF8ToUTF16(job_->fetch_description->title); } std::string BackgroundFetchDownload::GetMimeType() { NOTREACHED(); return {}; } DownloadError BackgroundFetchDownload::GetError() { NOTREACHED(); return DownloadError::kNoError; } int BackgroundFetchDownload::GetNotificationId() { return notification_id_; } bool BackgroundFetchDownload::IsTransient() { return true; } GURL BackgroundFetchDownload::GetSourceUrl() { return job_->fetch_description->origin.GetURL(); } const SkBitmap* BackgroundFetchDownload::GetLargeIcon() { return &job_->fetch_description->icon; } void BackgroundFetchDownload::OnFinished(bool activated) { controller_->OnUiFinished(job_id_, activated); // |this| is deleted. } } // namespace weblayer