• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 #ifndef OHOS_ANI_ACE_PLUGIN_CALLBACK_H
16 #define OHOS_ANI_ACE_PLUGIN_CALLBACK_H
17 
18 #include <string>
19 #include "ani.h"
20 #include "ani_plugin_component_data.h"
21 #include "core/components/plugin/plugin_component_callback.h"
22 
23 namespace OHOS::Ace::Ani {
24 using namespace OHOS::Ace;
25 
26 struct OnPluginUvWorkData {
27     AAFwk::Want want;
28     std::string sourceName;
29     std::string abilityName;
30     std::string data;
31     std::string extraData;
32     std::string name;
33 };
34 
35 class AceJSPluginRequestParam {
36 public:
AceJSPluginRequestParam(const AAFwk::Want & want,const std::string & name,const std::string & data,const std::string & jsonPath)37     AceJSPluginRequestParam(
38         const AAFwk::Want& want, const std::string& name, const std::string& data, const std::string& jsonPath)
39         : want_(want), name_(name), data_(data), jsonPath_(jsonPath)
40     {}
41     ~AceJSPluginRequestParam() = default;
42     bool operator==(const AceJSPluginRequestParam& param) const;
43     bool operator!=(const AceJSPluginRequestParam& param) const;
44 
45 public:
46     AAFwk::Want want_;
47     std::string name_;
48     std::string data_;
49     std::string jsonPath_;
50 };
51 
52 class ANIPluginCallback : public PluginComponentCallBack {
53 public:
54     ANIPluginCallback(CallBackType eventType, ACECallbackInfo& cbInfo, ACEAsyncJSCallbackInfo* jsCallbackInfo);
55     virtual ~ANIPluginCallback();
56     void SetWant(const AAFwk::Want& want);
57     AAFwk::Want& GetWant();
58     void SetRequestParam(const std::shared_ptr<AceJSPluginRequestParam>& param);
59     bool OnEventStrictEquals(CallBackType eventType, const AAFwk::Want& want, ACECallbackInfo& cbInfo);
60     bool RequestStrictEquals(CallBackType eventType, const AAFwk::Want& want, ACECallbackInfo& cbInfo,
61         const std::shared_ptr<AceJSPluginRequestParam>& param);
62 
63     size_t GetID(void);
64     int32_t GetContainerId() override;
65     void OnPushEvent(const AAFwk::Want& want, const PluginComponentTemplate& pluginTemplate, const std::string& data,
66         const std::string& extraData) override;
67     void OnRequestEvent(const AAFwk::Want& want, const std::string& name, const std::string& data) override;
68     void OnRequestCallBack(
69         const PluginComponentTemplate& pluginTemplate, const std::string& data, const std::string& extraData) override;
70 
71 private:
72     void DestroyAllResource(void);
73     void SendRequestEventResult(ani_object aniRef);
74     CallbackParamForRequest MakeCallbackParamForRequestOrPush(
75         const PluginComponentTemplate& pluginTemplate, const std::string& data, const std::string& extraData);
76     ani_ref MakePluginTemplateObject(const PluginComponentTemplate& pluginTemplate);
77     void OnPushEventInner(const OnPluginUvWorkData* workData);
78     void OnRequestEventInner(const OnPluginUvWorkData* workData);
79     void OnRequestCallBackInner(const OnPluginUvWorkData* workData);
80 
81     ACECallbackInfo cbInfo_;
82     CallBackType eventType_;
83     std::shared_ptr<AceJSPluginRequestParam> requestParam_ = nullptr;
84     static std::atomic_size_t uuid_;
85     OnPluginUvWorkData uvWorkData_;
86     ACEAsyncJSCallbackInfo* asyncJSCallbackInfo_ = nullptr;
87     AAFwk::Want want_;
88 };
89 } // namespace OHOS::Ace::Ani
90 #endif // OHOS_ANI_ACE_PLUGIN_CALLBACK_H