• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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