1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133
  134
  135
  136
  137
  138
  139
  140
  141
  142
  143
  144
  145
  146
  147
  148
  149
  150
  151
  152
  153
  154
  155
  156
  157
  158
  159
  160
  161
  162
  163
  164
  165
  166
  167
  168
  169
  170
  171
  172
  173
  174
  175
  176
  177
  178
  179
  180
  181
  182
  183
  184
  185
  186
  187
  188
  189
  190
  191
  192
  193
  194
  195
  196
  197
  198
  199
  200
  201
  202
  203
  204
  205
  206
  207
  208
  209
  210
  211
  212
  213
  214
  215
  216
  217
  218
  219
  220
  221
  222
  223
  224
  225
  226

content / public / test / fake_download_item.h [blame]

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_PUBLIC_TEST_FAKE_DOWNLOAD_ITEM_H_
#define CONTENT_PUBLIC_TEST_FAKE_DOWNLOAD_ITEM_H_

#include <optional>
#include <string>
#include <vector>

#include "base/files/file_path.h"
#include "base/functional/callback_forward.h"
#include "base/observer_list.h"
#include "base/time/time.h"
#include "components/download/public/common/download_danger_type.h"
#include "components/download/public/common/download_interrupt_reasons.h"
#include "components/download/public/common/download_item.h"
#include "components/download/public/common/download_source.h"
#include "ui/base/page_transition_types.h"
#include "url/gurl.h"
#include "url/origin.h"

namespace content {

class FakeDownloadItem : public download::DownloadItem {
 public:
  FakeDownloadItem();

  FakeDownloadItem(const FakeDownloadItem&) = delete;
  FakeDownloadItem& operator=(const FakeDownloadItem&) = delete;

  ~FakeDownloadItem() override;

  // download::DownloadItem overrides.
  void AddObserver(Observer* observer) override;
  void RemoveObserver(Observer* observer) override;
  void UpdateObservers() override;
  void Remove() override;
  void Pause() override;
  void Resume(bool user_resume) override;
  void Cancel(bool user_cancel) override;
  void OpenDownload() override;
  void ShowDownloadInShell() override;
  uint32_t GetId() const override;
  const std::string& GetGuid() const override;
  const GURL& GetURL() const override;
  const std::vector<GURL>& GetUrlChain() const override;
  const base::FilePath& GetTargetFilePath() const override;
  bool GetFileExternallyRemoved() const override;
  base::Time GetStartTime() const override;
  base::Time GetEndTime() const override;
  DownloadState GetState() const override;
  const scoped_refptr<const net::HttpResponseHeaders>& GetResponseHeaders()
      const override;
  std::string GetMimeType() const override;
  const GURL& GetOriginalUrl() const override;
  download::DownloadInterruptReason GetLastReason() const override;
  int64_t GetReceivedBytes() const override;
  int64_t GetTotalBytes() const override;
  base::Time GetLastAccessTime() const override;
  bool IsTransient() const override;
  bool IsParallelDownload() const override;
  DownloadCreationType GetDownloadCreationType() const override;
  ::network::mojom::CredentialsMode GetCredentialsMode() const override;
  const std::optional<net::IsolationInfo>& GetIsolationInfo() const override;
  bool IsDone() const override;
  const std::string& GetETag() const override;
  const std::string& GetLastModifiedTime() const override;
  bool IsPaused() const override;
  bool AllowMetered() const override;
  bool IsTemporary() const override;
  bool RequireSafetyChecks() const override;
  bool CanResume() const override;
  int64_t GetBytesWasted() const override;
  int32_t GetAutoResumeCount() const override;
  const GURL& GetReferrerUrl() const override;
  const std::string& GetSerializedEmbedderDownloadData() const override;
  const GURL& GetTabUrl() const override;
  const GURL& GetTabReferrerUrl() const override;
  const std::optional<url::Origin>& GetRequestInitiator() const override;
  std::string GetSuggestedFilename() const override;
  std::string GetContentDisposition() const override;
  std::string GetOriginalMimeType() const override;
  std::string GetRemoteAddress() const override;
  bool HasUserGesture() const override;
  ui::PageTransition GetTransitionType() const override;
  bool IsSavePackageDownload() const override;
  download::DownloadSource GetDownloadSource() const override;
  const base::FilePath& GetFullPath() const override;
  const base::FilePath& GetForcedFilePath() const override;
  base::FilePath GetTemporaryFilePath() const override;
  base::FilePath GetFileNameToReportUser() const override;
  TargetDisposition GetTargetDisposition() const override;
  const std::string& GetHash() const override;
  void DeleteFile(base::OnceCallback<void(bool)> callback) override;
  download::DownloadFile* GetDownloadFile() override;
  download::DownloadItemRenameHandler* GetRenameHandler() override;
#if BUILDFLAG(IS_ANDROID)
  bool IsFromExternalApp() override;
  bool IsMustDownload() override;
#endif  // BUILDFLAG(IS_ANDROID)
  bool IsDangerous() const override;
  bool IsInsecure() const override;
  download::DownloadDangerType GetDangerType() const override;
  download::DownloadItem::InsecureDownloadStatus GetInsecureDownloadStatus()
      const override;
  bool TimeRemaining(base::TimeDelta* remaining) const override;
  int64_t CurrentSpeed() const override;
  int PercentComplete() const override;
  bool AllDataSaved() const override;
  const std::vector<download::DownloadItem::ReceivedSlice>& GetReceivedSlices()
      const override;
  int64_t GetUploadedBytes() const override;
  bool CanShowInFolder() override;
  bool CanOpenDownload() override;
  bool ShouldOpenFileBasedOnExtension() override;
  bool ShouldOpenFileByPolicyBasedOnExtension() override;
  bool GetOpenWhenComplete() const override;
  bool GetAutoOpened() override;
  bool GetOpened() const override;
  void OnContentCheckCompleted(
      download::DownloadDangerType danger_type,
      download::DownloadInterruptReason reason) override;
  void SetOpenWhenComplete(bool open) override;
  void SetOpened(bool opened) override;
  void SetLastAccessTime(base::Time time) override;
  void SetDisplayName(const base::FilePath& name) override;
  std::string DebugString(bool verbose) const override;
  void SimulateErrorForTesting(
      download::DownloadInterruptReason reason) override;
  void ValidateDangerousDownload() override;
  void ValidateInsecureDownload() override;
  void CopyDownload(AcquireFileCallback callback) override;
  void Rename(const base::FilePath& name,
              RenameDownloadCallback callback) override;
  void OnAsyncScanningCompleted(
      download::DownloadDangerType danger_type) override;

  bool removed() const { return removed_; }

  void NotifyDownloadDestroyed();
  void NotifyDownloadRemoved();
  void NotifyDownloadUpdated();

  void SetId(uint32_t id);
  void SetGuid(const std::string& guid);
  void SetURL(const GURL& url);
  void SetUrlChain(const std::vector<GURL>& url_chain);
  void SetTargetFilePath(const base::FilePath& file_path);
  void SetFileExternallyRemoved(bool is_file_externally_removed);
  void SetStartTime(base::Time start_time);
  void SetEndTime(base::Time end_time);
  void SetState(const DownloadState& state);
  void SetResponseHeaders(
      scoped_refptr<const net::HttpResponseHeaders> response_headers);
  void SetMimeType(const std::string& mime_type);
  void SetOriginalUrl(const GURL& url);
  void SetTabUrl(const GURL& url);
  void SetLastReason(download::DownloadInterruptReason last_reason);
  void SetReceivedBytes(int64_t received_bytes);
  void SetTotalBytes(int64_t total_bytes);
  void SetIsTransient(bool is_transient);
  void SetIsParallelDownload(bool is_parallel_download);
  void SetIsDone(bool is_done);
  void SetETag(const std::string& etag);
  void SetLastModifiedTime(const std::string& last_modified_time);
  void SetHash(const std::string& hash);
  void SetPercentComplete(int percent_complete);
  void SetDummyFilePath(const base::FilePath& dummy_file_path);
  void SetIsDangerous(bool is_dangerous);
  void SetIsInsecure(bool is_insecure);
  void SetDangerType(download::DownloadDangerType danger_type);
  void SetInsecureDownloadStatus(
      download::DownloadItem::InsecureDownloadStatus insecure_download_status);

 private:
  base::ObserverList<Observer> observers_;
  uint32_t id_ = 0;
  std::string guid_;
  GURL url_;
  std::vector<GURL> url_chain_;
  base::FilePath file_path_;
  bool is_file_externally_removed_ = false;
  bool removed_ = false;
  base::Time start_time_;
  base::Time end_time_;
  base::Time last_access_time_;
  // MAX_DOWNLOAD_STATE is used as the uninitialized state.
  DownloadState download_state_ =
      download::DownloadItem::DownloadState::MAX_DOWNLOAD_STATE;
  scoped_refptr<const net::HttpResponseHeaders> response_headers_;
  std::string mime_type_;
  GURL original_url_;
  GURL tab_url_;
  download::DownloadInterruptReason last_reason_ =
      download::DOWNLOAD_INTERRUPT_REASON_NONE;
  int64_t received_bytes_ = 0;
  int64_t uploaded_bytes_ = 0;
  int64_t total_bytes_ = 0;
  bool is_transient_ = false;
  bool is_parallel_download_ = false;
  bool is_done_ = false;
  std::string etag_;
  std::string last_modified_time_;
  std::string hash_;
  int percent_complete_ = 0;
  bool open_when_complete_ = false;
  bool is_dangerous_ = false;
  bool is_insecure_ = false;
  std::optional<net::IsolationInfo> isolation_info_;
  download::DownloadDangerType danger_type_ =
      download::DownloadDangerType::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS;
  download::DownloadItem::InsecureDownloadStatus insecure_download_status_ =
      download::DownloadItem::InsecureDownloadStatus::UNKNOWN;

  // The members below are to be returned by methods, which return by reference.
  GURL dummy_url;
  std::string serialized_embedder_download_data;
  std::optional<url::Origin> dummy_origin;
  base::FilePath dummy_file_path;
};

}  // namespace content

#endif  // CONTENT_PUBLIC_TEST_FAKE_DOWNLOAD_ITEM_H_