• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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