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