add application

Signed-off-by: tantingting <tantingting5@huawei.com>
This commit is contained in:
tantingting 2024-08-09 09:41:41 +08:00
parent 7da3fb4c9f
commit 1c4478b24b
5 changed files with 202 additions and 0 deletions

View File

@ -50,6 +50,7 @@ group("napi_packages") {
"${ability_runtime_napi_path}/app_startup/startup_listener:startuplistener_napi",
"${ability_runtime_napi_path}/app_startup/startup_manager:startupmanager_napi",
"${ability_runtime_napi_path}/app_startup/startup_task:startuptask_napi",
"${ability_runtime_napi_path}/application:application_napi",
"${ability_runtime_napi_path}/application_context_constant:contextconstant_napi",
"${ability_runtime_napi_path}/auto_fill_extension_ability:autofillextensionability_napi",
"${ability_runtime_napi_path}/auto_fill_extension_context:autofillextensioncontext_napi",

View File

@ -0,0 +1,62 @@
# Copyright (c) 2024 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/ohos.gni")
import("//foundation/ability/ability_runtime/ability_runtime.gni")
ohos_shared_library("application_napi") {
sanitize = {
integer_overflow = true
ubsan = true
boundary_sanitize = true
cfi = true
cfi_cross_dso = true
cfi_vcall_icall_only = true
debug = false
}
branch_protector_ret = "pac_ret"
include_dirs = [
"./",
"${ability_runtime_napi_path}/ability_auto_startup_callback",
"${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context",
]
sources = [
"application_module.cpp",
"js_application.cpp",
]
configs = [ "${ability_runtime_services_path}/common:common_config" ]
deps = [
"${ability_runtime_innerkits_path}/error_utils:ability_runtime_error_util",
"${ability_runtime_innerkits_path}/runtime:runtime",
"${ability_runtime_napi_path}/inner/napi_common:napi_common",
"${ability_runtime_native_path}/appkit:app_context",
"${ability_runtime_native_path}/appkit:app_context_utils",
]
external_deps = [
"ability_base:session_info",
"ability_base:want",
"c_utils:utils",
"hilog:libhilog",
"ipc:ipc_core",
"napi:ace_napi",
]
relative_install_dir = "module/app/ability"
subsystem_name = "ability"
part_name = "ability_runtime"
}

View File

@ -0,0 +1,28 @@
/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "js_application.h"
#include "napi/native_api.h"
static napi_module _module = {
.nm_version = 0,
.nm_register_func = OHOS::AbilityRuntime::ApplicationInit,
.nm_modname = "app.ability.application",
};
extern "C" __attribute__((constructor)) void NAPI_app_ability_application_AutoRegister(void)
{
napi_module_register(&_module);
}

View File

@ -0,0 +1,71 @@
/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "js_application.h"
#include "ability_runtime_error_util.h"
#include "hilog_tag_wrapper.h"
#include "js_application_context_utils.h"
namespace OHOS {
namespace AbilityRuntime {
void JsApplication::Finalizer(napi_env env, void *data, void *hint)
{
TAG_LOGD(AAFwkTag::APPKIT, "Called.");
std::unique_ptr<JsApplication>(static_cast<JsApplication *>(data));
}
napi_value JsApplication::GetApplicationContext(napi_env env, napi_callback_info info)
{
GET_NAPI_INFO_AND_CALL(env, info, JsApplication, OnGetApplicationContext);
}
napi_value JsApplication::OnGetApplicationContext(napi_env env, NapiCallbackInfo &info)
{
TAG_LOGD(AAFwkTag::APPKIT, "Called.");
napi_value value = JsApplicationContextUtils::CreateJsApplicationContext(env);
auto systemModule = JsRuntime::LoadSystemModuleByEngine(env, "application.ApplicationContext", &value, 1);
if (systemModule == nullptr) {
TAG_LOGE(AAFwkTag::APPKIT, "Invalid systemModule.");
AbilityRuntimeErrorUtil::Throw(env, ERR_ABILITY_RUNTIME_EXTERNAL_INTERNAL_ERROR);
return CreateJsUndefined(env);
}
napi_value object = systemModule->GetNapiValue();
if (!CheckTypeForNapiValue(env, object, napi_object)) {
TAG_LOGE(AAFwkTag::APPKIT, "Failed to get context native object.");
AbilityRuntimeErrorUtil::Throw(env, ERR_ABILITY_RUNTIME_EXTERNAL_INTERNAL_ERROR);
return CreateJsUndefined(env);
}
return object;
}
napi_value ApplicationInit(napi_env env, napi_value exportObj)
{
TAG_LOGD(AAFwkTag::APPKIT, "Called.");
if (env == nullptr || exportObj == nullptr) {
TAG_LOGE(AAFwkTag::APPKIT, "Env or exportObj is nullptr.");
return nullptr;
}
auto jsApplication = std::make_unique<JsApplication>();
napi_wrap(env, exportObj, jsApplication.release(), JsApplication::Finalizer, nullptr, nullptr);
const char *moduleName = "application";
BindNativeFunction(env, exportObj, "getApplicationContext", moduleName,
JsApplication::GetApplicationContext);
return CreateJsUndefined(env);
}
} // namespace AbilityRuntime
} // namespace OHOS

View File

@ -0,0 +1,40 @@
/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef OHOS_ABILITY_RUNTIME_JS_APPLICATION_H
#define OHOS_ABILITY_RUNTIME_JS_APPLICATION_H
#include "napi/native_api.h"
#include "js_runtime.h"
#include "js_runtime_utils.h"
namespace OHOS {
namespace AbilityRuntime {
class JsApplication {
public:
explicit JsApplication()
{}
virtual ~JsApplication() = default;
static void Finalizer(napi_env env, void *data, void *hint);
static napi_value GetApplicationContext(napi_env env, napi_callback_info info);
private:
napi_value OnGetApplicationContext(napi_env env, NapiCallbackInfo &info);
};
napi_value ApplicationInit(napi_env env, napi_value exportObj);
} // namespace AbilityRuntime
} // namespace OHOS
#endif //OHOS_ABILITY_RUNTIME_JS_APPLICATION_H