• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 "adapter/ohos/entrance/pa_container.h"
17 
18 #include "flutter/lib/ui/ui_dart_state.h"
19 
20 #include "adapter/ohos/entrance/ace_application_info.h"
21 #include "adapter/ohos/entrance/file_asset_provider.h"
22 #include "adapter/ohos/entrance/hap_asset_provider.h"
23 #include "adapter/ohos/entrance/pa_engine/engine/common/js_backend_engine_loader.h"
24 #include "adapter/ohos/entrance/pa_engine/pa_backend.h"
25 #include "base/log/ace_trace.h"
26 #include "base/log/event_report.h"
27 #include "base/log/log.h"
28 #include "base/subwindow/subwindow_manager.h"
29 #include "base/utils/system_properties.h"
30 #include "base/utils/utils.h"
31 #include "core/common/ace_engine.h"
32 #include "core/common/flutter/flutter_asset_manager.h"
33 #include "core/common/flutter/flutter_task_executor.h"
34 #include "core/common/platform_window.h"
35 #include "core/common/text_field_manager.h"
36 #include "core/common/window.h"
37 
38 namespace OHOS::Ace::Platform {
39 namespace {
40 
41 constexpr char ARK_PA_ENGINE_SHARED_LIB[] = "libace_engine_pa_ark.z.so";
42 constexpr char QUICK_JS_PA_ENGINE_SHARED_LIB[] = "libace_engine_pa_qjs.z.so";
43 
GetPaEngineSharedLibrary(bool isArkApp)44 const char* GetPaEngineSharedLibrary(bool isArkApp)
45 {
46     if (isArkApp) {
47         return ARK_PA_ENGINE_SHARED_LIB;
48     } else {
49         return QUICK_JS_PA_ENGINE_SHARED_LIB;
50     }
51 }
52 
53 } // namespace
54 
PaContainer(int32_t instanceId,BackendType type,bool isArkApp,void * paAbility,std::unique_ptr<PlatformEventCallback> callback)55 PaContainer::PaContainer(int32_t instanceId, BackendType type, bool isArkApp, void* paAbility,
56     std::unique_ptr<PlatformEventCallback> callback)
57     : instanceId_(instanceId), type_(type), isArkApp_(isArkApp), paAbility_(paAbility)
58 {
59     ACE_DCHECK(callback);
60     auto flutterTaskExecutor = Referenced::MakeRefPtr<FlutterTaskExecutor>();
61     flutterTaskExecutor->InitPlatformThread();
62     flutterTaskExecutor->InitJsThread();
63     taskExecutor_ = flutterTaskExecutor;
64 
65     InitializeBackend();
66 
67     platformEventCallback_ = std::move(callback);
68 }
69 
InitializeBackend()70 void PaContainer::InitializeBackend()
71 {
72     // create backend
73     backend_ = Backend::Create();
74     auto paBackend = AceType::DynamicCast<PaBackend>(backend_);
75     CHECK_NULL_VOID(paBackend);
76 
77     // set JS engine, init in JS thread
78     auto& loader = JsBackendEngineLoader::Get(GetPaEngineSharedLibrary(isArkApp_));
79     auto jsEngine = loader.CreateJsBackendEngine(instanceId_);
80     jsEngine->AddExtraNativeObject("ability", paAbility_);
81     jsEngine->SetNeedDebugBreakPoint(AceApplicationInfo::GetInstance().IsNeedDebugBreakPoint());
82     jsEngine->SetDebugVersion(AceApplicationInfo::GetInstance().IsDebugVersion());
83     paBackend->SetJsEngine(jsEngine);
84 
85     ACE_DCHECK(backend_);
86     backend_->Initialize(type_, taskExecutor_);
87 }
88 
GetContainer(int32_t instanceId)89 RefPtr<PaContainer> PaContainer::GetContainer(int32_t instanceId)
90 {
91     auto container = AceEngine::Get().GetContainer(instanceId);
92     return AceType::DynamicCast<PaContainer>(container);
93 }
94 
CreateContainer(int32_t instanceId,BackendType type,bool isArkApp,void * paAbility,std::unique_ptr<PlatformEventCallback> callback)95 void PaContainer::CreateContainer(int32_t instanceId, BackendType type, bool isArkApp, void* paAbility,
96     std::unique_ptr<PlatformEventCallback> callback)
97 {
98     auto aceContainer = AceType::MakeRefPtr<PaContainer>(instanceId, type, isArkApp, paAbility, std::move(callback));
99     AceEngine::Get().AddContainer(instanceId, aceContainer);
100 
101     auto back = aceContainer->GetBackend();
102     CHECK_NULL_VOID_NOLOG(back);
103     back->UpdateState(Backend::State::ON_CREATE);
104     back->SetJsMessageDispatcher(aceContainer);
105 }
106 
RunPa(int32_t instanceId,const std::string & content,const OHOS::AAFwk::Want & want)107 bool PaContainer::RunPa(int32_t instanceId, const std::string& content, const OHOS::AAFwk::Want& want)
108 {
109     LOGI("PA: PaContainer::RunPa start");
110     auto container = AceEngine::Get().GetContainer(instanceId);
111     CHECK_NULL_RETURN(container, false);
112     ContainerScope scope(instanceId);
113     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
114     CHECK_NULL_RETURN(aceContainer, false);
115     auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
116     CHECK_NULL_RETURN(paBackend, false);
117     paBackend->RunPa(content, want);
118     LOGI("PA: PaContainer::RunPa end");
119     return true;
120 }
121 
OnCreate(int32_t instanceId,const OHOS::AAFwk::Want & want)122 bool PaContainer::OnCreate(int32_t instanceId, const OHOS::AAFwk::Want& want)
123 {
124     LOGI("PA: PaContainer::OnCreate start");
125     auto container = AceEngine::Get().GetContainer(instanceId);
126     CHECK_NULL_RETURN(container, false);
127     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
128     CHECK_NULL_RETURN(aceContainer, false);
129     auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
130     CHECK_NULL_RETURN(paBackend, false);
131     paBackend->OnCreate(want);
132     LOGI("PA: PaContainer::OnCreate end");
133     return true;
134 }
135 
OnDelete(int32_t instanceId,int64_t formId)136 bool PaContainer::OnDelete(int32_t instanceId, int64_t formId)
137 {
138     LOGI("PA: PaContainer::OnDelete start");
139     auto container = AceEngine::Get().GetContainer(instanceId);
140     CHECK_NULL_RETURN(container, false);
141     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
142     CHECK_NULL_RETURN(aceContainer, false);
143     auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
144     CHECK_NULL_RETURN(paBackend, false);
145     paBackend->OnDelete(formId);
146     LOGI("PA: PaContainer::OnDelete end");
147     return true;
148 }
149 
OnTriggerEvent(int32_t instanceId,int64_t formId,const std::string & message)150 bool PaContainer::OnTriggerEvent(int32_t instanceId, int64_t formId, const std::string& message)
151 {
152     LOGI("PA: PaContainer::OnTriggerEvent start");
153     auto container = AceEngine::Get().GetContainer(instanceId);
154     CHECK_NULL_RETURN(container, false);
155     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
156     CHECK_NULL_RETURN(aceContainer, false);
157     auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
158     CHECK_NULL_RETURN(paBackend, false);
159     paBackend->OnTriggerEvent(formId, message);
160     LOGI("PA: PaContainer::OnTriggerEvent end");
161     return true;
162 }
163 
OnAcquireFormState(int32_t instanceId,const OHOS::AAFwk::Want & want)164 int32_t PaContainer::OnAcquireFormState(int32_t instanceId, const OHOS::AAFwk::Want& want)
165 {
166     LOGI("PA: PaContainer::OnAcquireFormState start");
167     auto container = AceEngine::Get().GetContainer(instanceId);
168     CHECK_NULL_RETURN(container, -1);
169     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
170     CHECK_NULL_RETURN(aceContainer, -1);
171     auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
172     CHECK_NULL_RETURN(paBackend, -1);
173     int32_t formState = paBackend->OnAcquireFormState(want);
174     LOGI("PA: PaContainer::OnAcquireFormState end");
175     return formState;
176 }
177 
OnUpdate(int32_t instanceId,int64_t formId)178 bool PaContainer::OnUpdate(int32_t instanceId, int64_t formId)
179 {
180     LOGI("PA: PaContainer::OnUpdate start");
181     auto container = AceEngine::Get().GetContainer(instanceId);
182     CHECK_NULL_RETURN(container, false);
183     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
184     CHECK_NULL_RETURN(aceContainer, false);
185     auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
186     CHECK_NULL_RETURN(paBackend, false);
187     paBackend->OnUpdate(formId);
188     LOGI("PA: PaContainer::OnUpdate end");
189     return true;
190 }
191 
OnCastTemptoNormal(int32_t instanceId,int64_t formId)192 bool PaContainer::OnCastTemptoNormal(int32_t instanceId, int64_t formId)
193 {
194     LOGI("PA: PaContainer::OnCastTemptoNormal start");
195     auto container = AceEngine::Get().GetContainer(instanceId);
196     CHECK_NULL_RETURN(container, false);
197     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
198     CHECK_NULL_RETURN(aceContainer, false);
199     auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
200     CHECK_NULL_RETURN(paBackend, false);
201     paBackend->OnCastTemptoNormal(formId);
202     LOGI("PA: PaContainer::OnCastTemptoNormal end");
203     return true;
204 }
205 
OnVisibilityChanged(int32_t instanceId,const std::map<int64_t,int32_t> & formEventsMap)206 bool PaContainer::OnVisibilityChanged(int32_t instanceId, const std::map<int64_t, int32_t>& formEventsMap)
207 {
208     LOGI("PA: PaContainer::OnVisibilityChanged start");
209     auto container = AceEngine::Get().GetContainer(instanceId);
210     CHECK_NULL_RETURN(container, false);
211     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
212     CHECK_NULL_RETURN(aceContainer, false);
213     auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
214     CHECK_NULL_RETURN(paBackend, false);
215     paBackend->OnVisibilityChanged(formEventsMap);
216     LOGI("PA: PaContainer::OnVisibilityChanged end");
217     return true;
218 }
219 
GetFormData(int32_t instanceId)220 AppExecFwk::FormProviderData PaContainer::GetFormData(int32_t instanceId)
221 {
222     LOGI("PA: PaContainer::GetFormData start");
223     auto container = AceEngine::Get().GetContainer(instanceId);
224     CHECK_NULL_RETURN(container, AppExecFwk::FormProviderData());
225     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
226     CHECK_NULL_RETURN(aceContainer, AppExecFwk::FormProviderData());
227     auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
228     CHECK_NULL_RETURN(paBackend, AppExecFwk::FormProviderData());
229     return paBackend->GetFormData();
230 }
231 
DestroyContainer(int32_t instanceId)232 void PaContainer::DestroyContainer(int32_t instanceId)
233 {
234     LOGI("DestroyContainer with id %{private}d", instanceId);
235     SubwindowManager::GetInstance()->CloseDialog(instanceId);
236     auto container = AceEngine::Get().GetContainer(instanceId);
237     CHECK_NULL_VOID(container);
238     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
239     CHECK_NULL_VOID(aceContainer);
240     auto back = aceContainer->GetBackend();
241     CHECK_NULL_VOID_NOLOG(back);
242     back->UpdateState(Backend::State::ON_DESTROY);
243 }
244 
AddAssetPath(int32_t instanceId,const std::string & packagePath,const std::string & hapPath,const std::vector<std::string> & paths)245 void PaContainer::AddAssetPath(int32_t instanceId, const std::string& packagePath, const std::string& hapPath,
246     const std::vector<std::string>& paths)
247 {
248     auto container = AceType::DynamicCast<PaContainer>(AceEngine::Get().GetContainer(instanceId));
249     CHECK_NULL_VOID_NOLOG(container);
250     RefPtr<FlutterAssetManager> flutterAssetManager;
251     if (container->assetManager_) {
252         flutterAssetManager = AceType::DynamicCast<FlutterAssetManager>(container->assetManager_);
253     } else {
254         flutterAssetManager = Referenced::MakeRefPtr<FlutterAssetManager>();
255         container->assetManager_ = flutterAssetManager;
256         AceType::DynamicCast<PaBackend>(container->GetBackend())->SetAssetManager(flutterAssetManager);
257     }
258     CHECK_NULL_VOID_NOLOG(flutterAssetManager);
259     if (!hapPath.empty()) {
260         auto assetProvider = AceType::MakeRefPtr<HapAssetProvider>();
261         if (assetProvider->Initialize(hapPath, paths)) {
262             LOGI("Push AssetProvider to queue.");
263             flutterAssetManager->PushBack(std::move(assetProvider));
264         }
265     }
266     if (!packagePath.empty()) {
267         auto assetProvider = AceType::MakeRefPtr<FileAssetProvider>();
268         if (assetProvider->Initialize(packagePath, paths)) {
269             LOGI("Push AssetProvider to queue.");
270             flutterAssetManager->PushBack(std::move(assetProvider));
271         }
272     }
273 }
274 
AddLibPath(int32_t instanceId,const std::vector<std::string> & libPath)275 void PaContainer::AddLibPath(int32_t instanceId, const std::vector<std::string>& libPath)
276 {
277     auto container = AceType::DynamicCast<PaContainer>(AceEngine::Get().GetContainer(instanceId));
278     CHECK_NULL_VOID_NOLOG(container);
279     RefPtr<FlutterAssetManager> flutterAssetManager;
280     if (container->assetManager_) {
281         flutterAssetManager = AceType::DynamicCast<FlutterAssetManager>(container->assetManager_);
282     } else {
283         flutterAssetManager = Referenced::MakeRefPtr<FlutterAssetManager>();
284         container->assetManager_ = flutterAssetManager;
285         AceType::DynamicCast<PaBackend>(container->GetBackend())->SetAssetManager(flutterAssetManager);
286     }
287     CHECK_NULL_VOID_NOLOG(flutterAssetManager);
288     flutterAssetManager->SetLibPath("default", libPath);
289 }
290 
Insert(int32_t instanceId,const Uri & uri,const OHOS::NativeRdb::ValuesBucket & value)291 int32_t PaContainer::Insert(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::ValuesBucket& value)
292 {
293     LOGI("Insert with id %{public}d", instanceId);
294     int32_t ret = 0;
295     auto container = AceEngine::Get().GetContainer(instanceId);
296     CHECK_NULL_RETURN(container, ret);
297     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
298     auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
299     CHECK_NULL_RETURN_NOLOG(back, ret);
300     ret = back->Insert(uri, value);
301     return ret;
302 }
303 
Query(int32_t instanceId,const Uri & uri,const std::vector<std::string> & columns,const OHOS::NativeRdb::DataAbilityPredicates & predicates)304 std::shared_ptr<OHOS::NativeRdb::AbsSharedResultSet> PaContainer::Query(int32_t instanceId, const Uri& uri,
305     const std::vector<std::string>& columns, const OHOS::NativeRdb::DataAbilityPredicates& predicates)
306 {
307     LOGI("Query with id %{public}d", instanceId);
308     std::shared_ptr<OHOS::NativeRdb::AbsSharedResultSet> ret;
309     auto container = AceEngine::Get().GetContainer(instanceId);
310     CHECK_NULL_RETURN(container, ret);
311     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
312     auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
313     CHECK_NULL_RETURN_NOLOG(back, ret);
314     ret = back->Query(uri, columns, predicates);
315     return ret;
316 }
317 
Update(int32_t instanceId,const Uri & uri,const OHOS::NativeRdb::ValuesBucket & value,const OHOS::NativeRdb::DataAbilityPredicates & predicates)318 int32_t PaContainer::Update(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::ValuesBucket& value,
319     const OHOS::NativeRdb::DataAbilityPredicates& predicates)
320 {
321     LOGI("Update with id %{public}d", instanceId);
322     int32_t ret = 0;
323     auto container = AceEngine::Get().GetContainer(instanceId);
324     CHECK_NULL_RETURN(container, ret);
325     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
326     auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
327     CHECK_NULL_RETURN_NOLOG(back, ret);
328     ret = back->Update(uri, value, predicates);
329     return ret;
330 }
331 
Delete(int32_t instanceId,const Uri & uri,const OHOS::NativeRdb::DataAbilityPredicates & predicates)332 int32_t PaContainer::Delete(
333     int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::DataAbilityPredicates& predicates)
334 {
335     LOGI("Delete with id %{public}d", instanceId);
336     int32_t ret = 0;
337     auto container = AceEngine::Get().GetContainer(instanceId);
338     CHECK_NULL_RETURN(container, ret);
339     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
340     auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
341     CHECK_NULL_RETURN_NOLOG(back, ret);
342     ret = back->Delete(uri, predicates);
343     return ret;
344 }
345 
BatchInsert(int32_t instanceId,const Uri & uri,const std::vector<OHOS::NativeRdb::ValuesBucket> & values)346 int32_t PaContainer::BatchInsert(
347     int32_t instanceId, const Uri& uri, const std::vector<OHOS::NativeRdb::ValuesBucket>& values)
348 {
349     LOGI("BatchInsert with id %{public}d", instanceId);
350     int32_t ret = 0;
351     auto container = AceEngine::Get().GetContainer(instanceId);
352     CHECK_NULL_RETURN(container, ret);
353     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
354     auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
355     CHECK_NULL_RETURN_NOLOG(back, ret);
356     ret = back->BatchInsert(uri, values);
357     return ret;
358 }
359 
GetType(int32_t instanceId,const Uri & uri)360 std::string PaContainer::GetType(int32_t instanceId, const Uri& uri)
361 {
362     LOGI("GetType with id %{public}d", instanceId);
363     std::string ret;
364     auto container = AceEngine::Get().GetContainer(instanceId);
365     CHECK_NULL_RETURN(container, ret);
366     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
367     auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
368     CHECK_NULL_RETURN_NOLOG(back, ret);
369     ret = back->GetType(uri);
370     return ret;
371 }
372 
GetFileTypes(int32_t instanceId,const Uri & uri,const std::string & mimeTypeFilter)373 std::vector<std::string> PaContainer::GetFileTypes(
374     int32_t instanceId, const Uri& uri, const std::string& mimeTypeFilter)
375 {
376     LOGI("GetFileTypes with id %{public}d", instanceId);
377     std::vector<std::string> ret;
378     auto container = AceEngine::Get().GetContainer(instanceId);
379     CHECK_NULL_RETURN(container, ret);
380     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
381     auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
382     CHECK_NULL_RETURN_NOLOG(back, ret);
383     ret = back->GetFileTypes(uri, mimeTypeFilter);
384     return ret;
385 }
386 
OpenFile(int32_t instanceId,const Uri & uri,const std::string & mode)387 int32_t PaContainer::OpenFile(int32_t instanceId, const Uri& uri, const std::string& mode)
388 {
389     LOGI("OpenFile with id %{public}d", instanceId);
390     int32_t ret = 0;
391     auto container = AceEngine::Get().GetContainer(instanceId);
392     CHECK_NULL_RETURN(container, ret);
393     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
394     auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
395     CHECK_NULL_RETURN_NOLOG(back, ret);
396     ret = back->OpenFile(uri, mode);
397     return ret;
398 }
399 
OpenRawFile(int32_t instanceId,const Uri & uri,const std::string & mode)400 int32_t PaContainer::OpenRawFile(int32_t instanceId, const Uri& uri, const std::string& mode)
401 {
402     LOGI("OpenRawFile with id %{public}d", instanceId);
403     int32_t ret = 0;
404     auto container = AceEngine::Get().GetContainer(instanceId);
405     CHECK_NULL_RETURN(container, ret);
406     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
407     auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
408     CHECK_NULL_RETURN_NOLOG(back, ret);
409     ret = back->OpenRawFile(uri, mode);
410     return ret;
411 }
412 
NormalizeUri(int32_t instanceId,const Uri & uri)413 Uri PaContainer::NormalizeUri(int32_t instanceId, const Uri& uri)
414 {
415     LOGI("NormalizeUri with id %{public}d", instanceId);
416     Uri ret("");
417     auto container = AceEngine::Get().GetContainer(instanceId);
418     CHECK_NULL_RETURN(container, ret);
419     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
420     auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
421     CHECK_NULL_RETURN_NOLOG(back, ret);
422     ret = back->NormalizeUri(uri);
423     return ret;
424 }
425 
DenormalizeUri(int32_t instanceId,const Uri & uri)426 Uri PaContainer::DenormalizeUri(int32_t instanceId, const Uri& uri)
427 {
428     LOGI("DenormalizeUri with id %{public}d", instanceId);
429     Uri ret("");
430     auto container = AceEngine::Get().GetContainer(instanceId);
431     CHECK_NULL_RETURN(container, ret);
432     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
433     auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
434     CHECK_NULL_RETURN_NOLOG(back, ret);
435     ret = back->DenormalizeUri(uri);
436     return ret;
437 }
438 
Dispatch(const std::string & group,std::vector<uint8_t> && data,int32_t id,bool replyToComponent) const439 void PaContainer::Dispatch(
440     const std::string& group, std::vector<uint8_t>&& data, int32_t id, bool replyToComponent) const
441 {
442     return;
443 }
444 
DispatchPluginError(int32_t callbackId,int32_t errorCode,std::string && errorMessage) const445 void PaContainer::DispatchPluginError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const
446 {
447     return;
448 }
449 
Dump(const std::vector<std::string> & params)450 bool PaContainer::Dump(const std::vector<std::string>& params)
451 {
452     return false;
453 }
454 
OnConnect(int32_t instanceId,const OHOS::AAFwk::Want & want)455 sptr<IRemoteObject> PaContainer::OnConnect(int32_t instanceId, const OHOS::AAFwk::Want& want)
456 {
457     LOGI("OnConnect with id %{private}d", instanceId);
458     auto container = AceEngine::Get().GetContainer(instanceId);
459     CHECK_NULL_RETURN(container, nullptr);
460     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
461     auto back = aceContainer->GetBackend();
462     CHECK_NULL_RETURN_NOLOG(back, nullptr);
463     auto paBackend = AceType::DynamicCast<PaBackend>(back);
464     CHECK_NULL_RETURN(paBackend, nullptr);
465     return paBackend->OnConnect(want);
466     return nullptr;
467 }
468 
OnDisConnect(int32_t instanceId,const OHOS::AAFwk::Want & want)469 void PaContainer::OnDisConnect(int32_t instanceId, const OHOS::AAFwk::Want& want)
470 {
471     LOGI("OnDisConnect with id %{private}d", instanceId);
472     auto container = AceEngine::Get().GetContainer(instanceId);
473     CHECK_NULL_VOID(container);
474     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
475     auto back = aceContainer->GetBackend();
476     CHECK_NULL_VOID_NOLOG(back);
477     auto paBackend = AceType::DynamicCast<PaBackend>(back);
478     CHECK_NULL_VOID(paBackend);
479     paBackend->OnDisConnect(want);
480 }
481 
OnCommand(const OHOS::AAFwk::Want & want,int startId,int32_t instanceId)482 void PaContainer::OnCommand(const OHOS::AAFwk::Want &want, int startId, int32_t instanceId)
483 {
484     LOGI("OnCommand with id %{private}d", instanceId);
485     auto container = AceEngine::Get().GetContainer(instanceId);
486     CHECK_NULL_VOID(container);
487     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
488     auto back = aceContainer->GetBackend();
489     CHECK_NULL_VOID_NOLOG(back);
490     auto paBackend = AceType::DynamicCast<PaBackend>(back);
491     CHECK_NULL_VOID(paBackend);
492     paBackend->OnCommand(want, startId);
493 }
494 
OnShare(int32_t instanceId,int64_t formId,OHOS::AAFwk::WantParams & wantParams)495 bool PaContainer::OnShare(int32_t instanceId, int64_t formId, OHOS::AAFwk::WantParams &wantParams)
496 {
497     LOGD("PA: PaContainer::OnShare start with id %{private}d", instanceId);
498     auto container = AceEngine::Get().GetContainer(instanceId);
499     CHECK_NULL_RETURN(container, false);
500     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
501     CHECK_NULL_RETURN(aceContainer, false);
502     auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
503     CHECK_NULL_RETURN(paBackend, false);
504     LOGD("PA: PaContainer::OnCreate end");
505     return paBackend->OnShare(formId, wantParams);
506 }
507 
Call(int32_t instanceId,const Uri & uri,const std::string & method,const std::string & arg,const AppExecFwk::PacMap & pacMap)508 std::shared_ptr<AppExecFwk::PacMap> PaContainer::Call(int32_t instanceId, const Uri& uri,
509     const std::string& method, const std::string& arg, const AppExecFwk::PacMap& pacMap)
510 {
511     LOGD("Call with id %{public}d", instanceId);
512     std::shared_ptr<AppExecFwk::PacMap> ret = nullptr;
513     auto container = AceEngine::Get().GetContainer(instanceId);
514     CHECK_NULL_RETURN(container, ret);
515     auto aceContainer = AceType::DynamicCast<PaContainer>(container);
516     auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
517     CHECK_NULL_RETURN_NOLOG(back, ret);
518     ret = back->Call(uri, method, arg, pacMap);
519     return ret;
520 }
521 
DumpHeapSnapshot(bool isPrivate)522 void PaContainer::DumpHeapSnapshot(bool isPrivate)
523 {
524     taskExecutor_->PostTask(
525         [isPrivate, backend = WeakPtr<Backend>(backend_)] {
526             auto sp = backend.Upgrade();
527             CHECK_NULL_VOID_NOLOG(sp);
528             sp->DumpHeapSnapshot(isPrivate);
529         },
530         TaskExecutor::TaskType::JS);
531 }
532 } // namespace OHOS::Ace::Platform
533