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_SHELL_SHELL_DOWNLOAD_MANAGER_DELEGATE_H_
6#define CONTENT_SHELL_SHELL_DOWNLOAD_MANAGER_DELEGATE_H_
7
8#include "base/compiler_specific.h"
9#include "base/memory/ref_counted.h"
10#include "content/public/browser/download_manager_delegate.h"
11
12namespace content {
13
14class DownloadManager;
15
16class ShellDownloadManagerDelegate
17    : public DownloadManagerDelegate,
18      public base::RefCountedThreadSafe<ShellDownloadManagerDelegate> {
19 public:
20  ShellDownloadManagerDelegate();
21
22  void SetDownloadManager(DownloadManager* manager);
23
24  virtual void Shutdown() OVERRIDE;
25  virtual bool DetermineDownloadTarget(
26      DownloadItem* download,
27      const DownloadTargetCallback& callback) OVERRIDE;
28  virtual bool ShouldOpenDownload(
29      DownloadItem* item,
30      const DownloadOpenDelayedCallback& callback) OVERRIDE;
31  virtual void GetNextId(const DownloadIdCallback& callback) OVERRIDE;
32
33  // Inhibits prompting and sets the default download path.
34  void SetDownloadBehaviorForTesting(
35      const base::FilePath& default_download_path);
36
37 protected:
38  // To allow subclasses for testing.
39  virtual ~ShellDownloadManagerDelegate();
40
41 private:
42  friend class base::RefCountedThreadSafe<ShellDownloadManagerDelegate>;
43
44
45  void GenerateFilename(uint32 download_id,
46                        const DownloadTargetCallback& callback,
47                        const base::FilePath& generated_name,
48                        const base::FilePath& suggested_directory);
49  void OnDownloadPathGenerated(uint32 download_id,
50                               const DownloadTargetCallback& callback,
51                               const base::FilePath& suggested_path);
52  void ChooseDownloadPath(uint32 download_id,
53                          const DownloadTargetCallback& callback,
54                          const base::FilePath& suggested_path);
55
56  DownloadManager* download_manager_;
57  base::FilePath default_download_path_;
58  bool suppress_prompting_;
59
60  DISALLOW_COPY_AND_ASSIGN(ShellDownloadManagerDelegate);
61};
62
63}  // namespace content
64
65#endif  // CONTENT_SHELL_SHELL_DOWNLOAD_MANAGER_DELEGATE_H_
66