1 /*
2  * Copyright (c) 2021-2024 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_CONTAINER_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CONTAINER_H
18 
19 #include <atomic>
20 #include <functional>
21 #include <mutex>
22 #include <unordered_map>
23 
24 #include "interfaces/inner_api/ace/ace_forward_compatibility.h"
25 #include "interfaces/inner_api/ace/constants.h"
26 #include "interfaces/inner_api/ace/navigation_controller.h"
27 
28 #include "base/memory/ace_type.h"
29 #include "base/view_data/hint_to_type_wrap.h"
30 #include "base/resource/asset_manager.h"
31 #include "base/resource/shared_image_manager.h"
32 #include "base/subwindow/subwindow_manager.h"
33 #include "base/thread/task_executor.h"
34 #include "base/utils/macros.h"
35 #include "base/utils/noncopyable.h"
36 #include "base/utils/system_properties.h"
37 #include "base/utils/utils.h"
38 #include "core/common/ace_application_info.h"
39 #include "core/common/container_consts.h"
40 #include "core/common/display_info.h"
41 #include "core/common/display_info_utils.h"
42 #include "core/common/frontend.h"
43 #include "core/common/page_url_checker.h"
44 #include "core/common/platform_res_register.h"
45 #include "core/common/resource/resource_configuration.h"
46 #include "core/common/settings.h"
47 #include "core/common/window.h"
48 #include "core/components/common/layout/constants.h"
49 #include "core/components_ng/base/distributed_ui.h"
50 #include "core/components_ng/pattern/app_bar/app_bar_view.h"
51 #include "core/components_ng/pattern/navigation/navigation_route.h"
52 #include "core/components_ng/pattern/navigator/navigator_event_hub.h"
53 #include "core/event/pointer_event.h"
54 #include "core/pipeline/pipeline_base.h"
55 
56 namespace OHOS::Ace {
57 
58 using PageTask = std::function<void()>;
59 using TouchEventCallback = std::function<void(const TouchEvent&, const std::function<void()>&,
60     const RefPtr<NG::FrameNode>&)>;
61 using KeyEventCallback = std::function<bool(const KeyEvent&)>;
62 using MouseEventCallback = std::function<void(const MouseEvent&, const std::function<void()>&,
63     const RefPtr<NG::FrameNode>&)>;
64 using AxisEventCallback = std::function<void(const AxisEvent&, const std::function<void()>&,
65     const RefPtr<NG::FrameNode>&)>;
66 using RotationEventCallBack = std::function<bool(const RotationEvent&)>;
67 using CardViewPositionCallBack = std::function<void(int id, float offsetX, float offsetY)>;
68 using DragEventCallBack = std::function<void(const PointerEvent&, const DragEventAction&,
69     const RefPtr<NG::FrameNode>&)>;
70 using StopDragCallback = std::function<void()>;
71 
72 class ACE_FORCE_EXPORT Container : public virtual AceType {
73     DECLARE_ACE_TYPE(Container, AceType);
74 
75 public:
76     Container() = default;
77     ~Container() override = default;
78 
79     virtual void Initialize() = 0;
80 
81     virtual void Destroy() = 0;
82 
IsKeyboard()83     virtual bool IsKeyboard()
84     {
85         return false;
86     }
87 
DestroyView()88     virtual void DestroyView() {}
UpdatePopupUIExtension(const RefPtr<NG::FrameNode>& node, uint32_t autoFillSessionId, bool isNative = true)89     virtual bool UpdatePopupUIExtension(const RefPtr<NG::FrameNode>& node,
90         uint32_t autoFillSessionId, bool isNative = true)
91     {
92         return false;
93     }
94 
ClosePopupUIExtension(uint32_t autoFillSessionId)95     virtual bool ClosePopupUIExtension(uint32_t autoFillSessionId)
96     {
97         return false;
98     }
99 
PlaceHolderToType(const std::string& onePlaceHolder)100     virtual HintToTypeWrap PlaceHolderToType(const std::string& onePlaceHolder)
101     {
102         HintToTypeWrap hintToTypeWrap;
103         return hintToTypeWrap;
104     }
105 
106     // Get the instance id of this container
107     virtual int32_t GetInstanceId() const = 0;
108 
109     // Get the ability name of this container
110     virtual std::string GetHostClassName() const = 0;
111 
112     // Get the frontend of container
113     virtual RefPtr<Frontend> GetFrontend() const = 0;
114 
115     // Get task executor.
116     virtual RefPtr<TaskExecutor> GetTaskExecutor() const = 0;
117 
118     // Get assert manager.
119     virtual RefPtr<AssetManager> GetAssetManager() const = 0;
120 
121     // Get platform resource register.
122     virtual RefPtr<PlatformResRegister> GetPlatformResRegister() const = 0;
123 
124     // Get the pipelineContext of container.
125     virtual RefPtr<PipelineBase> GetPipelineContext() const = 0;
126 
127     // Dump container.
128     virtual bool Dump(const std::vector<std::string>& params, std::vector<std::string>& info);
129 
130     // Get the width/height of the view
131     virtual int32_t GetViewWidth() const = 0;
132     virtual int32_t GetViewHeight() const = 0;
133     virtual int32_t GetViewPosX() const = 0;
134     virtual int32_t GetViewPosY() const = 0;
135 
136     virtual uint32_t GetWindowId() const = 0;
SetWindowId(uint32_t windowId)137     virtual void SetWindowId(uint32_t windowId) {}
WindowIsShow() const138     virtual bool WindowIsShow() const
139     {
140         return false;
141     }
142 
143     virtual RefPtr<AceView> GetAceView() const = 0;
144 
145     virtual void* GetView() const = 0;
146 
147     // Trigger garbage collection
TriggerGarbageCollection()148     virtual void TriggerGarbageCollection() {}
149 
DumpHeapSnapshot(bool isPrivate)150     virtual void DumpHeapSnapshot(bool isPrivate) {}
151 
DestroyHeapProfiler()152     virtual void DestroyHeapProfiler() {}
153 
ForceFullGC()154     virtual void ForceFullGC() {}
155 
NotifyFontNodes()156     virtual void NotifyFontNodes() {}
157 
NotifyAppStorage(const std::string& key, const std::string& value)158     virtual void NotifyAppStorage(const std::string& key, const std::string& value) {}
159 
SetCardFrontend(WeakPtr<Frontend> frontend, int64_t cardId)160     virtual void SetCardFrontend(WeakPtr<Frontend> frontend, int64_t cardId) {}
161 
GetCardFrontend(int64_t cardId) const162     virtual WeakPtr<Frontend> GetCardFrontend(int64_t cardId) const
163     {
164         return nullptr;
165     }
166 
SetCardPipeline(WeakPtr<PipelineBase>, int64_t cardId)167     virtual void SetCardPipeline(WeakPtr<PipelineBase>, int64_t cardId) {}
168 
GetCardPipeline(int64_t cardId) const169     virtual WeakPtr<PipelineBase> GetCardPipeline(int64_t cardId) const
170     {
171         return nullptr;
172     }
173 
174     // Get MultiModal ptr.
GetMutilModalPtr() const175     virtual uintptr_t GetMutilModalPtr() const
176     {
177         return 0;
178     }
179 
ProcessScreenOnEvents()180     virtual void ProcessScreenOnEvents() {}
181 
ProcessScreenOffEvents()182     virtual void ProcessScreenOffEvents() {}
183 
SetOrientation(Orientation orientation)184     virtual void SetOrientation(Orientation orientation) {}
185 
GetOrientation()186     virtual Orientation GetOrientation()
187     {
188         return Orientation::UNSPECIFIED;
189     }
190 
191     virtual RefPtr<DisplayInfo> GetDisplayInfo();
192 
193     virtual void InitIsFoldable();
194 
195     virtual bool IsFoldable();
196 
197     virtual FoldStatus GetCurrentFoldStatus();
198 
GetKeyboardSafeArea()199     virtual NG::SafeAreaInsets GetKeyboardSafeArea()
200     {
201         return {};
202     }
203 
GetSessionAvoidAreaByType(uint32_t safeAreaType)204     virtual Rect GetSessionAvoidAreaByType(uint32_t safeAreaType)
205     {
206         return {};
207     }
208 
GetHapPath() const209     virtual std::string GetHapPath() const
210     {
211         return {};
212     }
213 
GetWebHapPath() const214     virtual std::string GetWebHapPath() const
215     {
216         return {};
217     }
218 
SetCreateTime(std::chrono::time_point<std::chrono::high_resolution_clock> time)219     void SetCreateTime(std::chrono::time_point<std::chrono::high_resolution_clock> time)
220     {
221         createTime_ = time;
222     }
223 
IsFirstUpdate() const224     bool IsFirstUpdate() const
225     {
226         return firstUpdateData_;
227     }
228 
AlreadyFirstUpdate()229     void AlreadyFirstUpdate()
230     {
231         firstUpdateData_ = false;
232     }
233 
SetBundleName(const std::string& bundleName)234     void SetBundleName(const std::string& bundleName)
235     {
236         bundleName_ = bundleName;
237     }
238 
GetBundleName() const239     const std::string& GetBundleName() const
240     {
241         return bundleName_;
242     }
243 
SetModuleName(const std::string& moduleName)244     void SetModuleName(const std::string& moduleName)
245     {
246         moduleName_ = moduleName;
247     }
248 
GetModuleName() const249     std::string GetModuleName() const
250     {
251         return moduleName_;
252     }
253 
IsMainWindow() const254     virtual bool IsMainWindow() const { return false; }
IsSubWindow() const255     virtual bool IsSubWindow() const { return false; }
IsDialogWindow() const256     virtual bool IsDialogWindow() const { return false; }
IsSystemWindow() const257     virtual bool IsSystemWindow() const { return false; }
IsHostMainWindow() const258     virtual bool IsHostMainWindow() const { return false; }
IsHostSubWindow() const259     virtual bool IsHostSubWindow() const { return false; }
IsHostDialogWindow() const260     virtual bool IsHostDialogWindow() const { return false; }
IsHostSystemWindow() const261     virtual bool IsHostSystemWindow() const { return false; }
IsHostSceneBoardWindow() const262     virtual bool IsHostSceneBoardWindow() const { return false; }
IsSubContainer() const263     virtual bool IsSubContainer() const { return false; }
IsFormRender() const264     virtual bool IsFormRender() const { return false; }
GetParentMainWindowId(uint32_t currentWindowId) const265     virtual uint32_t GetParentMainWindowId(uint32_t currentWindowId) const
266     {
267         return 0;
268     }
269 
SetIsFormRender(bool isFormRender)270     virtual void SetIsFormRender(bool isFormRender) {};
271 
GetCardHapPath() const272     const std::string& GetCardHapPath() const
273     {
274         return cardHapPath_;
275     }
276 
277     bool UpdateState(const Frontend::State& state);
278 
GetSettings()279     Settings& GetSettings()
280     {
281         return settings_;
282     }
283 
SetBundlePath(const std::string& path)284     void SetBundlePath(const std::string& path)
285     {
286         bundlePath_ = path;
287     }
288 
GetBundlePath() const289     const std::string& GetBundlePath() const
290     {
291         return bundlePath_;
292     }
293 
SetFilesDataPath(const std::string& path)294     void SetFilesDataPath(const std::string& path)
295     {
296         filesDataPath_ = path;
297     }
298 
GetFilesDataPath() const299     const std::string& GetFilesDataPath() const
300     {
301         return filesDataPath_;
302     }
303 
SetTempDir(const std::string& path)304     void SetTempDir(const std::string& path)
305     {
306         tempDir_ = path;
307     }
308 
GetTempDir() const309     const std::string& GetTempDir() const
310     {
311         return tempDir_;
312     }
313 
SetViewFirstUpdating(std::chrono::time_point<std::chrono::high_resolution_clock> time)314     virtual void SetViewFirstUpdating(std::chrono::time_point<std::chrono::high_resolution_clock> time) {}
315 
UpdateResourceConfiguration(const std::string& jsonStr)316     virtual void UpdateResourceConfiguration(const std::string& jsonStr) {}
317 
318     static int32_t SafelyId();
319     static int32_t CurrentId();
320     static int32_t CurrentIdSafely();
321     static int32_t CurrentIdSafelyWithCheck();
322     static RefPtr<Container> Current();
323     static RefPtr<Container> CurrentSafely();
324     static RefPtr<Container> CurrentSafelyWithCheck();
325     static RefPtr<Container> GetContainer(int32_t containerId);
326     static RefPtr<Container> GetActive();
327     static RefPtr<Container> GetDefault();
328     static RefPtr<Container> GetFoucsed();
329     static RefPtr<TaskExecutor> CurrentTaskExecutor();
330     static RefPtr<TaskExecutor> CurrentTaskExecutorSafely();
331     static RefPtr<TaskExecutor> CurrentTaskExecutorSafelyWithCheck();
332     static void UpdateCurrent(int32_t id);
333 
SetUseNewPipeline()334     void SetUseNewPipeline()
335     {
336         useNewPipeline_ = true;
337     }
338 
SetUsePartialUpdate()339     void SetUsePartialUpdate()
340     {
341         usePartialUpdate_ = true;
342     }
343 
IsUseNewPipeline() const344     bool IsUseNewPipeline() const
345     {
346         return useNewPipeline_;
347     }
348 
IsCurrentUseNewPipeline()349     static bool IsCurrentUseNewPipeline()
350     {
351         auto container = Current();
352         return container ? container->useNewPipeline_ : AceForwardCompatibility::IsUseNG();
353     }
354 
355     // SetCurrentUsePartialUpdate is called when initial render on a page
356     // starts, see zyz_view_register loadDocument() implementation
IsCurrentUsePartialUpdate()357     static bool IsCurrentUsePartialUpdate()
358     {
359         auto container = Current();
360         return container ? container->usePartialUpdate_ : false;
361     }
362 
SetCurrentUsePartialUpdate(bool useIt = false)363     static void SetCurrentUsePartialUpdate(bool useIt = false)
364     {
365         auto container = Current();
366         if (container) {
367             container->usePartialUpdate_ = useIt;
368         }
369     }
370 
IsInFormContainer()371     static bool IsInFormContainer() {
372         auto container = Current();
373         return container ? container->isFRSCardContainer_ : false;
374     }
375 
IsInSubContainer()376     static bool IsInSubContainer()
377     {
378         auto container = Current();
379         return container ? container->IsSubContainer() : false;
380     }
381 
GetWindow() const382     Window* GetWindow() const
383     {
384         auto context = GetPipelineContext();
385         return context ? context->GetWindow() : nullptr;
386     }
387 
IsUseStageModel() const388     virtual bool IsUseStageModel() const
389     {
390         return false;
391     }
392 
GetCardFrontendMap(std::unordered_map<int64_t, WeakPtr<Frontend>>& cardFrontendMap) const393     virtual void GetCardFrontendMap(std::unordered_map<int64_t, WeakPtr<Frontend>>& cardFrontendMap) const {}
394 
SetSharedRuntime(void* runtime)395     virtual void SetSharedRuntime(void* runtime) {}
GetSharedRuntime()396     virtual void* GetSharedRuntime()
397     {
398         return nullptr;
399     }
400 
IsFRSCardContainer() const401     bool IsFRSCardContainer() const
402     {
403         return isFRSCardContainer_;
404     }
405 
SetIsFRSCardContainer(bool isFRSCardContainer)406     void SetIsFRSCardContainer(bool isFRSCardContainer)
407     {
408         isFRSCardContainer_ = isFRSCardContainer;
409     }
410 
IsDynamicRender() const411     bool IsDynamicRender() const
412     {
413         return isDynamicRender_;
414     }
415 
SetIsDynamicRender(bool isDynamicRender)416     void SetIsDynamicRender(bool isDynamicRender)
417     {
418         isDynamicRender_ = isDynamicRender;
419     }
420 
GetRegisterComponents()421     virtual std::vector<std::string> GetRegisterComponents() { return {}; };
422 
SetPageUrlChecker(const RefPtr<PageUrlChecker>& pageUrlChecker)423     void SetPageUrlChecker(const RefPtr<PageUrlChecker>& pageUrlChecker)
424     {
425         pageUrlChecker_ = pageUrlChecker;
426     }
427 
GetPageUrlChecker()428     const RefPtr<PageUrlChecker>& GetPageUrlChecker()
429     {
430         return pageUrlChecker_;
431     }
432 
SetNavigationRoute(const RefPtr<NG::NavigationRoute>& navigationRoute)433     void SetNavigationRoute(const RefPtr<NG::NavigationRoute>& navigationRoute)
434     {
435         navigationRoute_ = navigationRoute;
436     }
437 
GetNavigationRoute() const438     RefPtr<NG::NavigationRoute> GetNavigationRoute() const
439     {
440         return navigationRoute_;
441     }
442 
IsDialogContainer() const443     virtual bool IsDialogContainer() const
444     {
445         return false;
446     }
447 
SetWindowScale(float windowScale)448     virtual void SetWindowScale(float windowScale) {}
449 
GetWindowScale() const450     virtual float GetWindowScale() const
451     {
452         return 1.0f;
453     }
454 
NotifyConfigurationChange(bool, const ConfigurationChange& configurationChange = { false, false })455     virtual void NotifyConfigurationChange(bool, const ConfigurationChange& configurationChange = { false, false }) {}
HotReload()456     virtual void HotReload() {}
457 
SetIsModule(bool isModule)458     void SetIsModule(bool isModule)
459     {
460         isModule_ = isModule;
461     }
462 
IsModule() const463     bool IsModule() const
464     {
465         return isModule_;
466     }
467 
SetDistributedUI(std::shared_ptr<NG::DistributedUI>& distributedUI)468     void SetDistributedUI(std::shared_ptr<NG::DistributedUI>& distributedUI)
469     {
470         distributedUI_ = distributedUI;
471     }
472 
GetDistributedUI()473     std::shared_ptr<NG::DistributedUI>& GetDistributedUI()
474     {
475         return distributedUI_;
476     }
477 
IsLauncherContainer()478     virtual bool IsLauncherContainer()
479     {
480         return false;
481     }
482 
IsScenceBoardWindow()483     virtual bool IsScenceBoardWindow()
484     {
485         return false;
486     }
487 
IsUIExtensionWindow()488     virtual bool IsUIExtensionWindow()
489     {
490         return false;
491     }
492 
IsSceneBoardEnabled()493     virtual bool IsSceneBoardEnabled()
494     {
495         return false;
496     }
497 
GetCurPointerEventInfo( int32_t& pointerId, int32_t& globalX, int32_t& globalY, int32_t& sourceType, int32_t& sourceTool, StopDragCallback&& stopDragCallback)498     virtual bool GetCurPointerEventInfo(
499         int32_t& pointerId, int32_t& globalX, int32_t& globalY, int32_t& sourceType,
500         int32_t& sourceTool, StopDragCallback&& stopDragCallback)
501     {
502         return false;
503     }
504 
GetCurPointerEventSourceType(int32_t& sourceType)505     virtual bool GetCurPointerEventSourceType(int32_t& sourceType)
506     {
507         return false;
508     }
509 
RequestAutoFill(const RefPtr<NG::FrameNode>& node, AceAutoFillType autoFillType, bool isNewPassWord, bool& isPopup, uint32_t& autoFillSessionId, bool isNative = true)510     virtual bool RequestAutoFill(const RefPtr<NG::FrameNode>& node, AceAutoFillType autoFillType,
511         bool isNewPassWord, bool& isPopup, uint32_t& autoFillSessionId, bool isNative = true)
512     {
513         return false;
514     }
515 
IsNeedToCreatePopupWindow(const AceAutoFillType& autoFillType)516     virtual bool IsNeedToCreatePopupWindow(const AceAutoFillType& autoFillType)
517     {
518         return false;
519     }
520 
RequestAutoSave(const RefPtr<NG::FrameNode>& node, const std::function<void()>& onFinish = nullptr, const std::function<void()>& onUIExtNodeBindingCompleted = nullptr, bool isNative = true, int32_t instanceId = -1)521     virtual bool RequestAutoSave(const RefPtr<NG::FrameNode>& node, const std::function<void()>& onFinish = nullptr,
522         const std::function<void()>& onUIExtNodeBindingCompleted = nullptr, bool isNative = true,
523         int32_t instanceId = -1)
524     {
525         return false;
526     }
527 
528 
GetNavigationController(const std::string& navigationId)529     virtual std::shared_ptr<NavigationController> GetNavigationController(const std::string& navigationId)
530     {
531         return nullptr;
532     }
533 
LessThanAPIVersion(PlatformVersion version)534     static bool LessThanAPIVersion(PlatformVersion version)
535     {
536         return PipelineBase::GetCurrentContext() &&
537                PipelineBase::GetCurrentContext()->GetMinPlatformVersion() < static_cast<int32_t>(version);
538     }
539 
GreatOrEqualAPIVersion(PlatformVersion version)540     static bool GreatOrEqualAPIVersion(PlatformVersion version)
541     {
542         return PipelineBase::GetCurrentContext() &&
543                PipelineBase::GetCurrentContext()->GetMinPlatformVersion() >= static_cast<int32_t>(version);
544     }
545 
LessThanAPITargetVersion(PlatformVersion version)546     static bool LessThanAPITargetVersion(PlatformVersion version)
547     {
548         auto container = Current();
549         CHECK_NULL_RETURN(container, false);
550         auto apiTargetVersion = container->GetApiTargetVersion();
551         return apiTargetVersion < static_cast<int32_t>(version);
552     }
553 
GreatOrEqualAPITargetVersion(PlatformVersion version)554     static bool GreatOrEqualAPITargetVersion(PlatformVersion version)
555     {
556         auto container = Current();
557         if (!container) {
558             auto apiTargetVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion() % 1000;
559             return apiTargetVersion >= static_cast<int32_t>(version);
560         }
561         auto apiTargetVersion = container->GetApiTargetVersion();
562         return apiTargetVersion >= static_cast<int32_t>(version);
563     }
564 
SetAppBar(const RefPtr<NG::AppBarView>& appBar)565     void SetAppBar(const RefPtr<NG::AppBarView>& appBar)
566     {
567         appBar_ = appBar;
568     }
569 
GetAppBar() const570     RefPtr<NG::AppBarView> GetAppBar() const
571     {
572         return appBar_;
573     }
574 
TerminateUIExtension()575     virtual void TerminateUIExtension() {}
576 
577     template<ContainerType type>
578     static int32_t GenerateId();
579     static void SetFontScale(int32_t instanceId, float fontScale);
580     static void SetFontWeightScale(int32_t instanceId, float fontScale);
581 
GetApiTargetVersion() const582     int32_t GetApiTargetVersion() const
583     {
584         return apiTargetVersion_;
585     }
586 
SetApiTargetVersion(int32_t apiTargetVersion)587     void SetApiTargetVersion(int32_t apiTargetVersion)
588     {
589         apiTargetVersion_ = apiTargetVersion % 1000;
590     }
591 
GetUIContentType() const592     UIContentType GetUIContentType() const
593     {
594         return uIContentType_;
595     }
596 
SetUIContentType(UIContentType uIContentType)597     void SetUIContentType(UIContentType uIContentType)
598     {
599         uIContentType_ = uIContentType;
600     }
601 
602     void DestroyToastSubwindow(int32_t instanceId);
603 
CheckAndSetFontFamily()604     virtual void CheckAndSetFontFamily() {};
605 
IsFreeMultiWindow() const606     virtual bool IsFreeMultiWindow() const
607     {
608         return false;
609     }
610 
GetUIExtensionHostWindowRect(int32_t instanceId)611     virtual Rect GetUIExtensionHostWindowRect(int32_t instanceId)
612     {
613         return Rect();
614     }
615 protected:
616     bool IsFontFileExistInPath(const std::string& path);
617     std::string GetFontFamilyName(std::string path);
618     bool endsWith(std::string str, std::string suffix);
619 
620 private:
621     static bool IsIdAvailable(int32_t id);
622 
623 protected:
624     std::chrono::time_point<std::chrono::high_resolution_clock> createTime_;
625     bool firstUpdateData_ = true;
626     std::string cardHapPath_;
627     bool useNewPipeline_ = false;
628     std::mutex stateMutex_;
629     Frontend::State state_ = Frontend::State::UNDEFINE;
630     bool isFRSCardContainer_ = false;
631     bool isDynamicRender_ = false;
632 
633 private:
634     std::string bundleName_;
635     std::string moduleName_;
636     std::string bundlePath_;
637     std::string filesDataPath_;
638     std::string tempDir_;
639     bool usePartialUpdate_ = false;
640     Settings settings_;
641     RefPtr<PageUrlChecker> pageUrlChecker_;
642     RefPtr<NG::NavigationRoute> navigationRoute_;
643     bool isModule_ = false;
644     std::shared_ptr<NG::DistributedUI> distributedUI_;
645     RefPtr<NG::AppBarView> appBar_;
646     int32_t apiTargetVersion_ = 0;
647     // Define the type of UI Content, for example, Security UIExtension.
648     UIContentType uIContentType_ = UIContentType::UNDEFINED;
649     ACE_DISALLOW_COPY_AND_MOVE(Container);
650 };
651 
652 template<ContainerType type>
GenerateId()653 int32_t Container::GenerateId()
654 {
655     static std::atomic<int32_t> gInstanceId;
656     int32_t id;
657     do {
658         id = type * CONTAINER_ID_DIVIDE_SIZE + gInstanceId.fetch_add(1) % CONTAINER_ID_DIVIDE_SIZE;
659     } while (!IsIdAvailable(id));
660     return id;
661 }
662 
663 template<>
664 int32_t Container::GenerateId<PLUGIN_SUBCONTAINER>();
665 
666 } // namespace OHOS::Ace
667 
668 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CONTAINER_H
669