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