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#ifndef CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_ITEM_IMPL_DELEGATE_H_
6#define CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_ITEM_IMPL_DELEGATE_H_
7
8#include "base/callback.h"
9#include "base/files/file_path.h"
10#include "content/common/content_export.h"
11#include "content/public/browser/download_danger_type.h"
12#include "content/public/browser/download_item.h"
13#include "content/public/browser/download_url_parameters.h"
14
15namespace content {
16class DownloadItemImpl;
17class BrowserContext;
18
19// Delegate for operations that a DownloadItemImpl can't do for itself.
20// The base implementation of this class does nothing (returning false
21// on predicates) so interfaces not of interest to a derived class may
22// be left unimplemented.
23class CONTENT_EXPORT DownloadItemImplDelegate {
24 public:
25  typedef base::Callback<void(
26      const base::FilePath&,            // Target path
27      DownloadItem::TargetDisposition,  // overwrite/uniquify target
28      DownloadDangerType,
29      const base::FilePath&             // Intermediate file path
30                              )> DownloadTargetCallback;
31
32  // The boolean argument indicates whether or not the download was
33  // actually opened.
34  typedef base::Callback<void(bool)> ShouldOpenDownloadCallback;
35
36  DownloadItemImplDelegate();
37  virtual ~DownloadItemImplDelegate();
38
39  // Used for catching use-after-free errors.
40  void Attach();
41  void Detach();
42
43  // Request determination of the download target from the delegate.
44  virtual void DetermineDownloadTarget(
45      DownloadItemImpl* download, const DownloadTargetCallback& callback);
46
47  // Allows the delegate to delay completion of the download.  This function
48  // will either return true (if the download may complete now) or will return
49  // false and call the provided callback at some future point.  This function
50  // may be called repeatedly.
51  virtual bool ShouldCompleteDownload(
52      DownloadItemImpl* download,
53      const base::Closure& complete_callback);
54
55  // Allows the delegate to override the opening of a download. If it returns
56  // true then it's reponsible for opening the item.
57  virtual bool ShouldOpenDownload(
58      DownloadItemImpl* download, const ShouldOpenDownloadCallback& callback);
59
60  // Tests if a file type should be opened automatically.
61  virtual bool ShouldOpenFileBasedOnExtension(const base::FilePath& path);
62
63  // Checks whether a downloaded file still exists and updates the
64  // file's state if the file is already removed.
65  // The check may or may not result in a later asynchronous call
66  // to OnDownloadedFileRemoved().
67  virtual void CheckForFileRemoval(DownloadItemImpl* download_item);
68
69  // Called when an interrupted download is resumed.
70  virtual void ResumeInterruptedDownload(
71      scoped_ptr<content::DownloadUrlParameters> params,
72      uint32 id);
73
74  // For contextual issues like language and prefs.
75  virtual BrowserContext* GetBrowserContext() const;
76
77  // Update the persistent store with our information.
78  virtual void UpdatePersistence(DownloadItemImpl* download);
79
80  // Opens the file associated with this download.
81  virtual void OpenDownload(DownloadItemImpl* download);
82
83  // Shows the download via the OS shell.
84  virtual void ShowDownloadInShell(DownloadItemImpl* download);
85
86  // Handle any delegate portions of a state change operation on the
87  // DownloadItem.
88  virtual void DownloadRemoved(DownloadItemImpl* download);
89
90  // Assert consistent state for delgate object at various transitions.
91  virtual void AssertStateConsistent(DownloadItemImpl* download) const;
92
93 private:
94  // For "Outlives attached DownloadItemImpl" invariant assertion.
95  int count_;
96
97  DISALLOW_COPY_AND_ASSIGN(DownloadItemImplDelegate);
98};
99
100}  // namespace content
101
102#endif  // CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_ITEM_IMPL_DELEGATE_H_
103