mirror of
https://gitee.com/openharmony/ability_ability_runtime
synced 2024-11-23 07:10:19 +00:00
add application
Signed-off-by: tantingting <tantingting5@huawei.com>
This commit is contained in:
parent
7da3fb4c9f
commit
1c4478b24b
@ -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",
|
||||
|
62
frameworks/js/napi/application/BUILD.gn
Normal file
62
frameworks/js/napi/application/BUILD.gn
Normal 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"
|
||||
}
|
28
frameworks/js/napi/application/application_module.cpp
Normal file
28
frameworks/js/napi/application/application_module.cpp
Normal 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);
|
||||
}
|
71
frameworks/js/napi/application/js_application.cpp
Normal file
71
frameworks/js/napi/application/js_application.cpp
Normal 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
|
40
frameworks/js/napi/application/js_application.h
Normal file
40
frameworks/js/napi/application/js_application.h
Normal 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
|
Loading…
Reference in New Issue
Block a user