mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	All file dialogs irrespective of source, platform and runtime will now be routed through CefFileDialogManager and trigger CefDialogHandler callbacks (see issue #3293). Adds Chrome runtime support for CefBrowserHost::RunFileDialog and CefDialogHandler callbacks. Adds Alloy runtime support for internal GTK file and print dialogs on Linux subject to the following limitations: 1. Internal GTK implementation: - Cannot be used with multi-threaded-message-loop because Chromium's internal GTK implementation is not thread-safe (does not use GDK threads). - Dialogs will not be modal to application windows when used with off-screen rendering due to lack of access to the client's top-level GtkWindow. 2. Cefclient CefDialogHandler implementation: - Cannot be used with Views because it requires a top-level GtkWindow. Due to the above limitations no dialog implementation is currently provided for Views + multi-threaded-message-loop on Linux. In cases where both implementations are supported the cefclient version is now behind an optional `--use-client-dialogs` command-line flag. Expressly forbids multiple simultaneous file dialogs with the internal platform implementation which uses modal dialogs. CefDialogHandler will still be notified and can optionally handle each request without a modal dialog (see issue #3154). Removes some RunFileDialog parameters that are not supported by the Chrome file dialog implementation (selected_accept_filter parameter, cef_file_dialog_mode_t overwrite/read-only flags).
		
			
				
	
	
		
			83 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright 2019 The Chromium Embedded Framework Authors. Portions copyright
 | 
						|
// 2013 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 CEF_LIBCEF_BROWSER_DEVTOOLS_DEVTOOLS_FILE_MANAGER_H_
 | 
						|
#define CEF_LIBCEF_BROWSER_DEVTOOLS_DEVTOOLS_FILE_MANAGER_H_
 | 
						|
 | 
						|
#include "base/callback_forward.h"
 | 
						|
#include "base/memory/weak_ptr.h"
 | 
						|
 | 
						|
#include <map>
 | 
						|
#include <string>
 | 
						|
 | 
						|
namespace base {
 | 
						|
class FilePath;
 | 
						|
class SequencedTaskRunner;
 | 
						|
class Value;
 | 
						|
}  // namespace base
 | 
						|
 | 
						|
class AlloyBrowserHostImpl;
 | 
						|
class PrefService;
 | 
						|
 | 
						|
// File management helper for DevTools.
 | 
						|
// Based on chrome/browser/devtools/devtools_ui_bindings.cc and
 | 
						|
// chrome/browser/devtools/devtools_file_helper.cc.
 | 
						|
class CefDevToolsFileManager {
 | 
						|
 public:
 | 
						|
  CefDevToolsFileManager(AlloyBrowserHostImpl* browser_impl,
 | 
						|
                         PrefService* prefs);
 | 
						|
 | 
						|
  CefDevToolsFileManager(const CefDevToolsFileManager&) = delete;
 | 
						|
  CefDevToolsFileManager& operator=(const CefDevToolsFileManager&) = delete;
 | 
						|
 | 
						|
  void SaveToFile(const std::string& url,
 | 
						|
                  const std::string& content,
 | 
						|
                  bool save_as);
 | 
						|
  void AppendToFile(const std::string& url, const std::string& content);
 | 
						|
 | 
						|
 private:
 | 
						|
  // SaveToFile implementation:
 | 
						|
  using SaveCallback = base::OnceCallback<void(const std::string&)>;
 | 
						|
  using CancelCallback = base::OnceCallback<void()>;
 | 
						|
  void Save(const std::string& url,
 | 
						|
            const std::string& content,
 | 
						|
            bool save_as,
 | 
						|
            SaveCallback saveCallback,
 | 
						|
            CancelCallback cancelCallback);
 | 
						|
  void SaveAsDialogDismissed(const std::string& url,
 | 
						|
                             const std::string& content,
 | 
						|
                             SaveCallback saveCallback,
 | 
						|
                             CancelCallback cancelCallback,
 | 
						|
                             const std::vector<base::FilePath>& file_paths);
 | 
						|
  void SaveAsFileSelected(const std::string& url,
 | 
						|
                          const std::string& content,
 | 
						|
                          SaveCallback callback,
 | 
						|
                          const base::FilePath& path);
 | 
						|
  void FileSavedAs(const std::string& url, const std::string& file_system_path);
 | 
						|
  void CanceledFileSaveAs(const std::string& url);
 | 
						|
 | 
						|
  // AppendToFile implementation:
 | 
						|
  using AppendCallback = base::OnceCallback<void(void)>;
 | 
						|
  void Append(const std::string& url,
 | 
						|
              const std::string& content,
 | 
						|
              AppendCallback callback);
 | 
						|
  void AppendedTo(const std::string& url);
 | 
						|
 | 
						|
  void CallClientFunction(const std::string& function_name,
 | 
						|
                          const base::Value* arg1,
 | 
						|
                          const base::Value* arg2,
 | 
						|
                          const base::Value* arg3);
 | 
						|
 | 
						|
  // Guaranteed to outlive this object.
 | 
						|
  AlloyBrowserHostImpl* browser_impl_;
 | 
						|
  PrefService* prefs_;
 | 
						|
 | 
						|
  using PathsMap = std::map<std::string, base::FilePath>;
 | 
						|
  PathsMap saved_files_;
 | 
						|
  scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
 | 
						|
  base::WeakPtrFactory<CefDevToolsFileManager> weak_factory_;
 | 
						|
};
 | 
						|
 | 
						|
#endif  // CEF_LIBCEF_BROWSER_DEVTOOLS_DEVTOOLS_FILE_MANAGER_H_
 |