blob: dbe84068bd3182d62df5af5f9f095ace66572db4 [file] [log] [blame]
// Copyright 2017 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.
#ifndef COMPONENTS_DOWNLOAD_INTERNAL_BACKGROUND_SERVICE_ENTRY_H_
#define COMPONENTS_DOWNLOAD_INTERNAL_BACKGROUND_SERVICE_ENTRY_H_
#include <vector>
#include "base/time/time.h"
#include "components/download/public/background_service/client.h"
#include "components/download/public/background_service/clients.h"
#include "components/download/public/background_service/download_params.h"
#include "net/http/http_response_headers.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "url/gurl.h"
namespace download {
// An entry in the Model that represents a scheduled download.
struct Entry {
public:
enum class State {
// A newly added download. The Entry is not guaranteed to be persisted in
// the model yet.
NEW = 0,
// The download has been persisted and is available to start, pending
// scheduler criteria.
AVAILABLE = 1,
// The download is active. The DownloadDriver is aware of it and it is
// either being downloaded or suspended by the scheduler due to device
// characteristics or throttling.
ACTIVE = 2,
// The download has been paused by the owning Client. The download will not
// be run until it is resumed by the Client.
PAUSED = 3,
// The download is 'complete' and successful. At this point we are leaving
// this entry around to make sure the files on disk are cleaned up.
COMPLETE = 4,
// The count of entries for the enum.
COUNT = 5,
};
Entry();
Entry(const Entry& other);
explicit Entry(const DownloadParams& params);
~Entry();
bool operator==(const Entry& other) const;
// See base/trace_event/memory_usage_estimator.h for more info.
size_t EstimateMemoryUsage() const;
// The feature that is requesting this download.
DownloadClient client = DownloadClient::INVALID;
// A unique GUID that represents this download. See | base::GenerateGUID()|.
std::string guid;
// The time when the entry is created.
base::Time create_time;
// The parameters that determine under what device conditions this download
// will occur.
SchedulingParams scheduling_params;
// The parameters that define the actual download request to make.
RequestParams request_params;
// The state of the download to help the scheduler and loggers make the right
// decisions about the download object.
State state = State::NEW;
// Target file path for this download.
base::FilePath target_file_path;
// Time the download was marked as complete, base::Time() if the download is
// not yet complete.
base::Time completion_time;
// Last time when the entry was checked for cleanup, default is
// |completion_time|.
base::Time last_cleanup_check_time;
// Size of the download file in bytes, 0 if download is not successfully
// completed.
uint64_t bytes_downloaded;
// Size of the upload payload in bytes.
// NOTE: This value isn't persisted, and there is no need to since there are
// no retries for uploads.
uint64_t bytes_uploaded;
// Stores the number of retries for this download.
uint32_t attempt_count;
// Stores the number of resumptions for this download.
uint32_t resumption_count;
// Stores the number of times the service tried to delete the download file.
uint32_t cleanup_attempt_count;
// Stores whether this request has some data to be uploaded. This is set to
// true only when the client has provided with the upload data and is not
// cleared afterwards. Retry and resumption logic are impacted by this.
bool has_upload_data;
// Traffic annotation for the network request.
net::MutableNetworkTrafficAnnotationTag traffic_annotation;
// The url chain of the download. Download may encounter redirects, and
// fetches the content from the last url in the chain.
std::vector<GURL> url_chain;
// The response headers for the download request.
scoped_refptr<const net::HttpResponseHeaders> response_headers;
// If the response is received. |response_headers| may be null in the response
// for certain protocol, or without network connection.
bool did_received_response;
// If the download requires response headers to be persisted. False for older
// proto version.
bool require_response_headers;
};
} // namespace download
#endif // COMPONENTS_DOWNLOAD_INTERNAL_BACKGROUND_SERVICE_ENTRY_H_