Merge "atspi: use 'class' key for Dali type name" into devel/master
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / devel-api / controls / web-view / web-view.h
1 #ifndef DALI_TOOLKIT_WEB_VIEW_H
2 #define DALI_TOOLKIT_WEB_VIEW_H
3
4 /*
5  * Copyright (c) 2021 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <functional>
23 #include <memory>
24
25 // INTERNAL INCLUDES
26 #include <dali-toolkit/public-api/controls/control.h>
27 #include <dali/devel-api/adaptor-framework/web-engine-plugin.h>
28
29 namespace Dali
30 {
31 namespace Toolkit
32 {
33 class ImageView;
34 class WebBackForwardList;
35 class WebContext;
36 class WebContextMenu;
37 class WebContextMenuItem;
38 class WebCookieManager;
39 class WebFormRepostDecision;
40 class WebSettings;
41
42 namespace Internal DALI_INTERNAL
43 {
44 class WebView;
45 } // namespace DALI_INTERNAL
46
47 /**
48  * @addtogroup dali_toolkit_controls_web_view
49  * @{
50  */
51
52 /**
53  * @brief WebView is a control for displaying web content.
54  *
55  * This enables embedding web pages in the application.
56  *
57  * For working WebView, a web engine plugin for a platform should be provided.
58  *
59  */
60 class DALI_TOOLKIT_API WebView : public Control
61 {
62 public:
63   /**
64    * @brief Enumeration for the start and end property ranges for this control.
65    */
66   enum PropertyRange
67   {
68     PROPERTY_START_INDEX = Control::CONTROL_PROPERTY_END_INDEX + 1,
69     PROPERTY_END_INDEX   = PROPERTY_START_INDEX + 1000,
70   };
71
72   /**
73    * @brief Enumeration for the instance of properties belonging to the WebView class.
74    */
75   struct Property
76   {
77     enum
78     {
79       /**
80        * @brief The url to load.
81        * @details name "url", type Property::STRING.
82        */
83       URL = PROPERTY_START_INDEX,
84
85       /**
86        * @brief The user agent string.
87        * @details name "userAgent", type Property::STRING.
88        */
89       USER_AGENT,
90
91       /**
92        * @brief The current position of scroll.
93        * @details name "scrollPosition", type Property::VECTOR2.
94        */
95       SCROLL_POSITION,
96
97       /**
98        * @brief The current size of scroll.
99        * @details name "scrollSize", type Property::VECTOR2.
100        * @note The value is read-only.
101        */
102       SCROLL_SIZE,
103
104       /**
105        * @brief The current size of content.
106        * @details name "contentSize", type Property::VECTOR2.
107        * @note The value is read-only.
108        */
109       CONTENT_SIZE,
110
111       /**
112        * @brief The title of web page.
113        * @details name "title", type Property::STRING.
114        * @note The value is read-only.
115        */
116       TITLE,
117
118       /**
119        * @brief Whether video hole is enabled or not.
120        * @details name "videoHoleEnabled", type Property::BOOLEAN.
121        * @note The value is read-only.
122        */
123       VIDEO_HOLE_ENABLED,
124
125       /**
126        * @brief Whether mouse event is enabled.
127        * @details name "mouseEventsEnabled", type Property::BOOLEAN.
128        * @note Default is true.
129        */
130       MOUSE_EVENTS_ENABLED,
131
132       /**
133        * @brief Whether key event is enabled.
134        * @details name "keyEventsEnabled", type Property::BOOLEAN.
135        * @note Default is true.
136        */
137       KEY_EVENTS_ENABLED,
138
139       /**
140        * @brief The background color of web page.
141        * @details name "documentBackgroundColor", type Property::VECTOR4.
142        */
143       DOCUMENT_BACKGROUND_COLOR,
144
145       /**
146        * @brief Whether tiles can be cleared or not when hidden.
147        * @details name "tilesClearedWhenHidden", type BOOLEAN.
148        */
149       TILES_CLEARED_WHEN_HIDDEN,
150
151       /**
152        * @brief The multiplier of cover area of tile when rendering web page.
153        * @details name "tileCoverAreaMultiplier", type FLOAT.
154        */
155       TILE_COVER_AREA_MULTIPLIER,
156
157       /**
158        * @brief Whether cursor is enabled or not by client.
159        * @details name "cursorEnabledByClient", type BOOLEAN.
160        */
161       CURSOR_ENABLED_BY_CLIENT,
162
163       /**
164        * @brief The selected text of web page.
165        * @details name "selectedText", type Property::STRING.
166        * @note The value is read-only.
167        */
168       SELECTED_TEXT,
169
170       /**
171        * @brief Zoom factor of web page.
172        * @details name "pageZoomFactor", type Property::FLOAT.
173        */
174       PAGE_ZOOM_FACTOR,
175
176       /**
177        * @brief Zoom factor of text.
178        * @details name "textZoomFactor", type Property::FLOAT.
179        */
180       TEXT_ZOOM_FACTOR,
181
182       /**
183        * @brief progress percentage of loading a web page.
184        * @details name "loadProgressPercentage", type Property::FLOAT.
185        * @note The value is read-only.
186        */
187       LOAD_PROGRESS_PERCENTAGE,
188     };
189   };
190
191   /**
192    * @brief WebView callback related with screen-shot captured.
193    */
194   using WebViewScreenshotCapturedCallback = std::function<void(Dali::Toolkit::ImageView)>;
195
196   /**
197    * @brief WebView signal type related with page loading.
198    */
199   using WebViewPageLoadSignalType = Signal<void(WebView, const std::string&)>;
200
201   /**
202    * @brief WebView signal type related with page loading error.
203    */
204   using WebViewPageLoadErrorSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineLoadError>)>;
205
206   /**
207    * @brief WebView signal type related with scroll edge reached.
208    */
209   using WebViewScrollEdgeReachedSignalType = Signal<void(WebView, Dali::WebEnginePlugin::ScrollEdge)>;
210
211   /**
212    * @brief WebView signal type related with url changed.
213    */
214   using WebViewUrlChangedSignalType = Signal<void(WebView, const std::string&)>;
215
216   /**
217    * @brief WebView signal type related with form repost decision.
218    */
219   using WebViewFormRepostDecisionSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineFormRepostDecision>)>;
220
221   /**
222    * @brief WebView signal type related with frame rendered.
223    */
224   using WebViewFrameRenderedSignalType = Signal<void(WebView)>;
225
226   /**
227    * @brief WebView signal type related with http request interceptor.
228    */
229   using WebViewRequestInterceptorSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineRequestInterceptor>)>;
230
231   /**
232    * @brief WebView signal type related with console message.
233    */
234   using WebViewConsoleMessageSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineConsoleMessage>)>;
235
236   /**
237    * @brief WebView signal type related with response policy decision.
238    */
239   using WebViewResponsePolicyDecisionSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEnginePolicyDecision>)>;
240
241   /**
242    * @brief WebView signal type related with certificate changed.
243    */
244   using WebViewCertificateSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineCertificate>)>;
245
246   /**
247    * @brief WebView signal type related with http authentication.
248    */
249   using WebViewHttpAuthHandlerSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineHttpAuthHandler>)>;
250
251   /**
252    * @brief WebView signal type related with context menu customized.
253    */
254   using WebViewContextMenuCustomizedSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineContextMenu>)>;
255
256   /**
257    * @brief WebView signal type related with context menu item selected.
258    */
259   using WebViewContextMenuItemSelectedSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineContextMenuItem>)>;
260
261 public:
262   /**
263    * @brief Create an initialized WebView.
264    * @return A handle to a newly allocated Dali WebView
265    *
266    * @note WebView will not display anything
267    */
268   static WebView New();
269
270   /**
271    * @brief Create an initialized WebView.
272    *
273    * @param [in] locale The locale of Web
274    * @param [in] timezoneId The timezoneId of Web
275    */
276   static WebView New(const std::string& locale, const std::string& timezoneId);
277
278   /**
279    * @brief Create an initialized WebView.
280    *
281    * @param [in] argc The count of arguments of Applications
282    * @param [in] argv The string array of arguments of Applications
283    */
284   static WebView New(uint32_t argc, char** argv);
285
286   /**
287    * @brief Create an uninitialized WebView.
288    */
289   WebView();
290
291   /**
292    * @brief Destructor.
293    *
294    * This is non-virtual since derived Handel types must not contain data or virtual methods.
295    */
296   ~WebView();
297
298   /*
299    * @brief Copy constructor.
300    *
301    * @param[in] WebView WebView to copy. The copied WebView will point at the same implementation
302    */
303   WebView(const WebView& WebView);
304
305   /**
306    * @brief Assignment operator.
307    *
308    * @param[in] WebView The WebView to assign from
309    * @return The updated WebView
310    */
311   WebView& operator=(const WebView& WebView);
312
313   /**
314    * @brief Downcast a handle to WebView handle.
315    *
316    * If handle points to a WebView, the downcast produces valid handle.
317    * If not, the returned handle is left uninitialized.
318    *
319    * @param[in] handle Handle to an object
320    * @return Handle to a WebView or an uninitialized handle
321    */
322   static WebView DownCast(BaseHandle handle);
323
324   /**
325    * @brief Get WebSettings of WebEngine.
326    */
327   Dali::Toolkit::WebSettings* GetSettings() const;
328
329   /**
330    * @brief Get WebContext of WebEngine.
331    */
332   Dali::Toolkit::WebContext* GetContext() const;
333
334   /**
335    * @brief Get CookieManager of WebEngine.
336    */
337   Dali::Toolkit::WebCookieManager* GetCookieManager() const;
338
339   /**
340    * @brief Get WebBackForwardList of WebEngine.
341    */
342   Dali::Toolkit::WebBackForwardList* GetBackForwardList() const;
343
344   /**
345    * @brief Get Favicon of web page.
346    *
347    * @return Handle to a fav icon
348    */
349   Dali::Toolkit::ImageView& GetFavicon();
350
351   /**
352    * @brief Load a web page based on a given URL.
353    *
354    * @param [in] url The URL of the resource to load
355    */
356   void LoadUrl(const std::string& url);
357
358   /**
359    * @brief Load a given string as web contents.
360    *
361    * @param [in] htmlString The string to use as the contents of the web page
362    */
363   void LoadHtmlString(const std::string& htmlString);
364
365   /**
366    * @brief Load the specified html string as the content of the view overriding current history entry
367    *
368    * @param[in] html HTML data to load
369    * @param[in] basicUri Base URL used for relative paths to external objects
370    * @param[in] unreachableUrl URL that could not be reached
371    *
372    * @return true if successfully loaded, false otherwise
373    */
374   bool LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl);
375
376   /**
377    * @brief Request loading the given contents by MIME type into the view object
378    *
379    * @param[in] contents The content to load
380    * @param[in] contentSize The size of contents (in bytes)
381    * @param[in] mimeType The type of contents, if 0 is given "text/html" is assumed
382    * @param[in] encoding The encoding for contents, if 0 is given "UTF-8" is assumed
383    * @param[in] baseUri The base URI to use for relative resources
384    *
385    * @return true if successfully request, false otherwise
386    */
387   bool LoadContents(const std::string& contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri);
388
389   /**
390    * @brief Reload the Web.
391    */
392   void Reload();
393
394   /**
395    * @brief Reload the current page's document without cache
396    */
397   bool ReloadWithoutCache();
398
399   /**
400    * @brief Stop loading web contents on the current page.
401    */
402   void StopLoading();
403
404   /**
405    * @brief Suspend the operation associated with the view.
406    */
407   void Suspend();
408
409   /**
410    * @brief Resume the operation associated with the view object after calling Suspend().
411    */
412   void Resume();
413
414   /**
415    * @brief To suspend all url loading
416    */
417   void SuspendNetworkLoading();
418
419   /**
420    * @brief To resume new url network loading
421    */
422   void ResumeNetworkLoading();
423
424   /**
425    * @brief Add custom header
426    *
427    * @param[in] name custom header name to add the custom header
428    * @param[in] value custom header value to add the custom header
429    *
430    * @return true if succeeded, false otherwise
431    */
432   bool AddCustomHeader(const std::string& name, const std::string& value);
433
434   /**
435    * @brief Remove custom header
436    *
437    * @param[in] name custom header name to remove the custom header
438    *
439    * @return true if succeeded, false otherwise
440    */
441   bool RemoveCustomHeader(const std::string& name);
442
443   /**
444    * @brief Start the inspector server
445    *
446    * @param[in] port port number
447    *
448    * @return the port number
449    */
450   uint32_t StartInspectorServer(uint32_t port);
451
452   /**
453    * @brief Stop the inspector server
454    *
455    * @return true if succeeded, false otherwise
456    */
457   bool StopInspectorServer();
458
459   /**
460    * @brief Scroll web page of view by deltaX and deltaY.
461    * @param[in] deltaX The delta x of scroll
462    * @param[in] deltaY The delta y of scroll
463    */
464   void ScrollBy(int32_t deltaX, int32_t deltaY);
465
466   /**
467    * @brief Scroll edge of view by deltaX and deltaY.
468    *
469    * @param[in] deltaX horizontal offset to scroll
470    * @param[in] deltaY vertical offset to scroll
471    *
472    * @return true if succeeded, false otherwise
473    */
474   bool ScrollEdgeBy(int32_t deltaX, int32_t deltaY);
475
476   /**
477    * @brief Return whether forward is possible.
478    *
479    * @return True if forward is possible, false otherwise
480    */
481   bool CanGoForward();
482
483   /**
484    * @brief Go forward in the navigation history.
485    */
486   void GoForward();
487
488   /**
489    * @brief Return whether backward is possible.
490    *
491    * @return True if backward is possible, false otherwise
492    */
493   bool CanGoBack();
494
495   /**
496    * @brief Go back in the navigation history.
497    */
498   void GoBack();
499
500   /**
501    * @brief Evaluate JavaScript code represented as a string.
502    *
503    * @param[in] script The JavaScript code
504    * @param[in] resultHandler The callback function to be called by the JavaScript runtime. This carries evaluation result
505    */
506   void EvaluateJavaScript(const std::string& script, std::function<void(const std::string&)> resultHandler);
507
508   /**
509    * @brief Evaluate JavaScript code represented as a string.
510    *
511    * @param[in] script The JavaScript code
512    */
513   void EvaluateJavaScript(const std::string& script);
514
515   /**
516    * @brief Inject a JavaScript object with a message handler into the WebView.
517    *
518    * @note The injected object will appear in the JavaScript context to be loaded next.
519    *
520    * Example:
521    *
522    * 1. Native
523    *
524    *     webview.AddJavaScriptMessageHandler( "myObject", []( const std::string& message ) {
525    *         printf( "Received a message from JS: %s", message.c_str() );
526    *     });
527    *
528    *     // Start WebView by loading URL
529    *     webview.LoadUrl( url );
530    *
531    * 2. JavaScript
532    *
533    *     myObject.postMessage( "Hello World!" ); // "Received a message from JS: Hello World!"
534    *
535    *
536    * @param[in] exposedObjectName The name of exposed object
537    * @param[in] handler The callback function
538    */
539   void AddJavaScriptMessageHandler(const std::string& exposedObjectName, std::function<void(const std::string&)> handler);
540
541   /**
542    * @brief Register alert callback for javascript.
543    *
544    * @param[in] callback The callback function to be called by the JavaScript runtime.
545    */
546   void RegisterJavaScriptAlertCallback(Dali::WebEnginePlugin::JavaScriptAlertCallback callback);
547
548   /**
549    * @brief Reply for JavaScript alert.
550    */
551   void JavaScriptAlertReply();
552
553   /**
554    * @brief Register confirm callback for javascript.
555    *
556    * @param[in] callback The callback function to be called by the JavaScript runtime.
557    */
558   void RegisterJavaScriptConfirmCallback(Dali::WebEnginePlugin::JavaScriptConfirmCallback callback);
559
560   /**
561    * @brief Reply for JavaScript confirm.
562    * @param[in] confirmed True if confirmed, false otherwise
563    */
564   void JavaScriptConfirmReply(bool confirmed);
565
566   /**
567    * @brief Register prompt callback for javascript.
568    *
569    * @param[in] callback The callback function to be called by the JavaScript runtime.
570    */
571   void RegisterJavaScriptPromptCallback(Dali::WebEnginePlugin::JavaScriptPromptCallback callback);
572
573   /**
574    * @brief Reply for JavaScript prompt.
575    * @param[in] result The result from input-field of prompt popup.
576    */
577   void JavaScriptPromptReply(const std::string& result);
578
579   /**
580    * @brief Create a new hit test.
581    *
582    * @param[in] x the horizontal position to query
583    * @param[in] y the vertical position to query
584    * @param[in] mode the mode of hit test
585    *
586    * @return a new hit test object.
587    */
588   std::unique_ptr<Dali::WebEngineHitTest> CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode);
589
590   /**
591    * @brief Create a hit test asynchronously.
592    *
593    * @param[in] x the horizontal position to query
594    * @param[in] y the vertical position to query
595    * @param[in] mode the mode of hit test
596    * @param[in] callback The callback function
597    *
598    * @return true if succeeded, false otherwise.
599    */
600   bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback);
601
602   /**
603    * @brief Clear the history of Web.
604    */
605   void ClearHistory();
606
607   /**
608    * @brief Clear all tiles resources of Web.
609    */
610   void ClearAllTilesResources();
611
612   /**
613    * @brief Scale the current page, centered at the given point.
614    * @param[in] scaleFactor a new factor to be scaled.
615    * @param[in] point a center coordinate.
616    */
617   void SetScaleFactor(float scaleFactor, Dali::Vector2 point);
618
619   /**
620    * @brief Get the current scale factor of the page.
621    * @return The current scale factor.
622    */
623   float GetScaleFactor() const;
624
625   /**
626    * @brief Request to activate/deactivate the accessibility usage set by web app.
627    * @param[in] activated Activate accessibility or not.
628    */
629   void ActivateAccessibility(bool activated);
630
631   /**
632    * @brief Search and highlights the given string in the document.
633    * @param[in] text The text to find
634    * @param[in] options The options to find
635    * @param[in] maxMatchCount The maximum match count to find
636    *
637    * @return true if found & highlighted, false otherwise
638    */
639   bool HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount);
640
641   /**
642    * @brief Add dynamic certificate path.
643    * @param[in] host host that required client authentication
644    * @param[in] certPath the file path stored certificate
645    */
646   void AddDynamicCertificatePath(const std::string& host, const std::string& certPath);
647
648   /**
649    * @brief Get snapshot of the specified viewArea of page.
650    *
651    * @param[in] viewArea The rectangle of screen shot
652    * @param[in] scaleFactor The scale factor
653    *
654    * @return image view of screen shot
655    */
656   Dali::Toolkit::ImageView GetScreenshot(Dali::Rect<int32_t> viewArea, float scaleFactor);
657
658   /**
659    * @brief Request to get snapshot of the specified viewArea of page asynchronously.
660    *
661    * @param[in] viewArea The rectangle of screen shot
662    * @param[in] scaleFactor The scale factor
663    * @param[in] callback The callback for screen shot
664    *
665    * @return true if requested successfully, false otherwise
666    */
667   bool GetScreenshotAsynchronously(Dali::Rect<int32_t> viewArea, float scaleFactor, WebViewScreenshotCapturedCallback callback);
668
669   /**
670    * @brief Asynchronous request to check if there is a video playing in the given view.
671    *
672    * @param[in] callback The callback called after checking if video is playing or not
673    *
674    * @return true if requested successfully, false otherwise
675    */
676   bool CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback);
677
678   /**
679    * @brief Set callback which will be called upon geolocation permission request.
680    *
681    * @param[in] callback The callback for requesting geolocation permission
682    */
683   void RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback);
684
685   /**
686    * @brief Connect to this signal to be notified when page loading is started.
687    *
688    * @return A signal object to connect with
689    */
690   WebViewPageLoadSignalType& PageLoadStartedSignal();
691
692   /**
693    * @brief Connect to this signal to be notified when page loading is in progress.
694    *
695    * @return A signal object to connect with
696    */
697   WebViewPageLoadSignalType& PageLoadInProgressSignal();
698
699   /**
700    * @brief Connect to this signal to be notified when page loading is finished.
701    *
702    * @return A signal object to connect with
703    */
704   WebViewPageLoadSignalType& PageLoadFinishedSignal();
705
706   /**
707    * @brief Connect to this signal to be notified when an error occurs in page loading.
708    *
709    * @return A signal object to connect with
710    */
711   WebViewPageLoadErrorSignalType& PageLoadErrorSignal();
712
713   /**
714    * @brief Connect to this signal to be notified when scroll edge is reached.
715    *
716    * @return A signal object to connect with
717    */
718   WebViewScrollEdgeReachedSignalType& ScrollEdgeReachedSignal();
719
720   /**
721    * @brief Connect to this signal to be notified when url is changed.
722    *
723    * @return A signal object to connect with
724    */
725   WebViewUrlChangedSignalType& UrlChangedSignal();
726
727   /**
728    * @brief Connect to this signal to be notified when form repost decision is requested.
729    *
730    * @return A signal object to connect with.
731    */
732   WebViewFormRepostDecisionSignalType& FormRepostDecisionSignal();
733
734   /**
735    * @brief Connect to this signal to be notified when frame is rendered.
736    *
737    * @return A signal object to connect with.
738    */
739   WebViewFrameRenderedSignalType& FrameRenderedSignal();
740
741   /**
742    * @brief Connect to this signal to be notified when http request need be intercepted.
743    *
744    * @return A signal object to connect with.
745    */
746   WebViewRequestInterceptorSignalType& RequestInterceptorSignal();
747
748   /**
749    * @brief Connect to this signal to be notified when console message will be logged.
750    *
751    * @return A signal object to connect with.
752    */
753   WebViewConsoleMessageSignalType& ConsoleMessageSignal();
754
755   /**
756    * @brief Connect to this signal to be notified when response policy would be decided.
757    *
758    * @return A signal object to connect with.
759    */
760   WebViewResponsePolicyDecisionSignalType& ResponsePolicyDecisionSignal();
761
762   /**
763    * @brief Connect to this signal to be notified when certificate need be confirmed.
764    *
765    * @return A signal object to connect with.
766    */
767   WebViewCertificateSignalType& CertificateConfirmSignal();
768
769   /**
770    * @brief Connect to this signal to be notified when ssl certificate is changed.
771    *
772    * @return A signal object to connect with.
773    */
774   WebViewCertificateSignalType& SslCertificateChangedSignal();
775
776   /**
777    * @brief Connect to this signal to be notified when http authentication need be confirmed.
778    *
779    * @return A signal object to connect with.
780    */
781   WebViewHttpAuthHandlerSignalType& HttpAuthHandlerSignal();
782
783   /**
784    * @brief Connect to this signal to be notified when context menu would be customized.
785    *
786    * @return A signal object to connect with.
787    */
788   WebViewContextMenuCustomizedSignalType& ContextMenuCustomizedSignal();
789
790   /**
791    * @brief Connect to this signal to be notified when context menu item is selected.
792    *
793    * @return A signal object to connect with.
794    */
795   WebViewContextMenuItemSelectedSignalType& ContextMenuItemSelectedSignal();
796
797 public: // Not intended for application developers
798   /// @cond internal
799   /**
800    * @brief Create a handle using the Toolkit::Internal implementation.
801    *
802    * @param[in] implementation The WebView implementation
803    */
804   DALI_INTERNAL WebView(Internal::WebView& implementation);
805
806   /**
807    * @brief Allow the creation of this WebView from an Internal::CustomActor pointer.
808    *
809    * @param[in] internal A pointer to the internal CustomActor
810    */
811   explicit DALI_INTERNAL WebView(Dali::Internal::CustomActor* internal);
812   /// @endcond
813 };
814
815 /**
816  * @}
817  */
818
819 } // namespace Toolkit
820
821 } // namespace Dali
822
823 #endif // DALI_TOOLKIT_WEB_VIEW_H