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