From 1e1b8ad33face3f3409aec50818d2b4fda8e6a0d Mon Sep 17 00:00:00 2001 From: MaranBr Date: Sat, 11 Oct 2025 14:45:14 +0200 Subject: [PATCH] [common] Properly skip Custom Web Applet if YUZU_USE_QT_WEB_ENGINE is not defined (#2717) This restores the Offline Web Applet LLE setting as default and properly skip Custom Web Applet if YUZU_USE_QT_WEB_ENGINE is not defined preventing crashes. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2717 Reviewed-by: crueter Reviewed-by: Maufeat Co-authored-by: MaranBr Co-committed-by: MaranBr --- src/common/settings.h | 2 +- .../am/frontend/applet_web_browser.cpp | 84 +++++++++++-------- 2 files changed, 49 insertions(+), 37 deletions(-) diff --git a/src/common/settings.h b/src/common/settings.h index dd9b03f28e..c6b52f7ba3 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -161,7 +161,7 @@ struct Values { Category::LibraryApplet}; Setting photo_viewer_applet_mode{ linkage, AppletMode::LLE, "photo_viewer_applet_mode", Category::LibraryApplet}; - Setting offline_web_applet_mode{linkage, AppletMode::HLE, "offline_web_applet_mode", + Setting offline_web_applet_mode{linkage, AppletMode::LLE, "offline_web_applet_mode", Category::LibraryApplet}; Setting login_share_applet_mode{linkage, AppletMode::HLE, "login_share_applet_mode", Category::LibraryApplet}; diff --git a/src/core/hle/service/am/frontend/applet_web_browser.cpp b/src/core/hle/service/am/frontend/applet_web_browser.cpp index e35a1daa1e..53fe867b9e 100644 --- a/src/core/hle/service/am/frontend/applet_web_browser.cpp +++ b/src/core/hle/service/am/frontend/applet_web_browser.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -68,42 +71,6 @@ std::string ResolveURL(const std::string& url) { return url.substr(0, index) + "lp1" + url.substr(index + 1); } -WebArgInputTLVMap ReadWebArgs(const std::vector& web_arg, WebArgHeader& web_arg_header) { - std::memcpy(&web_arg_header, web_arg.data(), sizeof(WebArgHeader)); - - if (web_arg.size() == sizeof(WebArgHeader)) { - return {}; - } - - WebArgInputTLVMap input_tlv_map; - - u64 current_offset = sizeof(WebArgHeader); - - for (std::size_t i = 0; i < web_arg_header.total_tlv_entries; ++i) { - if (web_arg.size() < current_offset + sizeof(WebArgInputTLV)) { - return input_tlv_map; - } - - WebArgInputTLV input_tlv; - std::memcpy(&input_tlv, web_arg.data() + current_offset, sizeof(WebArgInputTLV)); - - current_offset += sizeof(WebArgInputTLV); - - if (web_arg.size() < current_offset + input_tlv.arg_data_size) { - return input_tlv_map; - } - - std::vector data(input_tlv.arg_data_size); - std::memcpy(data.data(), web_arg.data() + current_offset, input_tlv.arg_data_size); - - current_offset += input_tlv.arg_data_size; - - input_tlv_map.insert_or_assign(input_tlv.input_tlv_type, std::move(data)); - } - - return input_tlv_map; -} - FileSys::VirtualFile GetOfflineRomFS(Core::System& system, u64 title_id, FileSys::ContentRecordType nca_type) { if (nca_type == FileSys::ContentRecordType::Data) { @@ -144,6 +111,43 @@ FileSys::VirtualFile GetOfflineRomFS(Core::System& system, u64 title_id, } } +#ifdef YUZU_USE_QT_WEB_ENGINE +WebArgInputTLVMap ReadWebArgs(const std::vector& web_arg, WebArgHeader& web_arg_header) { + std::memcpy(&web_arg_header, web_arg.data(), sizeof(WebArgHeader)); + + if (web_arg.size() == sizeof(WebArgHeader)) { + return {}; + } + + WebArgInputTLVMap input_tlv_map; + + u64 current_offset = sizeof(WebArgHeader); + + for (std::size_t i = 0; i < web_arg_header.total_tlv_entries; ++i) { + if (web_arg.size() < current_offset + sizeof(WebArgInputTLV)) { + return input_tlv_map; + } + + WebArgInputTLV input_tlv; + std::memcpy(&input_tlv, web_arg.data() + current_offset, sizeof(WebArgInputTLV)); + + current_offset += sizeof(WebArgInputTLV); + + if (web_arg.size() < current_offset + input_tlv.arg_data_size) { + return input_tlv_map; + } + + std::vector data(input_tlv.arg_data_size); + std::memcpy(data.data(), web_arg.data() + current_offset, input_tlv.arg_data_size); + + current_offset += input_tlv.arg_data_size; + + input_tlv_map.insert_or_assign(input_tlv.input_tlv_type, std::move(data)); + } + + return input_tlv_map; +} + void ExtractSharedFonts(Core::System& system) { static constexpr std::array DECRYPTED_SHARED_FONTS{ "FontStandard.ttf", @@ -221,6 +225,7 @@ void ExtractSharedFonts(Core::System& system) { FileSys::VfsRawCopy(decrypted_font, out_file); } } +#endif } // namespace @@ -232,6 +237,7 @@ WebBrowser::WebBrowser(Core::System& system_, std::shared_ptr applet_, WebBrowser::~WebBrowser() = default; void WebBrowser::Initialize() { +#ifdef YUZU_USE_QT_WEB_ENGINE FrontendApplet::Initialize(); LOG_INFO(Service_AM, "Initializing Web Browser Applet."); @@ -284,6 +290,7 @@ void WebBrowser::Initialize() { ASSERT_MSG(false, "Invalid ShimKind={}", web_arg_header.shim_kind); break; } +#endif } Result WebBrowser::GetStatus() const { @@ -295,6 +302,7 @@ void WebBrowser::ExecuteInteractive() { } void WebBrowser::Execute() { +#ifdef YUZU_USE_QT_WEB_ENGINE switch (web_arg_header.shim_kind) { case ShimKind::Shop: ExecuteShop(); @@ -322,6 +330,10 @@ void WebBrowser::Execute() { WebBrowserExit(WebExitReason::EndButtonPressed); break; } +#else + LOG_INFO(Service_AM, "Web Browser Applet disabled, skipping."); + WebBrowserExit(WebExitReason::EndButtonPressed); +#endif } void WebBrowser::ExtractOfflineRomFS() {