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