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 AddPluginSubContainer(int64_t pluginId, const RefPtr<PluginSubContainer>& pluginSubContainer); 34 void RemovePluginSubContainer(int64_t pluginId); 35 void AddPluginParentContainer(int64_t pluginId, int32_t pluginParentContainerId); 36 void RemovePluginParentContainer(int64_t pluginId); 37 void AddNonmatchedContainer(const std::string& pluginKey, const RefPtr<PluginSubContainer>& pluginSubContainer); 38 RefPtr<PluginSubContainer> GetPluginSubContainer(int64_t pluginId); 39 RefPtr<PluginSubContainer> MatchPluginSubContainerWithPluginId(int64_t pluginId, const std::string& pluginKey); 40 int64_t GetPluginSubContainerId(); 41 int64_t GetPluginParentContainerId(int64_t pluginId); SetJsEngineLoader(Framework::JsEngineLoader * jsEngineLoader)42 void SetJsEngineLoader(Framework::JsEngineLoader* jsEngineLoader) 43 { 44 jsEngineLoader_ = jsEngineLoader; 45 } 46 GetJsEngineLoader()47 Framework::JsEngineLoader* GetJsEngineLoader() 48 { 49 return jsEngineLoader_; 50 } 51 SetAceAbility(void * aceAbility,const std::shared_ptr<PluginUtils> & pluginUtils)52 void SetAceAbility(void* aceAbility, const std::shared_ptr<PluginUtils>& pluginUtils) 53 { 54 aceAbility_ = aceAbility; 55 pluginUtils_ = pluginUtils; 56 }; 57 GetAceAbility()58 void* GetAceAbility() const 59 { 60 return aceAbility_; 61 }; 62 63 int32_t StartAbility(const std::string& bundleName, const std::string& abilityName, const std::string& params); 64 65 private: 66 std::mutex mutex_; 67 static std::map<int64_t, RefPtr<PluginSubContainer>> pluginSubContainerMap_; 68 std::mutex nonmatchedContainerMutex_; 69 std::unordered_map<std::string, RefPtr<PluginSubContainer>> nonmatchedContainerMap_; 70 std::mutex parentContainerMutex_; 71 std::unordered_map<int64_t, int32_t> parentContainerMap_; 72 Framework::JsEngineLoader* jsEngineLoader_ = nullptr; 73 void* aceAbility_ = nullptr; 74 static std::shared_ptr<PluginUtils> pluginUtils_; 75 }; 76 } // namespace OHOS::Ace 77 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLUGIN_MANAGER_H 78