From 9e13659e24c501bfafb4fc997839431032f92f4f Mon Sep 17 00:00:00 2001 From: lizeqiang Date: Mon, 11 Aug 2025 22:09:36 +0800 Subject: [PATCH] dual core code sync Signed-off-by: lizeqiang --- BUILD.gn | 4 +- bundle.json | 3 +- modules/ace_adapter/BUILD.gn | 4 ++ modules/ace_adapter/ace_adapter.cpp | 6 ++ modules/nweb_adapter/BUILD.gn | 5 ++ modules/nweb_adapter/nwebspawn_adapter.cpp | 68 ++++++++++--------- .../unittest/app_spawn_standard_test/BUILD.gn | 16 ++++- 7 files changed, 69 insertions(+), 37 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 7d865639..07cb1be4 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -84,7 +84,6 @@ group("appspawn_all") { deps += [ "etc:etc_files" ] deps += [ "modules/ace_adapter:appspawn_ace" ] deps += [ "modules/asan:appspawn_asan" ] - deps += [ "modules/nweb_adapter:appspawn_nweb" ] deps += [ "modules/native_adapter:nativespawn" ] deps += [ "modules/sandbox:appspawn_sandbox" ] deps += [ "modules/common:appspawn_common" ] @@ -103,6 +102,9 @@ group("appspawn_all") { "standard:cjappspawn", ] } + if (appspawn_support_nweb) { + deps += [ "modules/nweb_adapter:appspawn_nweb" ] + } if (appspawn_support_native) { # for support nativespawn deps += [ ":nativespawn.rc", diff --git a/bundle.json b/bundle.json index 7f6aeab9..36e31976 100644 --- a/bundle.json +++ b/bundle.json @@ -79,7 +79,8 @@ "json", "faultloggerd", "dlp_permission_service", - "ffrt" + "ffrt", + "webview" ], "third_party": [ "bounds_checking_function", diff --git a/modules/ace_adapter/BUILD.gn b/modules/ace_adapter/BUILD.gn index 5f94d3bb..7b7befe0 100644 --- a/modules/ace_adapter/BUILD.gn +++ b/modules/ace_adapter/BUILD.gn @@ -57,6 +57,10 @@ ohos_shared_library("appspawn_ace") { "resource_management:global_resmgr", "selinux:libselinux", ] + if (appspawn_support_nweb) { + external_deps += [ "webview:libarkweb_utils" ] + defines += [ "ARKWEB_UTILS_ENABLE" ] + } subsystem_name = "${subsystem_name}" part_name = "${part_name}" install_enable = true diff --git a/modules/ace_adapter/ace_adapter.cpp b/modules/ace_adapter/ace_adapter.cpp index c24a2525..f780bccd 100644 --- a/modules/ace_adapter/ace_adapter.cpp +++ b/modules/ace_adapter/ace_adapter.cpp @@ -27,6 +27,9 @@ #include "appspawn_service.h" #include "appspawn_manager.h" #include "appspawn_utils.h" +#ifdef ARKWEB_UTILS_ENABLE +#include "arkweb_utils.h" +#endif #include "command_lexer.h" #include "config_policy_utils.h" #include "hitrace_meter.h" @@ -369,6 +372,9 @@ APPSPAWN_STATIC int DlopenAppSpawn(AppSpawnMgr *content) #endif APPSPAWN_LOGI("DlopenAppSpawn: Start reclaim file cache"); OHOS::Ace::AceForwardCompatibility::ReclaimFileCache(getpid()); +#ifdef ARKWEB_UTILS_ENABLE + OHOS::ArkWeb::PreloadArkWebLibForBrowser(); +#endif return 0; } diff --git a/modules/nweb_adapter/BUILD.gn b/modules/nweb_adapter/BUILD.gn index 1b73d080..16145b27 100644 --- a/modules/nweb_adapter/BUILD.gn +++ b/modules/nweb_adapter/BUILD.gn @@ -40,6 +40,11 @@ ohos_shared_library("appspawn_nweb") { "hilog:libhilog", "init:libbegetutil", ] + + if (appspawn_support_nweb) { + external_deps += [ "webview:libarkweb_utils" ] + } + if (build_seccomp) { cflags += [ "-DWITH_SECCOMP" ] if (appspawn_seccomp_privilege) { diff --git a/modules/nweb_adapter/nwebspawn_adapter.cpp b/modules/nweb_adapter/nwebspawn_adapter.cpp index 567a71d7..f2238082 100644 --- a/modules/nweb_adapter/nwebspawn_adapter.cpp +++ b/modules/nweb_adapter/nwebspawn_adapter.cpp @@ -35,21 +35,11 @@ #include "seccomp_policy.h" #endif +#include "arkweb_utils.h" + namespace { -#ifdef webview_arm64 - const std::string ARK_WEB_CORE_HAP_LIB_PATH = - "/data/storage/el1/bundle/arkwebcore/libs/arm64"; -#elif webview_x86_64 - const std::string ARK_WEB_CORE_HAP_LIB_PATH = - "/data/storage/el1/bundle/arkwebcore/libs/x86_64"; -#else - const std::string ARK_WEB_CORE_HAP_LIB_PATH = - "/data/storage/el1/bundle/arkwebcore/libs/arm"; -#endif - const std::string ARK_WEB_ENGINE_LIB_NAME = "libarkweb_engine.so"; - const std::string ARK_WEB_RENDER_LIB_NAME = "libarkweb_render.so"; - const std::string WEB_ENGINE_LIB_NAME = "libweb_engine.so"; - const std::string WEB_RENDER_LIB_NAME = "libnweb_render.so"; +const std::string ARK_WEB_ENGINE_LIB_NAME = "libarkweb_engine.so"; +const std::string ARK_WEB_RENDER_LIB_NAME = "libarkweb_render.so"; typedef enum { PRELOAD_NO = 0, // 不预加载 @@ -76,22 +66,33 @@ static bool SetSeccompPolicyForRenderer(void *nwebRenderHandle) return true; } -APPSPAWN_STATIC std::string GetArkWebEngineLibName() +static void UpdateAppWebEngineVersion(std::string& renderCmd) { - std::string arkWebEngineLibPath = ARK_WEB_CORE_HAP_LIB_PATH + "/" - + ARK_WEB_ENGINE_LIB_NAME; - bool isArkWebEngineLibPathExist = access(arkWebEngineLibPath.c_str(), F_OK) == 0; - return isArkWebEngineLibPathExist ? - ARK_WEB_ENGINE_LIB_NAME : WEB_ENGINE_LIB_NAME; -} + size_t posLeft = renderCmd.rfind(APP_ENGINE_VERSION_PREFIX); + if (posLeft == std::string::npos) { + APPSPAWN_LOGE("not found app engine type arg"); + return; + } + size_t posRight = posLeft + strlen(APP_ENGINE_VERSION_PREFIX); + size_t posEnd = renderCmd.find('#', posRight); + std::string value = (posEnd == std::string::npos) ? + renderCmd.substr(posRight) : + renderCmd.substr(posRight, posEnd - posRight); -APPSPAWN_STATIC std::string GetArkWebRenderLibName() -{ - std::string arkWebRenderLibPath = ARK_WEB_CORE_HAP_LIB_PATH + "/" - + ARK_WEB_RENDER_LIB_NAME; - bool isArkWebRenderLibPathExist = access(arkWebRenderLibPath.c_str(), F_OK) == 0; - return isArkWebRenderLibPathExist ? - ARK_WEB_RENDER_LIB_NAME : WEB_RENDER_LIB_NAME; + char* end; + long v = std::strtol(value.c_str(), &end, 10); + if (*end != '\0' || v > INT_MAX || v < 0) { + APPSPAWN_LOGE("invalid value: %{public}s", value.c_str()); + return; + } + auto version = static_cast(v); + OHOS::ArkWeb::setActiveWebEngineVersion(version); + + // remove arg APP_ENGINE_VERSION_PREFIX + size_t eraseLength = (posEnd == std::string::npos) ? + renderCmd.length() - posLeft : + posEnd - posLeft; + renderCmd.erase(posLeft, eraseLength); } APPSPAWN_STATIC int RunChildProcessor(AppSpawnContent *content, AppSpawnClient *client) @@ -103,17 +104,20 @@ APPSPAWN_STATIC int RunChildProcessor(AppSpawnContent *content, AppSpawnClient * return -1; } std::string renderStr(renderCmd); + UpdateAppWebEngineVersion(renderStr); + void *webEngineHandle = nullptr; void *nwebRenderHandle = nullptr; - const std::string& libPath = ARK_WEB_CORE_HAP_LIB_PATH; - const std::string engineLibName = GetArkWebEngineLibName(); - const std::string renderLibName = GetArkWebRenderLibName(); + const std::string libNsName = OHOS::ArkWeb::GetArkwebNameSpace(); + const std::string libPath = OHOS::ArkWeb::GetArkwebLibPath(); + const std::string engineLibName = ARK_WEB_ENGINE_LIB_NAME; + const std::string renderLibName = ARK_WEB_RENDER_LIB_NAME; #ifdef __MUSL__ Dl_namespace dlns; Dl_namespace ndkns; - dlns_init(&dlns, "nweb_ns"); + dlns_init(&dlns, libNsName.c_str()); dlns_create(&dlns, libPath.c_str()); dlns_get("ndk", &ndkns); dlns_inherit(&dlns, &ndkns, "allow_all_shared_libs"); diff --git a/test/unittest/app_spawn_standard_test/BUILD.gn b/test/unittest/app_spawn_standard_test/BUILD.gn index af8665d2..c1624c89 100644 --- a/test/unittest/app_spawn_standard_test/BUILD.gn +++ b/test/unittest/app_spawn_standard_test/BUILD.gn @@ -140,9 +140,7 @@ ohos_unittest("AppSpawn_ut") { ] defines += [ "APPSPAWN_SANDBOX_NEW" ] } else { - sources += [ - "${appspawn_path}/test/unittest/app_spawn_standard_test/app_spawn_sandbox_test.cpp", - ] + sources += [ "${appspawn_path}/test/unittest/app_spawn_standard_test/app_spawn_sandbox_test.cpp" ] } configs = [ "${appspawn_path}:appspawn_config" ] @@ -176,6 +174,10 @@ ohos_unittest("AppSpawn_ut") { external_deps += [ "hitrace:libhitrace_option" ] } + if (appspawn_support_nweb) { + external_deps += [ "webview:libarkweb_utils" ] + } + if (enable_appspawn_dump_catcher) { external_deps += [ "faultloggerd:libdfx_dumpcatcher" ] } @@ -362,6 +364,10 @@ ohos_unittest("AppSpawn_coldrun_ut") { sources += [ "${appspawn_path}/modules/asan/asan_detector.c" ] } + if (appspawn_support_nweb) { + external_deps += [ "webview:libarkweb_utils" ] + } + if (build_selinux) { defines += [ "WITH_SELINUX" ] external_deps += [ @@ -538,6 +544,10 @@ ohos_unittest("AppSpawn_common_ut") { sources += [ "${appspawn_path}/modules/asan/asan_detector.c" ] } + if (appspawn_support_nweb) { + external_deps += [ "webview:libarkweb_utils" ] + } + if (build_selinux) { defines += [ "WITH_SELINUX" ] external_deps += [ -- Gitee