• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_WEB_CORS_WEB_OBJECT_EVENT_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_WEB_CORS_WEB_OBJECT_EVENT_H
18 
19 #include <string>
20 #include <unordered_map>
21 #include <map>
22 
23 #include "base/json/json_util.h"
24 #include "base/log/log.h"
25 #include "base/memory/referenced.h"
26 #include "base/utils/macros.h"
27 #include "base/utils/noncopyable.h"
28 #include "base/utils/singleton.h"
29 #include "core/components/web/web_event.h"
30 
31 namespace OHOS::Ace {
32 class WebResourceRequestObject : public Referenced {
33 public:
34     virtual std::map<std::string, std::string> GetRequestHeader(void* object) = 0;
35     virtual std::string GetRequestUrl(void* object) = 0;
36     virtual std::string GetMethod(void* object) = 0;
37     virtual bool IsRequestGesture(void* object) = 0;
38     virtual bool IsMainFrame(void* object) = 0;
39     virtual bool IsRedirect(void* object) = 0;
40 };
41 
42 class WebScrollObject : public Referenced {
43 public:
44     virtual float GetX(void* object) = 0;
45     virtual float GetY(void* object) = 0;
46 };
47 
48 class WebScaleChangeObject : public Referenced {
49 public:
50     virtual float GetNewScale(void* object) = 0;
51     virtual float GetOldScale(void* object) = 0;
52 };
53 
54 class WebResourceResponseObject : public Referenced {
55 public:
56     virtual std::map<std::string, std::string> GetResponseHeader(void* object) = 0;
57     virtual std::string GetResponseData(void* object) = 0;
58     virtual std::string GetEncoding(void* object) = 0;
59     virtual std::string GetMimeType(void* object) = 0;
60     virtual std::string GetReason(void* object) = 0;
61     virtual int GetStatusCode(void* object) = 0;
62 };
63 
64 class WebConsoleMessageObject : public Referenced {
65 public:
66     virtual std::string GetMessage(void* object) = 0;
67     virtual int GetMessageLevel(void* object) = 0;
68     virtual std::string GetSourceId(void* object) = 0;
69     virtual int GetLineNumber(void* object) = 0;
70 };
71 
72 class WebCommonDialogObject : public Referenced {
73 public:
74     virtual std::string GetUrl(void* object) = 0;
75     virtual std::string GetMessage(void* object) = 0;
76     virtual std::string GetValue(void* object) = 0;
Confirm(void * object,const std::string & promptResult,int index)77     virtual void Confirm(void* object, const std::string& promptResult, int index) {};
Confirm(void * object,int index)78     virtual void Confirm(void* object, int index) {};
Cancel(void * object,int index)79     virtual void Cancel(void* object, int index) {};
AddObject(void * object)80     virtual int AddObject(void* object)
81     {
82         return 0;
83     };
DelObject(int index)84     virtual void DelObject(int index) {};
85 };
86 
87 class WebPermissionRequestObject : public Referenced {
88 public:
89     virtual std::string GetOrigin(void* object) = 0;
90     virtual int GetResourcesId(void* object) = 0;
Grant(void * object,const int resourcesId,int index)91     virtual void Grant(void* object, const int resourcesId, int index) {};
Deny(void * object,int index)92     virtual void Deny(void* object, int index) {};
AddObject(void * object)93     virtual int AddObject(void* object)
94     {
95         return 0;
96     };
DelObject(int index)97     virtual void DelObject(int index) {};
98 };
99 
100 class WebHttpAuthRequestObject : public Referenced {
101 public:
102     virtual std::string GetHost(void* object) = 0;
103     virtual std::string GetRealm(void* object) = 0;
AddObject(void * object)104     virtual int AddObject(void* object)
105     {
106         return 0;
107     };
DelObject(int index)108     virtual void DelObject(int index) {};
Confirm(void * object,std::string & userName,std::string & pwd,int index)109     virtual bool Confirm(void* object, std::string& userName, std::string& pwd, int index)
110     {
111         return false;
112     };
IsHttpAuthInfoSaved(void * object,int index)113     virtual bool IsHttpAuthInfoSaved(void* object, int index)
114     {
115         return false;
116     };
Cancel(void * object,int index)117     virtual void Cancel(void* object, int index) {};
118 };
119 
120 class WebDownloadResponseObject : public Referenced {
121 public:
122     virtual std::string GetUrl(void* object) = 0;
123     virtual std::string GetMimetype(void* object) = 0;
124     virtual long GetContentLength(void* object) = 0;
125     virtual std::string GetContentDisposition(void* object) = 0;
126     virtual std::string GetUserAgent(void* object) = 0;
127 };
128 
129 class WebRefreshAccessedHistoryObject : public Referenced {
130 public:
131     virtual std::string GetUrl(void* object) = 0;
132     virtual bool GetIsRefreshed(void* object) = 0;
133 };
134 
135 class WebFullScreenEnterObject : public Referenced {
136 public:
137     virtual int GetWidths(void* object) = 0;
138     virtual int GetHeights(void* object) = 0;
ExitFullScreen(void * object,int index)139     virtual void ExitFullScreen(void* object, int index) {};
AddObject(void * object)140     virtual int AddObject(void* object)
141     {
142         return 0;
143     };
DelObject(int index)144     virtual void DelObject(int index) {};
145 };
146 
147 class WebFullScreenExitObject : public Referenced {
148 };
149 
150 class WebFileChooserObject : public Referenced {
151 public:
152     virtual std::string GetTitle(void* object) = 0;
153     virtual int GetMode(void* object) = 0;
154     virtual std::vector<std::string> GetAcceptType(void* object) = 0;
155     virtual bool IsCapture(void* object) = 0;
AddObject(void * object)156     virtual int AddObject(void* object)
157     {
158         return 0;
159     };
DelObject(int index)160     virtual void DelObject(int index) {};
161     virtual void HandleFileList(void* object, std::vector<std::string>& result, int index) = 0;
162 };
163 
164 class WebGeolocationObject : public Referenced {
165 public:
166     virtual std::string GetOrigin(void* object) = 0;
AddObject(void * object)167     virtual int AddObject(void* object)
168     {
169         return 0;
170     };
DelObject(int index)171     virtual void DelObject(int index) {};
172     virtual void Invoke(int index, const std::string& origin, const bool& allow, const bool& retain) = 0;
173 };
174 
175 class WebResourceErrorObject : public Referenced {
176 public:
177     virtual std::string GetErrorInfo(void* object) = 0;
178     virtual int GetErrorCode(void* object) = 0;
179 };
180 
181 class WebObjectEventManager : public Singleton<WebObjectEventManager> {
182     DECLARE_SINGLETON(WebObjectEventManager)
183 public:
184     using EventObJectCallback = std::function<void(const std::string&, void *object)>;
185     using EventObjectWithBoolReturnCallback = std::function<bool(const std::string&, void *object)>;
186     using EventObjectWithResponseReturnCallback = std::function<RefPtr<WebResponse>(const std::string&, void *object)>;
187 
RegisterObjectEvent(const std::string & eventId,const EventObJectCallback && eventCallback)188     void RegisterObjectEvent(const std::string& eventId, const EventObJectCallback&& eventCallback)
189     {
190         eventObjectMap_[eventId] = std::move(eventCallback);
191     }
192 
RegisterObjectEventWithBoolReturn(const std::string & eventId,const EventObjectWithBoolReturnCallback && eventCallback)193     void RegisterObjectEventWithBoolReturn(
194 		const std::string& eventId, const EventObjectWithBoolReturnCallback&& eventCallback)
195     {
196         TAG_LOGI(AceLogTag::ACE_WEB, "RegisterObjectEventWithBoolReturn %{public}s", eventId.c_str());
197         eventObjectWithBoolReturnMap_[eventId] = std::move(eventCallback);
198     }
199 
RegisterObjectEventWithResponseReturn(const std::string & eventId,const EventObjectWithResponseReturnCallback && eventCallback)200     void RegisterObjectEventWithResponseReturn(
201         const std::string& eventId, const EventObjectWithResponseReturnCallback&& eventCallback)
202     {
203         eventObjectWithResponseReturnMap_[eventId] = std::move(eventCallback);
204     }
205 
UnRegisterObjectEvent(const std::string & eventId)206     void UnRegisterObjectEvent(const std::string& eventId)
207     {
208         eventObjectMap_.erase(eventId);
209     }
210 
UnRegisterObjectEventWithBoolReturn(const std::string & eventId)211     void UnRegisterObjectEventWithBoolReturn(const std::string& eventId)
212     {
213         eventObjectWithBoolReturnMap_.erase(eventId);
214     }
215 
UnRegisterObjectEventWithResponseReturn(const std::string & eventId)216     void UnRegisterObjectEventWithResponseReturn(const std::string& eventId)
217     {
218         eventObjectWithResponseReturnMap_.erase(eventId);
219     }
220 
OnObjectEvent(const std::string & eventId,const std::string & param,void * jObject)221     void OnObjectEvent(const std::string& eventId, const std::string& param, void *jObject)
222     {
223         auto event = eventObjectMap_.find(eventId);
224         if (event != eventObjectMap_.end() && event->second) {
225             event->second(param, jObject);
226         } else {
227             TAG_LOGW(AceLogTag::ACE_WEB, "failed to find object eventId = %{public}s", eventId.c_str());
228         }
229     }
230 
OnObjectEventWithBoolReturn(const std::string & eventId,const std::string & param,void * jObject)231     bool OnObjectEventWithBoolReturn(const std::string& eventId, const std::string& param, void *jObject)
232     {
233         TAG_LOGI(AceLogTag::ACE_WEB, "OnObjectEventWithBoolReturn %{public}s", eventId.c_str());
234         auto event = eventObjectWithBoolReturnMap_.find(eventId);
235         if (event != eventObjectWithBoolReturnMap_.end() && event->second) {
236             return event->second(param, jObject);
237         } else {
238             LOGW("failed to find object eventIdWithBoolReturn = %{public}s", eventId.c_str());
239         }
240         return false;
241     }
242 
OnObjectEventWithResponseReturn(const std::string & eventId,const std::string & param,void * jObject)243     RefPtr<WebResponse> OnObjectEventWithResponseReturn(
244         const std::string& eventId, const std::string& param, void* jObject)
245     {
246         auto event = eventObjectWithResponseReturnMap_.find(eventId);
247         if (event != eventObjectWithResponseReturnMap_.end() && event->second) {
248             return event->second(param, jObject);
249         } else {
250             LOGW("failed to find object eventIdWithResponseReturn = %{public}s", eventId.c_str());
251         }
252         return nullptr;
253     }
254 
GetResourceRequestObject()255     const RefPtr<WebResourceRequestObject>& GetResourceRequestObject()
256     {
257         return resourceRequestObject_;
258     }
259 
SetResourceRequestObject(const RefPtr<WebResourceRequestObject> & object)260     void SetResourceRequestObject(const RefPtr<WebResourceRequestObject>& object)
261     {
262         resourceRequestObject_ = object;
263     }
264 
GetResourceErrorObject()265     const RefPtr<WebResourceErrorObject>& GetResourceErrorObject()
266     {
267         return resourceErrorObject_;
268     }
269 
SetResourceErrorObject(const RefPtr<WebResourceErrorObject> & object)270     void SetResourceErrorObject(const RefPtr<WebResourceErrorObject>& object)
271     {
272         resourceErrorObject_ = object;
273     }
274 
GetScrollObject()275     const RefPtr<WebScrollObject>& GetScrollObject()
276     {
277         return scrollObject_;
278     }
279 
SetScrollObject(const RefPtr<WebScrollObject> & object)280     void SetScrollObject(const RefPtr<WebScrollObject>& object)
281     {
282         scrollObject_ = object;
283     }
284 
GetScaleChangeObject()285     const RefPtr<WebScaleChangeObject>& GetScaleChangeObject()
286     {
287         return scaleChangeObject_;
288     }
289 
SetScaleChangeObject(const RefPtr<WebScaleChangeObject> & object)290     void SetScaleChangeObject(const RefPtr<WebScaleChangeObject>& object)
291     {
292         scaleChangeObject_ = object;
293     }
294 
GetResourceResponseObject()295     const RefPtr<WebResourceResponseObject>& GetResourceResponseObject()
296     {
297         return resourceResponseObject_;
298     }
299 
GetRefreshAccessedHistoryObject()300     const RefPtr<WebRefreshAccessedHistoryObject>& GetRefreshAccessedHistoryObject()
301     {
302         return refreshAccessedHistoryObject_;
303     }
304 
SetRefreshAccessedHistoryObject(const RefPtr<WebRefreshAccessedHistoryObject> & object)305     void SetRefreshAccessedHistoryObject(const RefPtr<WebRefreshAccessedHistoryObject>& object)
306     {
307         refreshAccessedHistoryObject_ = object;
308     }
309 
GetFullScreenEnterObject()310     const RefPtr<WebFullScreenEnterObject>& GetFullScreenEnterObject()
311     {
312         return fullScreenEnterObject_;
313     }
314 
SetFullScreenEnterObject(const RefPtr<WebFullScreenEnterObject> & object)315     void SetFullScreenEnterObject(const RefPtr<WebFullScreenEnterObject>& object)
316     {
317         fullScreenEnterObject_ = object;
318     }
319 
GetFullScreenExitObject()320     const RefPtr<WebFullScreenExitObject>& GetFullScreenExitObject()
321     {
322         return fullScreenExitObject_;
323     }
324 
SetFullScreenExitObject(const RefPtr<WebFullScreenExitObject> & object)325     void SetFullScreenExitObject(const RefPtr<WebFullScreenExitObject>& object)
326     {
327         fullScreenExitObject_ = object;
328     }
329 
SetResourceResponseObject(const RefPtr<WebResourceResponseObject> & object)330     void SetResourceResponseObject(const RefPtr<WebResourceResponseObject>& object)
331     {
332         resourceResponseObject_ = object;
333     }
334 
GetConsoleMessageObject()335     const RefPtr<WebConsoleMessageObject>& GetConsoleMessageObject()
336     {
337         return consoleMessageObject_;
338     }
339 
SetConsoleMessageObject(const RefPtr<WebConsoleMessageObject> & object)340     void SetConsoleMessageObject(const RefPtr<WebConsoleMessageObject>& object)
341     {
342         consoleMessageObject_ = object;
343     }
344 
GetCommonDialogObject()345     const RefPtr<WebCommonDialogObject>& GetCommonDialogObject()
346     {
347         return commonDialogObject_;
348     }
349 
SetCommonDialogObject(const RefPtr<WebCommonDialogObject> & object)350     void SetCommonDialogObject(const RefPtr<WebCommonDialogObject>& object)
351     {
352         commonDialogObject_ = object;
353     }
354 
GetPermissionRequestObject()355     const RefPtr<WebPermissionRequestObject>& GetPermissionRequestObject()
356     {
357         return permissionRequestObject_;
358     }
359 
SetPermissionRequestObject(const RefPtr<WebPermissionRequestObject> & object)360     void SetPermissionRequestObject(const RefPtr<WebPermissionRequestObject>& object)
361     {
362         permissionRequestObject_ = object;
363     }
364 
GetHttpAuthRequestObject()365     const RefPtr<WebHttpAuthRequestObject>& GetHttpAuthRequestObject()
366     {
367         return httpAuthRequestObject_;
368     }
369 
SetHttpAuthRequestObject(const RefPtr<WebHttpAuthRequestObject> & object)370     void SetHttpAuthRequestObject(const RefPtr<WebHttpAuthRequestObject>& object)
371     {
372         httpAuthRequestObject_ = object;
373     }
374 
GetDownloadResponseObject()375     const RefPtr<WebDownloadResponseObject>& GetDownloadResponseObject()
376     {
377         return downloadResponseObject_;
378     }
379 
SetDownloadResponseObject(const RefPtr<WebDownloadResponseObject> & object)380     void SetDownloadResponseObject(const RefPtr<WebDownloadResponseObject>& object)
381     {
382         downloadResponseObject_ = object;
383     }
384 
GetFileChooserObject()385     const RefPtr<WebFileChooserObject>& GetFileChooserObject()
386     {
387         return fileChooserObject_;
388     }
389 
SetFileChooserObject(const RefPtr<WebFileChooserObject> & object)390     void SetFileChooserObject(const RefPtr<WebFileChooserObject>& object)
391     {
392         fileChooserObject_ = object;
393     }
394 
GetGeolocationObject()395     const RefPtr<WebGeolocationObject>& GetGeolocationObject()
396     {
397         return GeolocationObject_;
398     }
399 
SetGeolocationObject(const RefPtr<WebGeolocationObject> & object)400     void SetGeolocationObject(const RefPtr<WebGeolocationObject>& object)
401     {
402         GeolocationObject_ = object;
403     }
404 
405 private:
406     RefPtr<WebResourceRequestObject> resourceRequestObject_;
407     RefPtr<WebScrollObject> scrollObject_;
408     RefPtr<WebScaleChangeObject> scaleChangeObject_;
409     RefPtr<WebResourceErrorObject> resourceErrorObject_;
410     RefPtr<WebResourceResponseObject> resourceResponseObject_;
411     RefPtr<WebConsoleMessageObject> consoleMessageObject_;
412     RefPtr<WebCommonDialogObject> commonDialogObject_;
413     RefPtr<WebPermissionRequestObject> permissionRequestObject_;
414     RefPtr<WebHttpAuthRequestObject> httpAuthRequestObject_;
415     RefPtr<WebDownloadResponseObject> downloadResponseObject_;
416     RefPtr<WebFileChooserObject> fileChooserObject_;
417     RefPtr<WebGeolocationObject> GeolocationObject_;
418     std::unordered_map<std::string, EventObJectCallback> eventObjectMap_;
419     RefPtr<WebRefreshAccessedHistoryObject> refreshAccessedHistoryObject_;
420     RefPtr<WebFullScreenEnterObject> fullScreenEnterObject_;
421     RefPtr<WebFullScreenExitObject> fullScreenExitObject_;
422     std::unordered_map<std::string, EventObjectWithBoolReturnCallback> eventObjectWithBoolReturnMap_;
423     std::unordered_map<std::string, EventObjectWithResponseReturnCallback> eventObjectWithResponseReturnMap_;
424 };
425 inline WebObjectEventManager::WebObjectEventManager() = default;
426 inline WebObjectEventManager::~WebObjectEventManager() = default;
427 } // namespace OHOS::Ace
428 #endif