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 activateContentId; 50 EventMarker windowExitId; 51 EventMarker overScrollId; 52 EventMarker nativeEmbedLifecycleChangeId; 53 EventMarker nativeEmbedVisibilityChangeId; 54 EventMarker nativeEmbedGestureEventId; 55 EventMarker renderProcessNotRespondingId; 56 EventMarker renderProcessRespondingId; 57 EventMarker viewportFitChangedId; 58 EventMarker adsBlockedEventId; 59 EventMarker onLoadStartedEventId; 60 EventMarker onLoadFinishedEventId; 61 }; 62 63 struct WebMethod : Method { ReloadWebMethod64 void Reload() const 65 { 66 WebClient::GetInstance().ReloadWebview(); 67 } 68 }; 69 70 class ACE_EXPORT WebDeclaration : public Declaration { 71 DECLARE_ACE_TYPE(WebDeclaration, Declaration); 72 73 public: 74 WebDeclaration() = default; 75 ~WebDeclaration() override = default; 76 WebMethod webMethod; 77 SetWebSrc(const std::string & src)78 void SetWebSrc(const std::string& src) 79 { 80 auto& attribute = MaybeResetAttribute<WebAttribute>(AttributeTag::SPECIALIZED_ATTR); 81 attribute.src = src; 82 } 83 GetWebSrc()84 const std::string& GetWebSrc() const 85 { 86 auto& attribute = static_cast<WebAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 87 return attribute.src; 88 } 89 SetWebData(const std::string & data)90 void SetWebData(const std::string& data) 91 { 92 auto& attribute = MaybeResetAttribute<WebAttribute>(AttributeTag::SPECIALIZED_ATTR); 93 attribute.data = data; 94 } 95 GetWebData()96 const std::string& GetWebData() const 97 { 98 auto& attribute = static_cast<WebAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 99 return attribute.data; 100 } 101 SetPageStartedEventId(const EventMarker & pageStartedEventId)102 void SetPageStartedEventId(const EventMarker& pageStartedEventId) 103 { 104 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 105 event.pageStartEventId = pageStartedEventId; 106 } 107 GetPageStartedEventId()108 const EventMarker& GetPageStartedEventId() const 109 { 110 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 111 return event.pageStartEventId; 112 } 113 SetPageFinishedEventId(const EventMarker & pageFinishedEventId)114 void SetPageFinishedEventId(const EventMarker& pageFinishedEventId) 115 { 116 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 117 event.pageFinishEventId = pageFinishedEventId; 118 } 119 GetPageFinishedEventId()120 const EventMarker& GetPageFinishedEventId() const 121 { 122 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 123 return event.pageFinishEventId; 124 } 125 SetOnLoadStartedEventId(const EventMarker & onLoadStartedEventId)126 void SetOnLoadStartedEventId(const EventMarker& onLoadStartedEventId) 127 { 128 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 129 event.onLoadStartedEventId = onLoadStartedEventId; 130 } 131 GetOnLoadStartedEventId()132 const EventMarker& GetOnLoadStartedEventId() const 133 { 134 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 135 return event.onLoadStartedEventId; 136 } 137 SetOnLoadFinishedEventId(const EventMarker & onLoadFinishedEventId)138 void SetOnLoadFinishedEventId(const EventMarker& onLoadFinishedEventId) 139 { 140 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 141 event.onLoadFinishedEventId = onLoadFinishedEventId; 142 } 143 GetOnLoadFinishedEventId()144 const EventMarker& GetOnLoadFinishedEventId() const 145 { 146 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 147 return event.onLoadFinishedEventId; 148 } 149 SetTitleReceiveEventId(const EventMarker & titleReceiveEventId)150 void SetTitleReceiveEventId(const EventMarker& titleReceiveEventId) 151 { 152 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 153 event.titleReceiveEventId = titleReceiveEventId; 154 } 155 GetTitleReceiveEventId()156 const EventMarker& GetTitleReceiveEventId() const 157 { 158 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 159 return event.titleReceiveEventId; 160 } 161 SetOnFullScreenExitEventId(const EventMarker & fullScreenExitEventId)162 void SetOnFullScreenExitEventId(const EventMarker& fullScreenExitEventId) 163 { 164 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 165 event.fullScreenExitEventId = fullScreenExitEventId; 166 } 167 GetOnFullScreenExitEventId()168 const EventMarker& GetOnFullScreenExitEventId() const 169 { 170 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 171 return event.fullScreenExitEventId; 172 } 173 SetGeolocationHideEventId(const EventMarker & geolocationHideEventId)174 void SetGeolocationHideEventId(const EventMarker& geolocationHideEventId) 175 { 176 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 177 event.geolocationHideEventId = geolocationHideEventId; 178 } 179 GetGeolocationHideEventId()180 const EventMarker& GetGeolocationHideEventId() const 181 { 182 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 183 return event.geolocationHideEventId; 184 } 185 SetGeolocationShowEventId(const EventMarker & geolocationShowEventId)186 void SetGeolocationShowEventId(const EventMarker& geolocationShowEventId) 187 { 188 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 189 event.geolocationShowEventId = geolocationShowEventId; 190 } 191 GetGeolocationShowEventId()192 const EventMarker& GetGeolocationShowEventId() const 193 { 194 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 195 return event.geolocationShowEventId; 196 } 197 SetDownloadStartEventId(const EventMarker & downloadStartEventId)198 void SetDownloadStartEventId(const EventMarker& downloadStartEventId) 199 { 200 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 201 event.downloadStartEventId = downloadStartEventId; 202 } 203 GetDownloadStartEventId()204 const EventMarker& GetDownloadStartEventId() const 205 { 206 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 207 return event.downloadStartEventId; 208 } 209 SetRequestFocusEventId(const EventMarker & requestFocusEventId)210 void SetRequestFocusEventId(const EventMarker& requestFocusEventId) 211 { 212 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 213 event.requestFocusEventId = requestFocusEventId; 214 } 215 GetRequestFocusEventId()216 const EventMarker& GetRequestFocusEventId() const 217 { 218 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 219 return event.requestFocusEventId; 220 } 221 SetPageErrorEventId(const EventMarker & pageErrorEventId)222 void SetPageErrorEventId(const EventMarker& pageErrorEventId) 223 { 224 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 225 event.pageErrorEventId = pageErrorEventId; 226 } 227 GetPageErrorEventId()228 const EventMarker& GetPageErrorEventId() const 229 { 230 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 231 return event.pageErrorEventId; 232 } 233 SetHttpErrorEventId(const EventMarker & httpErrorEventId)234 void SetHttpErrorEventId(const EventMarker& httpErrorEventId) 235 { 236 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 237 event.httpErrorEventId = httpErrorEventId; 238 } 239 GetHttpErrorEventId()240 const EventMarker& GetHttpErrorEventId() const 241 { 242 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 243 return event.httpErrorEventId; 244 } 245 SetMessageEventId(const EventMarker & messageEventId)246 void SetMessageEventId(const EventMarker& messageEventId) 247 { 248 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 249 event.messageEventId = messageEventId; 250 } 251 GetMessageEventId()252 const EventMarker& GetMessageEventId() const 253 { 254 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 255 return event.messageEventId; 256 } 257 SetRenderExitedId(const EventMarker & renderExitedEventId)258 void SetRenderExitedId(const EventMarker& renderExitedEventId) 259 { 260 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 261 event.renderExitedEventId = renderExitedEventId; 262 } 263 GetRenderExitedId()264 const EventMarker& GetRenderExitedId() const 265 { 266 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 267 return event.renderExitedEventId; 268 } 269 SetRefreshAccessedHistoryId(const EventMarker & refreshAccessedHistoryId)270 void SetRefreshAccessedHistoryId(const EventMarker& refreshAccessedHistoryId) 271 { 272 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 273 event.refreshAccessedHistoryId = refreshAccessedHistoryId; 274 } 275 GetRefreshAccessedHistoryId()276 const EventMarker& GetRefreshAccessedHistoryId() const 277 { 278 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 279 return event.refreshAccessedHistoryId; 280 } 281 SetResourceLoadId(const EventMarker & resourceLoadId)282 void SetResourceLoadId(const EventMarker& resourceLoadId) 283 { 284 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 285 event.resourceLoadId = resourceLoadId; 286 } 287 GetResourceLoadId()288 const EventMarker& GetResourceLoadId() const 289 { 290 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 291 return event.resourceLoadId; 292 } 293 SetScaleChangeId(const EventMarker & scaleChangeId)294 void SetScaleChangeId(const EventMarker& scaleChangeId) 295 { 296 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 297 event.scaleChangeId = scaleChangeId; 298 } 299 GetScaleChangeId()300 const EventMarker& GetScaleChangeId() const 301 { 302 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 303 return event.scaleChangeId; 304 } 305 SetScrollId(const EventMarker & scrollId)306 void SetScrollId(const EventMarker& scrollId) 307 { 308 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 309 event.scrollId = scrollId; 310 } 311 GetScrollId()312 const EventMarker& GetScrollId() const 313 { 314 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 315 return event.scrollId; 316 } 317 SetPermissionRequestEventId(const EventMarker & permissionRequestId)318 void SetPermissionRequestEventId(const EventMarker& permissionRequestId) 319 { 320 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 321 event.permissionRequestId = permissionRequestId; 322 } 323 GetPermissionRequestEventId()324 const EventMarker& GetPermissionRequestEventId() const 325 { 326 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 327 return event.permissionRequestId; 328 } 329 SetSearchResultReceiveEventId(const EventMarker & searchResultReceiveEventId)330 void SetSearchResultReceiveEventId(const EventMarker& searchResultReceiveEventId) 331 { 332 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 333 event.searchResultReceiveEventId = searchResultReceiveEventId; 334 } 335 GetSearchResultReceiveEventId()336 const EventMarker& GetSearchResultReceiveEventId() const 337 { 338 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 339 return event.searchResultReceiveEventId; 340 } 341 SetActivateContentEventId(const EventMarker & activateContentId)342 void SetActivateContentEventId(const EventMarker& activateContentId) 343 { 344 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 345 event.activateContentId = activateContentId; 346 } 347 GetActivateContentEventId()348 const EventMarker& GetActivateContentEventId() const 349 { 350 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 351 return event.activateContentId; 352 } 353 SetWindowExitEventId(const EventMarker & windowExitId)354 void SetWindowExitEventId(const EventMarker& windowExitId) 355 { 356 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 357 event.windowExitId = windowExitId; 358 } 359 GetWindowExitEventId()360 const EventMarker& GetWindowExitEventId() const 361 { 362 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 363 return event.windowExitId; 364 } 365 SetOverScrollId(const EventMarker & overScrollId)366 void SetOverScrollId(const EventMarker& overScrollId) 367 { 368 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 369 event.overScrollId = overScrollId; 370 } 371 GetOverScrollId()372 const EventMarker& GetOverScrollId() const 373 { 374 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 375 return event.overScrollId; 376 } 377 SetNativeEmbedLifecycleChangeId(const EventMarker & embedLifecycleChangeId)378 void SetNativeEmbedLifecycleChangeId(const EventMarker& embedLifecycleChangeId) 379 { 380 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 381 event.nativeEmbedLifecycleChangeId = embedLifecycleChangeId; 382 } 383 GetNativeEmbedLifecycleChangeId()384 const EventMarker& GetNativeEmbedLifecycleChangeId() const 385 { 386 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 387 return event.nativeEmbedLifecycleChangeId; 388 } 389 SetNativeEmbedVisibilityChangeId(const EventMarker & embedVisibilityChangeId)390 void SetNativeEmbedVisibilityChangeId(const EventMarker& embedVisibilityChangeId) 391 { 392 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 393 event.nativeEmbedVisibilityChangeId = embedVisibilityChangeId; 394 } 395 GetNativeEmbedVisibilityChangeId()396 const EventMarker& GetNativeEmbedVisibilityChangeId() const 397 { 398 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 399 return event.nativeEmbedVisibilityChangeId; 400 } 401 SetNativeEmbedGestureEventId(const EventMarker & embedGestureEventId)402 void SetNativeEmbedGestureEventId(const EventMarker& embedGestureEventId) 403 { 404 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 405 event.nativeEmbedGestureEventId = embedGestureEventId; 406 } 407 GetNativeEmbedGestureEventId()408 const EventMarker& GetNativeEmbedGestureEventId() const 409 { 410 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 411 return event.nativeEmbedGestureEventId; 412 } 413 SetRenderProcessNotRespondingId(const EventMarker & renderProcessNotRespondingId)414 void SetRenderProcessNotRespondingId(const EventMarker& renderProcessNotRespondingId) 415 { 416 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 417 event.renderProcessNotRespondingId = renderProcessNotRespondingId; 418 } 419 GetRenderProcessNotRespondingId()420 const EventMarker& GetRenderProcessNotRespondingId() const 421 { 422 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 423 return event.renderProcessNotRespondingId; 424 } 425 SetRenderProcessRespondingId(const EventMarker & renderProcessRespondingId)426 void SetRenderProcessRespondingId(const EventMarker& renderProcessRespondingId) 427 { 428 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 429 event.renderProcessRespondingId = renderProcessRespondingId; 430 } 431 GetRenderProcessRespondingId()432 const EventMarker& GetRenderProcessRespondingId() const 433 { 434 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 435 return event.renderProcessRespondingId; 436 } 437 SetViewportFitChangedId(const EventMarker & viewportFitChangedId)438 void SetViewportFitChangedId(const EventMarker& viewportFitChangedId) 439 { 440 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 441 event.viewportFitChangedId = viewportFitChangedId; 442 } 443 GetViewportFitChangedId()444 const EventMarker& GetViewportFitChangedId() const 445 { 446 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 447 return event.viewportFitChangedId; 448 } 449 SetAdsBlockedEventId(const EventMarker & adsBlockedEventId)450 void SetAdsBlockedEventId(const EventMarker& adsBlockedEventId) 451 { 452 auto& event = MaybeResetEvent<WebEvent>(EventTag::SPECIALIZED_EVENT); 453 event.adsBlockedEventId = adsBlockedEventId; 454 } 455 GetAdsBlockedEventId()456 const EventMarker& GetAdsBlockedEventId() const 457 { 458 auto& event = static_cast<WebEvent&>(GetEvent(EventTag::SPECIALIZED_EVENT)); 459 return event.geolocationShowEventId; 460 } 461 462 protected: 463 void InitSpecialized() override; 464 bool SetSpecializedAttr(const std::pair<std::string, std::string>& attr) override; 465 bool SetSpecializedEvent(int32_t pageId, const std::string& eventId, const std::string& event) override; 466 void CallSpecializedMethod(const std::string& method, const std::string& args) override; 467 }; 468 469 } // namespace OHOS::Ace 470 471 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_WEB_WEB_DECLARATION_H 472