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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_WEB_WEB_DECLARATION_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_WEB_WEB_DECLARATION_H 18 19 #include "core/components/declaration/common/declaration.h" 20 #include "core/components/declaration/web/web_client.h" 21 #include "frameworks/bridge/common/dom/dom_type.h" 22 23 namespace OHOS::Ace { 24 25 struct WebAttribute : Attribute { 26 std::string src; 27 std::string data; 28 }; 29 30 struct WebEvent : Event { 31 EventMarker pageStartEventId; 32 EventMarker pageFinishEventId; 33 EventMarker titleReceiveEventId; 34 EventMarker geolocationHideEventId; 35 EventMarker geolocationShowEventId; 36 EventMarker requestFocusEventId; 37 EventMarker pageErrorEventId; 38 EventMarker httpErrorEventId; 39 EventMarker messageEventId; 40 EventMarker downloadStartEventId; 41 EventMarker renderExitedEventId; 42 EventMarker refreshAccessedHistoryId; 43 EventMarker resourceLoadId; 44 EventMarker scaleChangeId; 45 EventMarker permissionRequestId; 46 EventMarker searchResultReceiveEventId; 47 EventMarker scrollId; 48 EventMarker fullScreenExitEventId; 49 EventMarker windowExitId; 50 EventMarker overScrollId; 51 EventMarker nativeEmbedLifecycleChangeId; 52 EventMarker nativeEmbedGestureEventId; 53 }; 54 55 struct WebMethod : Method { ReloadWebMethod56 void Reload() const 57 { 58 WebClient::GetInstance().ReloadWebview(); 59 } 60 }; 61 62 class ACE_EXPORT WebDeclaration : public Declaration { 63 DECLARE_ACE_TYPE(WebDeclaration, Declaration); 64 65 public: 66 WebDeclaration() = default; 67 ~WebDeclaration() override = default; 68 WebMethod webMethod; 69 SetWebSrc(const std::string & src)70 void SetWebSrc(const std::string& src) 71 { 72 auto& attribute = MaybeResetAttribute<WebAttribute>(AttributeTag::SPECIALIZED_ATTR); 73 attribute.src = src; 74 } 75 GetWebSrc()76 const std::string& GetWebSrc() const 77 { 78 auto& attribute = static_cast<WebAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 79 return attribute.src; 80 } 81 SetWebData(const std::string & data)82 void SetWebData(const std::string& data) 83 { 84 auto& attribute = MaybeResetAttribute<WebAttribute>(AttributeTag::SPECIALIZED_ATTR); 85 attribute.data = data; 86 } 87 GetWebData()88 const std::string& GetWebData() const 89 { 90 auto& attribute = static_cast<WebAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 91 return attribute.data; 92 } 93 SetPageStartedEventId(const EventMarker & pageStartedEventId)94 void SetPageStartedEventId(const EventMarker& pageStartedEventId) 95 { 96 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 97 event.pageStartEventId = pageStartedEventId; 98 } 99 GetPageStartedEventId()100 const EventMarker& GetPageStartedEventId() const 101 { 102 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 103 return event.pageStartEventId; 104 } 105 SetPageFinishedEventId(const EventMarker & pageFinishedEventId)106 void SetPageFinishedEventId(const EventMarker& pageFinishedEventId) 107 { 108 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 109 event.pageFinishEventId = pageFinishedEventId; 110 } 111 GetPageFinishedEventId()112 const EventMarker& GetPageFinishedEventId() const 113 { 114 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 115 return event.pageFinishEventId; 116 } 117 SetTitleReceiveEventId(const EventMarker & titleReceiveEventId)118 void SetTitleReceiveEventId(const EventMarker& titleReceiveEventId) 119 { 120 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 121 event.titleReceiveEventId = titleReceiveEventId; 122 } 123 GetTitleReceiveEventId()124 const EventMarker& GetTitleReceiveEventId() const 125 { 126 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 127 return event.titleReceiveEventId; 128 } 129 SetOnFullScreenExitEventId(const EventMarker & fullScreenExitEventId)130 void SetOnFullScreenExitEventId(const EventMarker& fullScreenExitEventId) 131 { 132 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 133 event.fullScreenExitEventId = fullScreenExitEventId; 134 } 135 GetOnFullScreenExitEventId()136 const EventMarker& GetOnFullScreenExitEventId() const 137 { 138 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 139 return event.fullScreenExitEventId; 140 } 141 SetGeolocationHideEventId(const EventMarker & geolocationHideEventId)142 void SetGeolocationHideEventId(const EventMarker& geolocationHideEventId) 143 { 144 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 145 event.geolocationHideEventId = geolocationHideEventId; 146 } 147 GetGeolocationHideEventId()148 const EventMarker& GetGeolocationHideEventId() const 149 { 150 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 151 return event.geolocationHideEventId; 152 } 153 SetGeolocationShowEventId(const EventMarker & geolocationShowEventId)154 void SetGeolocationShowEventId(const EventMarker& geolocationShowEventId) 155 { 156 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 157 event.geolocationShowEventId = geolocationShowEventId; 158 } 159 GetGeolocationShowEventId()160 const EventMarker& GetGeolocationShowEventId() const 161 { 162 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 163 return event.geolocationShowEventId; 164 } 165 SetDownloadStartEventId(const EventMarker & downloadStartEventId)166 void SetDownloadStartEventId(const EventMarker& downloadStartEventId) 167 { 168 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 169 event.downloadStartEventId = downloadStartEventId; 170 } 171 GetDownloadStartEventId()172 const EventMarker& GetDownloadStartEventId() const 173 { 174 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 175 return event.downloadStartEventId; 176 } 177 SetRequestFocusEventId(const EventMarker & requestFocusEventId)178 void SetRequestFocusEventId(const EventMarker& requestFocusEventId) 179 { 180 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 181 event.requestFocusEventId = requestFocusEventId; 182 } 183 GetRequestFocusEventId()184 const EventMarker& GetRequestFocusEventId() const 185 { 186 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 187 return event.requestFocusEventId; 188 } 189 SetPageErrorEventId(const EventMarker & pageErrorEventId)190 void SetPageErrorEventId(const EventMarker& pageErrorEventId) 191 { 192 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 193 event.pageErrorEventId = pageErrorEventId; 194 } 195 GetPageErrorEventId()196 const EventMarker& GetPageErrorEventId() const 197 { 198 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 199 return event.pageErrorEventId; 200 } 201 SetHttpErrorEventId(const EventMarker & httpErrorEventId)202 void SetHttpErrorEventId(const EventMarker& httpErrorEventId) 203 { 204 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 205 event.httpErrorEventId = httpErrorEventId; 206 } 207 GetHttpErrorEventId()208 const EventMarker& GetHttpErrorEventId() const 209 { 210 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 211 return event.httpErrorEventId; 212 } 213 SetMessageEventId(const EventMarker & messageEventId)214 void SetMessageEventId(const EventMarker& messageEventId) 215 { 216 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 217 event.messageEventId = messageEventId; 218 } 219 GetMessageEventId()220 const EventMarker& GetMessageEventId() const 221 { 222 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 223 return event.messageEventId; 224 } 225 SetRenderExitedId(const EventMarker & renderExitedEventId)226 void SetRenderExitedId(const EventMarker& renderExitedEventId) 227 { 228 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 229 event.renderExitedEventId = renderExitedEventId; 230 } 231 GetRenderExitedId()232 const EventMarker& GetRenderExitedId() const 233 { 234 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 235 return event.renderExitedEventId; 236 } 237 SetRefreshAccessedHistoryId(const EventMarker & refreshAccessedHistoryId)238 void SetRefreshAccessedHistoryId(const EventMarker& refreshAccessedHistoryId) 239 { 240 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 241 event.refreshAccessedHistoryId = refreshAccessedHistoryId; 242 } 243 GetRefreshAccessedHistoryId()244 const EventMarker& GetRefreshAccessedHistoryId() const 245 { 246 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 247 return event.refreshAccessedHistoryId; 248 } 249 SetResourceLoadId(const EventMarker & resourceLoadId)250 void SetResourceLoadId(const EventMarker& resourceLoadId) 251 { 252 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 253 event.resourceLoadId = resourceLoadId; 254 } 255 GetResourceLoadId()256 const EventMarker& GetResourceLoadId() const 257 { 258 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 259 return event.resourceLoadId; 260 } 261 SetScaleChangeId(const EventMarker & scaleChangeId)262 void SetScaleChangeId(const EventMarker& scaleChangeId) 263 { 264 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 265 event.scaleChangeId = scaleChangeId; 266 } 267 GetScaleChangeId()268 const EventMarker& GetScaleChangeId() const 269 { 270 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 271 return event.scaleChangeId; 272 } 273 SetScrollId(const EventMarker & scrollId)274 void SetScrollId(const EventMarker& scrollId) 275 { 276 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 277 event.scrollId = scrollId; 278 } 279 GetScrollId()280 const EventMarker& GetScrollId() const 281 { 282 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 283 return event.scrollId; 284 } 285 SetPermissionRequestEventId(const EventMarker & permissionRequestId)286 void SetPermissionRequestEventId(const EventMarker& permissionRequestId) 287 { 288 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 289 event.permissionRequestId = permissionRequestId; 290 } 291 GetPermissionRequestEventId()292 const EventMarker& GetPermissionRequestEventId() const 293 { 294 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 295 return event.permissionRequestId; 296 } 297 SetSearchResultReceiveEventId(const EventMarker & searchResultReceiveEventId)298 void SetSearchResultReceiveEventId(const EventMarker& searchResultReceiveEventId) 299 { 300 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 301 event.searchResultReceiveEventId = searchResultReceiveEventId; 302 } 303 GetSearchResultReceiveEventId()304 const EventMarker& GetSearchResultReceiveEventId() const 305 { 306 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 307 return event.searchResultReceiveEventId; 308 } 309 SetWindowExitEventId(const EventMarker & windowExitId)310 void SetWindowExitEventId(const EventMarker& windowExitId) 311 { 312 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 313 event.windowExitId = windowExitId; 314 } 315 GetWindowExitEventId()316 const EventMarker& GetWindowExitEventId() const 317 { 318 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 319 return event.windowExitId; 320 } 321 SetOverScrollId(const EventMarker & overScrollId)322 void SetOverScrollId(const EventMarker& overScrollId) 323 { 324 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 325 event.overScrollId = overScrollId; 326 } 327 GetOverScrollId()328 const EventMarker& GetOverScrollId() const 329 { 330 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 331 return event.overScrollId; 332 } 333 SetNativeEmbedLifecycleChangeId(const EventMarker & embedLifecycleChangeId)334 void SetNativeEmbedLifecycleChangeId(const EventMarker& embedLifecycleChangeId) 335 { 336 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 337 event.nativeEmbedLifecycleChangeId = embedLifecycleChangeId; 338 } 339 GetNativeEmbedLifecycleChangeId()340 const EventMarker& GetNativeEmbedLifecycleChangeId() const 341 { 342 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 343 return event.nativeEmbedLifecycleChangeId; 344 } SetNativeEmbedGestureEventId(const EventMarker & embedGestureEventId)345 void SetNativeEmbedGestureEventId(const EventMarker& embedGestureEventId) 346 { 347 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 348 event.nativeEmbedGestureEventId = embedGestureEventId; 349 } 350 GetNativeEmbedGestureEventId()351 const EventMarker& GetNativeEmbedGestureEventId() const 352 { 353 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 354 return event.nativeEmbedGestureEventId; 355 } 356 357 protected: 358 void InitSpecialized() override; 359 bool SetSpecializedAttr(const std::pair<std::string, std::string>& attr) override; 360 bool SetSpecializedEvent(int32_t pageId, const std::string& eventId, const std::string& event) override; 361 void CallSpecializedMethod(const std::string& method, const std::string& args) override; 362 }; 363 364 } // namespace OHOS::Ace 365 366 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_WEB_WEB_DECLARATION_H 367