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