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