1// Copyright 2013 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_BROWSER_SHELL_DOWNLOAD_MANAGER_DELEGATE_H_ 6#define CONTENT_SHELL_BROWSER_SHELL_DOWNLOAD_MANAGER_DELEGATE_H_ 7 8#include "base/callback_forward.h" 9#include "base/compiler_specific.h" 10#include "base/memory/weak_ptr.h" 11#include "content/public/browser/download_manager_delegate.h" 12 13namespace content { 14 15class DownloadManager; 16 17class ShellDownloadManagerDelegate : public DownloadManagerDelegate { 18 public: 19 ShellDownloadManagerDelegate(); 20 virtual ~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 private: 38 friend class base::RefCountedThreadSafe<ShellDownloadManagerDelegate>; 39 40 typedef base::Callback<void(const base::FilePath&)> 41 FilenameDeterminedCallback; 42 43 static void GenerateFilename(const GURL& url, 44 const std::string& content_disposition, 45 const std::string& suggested_filename, 46 const std::string& mime_type, 47 const base::FilePath& suggested_directory, 48 const FilenameDeterminedCallback& callback); 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 base::WeakPtrFactory<ShellDownloadManagerDelegate> weak_ptr_factory_; 60 61 DISALLOW_COPY_AND_ASSIGN(ShellDownloadManagerDelegate); 62}; 63 64} // namespace content 65 66#endif // CONTENT_SHELL_BROWSER_SHELL_DOWNLOAD_MANAGER_DELEGATE_H_ 67