• 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_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_H
17 #define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_H
18 
19 #include <memory>
20 
21 #include "base/memory/ace_type.h"
22 #include "core/common/ace_page.h"
23 #include "core/common/frontend.h"
24 #include "frameworks/bridge/card_frontend/card_frontend_delegate.h"
25 #include "frameworks/bridge/card_frontend/js_card_parser.h"
26 #include "frameworks/bridge/common/accessibility/accessibility_node_manager.h"
27 #include "frameworks/bridge/common/manifest/manifest_parser.h"
28 #include "frameworks/bridge/common/utils/page_id_pool.h"
29 #include "frameworks/bridge/js_frontend/frontend_delegate_impl.h"
30 
31 namespace OHOS::Ace {
32 class ACE_EXPORT CardFrontend : public Frontend {
33     DECLARE_ACE_TYPE(CardFrontend, Frontend);
34 
35 public:
36     using OnFormVisibleCallback = std::function<void()>;
37 
38     CardFrontend() = default;
39     ~CardFrontend() override;
40 
SetLoadCardCallBack(WeakPtr<PipelineBase> outSidePipelineContext)41     virtual void SetLoadCardCallBack(WeakPtr<PipelineBase> outSidePipelineContext) {}
42     virtual void UpdateData(const std::string& dataList);
43     virtual void OnPageLoaded(const RefPtr<Framework::JsAcePage>& page);
44     virtual void HandleSurfaceChanged(int32_t width, int32_t height);
45     virtual void UpdatePageData(const std::string& dataList);
46     virtual void OnMediaFeatureUpdate();
47     std::string GetFormSrcPath(const std::string& uri, const std::string& suffix) const;
48 
49     bool Initialize(FrontendType type, const RefPtr<TaskExecutor>& taskExecutor) override;
50 
51     void Destroy() override;
52 
53     void AttachPipelineContext(const RefPtr<PipelineBase>& context) override;
54     void SetAssetManager(const RefPtr<AssetManager>& assetManager) override;
55 
56     UIContentErrorCode RunPage(const std::string& url, const std::string& params) override;
ReplacePage(const std::string & url,const std::string & params)57     void ReplacePage(const std::string& url, const std::string& params) override {}
PushPage(const std::string & url,const std::string & params)58     void PushPage(const std::string& url, const std::string& params) override {}
AddPage(const RefPtr<AcePage> & page)59     void AddPage(const RefPtr<AcePage>& page) override {}
60     RefPtr<AcePage> GetPage(int32_t pageId) const override;
TriggerGarbageCollection()61     void TriggerGarbageCollection() override {}
62 
SendCallbackMessage(const std::string & callbackId,const std::string & data)63     void SendCallbackMessage(const std::string& callbackId, const std::string& data) const override {}
64     // platform channel.
SetJsMessageDispatcher(const RefPtr<JsMessageDispatcher> & dispatcher)65     void SetJsMessageDispatcher(const RefPtr<JsMessageDispatcher>& dispatcher) const override {}
TransferComponentResponseData(int32_t callbackId,int32_t code,std::vector<uint8_t> && data)66     void TransferComponentResponseData(int32_t callbackId, int32_t code, std::vector<uint8_t>&& data) const override {}
TransferJsResponseData(int32_t callbackId,int32_t code,std::vector<uint8_t> && data)67     void TransferJsResponseData(int32_t callbackId, int32_t code, std::vector<uint8_t>&& data) const override {}
TransferJsEventData(int32_t callbackId,int32_t code,std::vector<uint8_t> && data)68     void TransferJsEventData(int32_t callbackId, int32_t code, std::vector<uint8_t>&& data) const override {}
TransferJsPluginGetError(int32_t callbackId,int32_t errorCode,std::string && errorMessage)69     void TransferJsPluginGetError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const override {}
70 
LoadPluginJsCode(std::string && jsCode)71     void LoadPluginJsCode(std::string&& jsCode) const override {}
LoadPluginJsByteCode(std::vector<uint8_t> && jsCode,std::vector<int32_t> && jsCodeLen)72     void LoadPluginJsByteCode(std::vector<uint8_t>&& jsCode, std::vector<int32_t>&& jsCodeLen) const override {}
73 
74     // application lifecycle.
UpdateState(Frontend::State state)75     void UpdateState(Frontend::State state) override {}
76 
77     // page lifecycle.
OnBackPressed()78     bool OnBackPressed() override
79     {
80         return false;
81     }
82 
OnSaveAbilityState(std::string & data)83     void OnSaveAbilityState(std::string& data) override {}
84 
OnRestoreAbilityState(const std::string & data)85     void OnRestoreAbilityState(const std::string& data) override {}
86 
OnShow()87     void OnShow() override
88     {
89         foregroundFrontend_ = true;
90     }
OnHide()91     void OnHide() override
92     {
93         foregroundFrontend_ = false;
94     }
95 
OnActive()96     void OnActive() override {}
OnInactive()97     void OnInactive() override {}
OnStartContinuation()98     bool OnStartContinuation() override
99     {
100         return false;
101     }
OnCompleteContinuation(int32_t code)102     void OnCompleteContinuation(int32_t code) override {}
OnMemoryLevel(const int32_t level)103     void OnMemoryLevel(const int32_t level) override {}
OnSaveData(std::string & data)104     void OnSaveData(std::string& data) override {}
OnRestoreData(const std::string & data)105     bool OnRestoreData(const std::string& data) override
106     {
107         return false;
108     }
OnRemoteTerminated()109     void OnRemoteTerminated() override {}
OnNewRequest(const std::string & data)110     void OnNewRequest(const std::string& data) override {}
OnNewWant(const std::string & data)111     void OnNewWant(const std::string& data) override {}
CallRouterBack()112     void CallRouterBack() override {}
113     void OnSurfaceChanged(int32_t width, int32_t height) override;
OnLayoutCompleted(const std::string & componentId)114     void OnLayoutCompleted(const std::string& componentId) override {}
OnDrawCompleted(const std::string & componentId)115     void OnDrawCompleted(const std::string& componentId) override {}
OnDrawChildrenCompleted(const std::string & componentId)116     void OnDrawChildrenCompleted(const std::string& componentId) override {}
IsDrawChildrenCallbackFuncExist(const std::string & componentId)117     bool IsDrawChildrenCallbackFuncExist(const std::string& componentId) override {
118         return false;
119     }
DumpFrontend()120     void DumpFrontend() const override {}
GetPagePath()121     std::string GetPagePath() const override
122     {
123         return "";
124     }
125     WindowConfig& GetWindowConfig() override;
126     void SetColorMode(ColorMode colorMode) override;
127     void RebuildAllPages() override;
128 
GetEventHandler()129     RefPtr<AceEventHandler> GetEventHandler() override
130     {
131         return eventHandler_;
132     }
133 
134     // judge frontend is foreground frontend.
IsForeground()135     bool IsForeground() override
136     {
137         return foregroundFrontend_;
138     }
139 
GetAccessibilityManager()140     RefPtr<AccessibilityManager> GetAccessibilityManager() const override
141     {
142         if (!delegate_) {
143             return nullptr;
144         }
145         return delegate_->GetJsAccessibilityManager();
146     }
147 
SetDensity(double density)148     void SetDensity(double density)
149     {
150         density_ = density;
151     }
152 
ResetPageLoadState()153     void ResetPageLoadState()
154     {
155         pageLoaded_ = false;
156     }
157 
SetCardHapPath(const std::string & path)158     void SetCardHapPath(const std::string& path)
159     {
160         cardHapPath_ = path;
161     }
162 
GetFormSrc()163     std::string GetFormSrc() const
164     {
165         return formSrc_;
166     }
167 
SetFormSrc(std::string formSrc)168     void SetFormSrc(std::string formSrc)
169     {
170         formSrc_ = formSrc;
171     }
172 
GetCardWindowConfig()173     WindowConfig& GetCardWindowConfig()
174     {
175         return cardWindowConfig_;
176     }
177 
SetCardWindowConfig(WindowConfig cardWindowConfig)178     void SetCardWindowConfig(WindowConfig cardWindowConfig)
179     {
180         cardWindowConfig_ = cardWindowConfig;
181     }
182 
SetRunningCardId(int64_t cardId)183     void SetRunningCardId(int64_t cardId)
184     {
185         cardId_ = cardId;
186     }
187 
AddFormVisiableCallback(const OnFormVisibleCallback & callback)188     void AddFormVisiableCallback(const OnFormVisibleCallback& callback)
189     {
190         if (callback) {
191             onFormVisibleCallback_ = callback;
192         }
193     }
194 
FireFormVisiableCallback()195     void FireFormVisiableCallback() const
196     {
197         if (onFormVisibleCallback_) {
198             onFormVisibleCallback_();
199         }
200     }
201 
202 protected:
203     void ParseManifest() const;
204 
205     ColorMode colorMode_ = ColorMode::LIGHT;
206     bool foregroundFrontend_ = false;
207     bool pageLoaded_ = false;
208     double density_ = 1.0;
209     std::string cardHapPath_;
210 
211     Framework::PipelineContextHolder holder_;
212     RefPtr<AssetManager> assetManager_;
213     RefPtr<Framework::ManifestParser> manifestParser_;
214     OnFormVisibleCallback onFormVisibleCallback_;
215 
216     mutable std::once_flag onceFlag_;
217     RefPtr<AceEventHandler> eventHandler_;
218     Framework::PageIdPool pageIdPool_;
219     std::string formSrc_;
220     WindowConfig cardWindowConfig_;
221     uint64_t cardId_ = 0; // cardId != formId, cardId is the nodeId of component.
222 
223 private:
224     RefPtr<Framework::CardFrontendDelegate> delegate_;
225     void LoadPage(const std::string& urlPath, const std::string& params);
226     void ParsePage(const RefPtr<PipelineBase>& context, const std::string& pageContent, const std::string& params,
227         const RefPtr<Framework::JsAcePage>& page);
228 
229     RefPtr<Framework::JsCardParser> parseJsCard_;
230 };
231 
232 class CardEventHandler : public AceEventHandler {
233 public:
CardEventHandler(const RefPtr<Framework::CardFrontendDelegate> & delegate)234     explicit CardEventHandler(const RefPtr<Framework::CardFrontendDelegate>& delegate) : delegate_(delegate)
235     {
236         ACE_DCHECK(delegate_);
237     }
238 
239     ~CardEventHandler() override = default;
240 
HandleAsyncEvent(const EventMarker & eventMarker)241     void HandleAsyncEvent(const EventMarker& eventMarker) override
242     {
243         delegate_->FireCardEvent(eventMarker);
244     }
245 
HandleAsyncEvent(const EventMarker & eventMarker,int32_t param)246     void HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) override {}
247 
HandleAsyncEvent(const EventMarker & eventMarker,const BaseEventInfo & info)248     void HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) override
249     {
250         delegate_->FireCardEvent(eventMarker);
251     }
252 
HandleAsyncEvent(const EventMarker & eventMarker,const KeyEvent & info)253     void HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& info) override {}
254 
HandleAsyncEvent(const EventMarker & eventMarker,const std::string & param)255     void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) override
256     {
257         delegate_->FireCardEvent(eventMarker, param);
258     }
259 
HandleSyncEvent(const EventMarker & eventMarker,bool & result)260     void HandleSyncEvent(const EventMarker& eventMarker, bool& result) override {}
261 
HandleSyncEvent(const EventMarker & eventMarker,const BaseEventInfo & info,bool & result)262     void HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) override {}
263 
HandleSyncEvent(const EventMarker & eventMarker,const KeyEvent & info,bool & result)264     void HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& info, bool& result) override {}
265 
HandleSyncEvent(const EventMarker & eventMarker,const std::string & param,std::string & result)266     void HandleSyncEvent(const EventMarker& eventMarker, const std::string& param, std::string& result) override {}
267 
HandleSyncEvent(const EventMarker & eventMarker,const std::string & componentId,const int32_t nodeId,const bool isDestroy)268     void HandleSyncEvent(const EventMarker& eventMarker, const std::string& componentId, const int32_t nodeId,
269         const bool isDestroy) override
270     {}
271 
272 private:
273     RefPtr<Framework::CardFrontendDelegate> delegate_;
274 };
275 } // namespace OHOS::Ace
276 #endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_H
277