aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/CMakeLists.txt411
-rw-r--r--src/common/android/applets/web_browser.cpp50
-rw-r--r--src/common/android/applets/web_browser.h30
-rw-r--r--src/common/android/id_cache.cpp3
4 files changed, 288 insertions, 206 deletions
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index a3d57ffce4..3d09c1caea 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -5,243 +5,242 @@
# GPL-2.0-or-later
if(DEFINED ENV{AZURECIREPO})
- set(BUILD_REPOSITORY $ENV{AZURECIREPO})
+ set(BUILD_REPOSITORY $ENV{AZURECIREPO})
endif()
if(DEFINED ENV{TITLEBARFORMATIDLE})
- set(TITLE_BAR_FORMAT_IDLE $ENV{TITLEBARFORMATIDLE})
+ set(TITLE_BAR_FORMAT_IDLE $ENV{TITLEBARFORMATIDLE})
endif()
if(DEFINED ENV{TITLEBARFORMATRUNNING})
- set(TITLE_BAR_FORMAT_RUNNING $ENV{TITLEBARFORMATRUNNING})
+ set(TITLE_BAR_FORMAT_RUNNING $ENV{TITLEBARFORMATRUNNING})
endif()
if(DEFINED ENV{DISPLAYVERSION})
- set(DISPLAY_VERSION $ENV{DISPLAYVERSION})
+ set(DISPLAY_VERSION $ENV{DISPLAYVERSION})
endif()
include(GenerateSCMRev)
add_library(
- common STATIC
- address_space.cpp
- address_space.h
- algorithm.h
- alignment.h
- announce_multiplayer_room.h
- assert.cpp
- assert.h
- atomic_ops.h
- bit_field.h
- bit_util.h
- bounded_threadsafe_queue.h
- cityhash.cpp
- cityhash.h
- common_funcs.h
- common_types.h
- concepts.h
- container_hash.h
- demangle.cpp
- demangle.h
- detached_tasks.cpp
- detached_tasks.h
- device_power_state.cpp
- device_power_state.h
- div_ceil.h
- dynamic_library.cpp
- dynamic_library.h
- elf.h
- error.cpp
- error.h
- expected.h
- fiber.cpp
- fiber.h
- fixed_point.h
- free_region_manager.h
- fs/file.cpp
- fs/file.h
- fs/fs.cpp
- fs/fs.h
- fs/fs_paths.h
- fs/fs_types.h
- fs/fs_util.cpp
- fs/fs_util.h
- fs/path_util.cpp
- fs/path_util.h
- hash.h
- heap_tracker.cpp
- heap_tracker.h
- hex_util.cpp
- hex_util.h
- host_memory.cpp
- host_memory.h
- input.h
- intrusive_red_black_tree.h
- literals.h
- logging/backend.cpp
- logging/backend.h
- logging/filter.cpp
- logging/filter.h
- logging/formatter.h
- logging/log.h
- logging/log_entry.h
- logging/text_formatter.cpp
- logging/text_formatter.h
- logging/types.h
- lz4_compression.cpp
- lz4_compression.h
- make_unique_for_overwrite.h
- math_util.h
- memory_detect.cpp
- memory_detect.h
- multi_level_page_table.cpp
- multi_level_page_table.h
- overflow.h
- page_table.cpp
- page_table.h
- param_package.cpp
- param_package.h
- parent_of_member.h
- point.h
- quaternion.h
- range_map.h
- range_mutex.h
- range_sets.h
- range_sets.inc
- ring_buffer.h
- ${CMAKE_CURRENT_BINARY_DIR}/scm_rev.cpp
- scm_rev.h
- scope_exit.h
- scratch_buffer.h
- settings.cpp
- settings.h
- settings_common.cpp
- settings_common.h
- settings_enums.h
- settings_input.cpp
- settings_input.h
- settings_setting.h
- slot_vector.h
- socket_types.h
- spin_lock.h
- stb.cpp
- stb.h
- steady_clock.cpp
- steady_clock.h
- stream.cpp
- stream.h
- string_util.cpp
- string_util.h
- swap.h
- thread.cpp
- thread.h
- thread_queue_list.h
- thread_worker.h
- threadsafe_queue.h
- time_zone.cpp
- time_zone.h
- tiny_mt.h
- tree.h
- typed_address.h
- uint128.h
- unique_function.h
- uuid.cpp
- uuid.h
- vector_math.h
- virtual_buffer.cpp
- virtual_buffer.h
- wall_clock.cpp
- wall_clock.h
- zstd_compression.cpp
- zstd_compression.h
- fs/ryujinx_compat.h fs/ryujinx_compat.cpp
- fs/symlink.h fs/symlink.cpp
-)
+ common STATIC
+ address_space.cpp
+ address_space.h
+ algorithm.h
+ alignment.h
+ announce_multiplayer_room.h
+ assert.cpp
+ assert.h
+ atomic_ops.h
+ bit_field.h
+ bit_util.h
+ bounded_threadsafe_queue.h
+ cityhash.cpp
+ cityhash.h
+ common_funcs.h
+ common_types.h
+ concepts.h
+ container_hash.h
+ demangle.cpp
+ demangle.h
+ detached_tasks.cpp
+ detached_tasks.h
+ device_power_state.cpp
+ device_power_state.h
+ div_ceil.h
+ dynamic_library.cpp
+ dynamic_library.h
+ elf.h
+ error.cpp
+ error.h
+ expected.h
+ fiber.cpp
+ fiber.h
+ fixed_point.h
+ free_region_manager.h
+ fs/file.cpp
+ fs/file.h
+ fs/fs.cpp
+ fs/fs.h
+ fs/fs_paths.h
+ fs/fs_types.h
+ fs/fs_util.cpp
+ fs/fs_util.h
+ fs/path_util.cpp
+ fs/path_util.h
+ hash.h
+ heap_tracker.cpp
+ heap_tracker.h
+ hex_util.cpp
+ hex_util.h
+ host_memory.cpp
+ host_memory.h
+ input.h
+ intrusive_red_black_tree.h
+ literals.h
+ logging/backend.cpp
+ logging/backend.h
+ logging/filter.cpp
+ logging/filter.h
+ logging/formatter.h
+ logging/log.h
+ logging/log_entry.h
+ logging/text_formatter.cpp
+ logging/text_formatter.h
+ logging/types.h
+ lz4_compression.cpp
+ lz4_compression.h
+ make_unique_for_overwrite.h
+ math_util.h
+ memory_detect.cpp
+ memory_detect.h
+ multi_level_page_table.cpp
+ multi_level_page_table.h
+ overflow.h
+ page_table.cpp
+ page_table.h
+ param_package.cpp
+ param_package.h
+ parent_of_member.h
+ point.h
+ quaternion.h
+ range_map.h
+ range_mutex.h
+ range_sets.h
+ range_sets.inc
+ ring_buffer.h
+ ${CMAKE_CURRENT_BINARY_DIR}/scm_rev.cpp
+ scm_rev.h
+ scope_exit.h
+ scratch_buffer.h
+ settings.cpp
+ settings.h
+ settings_common.cpp
+ settings_common.h
+ settings_enums.h
+ settings_input.cpp
+ settings_input.h
+ settings_setting.h
+ slot_vector.h
+ socket_types.h
+ spin_lock.h
+ stb.cpp
+ stb.h
+ steady_clock.cpp
+ steady_clock.h
+ stream.cpp
+ stream.h
+ string_util.cpp
+ string_util.h
+ swap.h
+ thread.cpp
+ thread.h
+ thread_queue_list.h
+ thread_worker.h
+ threadsafe_queue.h
+ time_zone.cpp
+ time_zone.h
+ tiny_mt.h
+ tree.h
+ typed_address.h
+ uint128.h
+ unique_function.h
+ uuid.cpp
+ uuid.h
+ vector_math.h
+ virtual_buffer.cpp
+ virtual_buffer.h
+ wall_clock.cpp
+ wall_clock.h
+ zstd_compression.cpp
+ zstd_compression.h
+ fs/ryujinx_compat.h fs/ryujinx_compat.cpp
+ fs/symlink.h fs/symlink.cpp)
if(WIN32)
- target_sources(common PRIVATE windows/timer_resolution.cpp
- windows/timer_resolution.h)
- target_link_libraries(common PRIVATE ntdll)
+ target_sources(common PRIVATE windows/timer_resolution.cpp
+ windows/timer_resolution.h)
+ target_link_libraries(common PRIVATE ntdll)
endif()
if(NOT WIN32)
- target_sources(common PRIVATE signal_chain.cpp signal_chain.h)
+ target_sources(common PRIVATE signal_chain.cpp signal_chain.h)
endif()
if(ANDROID)
- target_sources(
- common
- PUBLIC fs/fs_android.cpp
- fs/fs_android.h
- android/android_common.cpp
- android/android_common.h
- android/id_cache.cpp
- android/id_cache.h
- android/multiplayer/multiplayer.cpp
- android/multiplayer/multiplayer.h
- android/applets/software_keyboard.cpp
- android/applets/software_keyboard.h)
+ target_sources(
+ common
+ PUBLIC fs/fs_android.cpp
+ fs/fs_android.h
+ android/android_common.cpp
+ android/android_common.h
+ android/id_cache.cpp
+ android/id_cache.h
+ android/multiplayer/multiplayer.cpp
+ android/multiplayer/multiplayer.h
+ android/applets/software_keyboard.cpp
+ android/applets/software_keyboard.h
+ android/applets/web_browser.cpp
+ android/applets/web_browser.h)
endif()
if(ARCHITECTURE_x86_64)
- target_sources(
- common
- PRIVATE x64/cpu_detect.cpp
- x64/cpu_detect.h
- x64/cpu_wait.cpp
- x64/cpu_wait.h
- x64/native_clock.cpp
- x64/native_clock.h
- x64/rdtsc.cpp
- x64/rdtsc.h
- x64/xbyak_abi.h
- x64/xbyak_util.h)
- target_link_libraries(common PRIVATE xbyak::xbyak)
+ target_sources(
+ common
+ PRIVATE x64/cpu_detect.cpp
+ x64/cpu_detect.h
+ x64/cpu_wait.cpp
+ x64/cpu_wait.h
+ x64/native_clock.cpp
+ x64/native_clock.h
+ x64/rdtsc.cpp
+ x64/rdtsc.h
+ x64/xbyak_abi.h
+ x64/xbyak_util.h)
+ target_link_libraries(common PRIVATE xbyak::xbyak)
endif()
if(HAS_NCE)
- target_sources(common PRIVATE arm64/native_clock.cpp arm64/native_clock.h)
+ target_sources(common PRIVATE arm64/native_clock.cpp arm64/native_clock.h)
endif()
if(MSVC)
- target_compile_definitions(
- common
- PRIVATE # The standard library doesn't provide any replacement for codecvt
- # yet so we can disable this deprecation warning for the time being.
- _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING)
- target_compile_options(
- common
- PRIVATE /we4242 # 'identifier': conversion from 'type1' to 'type2', possible
- # loss of data
- /we4254 # 'operator': conversion from 'type1:field_bits' to
- # 'type2:field_bits', possible loss of data
- /we4800 # Implicit conversion from 'type' to bool. Possible
- # information loss
- )
+ target_compile_definitions(
+ common
+ PRIVATE # The standard library doesn't provide any replacement for codecvt
+ # yet so we can disable this deprecation warning for the time being.
+ _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING)
+ target_compile_options(
+ common
+ PRIVATE /we4242 # 'identifier': conversion from 'type1' to 'type2', possible
+ # loss of data
+ /we4254 # 'operator': conversion from 'type1:field_bits' to
+ # 'type2:field_bits', possible loss of data
+ /we4800 # Implicit conversion from 'type' to bool. Possible
+ # information loss
+ )
else()
- set_source_files_properties(
- stb.cpp
- PROPERTIES
- COMPILE_OPTIONS
- "-Wno-implicit-fallthrough;-Wno-missing-declarations;-Wno-missing-field-initializers"
- )
+ set_source_files_properties(
+ stb.cpp
+ PROPERTIES
+ COMPILE_OPTIONS
+ "-Wno-implicit-fallthrough;-Wno-missing-declarations;-Wno-missing-field-initializers")
- # Get around GCC failing with intrinsics in Debug
- if(CXX_GCC AND CMAKE_BUILD_TYPE MATCHES "Debug")
- set_property(
- SOURCE stb.cpp
- APPEND
- PROPERTY COMPILE_OPTIONS ";-O2")
- endif()
+ # Get around GCC failing with intrinsics in Debug
+ if(CXX_GCC AND CMAKE_BUILD_TYPE MATCHES "Debug")
+ set_property(
+ SOURCE stb.cpp
+ APPEND
+ PROPERTY COMPILE_OPTIONS ";-O2")
+ endif()
endif()
if(CXX_CLANG)
- target_compile_options(common PRIVATE -fsized-deallocation
- -Werror=unreachable-code-aggressive)
- target_compile_definitions(
- common
- PRIVATE
- # Clang 14 and earlier have errors when explicitly instantiating
- # Settings::Setting
- $<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,15>:CANNOT_EXPLICITLY_INSTANTIATE>
- )
+ target_compile_options(common PRIVATE -fsized-deallocation
+ -Werror=unreachable-code-aggressive)
+ target_compile_definitions(
+ common
+ PRIVATE
+ # Clang 14 and earlier have errors when explicitly instantiating
+ # Settings::Setting
+ $<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,15>:CANNOT_EXPLICITLY_INSTANTIATE>)
endif()
if (BOOST_NO_HEADERS)
@@ -260,8 +259,8 @@ target_link_libraries(common PUBLIC fmt::fmt stb::headers Threads::Threads)
target_link_libraries(common PRIVATE lz4::lz4 LLVM::Demangle zstd::zstd)
if(ANDROID)
- # For ASharedMemory_create
- target_link_libraries(common PRIVATE android)
+ # For ASharedMemory_create
+ target_link_libraries(common PRIVATE android)
endif()
create_target_directory_groups(common)
diff --git a/src/common/android/applets/web_browser.cpp b/src/common/android/applets/web_browser.cpp
new file mode 100644
index 0000000000..cf844ff5fc
--- /dev/null
+++ b/src/common/android/applets/web_browser.cpp
@@ -0,0 +1,50 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "common/android/android_common.h"
+#include "common/android/id_cache.h"
+#include "common/android/applets/web_browser.h"
+#include "common/logging/log.h"
+
+static jclass s_native_library_class = nullptr;
+static jmethodID s_open_external_url = nullptr;
+
+namespace Common::Android::WebBrowser {
+
+void InitJNI(JNIEnv* env) {
+ const jclass local = env->FindClass("org/yuzu/yuzu_emu/NativeLibrary");
+ s_native_library_class = static_cast<jclass>(env->NewGlobalRef(local));
+ env->DeleteLocalRef(local);
+ s_open_external_url = env->GetStaticMethodID(s_native_library_class, "openExternalUrl", "(Ljava/lang/String;)V");
+}
+
+void CleanupJNI(JNIEnv* env) {
+ if (s_native_library_class != nullptr) {
+ env->DeleteGlobalRef(s_native_library_class);
+ s_native_library_class = nullptr;
+ }
+ s_open_external_url = nullptr;
+}
+
+void AndroidWebBrowser::OpenLocalWebPage(const std::string& local_url, ExtractROMFSCallback extract_romfs_callback, OpenWebPageCallback callback) const {
+ LOG_WARNING(Frontend, "(STUBBED)");
+ callback(Service::AM::Frontend::WebExitReason::WindowClosed, "");
+}
+
+void AndroidWebBrowser::OpenExternalWebPage(const std::string& external_url, OpenWebPageCallback callback) const {
+ // do a dedicated thread, calling from the this thread crashed CPU fiber.
+ Common::Android::RunJNIOnFiber<void>([&](JNIEnv* env) {
+ if (env != nullptr && s_native_library_class != nullptr && s_open_external_url != nullptr) {
+ const jstring j_url = Common::Android::ToJString(env, external_url);
+ env->CallStaticVoidMethod(s_native_library_class, s_open_external_url, j_url);
+ env->DeleteLocalRef(j_url);
+ } else {
+ LOG_ERROR(Frontend, "JNI not initialized, cannot open {}", external_url);
+ }
+ return;
+ });
+
+ callback(Service::AM::Frontend::WebExitReason::WindowClosed, external_url);
+}
+
+} // namespace Common::Android::WebBrowser
diff --git a/src/common/android/applets/web_browser.h b/src/common/android/applets/web_browser.h
new file mode 100644
index 0000000000..a70903e3be
--- /dev/null
+++ b/src/common/android/applets/web_browser.h
@@ -0,0 +1,30 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#pragma once
+
+#include <jni.h>
+#include <string>
+
+#include "core/frontend/applets/web_browser.h"
+
+namespace Common::Android::WebBrowser {
+
+class AndroidWebBrowser final : public Core::Frontend::WebBrowserApplet {
+public:
+ ~AndroidWebBrowser() override = default;
+
+ void Close() const override {}
+
+ void OpenLocalWebPage(const std::string& local_url,
+ ExtractROMFSCallback extract_romfs_callback,
+ OpenWebPageCallback callback) const override;
+
+ void OpenExternalWebPage(const std::string& external_url,
+ OpenWebPageCallback callback) const override;
+};
+
+void InitJNI(JNIEnv* env);
+void CleanupJNI(JNIEnv* env);
+
+} // namespace Common::Android::WebBrowser
diff --git a/src/common/android/id_cache.cpp b/src/common/android/id_cache.cpp
index 1198833996..eb43f4e213 100644
--- a/src/common/android/id_cache.cpp
+++ b/src/common/android/id_cache.cpp
@@ -4,6 +4,7 @@
#include <jni.h>
#include "applets/software_keyboard.h"
+#include "applets/web_browser.h"
#include "common/android/id_cache.h"
#include "common/assert.h"
#include "common/fs/fs_android.h"
@@ -602,6 +603,7 @@ namespace Common::Android {
// Initialize applets
Common::Android::SoftwareKeyboard::InitJNI(env);
+ Common::Android::WebBrowser::InitJNI(env);
return JNI_VERSION;
}
@@ -631,6 +633,7 @@ namespace Common::Android {
// UnInitialize applets
SoftwareKeyboard::CleanupJNI(env);
+ WebBrowser::CleanupJNI(env);
AndroidMultiplayer::NetworkShutdown();
}