diff --git a/frameworks/native/ability/native/child_process_manager/child_process_manager.cpp b/frameworks/native/ability/native/child_process_manager/child_process_manager.cpp index bb898de0a5a250a7dde3807b95162eaa1c040e87..aee877affe86a1132f1997aee431bbb34b7f5696 100644 --- a/frameworks/native/ability/native/child_process_manager/child_process_manager.cpp +++ b/frameworks/native/ability/native/child_process_manager/child_process_manager.cpp @@ -157,11 +157,19 @@ ChildProcessManagerErrorCode ChildProcessManager::StartChildProcessWithArgs( TAG_LOGD(AAFwkTag::PROCESSMGR, "AppMgr StartChildProcess ret:%{public}d", ret); if (ret != ERR_OK) { TAG_LOGE(AAFwkTag::PROCESSMGR, "StartChildProcess error:%{public}d", ret); - return ChildProcessManagerErrorUtil::GetChildProcessManagerErrorCode(ret); + return GetErrorCodeCompat(ret, childProcessType); } return ChildProcessManagerErrorCode::ERR_OK; } +ChildProcessManagerErrorCode ChildProcessManager::GetErrorCodeCompat(int32_t ret, int32_t childProcessType) +{ + if (ret == AAFwk::ERR_NOT_SUPPORT_CHILD_PROCESS && childProcessType == AppExecFwk::CHILD_PROCESS_TYPE_JS) { + return ChildProcessManagerErrorCode::ERR_MULTI_PROCESS_MODEL_DISABLED; + } + return ChildProcessManagerErrorUtil::GetChildProcessManagerErrorCode(ret); +} + ChildProcessManagerErrorCode ChildProcessManager::StartNativeChildProcessByAppSpawnFork( const std::string &libName, const sptr &callbackStub, const std::string &customProcessName) { diff --git a/interfaces/inner_api/child_process_manager/include/child_process_manager.h b/interfaces/inner_api/child_process_manager/include/child_process_manager.h index e9b5404d4281c3b5d0320b55c9e3606073294aa6..83392272fd8ae0bac81a1a7b0d05969cdd942e23 100644 --- a/interfaces/inner_api/child_process_manager/include/child_process_manager.h +++ b/interfaces/inner_api/child_process_manager/include/child_process_manager.h @@ -79,6 +79,7 @@ private: sptr GetAppMgr(); void MakeProcessName(const std::string &srcEntry); bool IsMultiProcessFeatureApp(const AppExecFwk::BundleInfo &bundleInfo); + ChildProcessManagerErrorCode GetErrorCodeCompat(int32_t ret, int32_t childProcessType); static bool signalRegistered_; bool isChildProcessBySelfFork_ = false; diff --git a/test/unittest/child_process_manager_test/child_process_manager_test.cpp b/test/unittest/child_process_manager_test/child_process_manager_test.cpp index bf991d9e4dc492e7545d3c9e99561b341dc00b18..5074571ef431e86cb5a1b1f29b1be27dae8b2b0c 100644 --- a/test/unittest/child_process_manager_test/child_process_manager_test.cpp +++ b/test/unittest/child_process_manager_test/child_process_manager_test.cpp @@ -529,5 +529,39 @@ HWTEST_F(ChildProcessManagerTest, IsMultiProcessFeatureApp_0400, TestSize.Level2 bool ret = ChildProcessManager::GetInstance().IsMultiProcessFeatureApp(bundleInfo); EXPECT_TRUE(ret); } + +/** + * @tc.number: GetErrorCodeCompat + * @tc.desc: Test GetErrorCodeCompat works. + * @tc.type: FUNC + */ +HWTEST_F(ChildProcessManagerTest, GetErrorCodeCompat_0100, TestSize.Level2) +{ + TAG_LOGI(AAFwkTag::TEST, "GetErrorCodeCompat_0100 start."); + + auto &childProcessManager = ChildProcessManager::GetInstance(); + + auto ret = AAFwk::ERR_NOT_SUPPORT_CHILD_PROCESS; + auto childProcessType = AppExecFwk::CHILD_PROCESS_TYPE_JS; + auto errCode = childProcessManager.GetErrorCodeCompat(ret, childProcessType); + EXPECT_EQ(errCode, ChildProcessManagerErrorCode::ERR_MULTI_PROCESS_MODEL_DISABLED); + + ret = AAFwk::ERR_NOT_SUPPORT_CHILD_PROCESS; + childProcessType = AppExecFwk::CHILD_PROCESS_TYPE_ARK; + errCode = childProcessManager.GetErrorCodeCompat(ret, childProcessType); + EXPECT_NE(errCode, ChildProcessManagerErrorCode::ERR_MULTI_PROCESS_MODEL_DISABLED); + + ret = AAFwk::INNER_ERR; + childProcessType = AppExecFwk::CHILD_PROCESS_TYPE_JS; + errCode = childProcessManager.GetErrorCodeCompat(ret, childProcessType); + EXPECT_NE(errCode, ChildProcessManagerErrorCode::ERR_MULTI_PROCESS_MODEL_DISABLED); + + ret = AAFwk::INNER_ERR; + childProcessType = AppExecFwk::CHILD_PROCESS_TYPE_ARK; + errCode = childProcessManager.GetErrorCodeCompat(ret, childProcessType); + EXPECT_NE(errCode, ChildProcessManagerErrorCode::ERR_MULTI_PROCESS_MODEL_DISABLED); + + TAG_LOGI(AAFwkTag::TEST, "GetErrorCodeCompat_0100 end."); +} } // namespace AbilityRuntime } // namespace OHOS \ No newline at end of file