#include "third_party/blink/renderer/modules/file_system_access/global_file_system_access.h"
#include <utility>
#include "base/notreached.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "third_party/blink/public/mojom/file_system_access/file_system_access_error.mojom-blink.h"
#include "third_party/blink/public/mojom/file_system_access/file_system_access_manager.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/file_system_access/file_system_access_manager.mojom-blink.h"
#include "third_party/blink/public/mojom/file_system_access/file_system_access_manager.mojom-shared.h"
#include "third_party/blink/public/mojom/frame/user_activation_notification_type.mojom-shared.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_union_usvstring_usvstringsequence.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_directory_picker_options.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_file_picker_accept_type.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_open_file_picker_options.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_save_file_picker_options.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_union_filesystemhandle_wellknowndirectory.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_well_known_directory.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/probe/core_probes.h"
#include "third_party/blink/renderer/modules/file_system_access/file_system_access_error.h"
#include "third_party/blink/renderer/modules/file_system_access/file_system_access_manager.h"
#include "third_party/blink/renderer/modules/file_system_access/file_system_directory_handle.h"
#include "third_party/blink/renderer/modules/file_system_access/file_system_file_handle.h"
#include "third_party/blink/renderer/platform/bindings/exception_code.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/network/http_parsers.h"
#include "third_party/blink/renderer/platform/weborigin/security_origin.h"
#include "third_party/blink/renderer/platform/wtf/functional.h"
#include "third_party/blink/renderer/platform/wtf/text/ascii_ctype.h"
namespace blink {
namespace {
constexpr char kDefaultStartingDirectoryId[] = …;
constexpr bool IsHTTPWhitespace(UChar chr) { … }
bool IsValidSuffixCodePoint(UChar chr) { … }
bool IsValidIdCodePoint(UChar chr) { … }
bool VerifyIsValidExtension(const String& extension,
ExceptionState& exception_state) { … }
String VerifyIsValidId(const String& id, ExceptionState& exception_state) { … }
bool AddExtension(const String& extension,
Vector<String>& extensions,
ExceptionState& exception_state) { … }
Vector<mojom::blink::ChooseFileSystemEntryAcceptsOptionPtr> ConvertAccepts(
const HeapVector<Member<FilePickerAcceptType>>& types,
ExceptionState& exception_state) { … }
void VerifyIsAllowedToShowFilePicker(const LocalDOMWindow& window,
ExceptionState& exception_state) { … }
mojom::blink::WellKnownDirectory ToMojomWellKnownDirectory(
V8WellKnownDirectory v8_well_known_directory) { … }
mojom::blink::FilePickerStartInOptionsUnionPtr ToMojomStartInOptions(
const V8UnionFileSystemHandleOrWellKnownDirectory* start_in_union) { … }
enum class ShowFilePickerType { … };
void ShowFilePickerImpl(ScriptPromiseResolverBase* resolver,
LocalDOMWindow& window,
mojom::blink::FilePickerOptionsPtr options,
ExceptionState& exception_state,
ShowFilePickerType type) { … }
}
ScriptPromise<IDLSequence<FileSystemFileHandle>>
GlobalFileSystemAccess::showOpenFilePicker(ScriptState* script_state,
LocalDOMWindow& window,
const OpenFilePickerOptions* options,
ExceptionState& exception_state) { … }
ScriptPromise<FileSystemFileHandle> GlobalFileSystemAccess::showSaveFilePicker(
ScriptState* script_state,
LocalDOMWindow& window,
const SaveFilePickerOptions* options,
ExceptionState& exception_state) { … }
ScriptPromise<FileSystemDirectoryHandle>
GlobalFileSystemAccess::showDirectoryPicker(
ScriptState* script_state,
LocalDOMWindow& window,
const DirectoryPickerOptions* options,
ExceptionState& exception_state) { … }
}