// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_FILE_PICKER_H_ #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_FILE_PICKER_H_ #include "base/callback.h" #include "ui/shell_dialogs/select_file_dialog.h" namespace base { class FilePath; } namespace content { class DownloadItem; class DownloadManager; class WebContents; } // Handles showing a dialog to the user to ask for the filename for a download. class DownloadFilePicker : public ui::SelectFileDialog::Listener { public: // Callback used to pass the user selection back to the owner of this // object. // |virtual_path|: The path chosen by the user. If the user cancels the file // selection, then this parameter will be the empty path. On Chrome OS, // this path may contain virtual mount points if the user chose a virtual // path (e.g. Google Drive). typedef base::Callback<void(const base::FilePath& virtual_path)> FileSelectedCallback; // Display a file picker dialog for |item|. The |suggested_path| will be used // as the initial path displayed to the user. |callback| will always be // invoked even if |item| is destroyed prior to the file picker completing. static void ShowFilePicker(content::DownloadItem* item, const base::FilePath& suggested_path, const FileSelectedCallback& callback); private: DownloadFilePicker(content::DownloadItem* item, const base::FilePath& suggested_path, const FileSelectedCallback& callback); virtual ~DownloadFilePicker(); // Runs |file_selected_callback_| with |virtual_path| and then deletes this // object. void OnFileSelected(const base::FilePath& virtual_path); // SelectFileDialog::Listener implementation. virtual void FileSelected(const base::FilePath& path, int index, void* params) OVERRIDE; virtual void FileSelectionCanceled(void* params) OVERRIDE; // Initially suggested path. base::FilePath suggested_path_; // Callback invoked when a file selection is complete. FileSelectedCallback file_selected_callback_; // For managing select file dialogs. scoped_refptr<ui::SelectFileDialog> select_file_dialog_; // True if UMA regarding on the result of the file selection should be // recorded. bool should_record_file_picker_result_; DISALLOW_COPY_AND_ASSIGN(DownloadFilePicker); }; #endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_FILE_PICKER_H_