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 30 namespace OHOS::Ace { 31 class WebResourceRequestObject : public Referenced { 32 public: 33 virtual std::map<std::string, std::string> GetRequestHeader(void* object) = 0; 34 virtual std::string GetRequestUrl(void* object) = 0; 35 virtual std::string GetMethod(void* object) = 0; 36 virtual bool IsRequestGesture(void* object) = 0; 37 virtual bool IsMainFrame(void* object) = 0; 38 virtual bool IsRedirect(void* object) = 0; 39 }; 40 41 class WebScrollObject : public Referenced { 42 public: 43 virtual float GetX(void* object) = 0; 44 virtual float GetY(void* object) = 0; 45 }; 46 47 class WebScaleChangeObject : public Referenced { 48 public: 49 virtual float GetNewScale(void* object) = 0; 50 virtual float GetOldScale(void* object) = 0; 51 }; 52 53 class WebResourceResponseObject : public Referenced { 54 public: 55 virtual std::map<std::string, std::string> GetResponseHeader(void* object) = 0; 56 virtual std::string GetResponseData(void* object) = 0; 57 virtual std::string GetEncoding(void* object) = 0; 58 virtual std::string GetMimeType(void* object) = 0; 59 virtual std::string GetReason(void* object) = 0; 60 virtual int GetStatusCode(void* object) = 0; 61 }; 62 63 class WebConsoleMessageObject : public Referenced { 64 public: 65 virtual std::string GetMessage(void* object) = 0; 66 virtual int GetMessageLevel(void* object) = 0; 67 virtual std::string GetSourceId(void* object) = 0; 68 virtual int GetLineNumber(void* object) = 0; 69 }; 70 71 class WebCommonDialogObject : public Referenced { 72 public: 73 virtual std::string GetUrl(void* object) = 0; 74 virtual std::string GetMessage(void* object) = 0; 75 virtual std::string GetValue(void* object) = 0; Confirm(void * object,const std::string & promptResult,int index)76 virtual void Confirm(void* object, const std::string& promptResult, int index) {}; Confirm(void * object,int index)77 virtual void Confirm(void* object, int index) {}; Cancel(void * object,int index)78 virtual void Cancel(void* object, int index) {}; AddObject(void * object)79 virtual int AddObject(void* object) 80 { 81 return 0; 82 }; DelObject(int index)83 virtual void DelObject(int index) {}; 84 }; 85 86 class WebPermissionRequestObject : public Referenced { 87 public: 88 virtual std::string GetOrigin(void* object) = 0; 89 virtual int GetResourcesId(void* object) = 0; Grant(void * object,const int resourcesId,int index)90 virtual void Grant(void* object, const int resourcesId, int index) {}; Deny(void * object,int index)91 virtual void Deny(void* object, int index) {}; AddObject(void * object)92 virtual int AddObject(void* object) 93 { 94 return 0; 95 }; DelObject(int index)96 virtual void DelObject(int index) {}; 97 }; 98 99 class WebHttpAuthRequestObject : public Referenced { 100 public: 101 virtual std::string GetHost(void* object) = 0; 102 virtual std::string GetRealm(void* object) = 0; AddObject(void * object)103 virtual int AddObject(void* object) 104 { 105 return 0; 106 }; DelObject(int index)107 virtual void DelObject(int index) {}; Confirm(void * object,std::string & userName,std::string & pwd,int index)108 virtual bool Confirm(void* object, std::string& userName, std::string& pwd, int index) 109 { 110 return false; 111 }; IsHttpAuthInfoSaved(void * object,int index)112 virtual bool IsHttpAuthInfoSaved(void* object, int index) 113 { 114 return false; 115 }; Cancel(void * object,int index)116 virtual void Cancel(void* object, int index) {}; 117 }; 118 119 class WebDownloadResponseObject : public Referenced { 120 public: 121 virtual std::string GetUrl(void* object) = 0; 122 virtual std::string GetMimetype(void* object) = 0; 123 virtual long GetContentLength(void* object) = 0; 124 virtual std::string GetContentDisposition(void* object) = 0; 125 virtual std::string GetUserAgent(void* object) = 0; 126 }; 127 128 class WebFileChooserObject : public Referenced { 129 public: 130 virtual std::string GetTitle(void* object) = 0; 131 virtual int GetMode(void* object) = 0; 132 virtual std::vector<std::string> GetAcceptType(void* object) = 0; 133 virtual bool IsCapture(void* object) = 0; AddObject(void * object)134 virtual int AddObject(void* object) 135 { 136 return 0; 137 }; DelObject(int index)138 virtual void DelObject(int index) {}; 139 virtual void HandleFileList(void* object, std::vector<std::string>& result, int index) = 0; 140 }; 141 142 class WebGeolocationObject : public Referenced { 143 public: 144 virtual std::string GetOrigin(void* object) = 0; AddObject(void * object)145 virtual int AddObject(void* object) 146 { 147 return 0; 148 }; DelObject(int index)149 virtual void DelObject(int index) {}; 150 virtual void Invoke(int index, const std::string& origin, const bool& allow, const bool& retain) = 0; 151 }; 152 153 class WebResourceErrorObject : public Referenced { 154 public: 155 virtual std::string GetErrorInfo(void* object) = 0; 156 virtual int GetErrorCode(void* object) = 0; 157 }; 158 159 class WebObjectEventManager : public Singleton<WebObjectEventManager> { 160 DECLARE_SINGLETON(WebObjectEventManager) 161 public: 162 using EventObJectCallback = std::function<void(const std::string&, void *object)>; 163 using EventObjectWithBoolReturnCallback = std::function<bool(const std::string&, void *object)>; 164 RegisterObjectEvent(const std::string & eventId,const EventObJectCallback && eventCallback)165 void RegisterObjectEvent(const std::string& eventId, const EventObJectCallback&& eventCallback) 166 { 167 eventObjectMap_[eventId] = std::move(eventCallback); 168 } 169 RegisterObjectEventWithBoolReturn(const std::string & eventId,const EventObjectWithBoolReturnCallback && eventCallback)170 void RegisterObjectEventWithBoolReturn( 171 const std::string& eventId, const EventObjectWithBoolReturnCallback&& eventCallback) 172 { 173 TAG_LOGI(AceLogTag::ACE_WEB, "RegisterObjectEventWithBoolReturn %{public}s", eventId.c_str()); 174 eventObjectWithBoolReturnMap_[eventId] = std::move(eventCallback); 175 } 176 UnRegisterObjectEvent(const std::string & eventId)177 void UnRegisterObjectEvent(const std::string& eventId) 178 { 179 eventObjectMap_.erase(eventId); 180 } 181 UnRegisterObjectEventWithBoolReturn(const std::string & eventId)182 void UnRegisterObjectEventWithBoolReturn(const std::string& eventId) 183 { 184 eventObjectWithBoolReturnMap_.erase(eventId); 185 } 186 OnObjectEvent(const std::string & eventId,const std::string & param,void * jObject)187 void OnObjectEvent(const std::string& eventId, const std::string& param, void *jObject) 188 { 189 auto event = eventObjectMap_.find(eventId); 190 if (event != eventObjectMap_.end() && event->second) { 191 event->second(param, jObject); 192 } else { 193 TAG_LOGW(AceLogTag::ACE_WEB, "failed to find object eventId = %{public}s", eventId.c_str()); 194 } 195 } 196 OnObjectEventWithBoolReturn(const std::string & eventId,const std::string & param,void * jObject)197 bool OnObjectEventWithBoolReturn(const std::string& eventId, const std::string& param, void *jObject) 198 { 199 TAG_LOGI(AceLogTag::ACE_WEB, "OnObjectEventWithBoolReturn %{public}s", eventId.c_str()); 200 auto event = eventObjectWithBoolReturnMap_.find(eventId); 201 if (event != eventObjectWithBoolReturnMap_.end() && event->second) { 202 return event->second(param, jObject); 203 } else { 204 LOGW("failed to find object eventIdWithBoolReturn = %{public}s", eventId.c_str()); 205 } 206 return false; 207 } 208 GetResourceRequestObject()209 const RefPtr<WebResourceRequestObject>& GetResourceRequestObject() 210 { 211 return resourceRequestObject_; 212 } 213 SetResourceRequestObject(const RefPtr<WebResourceRequestObject> & object)214 void SetResourceRequestObject(const RefPtr<WebResourceRequestObject>& object) 215 { 216 resourceRequestObject_ = object; 217 } 218 GetResourceErrorObject()219 const RefPtr<WebResourceErrorObject>& GetResourceErrorObject() 220 { 221 return resourceErrorObject_; 222 } 223 SetResourceErrorObject(const RefPtr<WebResourceErrorObject> & object)224 void SetResourceErrorObject(const RefPtr<WebResourceErrorObject>& object) 225 { 226 resourceErrorObject_ = object; 227 } 228 GetScrollObject()229 const RefPtr<WebScrollObject>& GetScrollObject() 230 { 231 return scrollObject_; 232 } 233 SetScrollObject(const RefPtr<WebScrollObject> & object)234 void SetScrollObject(const RefPtr<WebScrollObject>& object) 235 { 236 scrollObject_ = object; 237 } 238 GetScaleChangeObject()239 const RefPtr<WebScaleChangeObject>& GetScaleChangeObject() 240 { 241 return scaleChangeObject_; 242 } 243 SetScaleChangeObject(const RefPtr<WebScaleChangeObject> & object)244 void SetScaleChangeObject(const RefPtr<WebScaleChangeObject>& object) 245 { 246 scaleChangeObject_ = object; 247 } 248 GetResourceResponseObject()249 const RefPtr<WebResourceResponseObject>& GetResourceResponseObject() 250 { 251 return resourceResponseObject_; 252 } 253 SetResourceResponseObject(const RefPtr<WebResourceResponseObject> & object)254 void SetResourceResponseObject(const RefPtr<WebResourceResponseObject>& object) 255 { 256 resourceResponseObject_ = object; 257 } 258 GetConsoleMessageObject()259 const RefPtr<WebConsoleMessageObject>& GetConsoleMessageObject() 260 { 261 return consoleMessageObject_; 262 } 263 SetConsoleMessageObject(const RefPtr<WebConsoleMessageObject> & object)264 void SetConsoleMessageObject(const RefPtr<WebConsoleMessageObject>& object) 265 { 266 consoleMessageObject_ = object; 267 } 268 GetCommonDialogObject()269 const RefPtr<WebCommonDialogObject>& GetCommonDialogObject() 270 { 271 return commonDialogObject_; 272 } 273 SetCommonDialogObject(const RefPtr<WebCommonDialogObject> & object)274 void SetCommonDialogObject(const RefPtr<WebCommonDialogObject>& object) 275 { 276 commonDialogObject_ = object; 277 } 278 GetPermissionRequestObject()279 const RefPtr<WebPermissionRequestObject>& GetPermissionRequestObject() 280 { 281 return permissionRequestObject_; 282 } 283 SetPermissionRequestObject(const RefPtr<WebPermissionRequestObject> & object)284 void SetPermissionRequestObject(const RefPtr<WebPermissionRequestObject>& object) 285 { 286 permissionRequestObject_ = object; 287 } 288 GetHttpAuthRequestObject()289 const RefPtr<WebHttpAuthRequestObject>& GetHttpAuthRequestObject() 290 { 291 return httpAuthRequestObject_; 292 } 293 SetHttpAuthRequestObject(const RefPtr<WebHttpAuthRequestObject> & object)294 void SetHttpAuthRequestObject(const RefPtr<WebHttpAuthRequestObject>& object) 295 { 296 httpAuthRequestObject_ = object; 297 } 298 GetDownloadResponseObject()299 const RefPtr<WebDownloadResponseObject>& GetDownloadResponseObject() 300 { 301 return downloadResponseObject_; 302 } 303 SetDownloadResponseObject(const RefPtr<WebDownloadResponseObject> & object)304 void SetDownloadResponseObject(const RefPtr<WebDownloadResponseObject>& object) 305 { 306 downloadResponseObject_ = object; 307 } 308 GetFileChooserObject()309 const RefPtr<WebFileChooserObject>& GetFileChooserObject() 310 { 311 return fileChooserObject_; 312 } 313 SetFileChooserObject(const RefPtr<WebFileChooserObject> & object)314 void SetFileChooserObject(const RefPtr<WebFileChooserObject>& object) 315 { 316 fileChooserObject_ = object; 317 } 318 GetGeolocationObject()319 const RefPtr<WebGeolocationObject>& GetGeolocationObject() 320 { 321 return GeolocationObject_; 322 } 323 SetGeolocationObject(const RefPtr<WebGeolocationObject> & object)324 void SetGeolocationObject(const RefPtr<WebGeolocationObject>& object) 325 { 326 GeolocationObject_ = object; 327 } 328 329 private: 330 RefPtr<WebResourceRequestObject> resourceRequestObject_; 331 RefPtr<WebScrollObject> scrollObject_; 332 RefPtr<WebScaleChangeObject> scaleChangeObject_; 333 RefPtr<WebResourceErrorObject> resourceErrorObject_; 334 RefPtr<WebResourceResponseObject> resourceResponseObject_; 335 RefPtr<WebConsoleMessageObject> consoleMessageObject_; 336 RefPtr<WebCommonDialogObject> commonDialogObject_; 337 RefPtr<WebPermissionRequestObject> permissionRequestObject_; 338 RefPtr<WebHttpAuthRequestObject> httpAuthRequestObject_; 339 RefPtr<WebDownloadResponseObject> downloadResponseObject_; 340 RefPtr<WebFileChooserObject> fileChooserObject_; 341 RefPtr<WebGeolocationObject> GeolocationObject_; 342 std::unordered_map<std::string, EventObJectCallback> eventObjectMap_; 343 std::unordered_map<std::string, EventObjectWithBoolReturnCallback> eventObjectWithBoolReturnMap_; 344 }; 345 inline WebObjectEventManager::WebObjectEventManager() = default; 346 inline WebObjectEventManager::~WebObjectEventManager() = default; 347 } // namespace OHOS::Ace 348 #endif