1 /* 2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef OHOS_ABILITY_RUNTIME_JS_APPLICATION_CONTEXT_UTILS_H 17 #define OHOS_ABILITY_RUNTIME_JS_APPLICATION_CONTEXT_UTILS_H 18 19 #include <memory> 20 #include <mutex> 21 22 #include "ability_lifecycle_callback.h" 23 #include "application_context.h" 24 #include "application_state_change_callback.h" 25 #include "js_ability_auto_startup_callback.h" 26 #include "native_engine/native_engine.h" 27 #include "running_process_info.h" 28 29 namespace OHOS { 30 namespace AbilityRuntime { 31 struct NapiCallbackInfo; 32 namespace { 33 enum JsAppProcessState { 34 STATE_CREATE, 35 STATE_FOREGROUND, 36 STATE_ACTIVE, 37 STATE_BACKGROUND, 38 STATE_DESTROY 39 }; 40 } 41 class JsApplicationContextUtils { 42 public: JsApplicationContextUtils(std::weak_ptr<ApplicationContext> && applicationContext)43 explicit JsApplicationContextUtils(std::weak_ptr<ApplicationContext> &&applicationContext) 44 : applicationContext_(std::move(applicationContext)) 45 { 46 } 47 virtual ~JsApplicationContextUtils() = default; 48 static void Finalizer(napi_env env, void *data, void *hint); 49 static napi_value RegisterAbilityLifecycleCallback(napi_env env, napi_callback_info info); 50 static napi_value UnregisterAbilityLifecycleCallback(napi_env env, napi_callback_info info); 51 static napi_value RegisterEnvironmentCallback(napi_env env, napi_callback_info info); 52 static napi_value UnregisterEnvironmentCallback(napi_env env, napi_callback_info info); 53 static napi_value On(napi_env env, napi_callback_info info); 54 static napi_value Off(napi_env env, napi_callback_info info); 55 static napi_value CreateBundleContext(napi_env env, napi_callback_info info); 56 static napi_value SwitchArea(napi_env env, napi_callback_info info); 57 static napi_value GetArea(napi_env env, napi_callback_info info); 58 static napi_value CreateModuleContext(napi_env env, napi_callback_info info); 59 static napi_value CreateSystemHspModuleResourceManager(napi_env env, napi_callback_info info); 60 static napi_value CreateModuleResourceManager(napi_env env, napi_callback_info info); 61 static napi_value SetAutoStartup(napi_env env, napi_callback_info info); 62 static napi_value CancelAutoStartup(napi_env env, napi_callback_info info); 63 static napi_value IsAutoStartup(napi_env env, napi_callback_info info); 64 65 napi_value OnRegisterAbilityLifecycleCallback(napi_env env, NapiCallbackInfo& info); 66 napi_value OnUnregisterAbilityLifecycleCallback(napi_env env, NapiCallbackInfo& info); 67 68 napi_value OnRegisterEnvironmentCallback(napi_env env, NapiCallbackInfo& info); 69 napi_value OnUnregisterEnvironmentCallback(napi_env env, NapiCallbackInfo& info); 70 71 napi_value OnOn(napi_env env, NapiCallbackInfo& info); 72 napi_value OnOff(napi_env env, NapiCallbackInfo& info); 73 napi_value OnOnAbilityLifecycle(napi_env env, NapiCallbackInfo& info, bool isSync); 74 napi_value OnOffAbilityLifecycle(napi_env env, NapiCallbackInfo& info, int32_t callbackId); 75 napi_value OnOffAbilityLifecycleEventSync(napi_env env, NapiCallbackInfo& info, int32_t callbackId); 76 napi_value OnOnEnvironment(napi_env env, NapiCallbackInfo& info, bool isSync); 77 napi_value OnOffEnvironment(napi_env env, NapiCallbackInfo& info, int32_t callbackId); 78 napi_value OnOffEnvironmentEventSync( 79 napi_env env, NapiCallbackInfo& info, int32_t callbackId); 80 napi_value OnOnApplicationStateChange(napi_env env, NapiCallbackInfo& info); 81 napi_value OnOffApplicationStateChange(napi_env env, NapiCallbackInfo& info); 82 83 napi_value OnGetCacheDir(napi_env env, NapiCallbackInfo& info); 84 napi_value OnGetTempDir(napi_env env, NapiCallbackInfo& info); 85 napi_value OnGetResourceDir(napi_env env, NapiCallbackInfo& info); 86 napi_value OnGetFilesDir(napi_env env, NapiCallbackInfo& info); 87 napi_value OnGetDistributedFilesDir(napi_env env, NapiCallbackInfo& info); 88 napi_value OnGetDatabaseDir(napi_env env, NapiCallbackInfo& info); 89 napi_value OnGetPreferencesDir(napi_env env, NapiCallbackInfo& info); 90 napi_value OnGetGroupDir(napi_env env, NapiCallbackInfo& info); 91 napi_value OnGetBundleCodeDir(napi_env env, NapiCallbackInfo& info); 92 napi_value OnGetCloudFileDir(napi_env env, NapiCallbackInfo& info); 93 napi_value OnKillProcessBySelf(napi_env env, NapiCallbackInfo& info); 94 napi_value OnGetRunningProcessInformation(napi_env env, NapiCallbackInfo& info); 95 napi_value OnSetColorMode(napi_env env, NapiCallbackInfo& info); 96 napi_value OnSetLanguage(napi_env env, NapiCallbackInfo& info); 97 napi_value OnSetFont(napi_env env, NapiCallbackInfo& info); 98 napi_value OnClearUpApplicationData(napi_env env, NapiCallbackInfo& info); 99 napi_value OnRestartApp(napi_env env, NapiCallbackInfo& info); 100 napi_value OnSetSupportedProcessCacheSelf(napi_env env, NapiCallbackInfo& info); 101 napi_value OnPreloadUIExtensionAbility(napi_env env, NapiCallbackInfo& info); 102 napi_value OnGetCurrentAppCloneIndex(napi_env env, NapiCallbackInfo& info); 103 napi_value OnGetCurrentInstanceKey(napi_env env, NapiCallbackInfo& info); 104 napi_value OnGetAllRunningInstanceKeys(napi_env env, NapiCallbackInfo& info); 105 napi_value OnSetFontSizeScale(napi_env env, NapiCallbackInfo& info); 106 107 static napi_value GetCacheDir(napi_env env, napi_callback_info info); 108 static napi_value GetTempDir(napi_env env, napi_callback_info info); 109 static napi_value GetResourceDir(napi_env env, napi_callback_info info); 110 static napi_value GetFilesDir(napi_env env, napi_callback_info info); 111 static napi_value GetDistributedFilesDir(napi_env env, napi_callback_info info); 112 static napi_value GetDatabaseDir(napi_env env, napi_callback_info info); 113 static napi_value GetPreferencesDir(napi_env env, napi_callback_info info); 114 static napi_value GetGroupDir(napi_env env, napi_callback_info info); 115 static napi_value GetBundleCodeDir(napi_env env, napi_callback_info info); 116 static napi_value GetCloudFileDir(napi_env env, napi_callback_info info); 117 static napi_value GetApplicationContext(napi_env env, napi_callback_info info); 118 static napi_value KillProcessBySelf(napi_env env, napi_callback_info info); 119 static napi_value SetColorMode(napi_env env, napi_callback_info info); 120 static napi_value SetLanguage(napi_env env, napi_callback_info info); 121 static napi_value SetFont(napi_env env, napi_callback_info info); 122 static napi_value ClearUpApplicationData(napi_env env, napi_callback_info info); 123 static napi_value GetRunningProcessInformation(napi_env env, napi_callback_info info); 124 static napi_value CreateJsApplicationContext(napi_env env); 125 static napi_value RestartApp(napi_env env, napi_callback_info info); 126 static napi_value SetSupportedProcessCacheSelf(napi_env env, napi_callback_info info); 127 static napi_value PreloadUIExtensionAbility(napi_env env, napi_callback_info info); 128 static napi_value GetCurrentAppCloneIndex(napi_env env, napi_callback_info info); 129 static napi_value GetCurrentInstanceKey(napi_env env, napi_callback_info info); 130 static napi_value GetAllRunningInstanceKeys(napi_env env, napi_callback_info info); 131 static napi_value SetFontSizeScale(napi_env env, napi_callback_info info); 132 133 protected: 134 std::weak_ptr<ApplicationContext> applicationContext_; 135 136 private: 137 napi_value OnCreateBundleContext(napi_env env, NapiCallbackInfo& info); 138 napi_value OnCreateModuleResourceManager(napi_env env, NapiCallbackInfo& info); 139 napi_value OnSwitchArea(napi_env env, NapiCallbackInfo& info); 140 napi_value OnGetArea(napi_env env, NapiCallbackInfo& info); 141 napi_value OnCreateModuleContext(napi_env env, NapiCallbackInfo& info); 142 napi_value CreateJsModuleContext(napi_env env, const std::shared_ptr<Context>& moduleContext); 143 napi_value OnCreateSystemHspModuleResourceManager(napi_env env, NapiCallbackInfo& info); 144 napi_value OnGetApplicationContext(napi_env env, NapiCallbackInfo& info); 145 bool CheckCallerIsSystemApp(); 146 static void BindNativeApplicationContextOne(napi_env env, napi_value object); 147 static void BindNativeApplicationContextTwo(napi_env env, napi_value object); 148 static JsAppProcessState ConvertToJsAppProcessState( 149 const AppExecFwk::AppProcessState &appProcessState, const bool &isFocused); 150 std::shared_ptr<JsAbilityLifecycleCallback> callback_; 151 std::shared_ptr<JsEnvironmentCallback> envCallback_; 152 std::shared_ptr<JsApplicationStateChangeCallback> applicationStateCallback_; 153 std::mutex applicationStateCallbackLock_; 154 sptr<JsAbilityAutoStartupCallBack> jsAutoStartupCallback_; 155 }; 156 } // namespace AbilityRuntime 157 } // namespace OHOS 158 #endif // OHOS_ABILITY_RUNTIME_JS_APPLICATION_CONTEXT_UTILS_H 159