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 CEF_LIBCEF_BROWSER_EXTENSIONS_API_FILE_SYSTEM_FILE_SYSTEM_DELEGATE_H_ 6 #define CEF_LIBCEF_BROWSER_EXTENSIONS_API_FILE_SYSTEM_FILE_SYSTEM_DELEGATE_H_ 7 8 #include <memory> 9 10 #include "base/callback.h" 11 #include "base/compiler_specific.h" 12 #include "base/memory/ref_counted.h" 13 #include "base/memory/weak_ptr.h" 14 #include "extensions/browser/api/execute_code_function.h" 15 #include "extensions/browser/api/file_system/file_system_delegate.h" 16 #include "extensions/browser/extension_function.h" 17 18 namespace content { 19 class WebContents; 20 } 21 22 namespace extensions { 23 namespace cef { 24 25 class CefFileSystemDelegate : public FileSystemDelegate { 26 public: 27 CefFileSystemDelegate(); 28 29 CefFileSystemDelegate(const CefFileSystemDelegate&) = delete; 30 CefFileSystemDelegate& operator=(const CefFileSystemDelegate&) = delete; 31 32 ~CefFileSystemDelegate() override; 33 34 // FileSystemDelegate 35 base::FilePath GetDefaultDirectory() override; 36 base::FilePath GetManagedSaveAsDirectory( 37 content::BrowserContext* browser_context, 38 const Extension& extension) override; 39 bool ShowSelectFileDialog( 40 scoped_refptr<ExtensionFunction> extension_function, 41 ui::SelectFileDialog::Type type, 42 const base::FilePath& default_path, 43 const ui::SelectFileDialog::FileTypeInfo* file_types, 44 FileSystemDelegate::FilesSelectedCallback files_selected_callback, 45 base::OnceClosure file_selection_canceled_callback) override; 46 void ConfirmSensitiveDirectoryAccess(bool has_write_permission, 47 const std::u16string& app_name, 48 content::WebContents* web_contents, 49 base::OnceClosure on_accept, 50 base::OnceClosure on_cancel) override; 51 int GetDescriptionIdForAcceptType(const std::string& accept_type) override; 52 SavedFilesServiceInterface* GetSavedFilesService( 53 content::BrowserContext* browser_context) override; 54 55 private: 56 void FileDialogDismissed( 57 FileSystemDelegate::FilesSelectedCallback files_selected_callback, 58 base::OnceClosure file_selection_canceled_callback, 59 int selected_accept_filter, 60 const std::vector<base::FilePath>& file_paths); 61 62 base::WeakPtrFactory<CefFileSystemDelegate> weak_ptr_factory_{this}; 63 }; 64 65 } // namespace cef 66 } // namespace extensions 67 68 #endif // CEF_LIBCEF_BROWSER_EXTENSIONS_API_FILE_SYSTEM_FILE_SYSTEM_DELEGATE_H_ 69