1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 08:54:58 +00:00

FileSystemAccessServer: Don't transmit unused data

The server cannot use these values anywhere, because this method always
sets 'prompt = ShouldPrompt::No'. This saves a bunch of roundtrips for
all clients that use FSAS to read abritrary files.
This commit is contained in:
Ben Wiederhake 2023-05-26 19:48:45 +02:00 committed by Jelle Raaijmakers
parent 5857f24bc8
commit 8df7b42078
5 changed files with 8 additions and 17 deletions

View file

@ -49,7 +49,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
auto main_widget = TRY(window->set_main_widget<ThemeEditor::MainWidget>());
if (path.has_value()) {
// Note: This is deferred to ensure that the window has already popped and thus proper window stealing can be performed.
// Note: This is deferred to ensure that the window has already popped and any error dialog boxes would show up correctly.
app->event_loop().deferred_invoke(
[&window, &path, &main_widget]() {
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(window, path.value().to_deprecated_string());

View file

@ -28,21 +28,11 @@ Result Client::request_file_read_only_approved(GUI::Window* parent_window, Depre
auto const id = get_new_id();
m_promises.set(id, RequestData { { Core::Promise<Result>::construct() }, parent_window, Core::File::OpenMode::Read });
auto parent_window_server_client_id = GUI::ConnectionToWindowServer::the().expose_client_id();
auto child_window_server_client_id = expose_window_server_client_id();
auto parent_window_id = parent_window->window_id();
GUI::ConnectionToWindowServer::the().add_window_stealing_for_client(child_window_server_client_id, parent_window_id);
ScopeGuard guard([parent_window_id, child_window_server_client_id] {
GUI::ConnectionToWindowServer::the().remove_window_stealing_for_client(child_window_server_client_id, parent_window_id);
});
if (path.starts_with('/')) {
async_request_file_read_only_approved(id, parent_window_server_client_id, parent_window_id, path);
async_request_file_read_only_approved(id, path);
} else {
auto full_path = LexicalPath::join(TRY(FileSystem::current_working_directory()), path).string();
async_request_file_read_only_approved(id, parent_window_server_client_id, parent_window_id, full_path);
async_request_file_read_only_approved(id, full_path);
}
return handle_promise(id);

View file

@ -55,6 +55,7 @@ void ConnectionFromClient::request_file_handler(i32 request_id, i32 window_serve
auto exe_path = FileSystem::real_path(exe_link).release_value_but_fixme_should_propagate_errors();
if (prompt == ShouldPrompt::Yes) {
VERIFY(window_server_client_id != -1 && parent_window_id != -1);
auto exe_name = LexicalPath::basename(exe_path.to_deprecated_string());
auto text = String::formatted("Allow {} ({}) to {} \"{}\"?", exe_name, pid, access_string, path).release_value_but_fixme_should_propagate_errors();
auto result = GUI::MessageBox::try_show({}, window_server_client_id, parent_window_id, text, "File Permissions Requested"sv).release_value_but_fixme_should_propagate_errors();
@ -87,9 +88,9 @@ void ConnectionFromClient::request_file_handler(i32 request_id, i32 window_serve
}
}
void ConnectionFromClient::request_file_read_only_approved(i32 request_id, i32 window_server_client_id, i32 parent_window_id, DeprecatedString const& path)
void ConnectionFromClient::request_file_read_only_approved(i32 request_id, DeprecatedString const& path)
{
request_file_handler(request_id, window_server_client_id, parent_window_id, path, Core::File::OpenMode::Read, ShouldPrompt::No);
request_file_handler(request_id, -1, -1, path, Core::File::OpenMode::Read, ShouldPrompt::No);
}
void ConnectionFromClient::request_file(i32 request_id, i32 window_server_client_id, i32 parent_window_id, DeprecatedString const& path, Core::File::OpenMode requested_access)

View file

@ -28,7 +28,7 @@ public:
private:
explicit ConnectionFromClient(NonnullOwnPtr<Core::LocalSocket>);
virtual void request_file_read_only_approved(i32, i32, i32, DeprecatedString const&) override;
virtual void request_file_read_only_approved(i32, DeprecatedString const&) override;
virtual void request_file(i32, i32, i32, DeprecatedString const&, Core::File::OpenMode) override;
virtual void prompt_open_file(i32, i32, i32, DeprecatedString const&, DeprecatedString const&, Core::File::OpenMode, Optional<Vector<GUI::FileTypeFilter>> const&) override;
virtual void prompt_save_file(i32, i32, i32, DeprecatedString const&, DeprecatedString const&, DeprecatedString const&, Core::File::OpenMode) override;

View file

@ -3,7 +3,7 @@
endpoint FileSystemAccessServer
{
request_file_read_only_approved(i32 request_id, i32 window_server_client_id, i32 window_id, DeprecatedString path) =|
request_file_read_only_approved(i32 request_id, DeprecatedString path) =|
request_file(i32 request_id, i32 window_server_client_id, i32 window_id, DeprecatedString path, Core::File::OpenMode requested_access) =|
prompt_open_file(i32 request_id, i32 window_server_client_id, i32 window_id, DeprecatedString window_title, DeprecatedString path_to_view, Core::File::OpenMode requested_access, Optional<Vector<GUI::FileTypeFilter>> allowed_file_types) =|
prompt_save_file(i32 request_id, i32 window_server_client_id, i32 window_id, DeprecatedString title, DeprecatedString ext, DeprecatedString path_to_view, Core::File::OpenMode requested_access) =|