|
|
|
@ -68,42 +68,6 @@ std::string ResolveURL(const std::string& url) { |
|
|
|
return url.substr(0, index) + "lp1" + url.substr(index + 1); |
|
|
|
} |
|
|
|
|
|
|
|
WebArgInputTLVMap ReadWebArgs(const std::vector<u8>& 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<u8> 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 +108,43 @@ FileSys::VirtualFile GetOfflineRomFS(Core::System& system, u64 title_id, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#ifdef YUZU_USE_QT_WEB_ENGINE
|
|
|
|
WebArgInputTLVMap ReadWebArgs(const std::vector<u8>& 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<u8> 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<const char*, 7> DECRYPTED_SHARED_FONTS{ |
|
|
|
"FontStandard.ttf", |
|
|
|
@ -221,6 +222,7 @@ void ExtractSharedFonts(Core::System& system) { |
|
|
|
FileSys::VfsRawCopy(decrypted_font, out_file); |
|
|
|
} |
|
|
|
} |
|
|
|
#endif
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
@ -232,6 +234,7 @@ WebBrowser::WebBrowser(Core::System& system_, std::shared_ptr<Applet> 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 +287,7 @@ void WebBrowser::Initialize() { |
|
|
|
ASSERT_MSG(false, "Invalid ShimKind={}", web_arg_header.shim_kind); |
|
|
|
break; |
|
|
|
} |
|
|
|
#endif
|
|
|
|
} |
|
|
|
|
|
|
|
Result WebBrowser::GetStatus() const { |
|
|
|
@ -295,6 +299,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 +327,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() { |
|
|
|
|