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