 fde3137b90
			
		
	
	
	
	
	fde3137b90* fix: update the FileSelectHelper to support the new promise API Fixes #18254 So it turns out we've successfully introduced a way to write non-typesafe C++. This fixes two things: * Uses the object the promise resolves * Ensures we attach the Then handler before moving the promise * fix: also fix misuse of Promise::Then in the download manager
		
			
				
	
	
		
			61 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (c) 2015 GitHub, Inc.
 | |
| // Use of this source code is governed by the MIT license that can be
 | |
| // found in the LICENSE file.
 | |
| 
 | |
| #ifndef ATOM_BROWSER_ATOM_DOWNLOAD_MANAGER_DELEGATE_H_
 | |
| #define ATOM_BROWSER_ATOM_DOWNLOAD_MANAGER_DELEGATE_H_
 | |
| 
 | |
| #include <string>
 | |
| 
 | |
| #include "atom/browser/ui/file_dialog.h"
 | |
| #include "base/memory/weak_ptr.h"
 | |
| #include "content/public/browser/download_manager_delegate.h"
 | |
| 
 | |
| namespace content {
 | |
| class DownloadManager;
 | |
| }
 | |
| 
 | |
| namespace atom {
 | |
| 
 | |
| class AtomDownloadManagerDelegate : public content::DownloadManagerDelegate {
 | |
|  public:
 | |
|   using CreateDownloadPathCallback =
 | |
|       base::Callback<void(const base::FilePath&)>;
 | |
| 
 | |
|   explicit AtomDownloadManagerDelegate(content::DownloadManager* manager);
 | |
|   ~AtomDownloadManagerDelegate() override;
 | |
| 
 | |
|   // content::DownloadManagerDelegate:
 | |
|   void Shutdown() override;
 | |
|   bool DetermineDownloadTarget(
 | |
|       download::DownloadItem* download,
 | |
|       const content::DownloadTargetCallback& callback) override;
 | |
|   bool ShouldOpenDownload(
 | |
|       download::DownloadItem* download,
 | |
|       const content::DownloadOpenDelayedCallback& callback) override;
 | |
|   void GetNextId(const content::DownloadIdCallback& callback) override;
 | |
| 
 | |
|  private:
 | |
|   // Get the save path set on the associated api::DownloadItem object
 | |
|   void GetItemSavePath(download::DownloadItem* item, base::FilePath* path);
 | |
|   void GetItemSaveDialogOptions(download::DownloadItem* item,
 | |
|                                 file_dialog::DialogSettings* settings);
 | |
| 
 | |
|   void OnDownloadPathGenerated(uint32_t download_id,
 | |
|                                const content::DownloadTargetCallback& callback,
 | |
|                                const base::FilePath& default_path);
 | |
| 
 | |
|   void OnDownloadSaveDialogDone(
 | |
|       uint32_t download_id,
 | |
|       const content::DownloadTargetCallback& download_callback,
 | |
|       mate::Dictionary result);
 | |
| 
 | |
|   content::DownloadManager* download_manager_;
 | |
|   base::WeakPtrFactory<AtomDownloadManagerDelegate> weak_ptr_factory_;
 | |
| 
 | |
|   DISALLOW_COPY_AND_ASSIGN(AtomDownloadManagerDelegate);
 | |
| };
 | |
| 
 | |
| }  // namespace atom
 | |
| 
 | |
| #endif  // ATOM_BROWSER_ATOM_DOWNLOAD_MANAGER_DELEGATE_H_
 |