1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 14:25:06 +00:00

WindowServer: Post error messages to clients on protocol failure.

This commit is contained in:
Andreas Kling 2019-02-14 09:32:34 +01:00
parent f33f094483
commit 222a6f7bbc
4 changed files with 53 additions and 17 deletions

View file

@ -46,6 +46,17 @@ WSClientConnection::~WSClientConnection()
s_connections->resource().remove(m_client_id);
}
void WSClientConnection::post_error(const String& error_message)
{
dbgprintf("WSClientConnection::post_error: client_id=%d: %s\n", m_client_id, error_message.characters());
GUI_ServerMessage message;
message.type = GUI_ServerMessage::Type::Error;
ASSERT(error_message.length() < sizeof(message.text));
strcpy(message.text, error_message.characters());
message.text_length = error_message.length();
WSMessageLoop::the().post_message_to_client(m_client_id, message);
}
void WSClientConnection::on_message(WSMessage& message)
{
if (message.is_client_request()) {
@ -106,8 +117,7 @@ void WSClientConnection::handle_request(WSAPIDestroyMenuRequest& request)
int menu_id = static_cast<WSAPIDestroyMenuRequest&>(request).menu_id();
auto it = m_menus.find(menu_id);
if (it == m_menus.end()) {
ASSERT_NOT_REACHED();
// FIXME: Send an error.
post_error("Bad menu ID");
return;
}
auto& menu = *(*it).value;
@ -124,8 +134,7 @@ void WSClientConnection::handle_request(WSAPISetApplicationMenubarRequest& reque
int menubar_id = request.menubar_id();
auto it = m_menubars.find(menubar_id);
if (it == m_menubars.end()) {
ASSERT_NOT_REACHED();
// FIXME: Send an error.
post_error("Bad menubar ID");
return;
}
auto& menubar = *(*it).value;
@ -143,8 +152,13 @@ void WSClientConnection::handle_request(WSAPIAddMenuToMenubarRequest& request)
int menu_id = request.menu_id();
auto it = m_menubars.find(menubar_id);
auto jt = m_menus.find(menu_id);
if (it == m_menubars.end() || jt == m_menus.end()) {
ASSERT_NOT_REACHED();
if (it == m_menubars.end()) {
post_error("Bad menubar ID");
return;
}
if (jt == m_menus.end()) {
post_error("Bad menu ID");
return;
}
auto& menubar = *(*it).value;
auto& menu = *(*jt).value;
@ -163,7 +177,8 @@ void WSClientConnection::handle_request(WSAPIAddMenuItemRequest& request)
String text = request.text();
auto it = m_menus.find(menu_id);
if (it == m_menus.end()) {
ASSERT_NOT_REACHED();
post_error("Bad menu ID");
return;
}
auto& menu = *(*it).value;
menu.add_item(make<WSMenuItem>(identifier, move(text)));
@ -179,7 +194,8 @@ void WSClientConnection::handle_request(WSAPIAddMenuSeparatorRequest& request)
int menu_id = request.menu_id();
auto it = m_menus.find(menu_id);
if (it == m_menus.end()) {
ASSERT_NOT_REACHED();
post_error("Bad menu ID");
return;
}
auto& menu = *(*it).value;
menu.add_item(make<WSMenuItem>(WSMenuItem::Separator));
@ -194,7 +210,8 @@ void WSClientConnection::handle_request(WSAPISetWindowTitleRequest& request)
int window_id = request.window_id();
auto it = m_windows.find(window_id);
if (it == m_windows.end()) {
ASSERT_NOT_REACHED();
post_error("Bad window ID");
return;
}
auto& window = *(*it).value;
window.set_title(request.title());
@ -205,7 +222,8 @@ void WSClientConnection::handle_request(WSAPIGetWindowTitleRequest& request)
int window_id = request.window_id();
auto it = m_windows.find(window_id);
if (it == m_windows.end()) {
ASSERT_NOT_REACHED();
post_error("Bad window ID");
return;
}
auto& window = *(*it).value;
GUI_ServerMessage response;
@ -222,7 +240,8 @@ void WSClientConnection::handle_request(WSAPISetWindowRectRequest& request)
int window_id = request.window_id();
auto it = m_windows.find(window_id);
if (it == m_windows.end()) {
ASSERT_NOT_REACHED();
post_error("Bad window ID");
return;
}
auto& window = *(*it).value;
window.set_rect(request.rect());
@ -233,7 +252,8 @@ void WSClientConnection::handle_request(WSAPIGetWindowRectRequest& request)
int window_id = request.window_id();
auto it = m_windows.find(window_id);
if (it == m_windows.end()) {
ASSERT_NOT_REACHED();
post_error("Bad window ID");
return;
}
auto& window = *(*it).value;
GUI_ServerMessage response;
@ -261,7 +281,8 @@ void WSClientConnection::handle_request(WSAPIDestroyWindowRequest& request)
int window_id = request.window_id();
auto it = m_windows.find(window_id);
if (it == m_windows.end()) {
ASSERT_NOT_REACHED();
post_error("Bad window ID");
return;
}
auto& window = *(*it).value;
WSWindowManager::the().invalidate(window);
@ -273,7 +294,8 @@ void WSClientConnection::handle_request(WSAPIInvalidateRectRequest& request)
int window_id = request.window_id();
auto it = m_windows.find(window_id);
if (it == m_windows.end()) {
ASSERT_NOT_REACHED();
post_error("Bad window ID");
return;
}
GUI_ServerMessage response;
response.type = GUI_ServerMessage::Type::Paint;
@ -287,7 +309,8 @@ void WSClientConnection::handle_request(WSAPIDidFinishPaintingNotification& requ
int window_id = request.window_id();
auto it = m_windows.find(window_id);
if (it == m_windows.end()) {
ASSERT_NOT_REACHED();
post_error("Bad window ID");
return;
}
auto& window = *(*it).value;
WSWindowManager::the().invalidate(window, request.rect());
@ -298,7 +321,8 @@ void WSClientConnection::handle_request(WSAPIGetWindowBackingStoreRequest& reque
int window_id = request.window_id();
auto it = m_windows.find(window_id);
if (it == m_windows.end()) {
ASSERT_NOT_REACHED();
post_error("Bad window ID");
return;
}
auto& window = *(*it).value;
auto* backing_store = window.backing();
@ -330,7 +354,8 @@ void WSClientConnection::handle_request(WSAPISetGlobalCursorTrackingRequest& req
int window_id = request.window_id();
auto it = m_windows.find(window_id);
if (it == m_windows.end()) {
ASSERT_NOT_REACHED();
post_error("Bad window ID");
return;
}
auto& window = *(*it).value;
window.set_global_cursor_tracking_enabled(request.value());