• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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