From 232719f9f8c005573640c48e96ce154632db5804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Franch?= Date: Tue, 6 Oct 2026 14:06:52 +0200 Subject: [PATCH] feat(libs): implement sceWebBrowserDialogGetStatus Co-Authored-By: Claude --- .../prx/libSceWebBrowserDialog/CMakeLists.txt | 20 +++++++++++ .../prx/libSceWebBrowserDialog/Export.cpp | 4 +++ core/libs/tests/GuestWebBrowserDialog.cpp | 34 +++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 core/libs/prx/libSceWebBrowserDialog/CMakeLists.txt create mode 100644 core/libs/tests/GuestWebBrowserDialog.cpp diff --git a/core/libs/prx/libSceWebBrowserDialog/CMakeLists.txt b/core/libs/prx/libSceWebBrowserDialog/CMakeLists.txt new file mode 100644 index 000000000..b73af180a --- /dev/null +++ b/core/libs/prx/libSceWebBrowserDialog/CMakeLists.txt @@ -0,0 +1,20 @@ +add_library(libSceWebBrowserDialog SHARED EXCLUDE_FROM_ALL Export.cpp) +target_include_directories(libSceWebBrowserDialog PRIVATE ${LIBS_INCLUDE_DIR}) +configure_windows_unwind(libSceWebBrowserDialog) + +if(MINGW) + foreach(runtimeLinkFlag IN ITEMS -static-libgcc -static-libstdc++ -static) + string(REPLACE "${runtimeLinkFlag}" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") + endforeach() +endif() + +if(BUILD_TESTING) + add_test_executable(guest_web_browser_dialog_tests ${LIBS_INCLUDE_DIR}/tests/GuestWebBrowserDialog.cpp) + target_include_directories(guest_web_browser_dialog_tests PRIVATE ${LIBS_INCLUDE_DIR}) + target_link_libraries(guest_web_browser_dialog_tests PRIVATE libSceWebBrowserDialog) + add_test(NAME guest_web_browser_dialog COMMAND guest_web_browser_dialog_tests) + if(WIN32) + set_tests_properties(guest_web_browser_dialog PROPERTIES ENVIRONMENT_MODIFICATION + "PATH=path_list_prepend:$") + endif() +endif() diff --git a/core/libs/prx/libSceWebBrowserDialog/Export.cpp b/core/libs/prx/libSceWebBrowserDialog/Export.cpp index 879608486..be76145bf 100644 --- a/core/libs/prx/libSceWebBrowserDialog/Export.cpp +++ b/core/libs/prx/libSceWebBrowserDialog/Export.cpp @@ -46,6 +46,10 @@ int APS5_VABI sceWebBrowserDialogGetResult(void* result) { return 0; } +int APS5_VABI sceWebBrowserDialogGetStatus(void) { + return g_status.load(); +} + int APS5_VABI sceWebBrowserDialogOpen(const void* param) { const int status = g_status.load(); if (status == COMMON_DIALOG_STATUS_NONE) return COMMON_DIALOG_ERROR_NOT_INITIALIZED; diff --git a/core/libs/tests/GuestWebBrowserDialog.cpp b/core/libs/tests/GuestWebBrowserDialog.cpp new file mode 100644 index 000000000..9e9f02fe0 --- /dev/null +++ b/core/libs/tests/GuestWebBrowserDialog.cpp @@ -0,0 +1,34 @@ +#include "prx/libc/include/general/VabiMacros.hpp" +#include +#include + +extern "C" { +int APS5_VABI sceWebBrowserDialogInitialize(void); +int APS5_VABI sceWebBrowserDialogTerminate(void); +int APS5_VABI sceWebBrowserDialogOpen(const void* param); +int APS5_VABI sceWebBrowserDialogGetStatus(void); +int APS5_VABI sceWebBrowserDialogUpdateStatus(void); +} + +namespace { + +constexpr int COMMON_DIALOG_STATUS_NONE = 0; +constexpr int COMMON_DIALOG_STATUS_INITIALIZED = 1; +constexpr int COMMON_DIALOG_STATUS_FINISHED = 3; + +void Require(bool value) { if (!value) std::abort(); } + +} + +int main() { + Require(sceWebBrowserDialogGetStatus() == COMMON_DIALOG_STATUS_NONE); + Require(sceWebBrowserDialogInitialize() == 0); + Require(sceWebBrowserDialogGetStatus() == COMMON_DIALOG_STATUS_INITIALIZED); + Require(sceWebBrowserDialogTerminate() == 0); + Require(sceWebBrowserDialogGetStatus() == COMMON_DIALOG_STATUS_NONE); + Require(sceWebBrowserDialogInitialize() == 0); + std::uint8_t param[64] = {}; + Require(sceWebBrowserDialogOpen(param) == 0); + Require(sceWebBrowserDialogGetStatus() == COMMON_DIALOG_STATUS_FINISHED); + Require(sceWebBrowserDialogUpdateStatus() == COMMON_DIALOG_STATUS_FINISHED); +}