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