1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4//
5// The DownloadItemFactory is used to produce different DownloadItems.
6// It is separate from the DownloadManager to allow download manager
7// unit tests to control the items produced.
8
9#ifndef CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_ITEM_FACTORY_H_
10#define CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_ITEM_FACTORY_H_
11
12#include <string>
13#include <vector>
14
15#include "base/memory/scoped_ptr.h"
16#include "content/public/browser/download_item.h"
17
18class GURL;
19
20namespace base {
21class FilePath;
22}
23
24namespace net {
25class BoundNetLog;
26}
27
28namespace content {
29
30class DownloadItem;
31class DownloadItemImpl;
32class DownloadItemImplDelegate;
33class DownloadRequestHandleInterface;
34struct DownloadCreateInfo;
35
36class DownloadItemFactory {
37public:
38  virtual ~DownloadItemFactory() {}
39
40  virtual DownloadItemImpl* CreatePersistedItem(
41      DownloadItemImplDelegate* delegate,
42      uint32 download_id,
43      const base::FilePath& current_path,
44      const base::FilePath& target_path,
45      const std::vector<GURL>& url_chain,
46      const GURL& referrer_url,
47      const std::string& mime_type,
48      const std::string& original_mime_type,
49      const base::Time& start_time,
50      const base::Time& end_time,
51      const std::string& etag,
52      const std::string& last_modified,
53      int64 received_bytes,
54      int64 total_bytes,
55      DownloadItem::DownloadState state,
56      DownloadDangerType danger_type,
57      DownloadInterruptReason interrupt_reason,
58      bool opened,
59      const net::BoundNetLog& bound_net_log) = 0;
60
61  virtual DownloadItemImpl* CreateActiveItem(
62      DownloadItemImplDelegate* delegate,
63      uint32 download_id,
64      const DownloadCreateInfo& info,
65      const net::BoundNetLog& bound_net_log) = 0;
66
67  virtual DownloadItemImpl* CreateSavePageItem(
68      DownloadItemImplDelegate* delegate,
69      uint32 download_id,
70      const base::FilePath& path,
71      const GURL& url,
72      const std::string& mime_type,
73      scoped_ptr<DownloadRequestHandleInterface> request_handle,
74      const net::BoundNetLog& bound_net_log) = 0;
75};
76
77}  // namespace content
78
79#endif  // CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_ITEM_FACTORY_H_
80