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