1 /* 2 * Copyright (c) 2021-2022 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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLUGIN_MANAGER_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLUGIN_MANAGER_H 18 19 #include <mutex> 20 #include <unordered_map> 21 22 #include "base/utils/macros.h" 23 #include "base/utils/singleton.h" 24 #include "bridge/js_frontend/engine/common/js_engine_loader.h" 25 #include "core/common/plugin_utils.h" 26 #include "core/components/plugin/plugin_sub_container.h" 27 namespace OHOS::Ace { 28 29 class ACE_EXPORT PluginManager final : public Singleton<PluginManager> { 30 DECLARE_SINGLETON(PluginManager); 31 32 public: 33 void UpdateConfigurationInPlugin(const ResourceConfiguration& resConfig, const RefPtr<TaskExecutor>& taskExecutor); 34 void AddPluginSubContainer(int64_t pluginId, const RefPtr<PluginSubContainer>& pluginSubContainer); 35 void RemovePluginSubContainer(int64_t pluginId); 36 void AddPluginParentContainer(int64_t pluginId, int32_t pluginParentContainerId); 37 void RemovePluginParentContainer(int64_t pluginId); 38 void AddNonmatchedContainer(const std::string& pluginKey, const RefPtr<PluginSubContainer>& pluginSubContainer); 39 RefPtr<PluginSubContainer> GetPluginSubContainer(int64_t pluginId); 40 RefPtr<PluginSubContainer> MatchPluginSubContainerWithPluginId(int64_t pluginId, const std::string& pluginKey); 41 int64_t GetPluginSubContainerId(); 42 int32_t GetPluginParentContainerId(int64_t pluginId); SetJsEngineLoader(Framework::JsEngineLoader * jsEngineLoader)43 void SetJsEngineLoader(Framework::JsEngineLoader* jsEngineLoader) 44 { 45 jsEngineLoader_ = jsEngineLoader; 46 } 47 GetJsEngineLoader()48 Framework::JsEngineLoader* GetJsEngineLoader() 49 { 50 return jsEngineLoader_; 51 } 52 SetAceAbility(void * aceAbility,const std::shared_ptr<PluginUtils> & pluginUtils)53 void SetAceAbility(void* aceAbility, const std::shared_ptr<PluginUtils>& pluginUtils) 54 { 55 std::lock_guard<std::mutex> lock(pluginUtilsMutex_); 56 aceAbility_ = aceAbility; 57 pluginUtils_ = pluginUtils; 58 }; 59 GetAceAbility()60 void* GetAceAbility() const 61 { 62 return aceAbility_; 63 }; 64 65 int32_t StartAbility(const std::string& bundleName, const std::string& abilityName, const std::string& params); 66 67 private: 68 std::mutex mutex_; 69 std::mutex pluginUtilsMutex_; 70 std::map<int64_t, RefPtr<PluginSubContainer>> pluginSubContainerMap_; 71 std::mutex nonmatchedContainerMutex_; 72 std::unordered_map<std::string, RefPtr<PluginSubContainer>> nonmatchedContainerMap_; 73 std::mutex parentContainerMutex_; 74 std::unordered_map<int64_t, int32_t> parentContainerMap_; 75 Framework::JsEngineLoader* jsEngineLoader_ = nullptr; 76 void* aceAbility_ = nullptr; 77 std::shared_ptr<PluginUtils> pluginUtils_; 78 }; 79 } // namespace OHOS::Ace 80 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLUGIN_MANAGER_H 81