• 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 #include "frameworks/bridge/declarative_frontend/declarative_frontend.h"
17 
18 #include <memory>
19 
20 #include "base/log/dump_log.h"
21 #include "base/log/event_report.h"
22 #include "base/utils/utils.h"
23 #include "core/common/ace_page.h"
24 #include "core/common/container.h"
25 #include "core/common/thread_checker.h"
26 #include "core/components/navigator/navigator_component.h"
27 #include "frameworks/bridge/card_frontend/form_frontend_delegate_declarative.h"
28 #include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine.h"
29 
30 namespace OHOS::Ace {
31 namespace {
32 
33 /*
34  * NOTE:
35  * This function is needed to copy the values from BaseEventInfo
36  * It is observed, that the owner of BaseEventInfo will delete the pointer before it is ultimately
37  * processed by the EventMarker callback. In order to avoid this, a copy of all data needs to be made.
38  */
CopyEventInfo(const BaseEventInfo & info)39 std::shared_ptr<BaseEventInfo> CopyEventInfo(const BaseEventInfo& info)
40 {
41     const auto* touchInfo = TypeInfoHelper::DynamicCast<TouchEventInfo>(&info);
42     if (touchInfo != nullptr) {
43         return std::make_shared<TouchEventInfo>(*touchInfo);
44     }
45 
46     const auto* dragStartInfo = TypeInfoHelper::DynamicCast<DragStartInfo>(&info);
47     if (dragStartInfo != nullptr) {
48         return std::make_shared<DragStartInfo>(*dragStartInfo);
49     }
50 
51     const auto* dragUpdateInfo = TypeInfoHelper::DynamicCast<DragUpdateInfo>(&info);
52     if (dragUpdateInfo != nullptr) {
53         return std::make_shared<DragUpdateInfo>(*dragUpdateInfo);
54     }
55 
56     const auto* dragEndInfo = TypeInfoHelper::DynamicCast<DragEndInfo>(&info);
57     if (dragEndInfo != nullptr) {
58         return std::make_shared<DragEndInfo>(*dragEndInfo);
59     }
60 
61     const auto* clickInfo = TypeInfoHelper::DynamicCast<ClickInfo>(&info);
62     if (clickInfo != nullptr) {
63         return std::make_shared<ClickInfo>(*clickInfo);
64     }
65     return nullptr;
66 }
67 
TouchInfoToString(const BaseEventInfo & info,std::string & eventParam)68 void TouchInfoToString(const BaseEventInfo& info, std::string& eventParam)
69 {
70     eventParam.append("{\"touches\":[{");
71     const auto touchInfo = TypeInfoHelper::DynamicCast<TouchEventInfo>(&info);
72     if (touchInfo) {
73         auto touchList = touchInfo->GetTouches();
74         for (const auto& location : touchList) {
75             auto globalLocation = location.GetGlobalLocation();
76             eventParam.append("\"globalX\":")
77                 .append(std::to_string(globalLocation.GetX()))
78                 .append(",\"globalY\":")
79                 .append(std::to_string(globalLocation.GetY()))
80                 .append(",");
81             auto localLocation = location.GetLocalLocation();
82             eventParam.append("\"localX\":")
83                 .append(std::to_string(localLocation.GetX()))
84                 .append(",\"localY\":")
85                 .append(std::to_string(localLocation.GetY()))
86                 .append(",");
87             eventParam.append("\"size\":").append(std::to_string(location.GetSize())).append(",");
88         }
89         if (eventParam.back() == ',') {
90             eventParam.pop_back();
91         }
92         eventParam.append("}],\"changedTouches\":[{");
93         auto changeTouch = touchInfo->GetChangedTouches();
94         for (const auto& change : changeTouch) {
95             auto globalLocation = change.GetGlobalLocation();
96             eventParam.append("\"globalX\":")
97                 .append(std::to_string(globalLocation.GetX()))
98                 .append(",\"globalY\":")
99                 .append(std::to_string(globalLocation.GetY()))
100                 .append(",");
101             auto localLocation = change.GetLocalLocation();
102             eventParam.append("\"localX\":")
103                 .append(std::to_string(localLocation.GetX()))
104                 .append(",\"localY\":")
105                 .append(std::to_string(localLocation.GetY()))
106                 .append(",");
107             eventParam.append("\"size\":").append(std::to_string(change.GetSize())).append(",");
108         }
109         if (eventParam.back() == ',') {
110             eventParam.pop_back();
111         }
112     }
113     eventParam.append("}]}");
114 }
115 
MouseInfoToString(const BaseEventInfo & info,std::string & eventParam)116 void MouseInfoToString(const BaseEventInfo& info, std::string& eventParam)
117 {
118     const auto mouseInfo = TypeInfoHelper::DynamicCast<MouseEventInfo>(&info);
119     eventParam.append("{\"mouse\":{");
120     if (mouseInfo) {
121         auto globalMouse = mouseInfo->GetGlobalMouse();
122         eventParam.append("\"globalX\":")
123             .append(std::to_string(globalMouse.x))
124             .append(",\"globalY\":")
125             .append(std::to_string(globalMouse.y))
126             .append(",\"globalZ\":")
127             .append(std::to_string(globalMouse.z))
128             .append(",\"localX\":")
129             .append(std::to_string(globalMouse.x))
130             .append(",\"localY\":")
131             .append(std::to_string(globalMouse.y))
132             .append(",\"localZ\":")
133             .append(std::to_string(globalMouse.z))
134             .append(",\"deltaX\":")
135             .append(std::to_string(globalMouse.deltaX))
136             .append(",\"deltaY\":")
137             .append(std::to_string(globalMouse.deltaY))
138             .append(",\"deltaZ\":")
139             .append(std::to_string(globalMouse.deltaZ))
140             .append(",\"scrollX\":")
141             .append(std::to_string(globalMouse.scrollX))
142             .append(",\"scrollY\":")
143             .append(std::to_string(globalMouse.scrollY))
144             .append(",\"scrollZ\":")
145             .append(std::to_string(globalMouse.scrollZ))
146             .append(",\"action\":")
147             .append(std::to_string(static_cast<int32_t>(globalMouse.action)))
148             .append(",\"button\":")
149             .append(std::to_string(static_cast<int32_t>(globalMouse.button)))
150             .append(",\"pressedButtons\":")
151             .append(std::to_string(globalMouse.pressedButtons));
152     }
153     eventParam.append("}}");
154 }
155 
SwipeInfoToString(const BaseEventInfo & info,std::string & eventParam)156 void SwipeInfoToString(const BaseEventInfo& info, std::string& eventParam)
157 {
158     const auto& swipeInfo = TypeInfoHelper::DynamicCast<SwipeEventInfo>(&info);
159     eventParam = swipeInfo->ToJsonParamInfo();
160 }
161 
162 } // namespace
163 
~DeclarativeFrontend()164 DeclarativeFrontend::~DeclarativeFrontend() noexcept
165 {
166     LOG_DESTROY();
167 }
168 
Destroy()169 void DeclarativeFrontend::Destroy()
170 {
171     CHECK_RUN_ON(JS);
172     LOGI("DeclarativeFrontend Destroy begin.");
173     // To guarantee the jsEngine_ and delegate_ released in js thread
174     delegate_.Reset();
175     handler_.Reset();
176     if (jsEngine_) {
177         jsEngine_->Destroy();
178     }
179     jsEngine_.Reset();
180     LOGI("DeclarativeFrontend Destroy end.");
181 }
182 
Initialize(FrontendType type,const RefPtr<TaskExecutor> & taskExecutor)183 bool DeclarativeFrontend::Initialize(FrontendType type, const RefPtr<TaskExecutor>& taskExecutor)
184 {
185     LOGD("DeclarativeFrontend initialize begin.");
186     type_ = type;
187     ACE_DCHECK(type_ == FrontendType::DECLARATIVE_JS);
188     InitializeFrontendDelegate(taskExecutor);
189 
190     bool needPostJsTask = true;
191     auto container = Container::Current();
192     if (container) {
193         const auto& setting = container->GetSettings();
194         needPostJsTask = !(setting.usePlatformAsUIThread && setting.useUIAsJSThread);
195     }
196     auto initJSEngineTask = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_), delegate = delegate_] {
197         auto jsEngine = weakEngine.Upgrade();
198         if (!jsEngine) {
199             return;
200         }
201         jsEngine->Initialize(delegate);
202     };
203     if (needPostJsTask) {
204         taskExecutor->PostTask(initJSEngineTask, TaskExecutor::TaskType::JS);
205     } else {
206         initJSEngineTask();
207     }
208 
209     LOGD("DeclarativeFrontend initialize end.");
210     return true;
211 }
212 
AttachPipelineContext(const RefPtr<PipelineBase> & context)213 void DeclarativeFrontend::AttachPipelineContext(const RefPtr<PipelineBase>& context)
214 {
215     LOGD("DeclarativeFrontend AttachPipelineContext.");
216     if (!delegate_) {
217         return;
218     }
219     handler_ = AceType::MakeRefPtr<DeclarativeEventHandler>(delegate_);
220     auto pipelineContext = AceType::DynamicCast<PipelineContext>(context);
221     if (pipelineContext) {
222         pipelineContext->RegisterEventHandler(handler_);
223     }
224     delegate_->AttachPipelineContext(context);
225 }
226 
AttachSubPipelineContext(const RefPtr<PipelineContext> & context)227 void DeclarativeFrontend::AttachSubPipelineContext(const RefPtr<PipelineContext>& context)
228 {
229     LOGI("DeclarativeFrontend AttachSubPipelineContext.");
230     if (!context) {
231         return;
232     }
233     context->RegisterEventHandler(handler_);
234 }
235 
SetAssetManager(const RefPtr<AssetManager> & assetManager)236 void DeclarativeFrontend::SetAssetManager(const RefPtr<AssetManager>& assetManager)
237 {
238     LOGI("DeclarativeFrontend SetAssetManager.");
239     if (delegate_) {
240         delegate_->SetAssetManager(assetManager);
241     }
242 }
243 
InitializeFrontendDelegate(const RefPtr<TaskExecutor> & taskExecutor)244 void DeclarativeFrontend::InitializeFrontendDelegate(const RefPtr<TaskExecutor>& taskExecutor)
245 {
246     const auto& loadCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](const std::string& url,
247                                    const RefPtr<Framework::JsAcePage>& jsPage, bool isMainPage) {
248         auto jsEngine = weakEngine.Upgrade();
249         if (!jsEngine) {
250             return;
251         }
252         jsEngine->LoadJs(url, jsPage, isMainPage);
253     };
254 
255     const auto& setPluginMessageTransferCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
256                                                        const RefPtr<JsMessageDispatcher>& dispatcher) {
257         auto jsEngine = weakEngine.Upgrade();
258         if (!jsEngine) {
259             return;
260         }
261         jsEngine->SetJsMessageDispatcher(dispatcher);
262     };
263 
264     const auto& asyncEventCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
265                                          const std::string& eventId, const std::string& param) {
266         auto jsEngine = weakEngine.Upgrade();
267         if (!jsEngine) {
268             return;
269         }
270         jsEngine->FireAsyncEvent(eventId, param);
271     };
272 
273     const auto& syncEventCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
274                                         const std::string& eventId, const std::string& param) {
275         auto jsEngine = weakEngine.Upgrade();
276         if (!jsEngine) {
277             return;
278         }
279         jsEngine->FireSyncEvent(eventId, param);
280     };
281 
282     const auto& updatePageCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
283                                          const RefPtr<Framework::JsAcePage>& jsPage) {
284         auto jsEngine = weakEngine.Upgrade();
285         if (!jsEngine) {
286             return;
287         }
288         jsEngine->UpdateRunningPage(jsPage);
289         jsEngine->UpdateStagingPage(jsPage);
290     };
291 
292     const auto& resetStagingPageCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)]() {
293         auto jsEngine = weakEngine.Upgrade();
294         if (!jsEngine) {
295             return;
296         }
297         jsEngine->ResetStagingPage();
298     };
299 
300     const auto& destroyPageCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](int32_t pageId) {
301         auto jsEngine = weakEngine.Upgrade();
302         if (!jsEngine) {
303             return;
304         }
305         jsEngine->DestroyPageInstance(pageId);
306     };
307 
308     const auto& destroyApplicationCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
309                                                  const std::string& packageName) {
310         auto jsEngine = weakEngine.Upgrade();
311         if (!jsEngine) {
312             return;
313         }
314         jsEngine->DestroyApplication(packageName);
315     };
316 
317     const auto& updateApplicationStateCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
318                                                      const std::string& packageName, Frontend::State state) {
319         auto jsEngine = weakEngine.Upgrade();
320         if (!jsEngine) {
321             return;
322         }
323         jsEngine->UpdateApplicationState(packageName, state);
324     };
325 
326     const auto& onWindowDisplayModeChangedCallBack = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
327                                                          bool isShownInMultiWindow, const std::string& data) {
328         auto jsEngine = weakEngine.Upgrade();
329         if (!jsEngine) {
330             return;
331         }
332         jsEngine->OnWindowDisplayModeChanged(isShownInMultiWindow, data);
333     };
334 
335     const auto& onSaveAbilityStateCallBack = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](std::string& data) {
336         auto jsEngine = weakEngine.Upgrade();
337         if (!jsEngine) {
338             LOGE("the js engine is nullptr");
339             return;
340         }
341         jsEngine->OnSaveAbilityState(data);
342     };
343     const auto& onRestoreAbilityStateCallBack = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
344                                                     const std::string& data) {
345         auto jsEngine = weakEngine.Upgrade();
346         if (!jsEngine) {
347             LOGE("the js engine is nullptr");
348             return;
349         }
350         jsEngine->OnRestoreAbilityState(data);
351     };
352 
353     const auto& onNewWantCallBack = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](const std::string& data) {
354         auto jsEngine = weakEngine.Upgrade();
355         if (!jsEngine) {
356             LOGE("the js engine is nullptr");
357             return;
358         }
359         jsEngine->OnNewWant(data);
360     };
361 
362     const auto& onConfigurationUpdatedCallBack = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
363                                                      const std::string& data) {
364         auto jsEngine = weakEngine.Upgrade();
365         if (!jsEngine) {
366             return;
367         }
368         jsEngine->OnConfigurationUpdated(data);
369     };
370 
371     const auto& timerCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
372                                     const std::string& callbackId, const std::string& delay, bool isInterval) {
373         auto jsEngine = weakEngine.Upgrade();
374         if (!jsEngine) {
375             return;
376         }
377         jsEngine->TimerCallback(callbackId, delay, isInterval);
378     };
379 
380     const auto& mediaQueryCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
381                                          const std::string& callbackId, const std::string& args) {
382         auto jsEngine = weakEngine.Upgrade();
383         if (!jsEngine) {
384             return;
385         }
386         jsEngine->MediaQueryCallback(callbackId, args);
387     };
388 
389     const auto& requestAnimationCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
390                                                const std::string& callbackId, uint64_t timeStamp) {
391         auto jsEngine = weakEngine.Upgrade();
392         if (!jsEngine) {
393             return;
394         }
395         jsEngine->RequestAnimationCallback(callbackId, timeStamp);
396     };
397 
398     const auto& jsCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
399                                  const std::string& callbackId, const std::string& args) {
400         auto jsEngine = weakEngine.Upgrade();
401         if (!jsEngine) {
402             return;
403         }
404         jsEngine->JsCallback(callbackId, args);
405     };
406 
407     const auto& onMemoryLevelCallBack = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](const int32_t level) {
408         auto jsEngine = weakEngine.Upgrade();
409         if (!jsEngine) {
410             return;
411         }
412         jsEngine->OnMemoryLevel(level);
413     };
414 
415     const auto& onStartContinuationCallBack = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)]() -> bool {
416         auto jsEngine = weakEngine.Upgrade();
417         if (!jsEngine) {
418             return false;
419         }
420         return jsEngine->OnStartContinuation();
421     };
422     const auto& onCompleteContinuationCallBack = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](int32_t code) {
423         auto jsEngine = weakEngine.Upgrade();
424         if (!jsEngine) {
425             return;
426         }
427         jsEngine->OnCompleteContinuation(code);
428     };
429     const auto& onRemoteTerminatedCallBack = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)]() {
430         auto jsEngine = weakEngine.Upgrade();
431         if (!jsEngine) {
432             return;
433         }
434         jsEngine->OnRemoteTerminated();
435     };
436     const auto& onSaveDataCallBack = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](std::string& savedData) {
437         auto jsEngine = weakEngine.Upgrade();
438         if (!jsEngine) {
439             return;
440         }
441         jsEngine->OnSaveData(savedData);
442     };
443     const auto& onRestoreDataCallBack = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
444                                             const std::string& data) -> bool {
445         auto jsEngine = weakEngine.Upgrade();
446         if (!jsEngine) {
447             return false;
448         }
449         return jsEngine->OnRestoreData(data);
450     };
451 
452     const auto& externalEventCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](
453                                             const std::string& componentId, const uint32_t nodeId,
454                                             const bool isDestroy) {
455         auto jsEngine = weakEngine.Upgrade();
456         if (!jsEngine) {
457             return;
458         }
459         jsEngine->FireExternalEvent(componentId, nodeId, isDestroy);
460     };
461 
462     if (isFormRender_) {
463         LOGI("Init Form Delegate");
464         delegate_ = AceType::MakeRefPtr<Framework::FormFrontendDelegateDeclarative>(taskExecutor, loadCallback,
465             setPluginMessageTransferCallback, asyncEventCallback, syncEventCallback, updatePageCallback,
466             resetStagingPageCallback, destroyPageCallback, destroyApplicationCallback, updateApplicationStateCallback,
467             timerCallback, mediaQueryCallback, requestAnimationCallback, jsCallback,
468             onWindowDisplayModeChangedCallBack, onConfigurationUpdatedCallBack, onSaveAbilityStateCallBack,
469             onRestoreAbilityStateCallBack, onNewWantCallBack,
470             onMemoryLevelCallBack, onStartContinuationCallBack, onCompleteContinuationCallBack,
471             onRemoteTerminatedCallBack, onSaveDataCallBack, onRestoreDataCallBack, externalEventCallback);
472     } else {
473         delegate_ = AceType::MakeRefPtr<Framework::FrontendDelegateDeclarative>(taskExecutor, loadCallback,
474             setPluginMessageTransferCallback, asyncEventCallback, syncEventCallback, updatePageCallback,
475             resetStagingPageCallback, destroyPageCallback, destroyApplicationCallback, updateApplicationStateCallback,
476             timerCallback, mediaQueryCallback, requestAnimationCallback, jsCallback,
477             onWindowDisplayModeChangedCallBack, onConfigurationUpdatedCallBack, onSaveAbilityStateCallBack,
478             onRestoreAbilityStateCallBack, onNewWantCallBack, onMemoryLevelCallBack, onStartContinuationCallBack,
479             onCompleteContinuationCallBack, onRemoteTerminatedCallBack,
480             onSaveDataCallBack, onRestoreDataCallBack, externalEventCallback);
481     }
482 
483     if (disallowPopLastPage_) {
484         delegate_->DisallowPopLastPage();
485     }
486     if (!jsEngine_) {
487         LOGE("the js engine is nullptr");
488         EventReport::SendAppStartException(AppStartExcepType::JS_ENGINE_CREATE_ERR);
489         return;
490     }
491     delegate_->SetGroupJsBridge(jsEngine_->GetGroupJsBridge());
492     if (Container::IsCurrentUseNewPipeline()) {
493         auto loadPageCallback = [weakEngine = WeakPtr<Framework::JsEngine>(jsEngine_)](const std::string& url,
494             const std::function<void(const std::string&, int32_t)>& errorCallback) {
495             auto jsEngine = weakEngine.Upgrade();
496             if (!jsEngine) {
497                 return false;
498             }
499             return jsEngine->LoadPageSource(url, errorCallback);
500         };
501         delegate_->InitializeRouterManager(std::move(loadPageCallback));
502     }
503 }
504 
RunPage(int32_t pageId,const std::string & url,const std::string & params)505 void DeclarativeFrontend::RunPage(int32_t pageId, const std::string& url, const std::string& params)
506 {
507     auto container = Container::Current();
508     auto isStageModel = container ? container->IsUseStageModel() : false;
509     if (!isStageModel && Container::IsCurrentUseNewPipeline()) {
510         // In NG structure and fa mode, first load app.js
511         auto taskExecutor = container ? container->GetTaskExecutor() : nullptr;
512         CHECK_NULL_VOID(taskExecutor);
513         taskExecutor->PostTask(
514             [weak = AceType::WeakClaim(this)]() {
515                 auto frontend = weak.Upgrade();
516                 CHECK_NULL_VOID(frontend);
517                 CHECK_NULL_VOID(frontend->jsEngine_);
518                 frontend->jsEngine_->LoadFaAppSource();
519             },
520             TaskExecutor::TaskType::JS);
521     }
522     // Not use this pageId from backend, manage it in FrontendDelegateDeclarative.
523     if (delegate_) {
524         if (isFormRender_) {
525             auto delegate = AceType::DynamicCast<Framework::FormFrontendDelegateDeclarative>(delegate_);
526             delegate->RunCard(url, params, pageProfile_, 0);
527         } else {
528             delegate_->RunPage(url, params, pageProfile_);
529         }
530     }
531 }
532 
ReplacePage(const std::string & url,const std::string & params)533 void DeclarativeFrontend::ReplacePage(const std::string& url, const std::string& params)
534 {
535     if (delegate_) {
536         delegate_->Replace(url, params);
537     }
538 }
539 
PushPage(const std::string & url,const std::string & params)540 void DeclarativeFrontend::PushPage(const std::string& url, const std::string& params)
541 {
542     if (delegate_) {
543         delegate_->Push(url, params);
544     }
545 }
546 
NavigatePage(uint8_t type,const PageTarget & target,const std::string & params)547 void DeclarativeFrontend::NavigatePage(uint8_t type, const PageTarget& target, const std::string& params)
548 {
549     if (!delegate_) {
550         return;
551     }
552     switch (static_cast<NavigatorType>(type)) {
553         case NavigatorType::PUSH:
554             delegate_->Push(target, params);
555             break;
556         case NavigatorType::REPLACE:
557             delegate_->Replace(target, params);
558             break;
559         case NavigatorType::BACK:
560             delegate_->BackWithTarget(target, params);
561             break;
562         default:
563             LOGE("Navigator type is invalid!");
564             delegate_->BackWithTarget(target, params);
565     }
566 }
567 
GetCurrentPageUrl() const568 std::string DeclarativeFrontend::GetCurrentPageUrl() const
569 {
570     CHECK_NULL_RETURN(delegate_, "");
571     return delegate_->GetCurrentPageUrl();
572 }
573 
574 // Get the currently running JS page information in NG structure.
GetCurrentPageSourceMap() const575 RefPtr<Framework::RevSourceMap> DeclarativeFrontend::GetCurrentPageSourceMap() const
576 {
577     CHECK_NULL_RETURN(delegate_, nullptr);
578     return delegate_->GetCurrentPageSourceMap();
579 }
580 
581 // Get the currently running JS page information in NG structure.
GetFaAppSourceMap() const582 RefPtr<Framework::RevSourceMap> DeclarativeFrontend::GetFaAppSourceMap() const
583 {
584     CHECK_NULL_RETURN(delegate_, nullptr);
585     return delegate_->GetFaAppSourceMap();
586 }
587 
GetStageSourceMap(std::unordered_map<std::string,RefPtr<Framework::RevSourceMap>> & sourceMap) const588 void DeclarativeFrontend::GetStageSourceMap(
589     std::unordered_map<std::string, RefPtr<Framework::RevSourceMap>>& sourceMap) const
590 {
591     if (delegate_) {
592         delegate_->GetStageSourceMap(sourceMap);
593     }
594 }
595 
GetPageRouterManager() const596 RefPtr<NG::PageRouterManager> DeclarativeFrontend::GetPageRouterManager() const
597 {
598     CHECK_NULL_RETURN(delegate_, nullptr);
599     return delegate_->GetPageRouterManager();
600 }
601 
RestoreRouterStack(const std::string & contentInfo)602 std::string DeclarativeFrontend::RestoreRouterStack(const std::string& contentInfo)
603 {
604     if (delegate_) {
605         return delegate_->RestoreRouterStack(contentInfo);
606     }
607     return "";
608 }
609 
GetContentInfo() const610 std::string DeclarativeFrontend::GetContentInfo() const
611 {
612     if (delegate_) {
613         return delegate_->GetContentInfo();
614     }
615     return "";
616 }
617 
GetRouterSize() const618 int32_t DeclarativeFrontend::GetRouterSize() const
619 {
620     if (delegate_) {
621         return delegate_->GetStackSize();
622     }
623     return -1;
624 }
625 
SendCallbackMessage(const std::string & callbackId,const std::string & data) const626 void DeclarativeFrontend::SendCallbackMessage(const std::string& callbackId, const std::string& data) const
627 {
628     if (delegate_) {
629         delegate_->OnJSCallback(callbackId, data);
630     }
631 }
632 
SetJsMessageDispatcher(const RefPtr<JsMessageDispatcher> & dispatcher) const633 void DeclarativeFrontend::SetJsMessageDispatcher(const RefPtr<JsMessageDispatcher>& dispatcher) const
634 {
635     if (delegate_) {
636         delegate_->SetJsMessageDispatcher(dispatcher);
637     }
638 }
639 
TransferComponentResponseData(int callbackId,int32_t code,std::vector<uint8_t> && data) const640 void DeclarativeFrontend::TransferComponentResponseData(int callbackId, int32_t code, std::vector<uint8_t>&& data) const
641 {
642     if (delegate_) {
643         delegate_->TransferComponentResponseData(callbackId, code, std::move(data));
644     }
645 }
646 
TransferJsResponseData(int callbackId,int32_t code,std::vector<uint8_t> && data) const647 void DeclarativeFrontend::TransferJsResponseData(int callbackId, int32_t code, std::vector<uint8_t>&& data) const
648 {
649     if (delegate_) {
650         delegate_->TransferJsResponseData(callbackId, code, std::move(data));
651     }
652 }
653 
654 #if defined(PREVIEW)
TransferJsResponseDataPreview(int callbackId,int32_t code,ResponseData responseData) const655 void DeclarativeFrontend::TransferJsResponseDataPreview(int callbackId, int32_t code, ResponseData responseData) const
656 {
657     delegate_->TransferJsResponseDataPreview(callbackId, code, responseData);
658 }
659 
GetNewComponentWithJsCode(const std::string & jsCode,const std::string & viewID)660 RefPtr<Component> DeclarativeFrontend::GetNewComponentWithJsCode(const std::string& jsCode, const std::string& viewID)
661 {
662     if (jsEngine_) {
663         return jsEngine_->GetNewComponentWithJsCode(jsCode, viewID);
664     }
665     return nullptr;
666 }
667 #endif
668 
TransferJsPluginGetError(int callbackId,int32_t errorCode,std::string && errorMessage) const669 void DeclarativeFrontend::TransferJsPluginGetError(int callbackId, int32_t errorCode, std::string&& errorMessage) const
670 {
671     if (delegate_) {
672         delegate_->TransferJsPluginGetError(callbackId, errorCode, std::move(errorMessage));
673     }
674 }
675 
TransferJsEventData(int32_t callbackId,int32_t code,std::vector<uint8_t> && data) const676 void DeclarativeFrontend::TransferJsEventData(int32_t callbackId, int32_t code, std::vector<uint8_t>&& data) const
677 {
678     if (delegate_) {
679         delegate_->TransferJsEventData(callbackId, code, std::move(data));
680     }
681 }
682 
LoadPluginJsCode(std::string && jsCode) const683 void DeclarativeFrontend::LoadPluginJsCode(std::string&& jsCode) const
684 {
685     if (delegate_) {
686         delegate_->LoadPluginJsCode(std::move(jsCode));
687     }
688 }
689 
LoadPluginJsByteCode(std::vector<uint8_t> && jsCode,std::vector<int32_t> && jsCodeLen) const690 void DeclarativeFrontend::LoadPluginJsByteCode(std::vector<uint8_t>&& jsCode, std::vector<int32_t>&& jsCodeLen) const
691 {
692     if (delegate_) {
693         delegate_->LoadPluginJsByteCode(std::move(jsCode), std::move(jsCodeLen));
694     }
695 }
696 
UpdateState(Frontend::State state)697 void DeclarativeFrontend::UpdateState(Frontend::State state)
698 {
699     if (!delegate_ || state == Frontend::State::ON_CREATE) {
700         return;
701     }
702     bool needPostJsTask = true;
703     auto container = Container::Current();
704     CHECK_NULL_VOID(container);
705     const auto& setting = container->GetSettings();
706     needPostJsTask = !(setting.usePlatformAsUIThread && setting.useUIAsJSThread);
707     if (needPostJsTask) {
708         delegate_->UpdateApplicationState(delegate_->GetAppID(), state);
709         return;
710     }
711     if (jsEngine_) {
712         jsEngine_->UpdateApplicationState(delegate_->GetAppID(), state);
713     }
714 }
715 
OnWindowDisplayModeChanged(bool isShownInMultiWindow,const std::string & data)716 void DeclarativeFrontend::OnWindowDisplayModeChanged(bool isShownInMultiWindow, const std::string& data)
717 {
718     delegate_->OnWindowDisplayModeChanged(isShownInMultiWindow, data);
719 }
720 
OnSaveAbilityState(std::string & data)721 void DeclarativeFrontend::OnSaveAbilityState(std::string& data)
722 {
723     if (delegate_) {
724         delegate_->OnSaveAbilityState(data);
725     }
726 }
727 
OnRestoreAbilityState(const std::string & data)728 void DeclarativeFrontend::OnRestoreAbilityState(const std::string& data)
729 {
730     if (delegate_) {
731         delegate_->OnRestoreAbilityState(data);
732     }
733 }
734 
OnNewWant(const std::string & data)735 void DeclarativeFrontend::OnNewWant(const std::string& data)
736 {
737     if (delegate_) {
738         delegate_->OnNewWant(data);
739     }
740 }
741 
GetAccessibilityManager() const742 RefPtr<AccessibilityManager> DeclarativeFrontend::GetAccessibilityManager() const
743 {
744     if (!delegate_) {
745         LOGE("GetAccessibilityManager delegate is null");
746         return nullptr;
747     }
748     return delegate_->GetJSAccessibilityManager();
749 }
750 
GetWindowConfig()751 WindowConfig& DeclarativeFrontend::GetWindowConfig()
752 {
753     if (!delegate_) {
754         static WindowConfig windowConfig;
755         LOGW("delegate is null, return default config");
756         return windowConfig;
757     }
758     return delegate_->GetWindowConfig();
759 }
760 
OnBackPressed()761 bool DeclarativeFrontend::OnBackPressed()
762 {
763     if (!delegate_) {
764         LOGW("delegate is null, return false");
765         return false;
766     }
767     return delegate_->OnPageBackPress();
768 }
769 
OnShow()770 void DeclarativeFrontend::OnShow()
771 {
772     if (delegate_) {
773         foregroundFrontend_ = true;
774         delegate_->OnForeground();
775     }
776 }
777 
OnHide()778 void DeclarativeFrontend::OnHide()
779 {
780     if (delegate_) {
781         delegate_->OnBackGround();
782         foregroundFrontend_ = false;
783     }
784 }
785 
OnConfigurationUpdated(const std::string & data)786 void DeclarativeFrontend::OnConfigurationUpdated(const std::string& data)
787 {
788     if (delegate_) {
789         delegate_->OnConfigurationUpdated(data);
790     }
791 }
792 
OnActive()793 void DeclarativeFrontend::OnActive()
794 {
795     if (delegate_) {
796         foregroundFrontend_ = true;
797         delegate_->InitializeAccessibilityCallback();
798     }
799 }
800 
OnInactive()801 void DeclarativeFrontend::OnInactive() {}
802 
OnStartContinuation()803 bool DeclarativeFrontend::OnStartContinuation()
804 {
805     if (!delegate_) {
806         LOGW("delegate is null, return false");
807         return false;
808     }
809     return delegate_->OnStartContinuation();
810 }
811 
OnCompleteContinuation(int32_t code)812 void DeclarativeFrontend::OnCompleteContinuation(int32_t code)
813 {
814     if (delegate_) {
815         delegate_->OnCompleteContinuation(code);
816     }
817 }
818 
OnMemoryLevel(const int32_t level)819 void DeclarativeFrontend::OnMemoryLevel(const int32_t level)
820 {
821     if (delegate_) {
822         delegate_->OnMemoryLevel(level);
823     }
824 }
825 
OnSaveData(std::string & data)826 void DeclarativeFrontend::OnSaveData(std::string& data)
827 {
828     if (delegate_) {
829         delegate_->OnSaveData(data);
830     }
831 }
832 
GetPluginsUsed(std::string & data)833 void DeclarativeFrontend::GetPluginsUsed(std::string& data)
834 {
835     if (delegate_) {
836         delegate_->GetPluginsUsed(data);
837     }
838 }
839 
OnRestoreData(const std::string & data)840 bool DeclarativeFrontend::OnRestoreData(const std::string& data)
841 {
842     if (!delegate_) {
843         LOGW("delegate is null, return false");
844         return false;
845     }
846     return delegate_->OnRestoreData(data);
847 }
848 
OnRemoteTerminated()849 void DeclarativeFrontend::OnRemoteTerminated()
850 {
851     if (delegate_) {
852         delegate_->OnRemoteTerminated();
853     }
854 }
855 
OnNewRequest(const std::string & data)856 void DeclarativeFrontend::OnNewRequest(const std::string& data)
857 {
858     if (delegate_) {
859         delegate_->OnNewRequest(data);
860     }
861 }
862 
CallRouterBack()863 void DeclarativeFrontend::CallRouterBack()
864 {
865     if (delegate_) {
866         if (delegate_->GetStackSize() == 1 && isSubWindow_) {
867             LOGW("Can't back because this is the last page of sub window!");
868             return;
869         }
870         delegate_->CallPopPage();
871     }
872 }
873 
OnSurfaceChanged(int32_t width,int32_t height)874 void DeclarativeFrontend::OnSurfaceChanged(int32_t width, int32_t height)
875 {
876     if (delegate_) {
877         delegate_->OnSurfaceChanged();
878     }
879 }
880 
DumpFrontend() const881 void DeclarativeFrontend::DumpFrontend() const
882 {
883     if (!delegate_) {
884         return;
885     }
886     int32_t routerIndex = 0;
887     std::string routerName;
888     std::string routerPath;
889     delegate_->GetState(routerIndex, routerName, routerPath);
890 
891     if (DumpLog::GetInstance().GetDumpFile()) {
892         DumpLog::GetInstance().AddDesc("Components: " + std::to_string(delegate_->GetComponentsCount()));
893         DumpLog::GetInstance().AddDesc("Path: " + routerPath);
894         DumpLog::GetInstance().AddDesc("Length: " + std::to_string(routerIndex));
895         DumpLog::GetInstance().Print(0, routerName, 0);
896     }
897 }
898 
GetPagePath() const899 std::string DeclarativeFrontend::GetPagePath() const
900 {
901     if (!delegate_) {
902         return "";
903     }
904     int32_t routerIndex = 0;
905     std::string routerName;
906     std::string routerPath;
907     delegate_->GetState(routerIndex, routerName, routerPath);
908     return routerPath + routerName;
909 }
910 
TriggerGarbageCollection()911 void DeclarativeFrontend::TriggerGarbageCollection()
912 {
913     if (jsEngine_) {
914         jsEngine_->RunGarbageCollection();
915     }
916 }
917 
DumpHeapSnapshot(bool isPrivate)918 void DeclarativeFrontend::DumpHeapSnapshot(bool isPrivate)
919 {
920     if (jsEngine_) {
921         jsEngine_->DumpHeapSnapshot(isPrivate);
922     }
923 }
924 
SetColorMode(ColorMode colorMode)925 void DeclarativeFrontend::SetColorMode(ColorMode colorMode)
926 {
927     if (delegate_) {
928         delegate_->SetColorMode(colorMode);
929     }
930 }
931 
RebuildAllPages()932 void DeclarativeFrontend::RebuildAllPages()
933 {
934     if (delegate_) {
935         delegate_->RebuildAllPages();
936     }
937 }
938 
NotifyAppStorage(const std::string & key,const std::string & value)939 void DeclarativeFrontend::NotifyAppStorage(const std::string& key, const std::string& value)
940 {
941     if (!delegate_) {
942         LOGW("delegate is null, return false");
943         return;
944     }
945     delegate_->NotifyAppStorage(jsEngine_, key, value);
946 }
947 
HandleAsyncEvent(const EventMarker & eventMarker)948 void DeclarativeEventHandler::HandleAsyncEvent(const EventMarker& eventMarker)
949 {
950     LOGI("HandleAsyncEvent pageId: %{private}d, eventId: %{private}s, eventType: %{private}s",
951         eventMarker.GetData().pageId, eventMarker.GetData().eventId.c_str(), eventMarker.GetData().eventType.c_str());
952     std::string param = eventMarker.GetData().GetEventParam();
953     if (eventMarker.GetData().isDeclarativeUi) {
954         if (delegate_) {
955             delegate_->GetUiTask().PostTask([eventMarker] { eventMarker.CallUiFunction(); });
956         }
957     } else {
958         delegate_->FireAsyncEvent(eventMarker.GetData().eventId, param.append("null"), std::string(""));
959     }
960 
961     AccessibilityEvent accessibilityEvent;
962     accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId);
963     accessibilityEvent.eventType = eventMarker.GetData().eventType;
964     delegate_->FireAccessibilityEvent(accessibilityEvent);
965 }
966 
HandleAsyncEvent(const EventMarker & eventMarker,const BaseEventInfo & info)967 void DeclarativeEventHandler::HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info)
968 {
969     std::string eventParam;
970     if (eventMarker.GetData().eventType.find("touch") != std::string::npos) {
971         TouchInfoToString(info, eventParam);
972     } else if (eventMarker.GetData().eventType.find("mouse") != std::string::npos) {
973         MouseInfoToString(info, eventParam);
974     } else if (eventMarker.GetData().eventType == "swipe") {
975         SwipeInfoToString(info, eventParam);
976     }
977 
978     LOGD("HandleAsyncEvent pageId: %{public}d, eventId: %{public}s, eventType: %{public}s",
979         eventMarker.GetData().pageId, eventMarker.GetData().eventId.c_str(), eventMarker.GetData().eventType.c_str());
980     std::string param = eventMarker.GetData().GetEventParam();
981     if (eventParam.empty()) {
982         param.append("null");
983     } else {
984         param.append(eventParam);
985     }
986 
987     if (eventMarker.GetData().isDeclarativeUi) {
988         if (delegate_) {
989             auto cinfo = CopyEventInfo(info);
990             delegate_->GetUiTask().PostTask([eventMarker, cinfo] { eventMarker.CallUiArgFunction(cinfo.get()); });
991         }
992     } else {
993         delegate_->FireAsyncEvent(eventMarker.GetData().eventId, param, "");
994     }
995 
996     AccessibilityEvent accessibilityEvent;
997     accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId);
998     accessibilityEvent.eventType = eventMarker.GetData().eventType;
999     delegate_->FireAccessibilityEvent(accessibilityEvent);
1000 }
1001 
HandleAsyncEvent(const EventMarker & eventMarker,const std::shared_ptr<BaseEventInfo> & info)1002 void DeclarativeEventHandler::HandleAsyncEvent(
1003     const EventMarker& eventMarker, const std::shared_ptr<BaseEventInfo>& info)
1004 {
1005     if (eventMarker.GetData().isDeclarativeUi) {
1006         if (delegate_) {
1007             delegate_->GetUiTask().PostTask([eventMarker, info] { eventMarker.CallUiArgFunction(info.get()); });
1008         }
1009     }
1010 }
1011 
HandleSyncEvent(const EventMarker & eventMarker,const KeyEvent & info,bool & result)1012 void DeclarativeEventHandler::HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& info, bool& result)
1013 {
1014     LOGD("HandleSyncEvent pageId: %{public}d, eventId: %{public}s, eventType: %{public}s", eventMarker.GetData().pageId,
1015         eventMarker.GetData().eventId.c_str(), eventMarker.GetData().eventType.c_str());
1016     std::string param = std::string("\"")
1017                             .append(eventMarker.GetData().eventType)
1018                             .append("\",{\"code\":")
1019                             .append(std::to_string(static_cast<int32_t>(info.code)))
1020                             .append(",\"action\":")
1021                             .append(std::to_string(static_cast<int32_t>(info.action)))
1022                             .append(",\"repeatCount\":")
1023                             .append(std::to_string(static_cast<int32_t>(info.repeatTime)))
1024                             .append(",\"timestamp\":")
1025                             .append(std::to_string(info.timeStamp.time_since_epoch().count()))
1026                             .append(",\"key\":\"")
1027                             .append(info.key)
1028                             .append("\"},");
1029 
1030     result = delegate_->FireSyncEvent(eventMarker.GetData().eventId, param, "");
1031 
1032     AccessibilityEvent accessibilityEvent;
1033     accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId);
1034     accessibilityEvent.eventType = std::to_string(static_cast<int32_t>(info.code));
1035     delegate_->FireAccessibilityEvent(accessibilityEvent);
1036 }
1037 
HandleAsyncEvent(const EventMarker & eventMarker,int32_t param)1038 void DeclarativeEventHandler::HandleAsyncEvent(const EventMarker& eventMarker, int32_t param)
1039 {
1040     LOGW("js event handler does not support this event type!");
1041     AccessibilityEvent accessibilityEvent;
1042     accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId);
1043     accessibilityEvent.eventType = eventMarker.GetData().eventType;
1044     delegate_->FireAccessibilityEvent(accessibilityEvent);
1045 }
1046 
HandleAsyncEvent(const EventMarker & eventMarker,const KeyEvent & info)1047 void DeclarativeEventHandler::HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& info)
1048 {
1049     LOGW("js event handler does not support this event type!");
1050     AccessibilityEvent accessibilityEvent;
1051     accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId);
1052     accessibilityEvent.eventType = eventMarker.GetData().eventType;
1053     delegate_->FireAccessibilityEvent(accessibilityEvent);
1054 }
1055 
HandleAsyncEvent(const EventMarker & eventMarker,const std::string & param)1056 void DeclarativeEventHandler::HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param)
1057 {
1058     LOGD("HandleAsyncEvent pageId: %{public}d, eventId: %{public}s", eventMarker.GetData().pageId,
1059         eventMarker.GetData().eventId.c_str());
1060 
1061     if (eventMarker.GetData().isDeclarativeUi) {
1062         std::string fixParam(param);
1063         std::string::size_type startPos = param.find_first_of("{");
1064         std::string::size_type endPos = param.find_last_of("}");
1065         if (startPos != std::string::npos && endPos != std::string::npos && startPos < endPos) {
1066             fixParam = fixParam.substr(startPos, endPos - startPos + 1);
1067         }
1068         if (delegate_) {
1069             delegate_->GetUiTask().PostTask([eventMarker, fixParam] { eventMarker.CallUiStrFunction(fixParam); });
1070         }
1071     } else {
1072         delegate_->FireAsyncEvent(eventMarker.GetData().eventId, param, "");
1073     }
1074 
1075     AccessibilityEvent accessibilityEvent;
1076     accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId);
1077     accessibilityEvent.eventType = eventMarker.GetData().eventType;
1078     delegate_->FireAccessibilityEvent(accessibilityEvent);
1079 }
1080 
HandleSyncEvent(const EventMarker & eventMarker,bool & result)1081 void DeclarativeEventHandler::HandleSyncEvent(const EventMarker& eventMarker, bool& result)
1082 {
1083     LOGW("js event handler does not support this event type!");
1084     AccessibilityEvent accessibilityEvent;
1085     accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId);
1086     accessibilityEvent.eventType = eventMarker.GetData().eventType;
1087     delegate_->FireAccessibilityEvent(accessibilityEvent);
1088 }
1089 
HandleSyncEvent(const EventMarker & eventMarker,const std::shared_ptr<BaseEventInfo> & info)1090 void DeclarativeEventHandler::HandleSyncEvent(
1091     const EventMarker& eventMarker, const std::shared_ptr<BaseEventInfo>& info)
1092 {
1093     if (delegate_) {
1094         delegate_->GetUiTask().PostSyncTask([eventMarker, info] { eventMarker.CallUiArgFunction(info.get()); });
1095     }
1096 }
1097 
HandleSyncEvent(const EventMarker & eventMarker,const BaseEventInfo & info,bool & result)1098 void DeclarativeEventHandler::HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result)
1099 {
1100     LOGW("js event handler does not support this event type!");
1101     AccessibilityEvent accessibilityEvent;
1102     accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId);
1103     accessibilityEvent.eventType = eventMarker.GetData().eventType;
1104     delegate_->FireAccessibilityEvent(accessibilityEvent);
1105 }
1106 
HandleSyncEvent(const EventMarker & eventMarker,const std::string & param,std::string & result)1107 void DeclarativeEventHandler::HandleSyncEvent(
1108     const EventMarker& eventMarker, const std::string& param, std::string& result)
1109 {
1110     LOGW("js event handler does not support this event type!");
1111     AccessibilityEvent accessibilityEvent;
1112     accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId);
1113     accessibilityEvent.eventType = eventMarker.GetData().eventType;
1114     delegate_->FireAccessibilityEvent(accessibilityEvent);
1115     delegate_->FireSyncEvent(eventMarker.GetData().eventId, param, std::string(""), result);
1116 }
1117 
HandleSyncEvent(const EventMarker & eventMarker,const std::string & componentId,const int32_t nodeId,const bool isDestroy)1118 void DeclarativeEventHandler::HandleSyncEvent(
1119     const EventMarker& eventMarker, const std::string& componentId, const int32_t nodeId, const bool isDestroy)
1120 {
1121     if (delegate_) {
1122         delegate_->FireExternalEvent(eventMarker.GetData().eventId, componentId, nodeId, isDestroy);
1123     }
1124 }
1125 
1126 } // namespace OHOS::Ace
1127