1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 02:07:36 +00:00

FileSystemAccessServer: Manage concurrent file requests

Before this patch, when you called FileSystemAccessServer::Client::try_*
twice, the second call used the same variable to store the promise. This
"race condition" is now solved using a HashMap, to store multiple
parallel requests.
This commit is contained in:
Lucas CHOLLET 2022-02-26 17:24:22 +01:00 committed by Linus Groh
parent e432a284d7
commit 9521952f36
6 changed files with 88 additions and 61 deletions

View file

@ -27,19 +27,19 @@ public:
private:
explicit ConnectionFromClient(NonnullOwnPtr<Core::Stream::LocalSocket>);
virtual void request_file_read_only_approved(i32, i32, String const&) override;
virtual void request_file(i32, i32, String const&, Core::OpenMode const&) override;
virtual void prompt_open_file(i32, i32, String const&, String const&, Core::OpenMode const&) override;
virtual void prompt_save_file(i32, i32, String const&, String const&, String const&, Core::OpenMode const&) override;
virtual void request_file_read_only_approved(i32, i32, i32, String const&) override;
virtual void request_file(i32, i32, i32, String const&, Core::OpenMode const&) override;
virtual void prompt_open_file(i32, i32, i32, String const&, String const&, Core::OpenMode const&) override;
virtual void prompt_save_file(i32, i32, i32, String const&, String const&, String const&, Core::OpenMode const&) override;
void prompt_helper(Optional<String> const&, Core::OpenMode const&);
void prompt_helper(i32, Optional<String> const&, Core::OpenMode const&);
RefPtr<GUI::Window> create_dummy_child_window(i32, i32);
enum class ShouldPrompt {
No,
Yes
};
void request_file_handler(i32, i32, String const&, Core::OpenMode const&, ShouldPrompt);
void request_file_handler(i32, i32, i32, String const&, Core::OpenMode const&, ShouldPrompt);
virtual Messages::FileSystemAccessServer::ExposeWindowServerClientIdResponse expose_window_server_client_id() override;