4f621a69706c0261698d2266522271bb9860e01a
[platform/core/uifw/dali-adaptor.git] / dali / internal / web-engine / common / web-engine-impl.h
1 #ifndef DALI_WEB_ENGINE_IMPL_H
2 #define DALI_WEB_ENGINE_IMPL_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 <dali/public-api/object/base-object.h>
23
24 // INTERNAL INCLUDES
25 #include <dali/devel-api/adaptor-framework/web-engine-plugin.h>
26 #include <dali/devel-api/adaptor-framework/web-engine.h>
27
28 namespace Dali
29 {
30 // forward declaration
31 class WebEngineBackForwardList;
32 class WebEngineContext;
33 class WebEngineCookieManager;
34 class WebEngineSettings;
35
36 namespace Internal
37 {
38 namespace Adaptor
39 {
40 class WebEngine;
41
42 typedef IntrusivePtr<WebEngine> WebEnginePtr;
43
44 /**
45  * @brief WebEngine class is used for Web.
46  */
47 class WebEngine : public Dali::BaseObject
48 {
49 public:
50   /**
51    * @brief Create a new WebEngine handle
52    *
53    * @return WebEngine pointer
54    */
55   static WebEnginePtr New();
56
57   /**
58    * @copydoc Dali::WebEngine::Create()
59    */
60   void Create(uint32_t width, uint32_t height, const std::string& locale, const std::string& timezoneId);
61
62   /**
63    * @copydoc Dali::WebEngine::Create()
64    */
65   void Create(uint32_t width, uint32_t height, uint32_t argc, char** argv);
66
67   /**
68    * @copydoc Dali::WebEngine::Destroy()
69    */
70   void Destroy();
71
72   /**
73    * @copydoc Dali::WebEngine::GetNativeImageSource()
74    */
75   Dali::NativeImageInterfacePtr GetNativeImageSource();
76
77   /**
78    * @copydoc Dali::WebEngine::GetSettings()
79    */
80   Dali::WebEngineSettings& GetSettings() const;
81
82   /**
83    * @copydoc Dali::WebEngine::GetContext()
84    */
85   Dali::WebEngineContext& GetContext() const;
86
87   /**
88    * @copydoc Dali::WebEngine::GetCookieManager()
89    */
90   Dali::WebEngineCookieManager& GetCookieManager() const;
91
92   /**
93    * @copydoc Dali::WebEngine::GetBackForwardList()
94    */
95   Dali::WebEngineBackForwardList& GetBackForwardList() const;
96
97   /**
98    * @copydoc Dali::WebEngine::LoadUrl()
99    */
100   void LoadUrl(const std::string& url);
101
102   /**
103    * @copydoc Dali::WebEngine::GetTitle()
104    */
105   std::string GetTitle() const;
106
107   /**
108    * @copydoc Dali::WebEngine::GetFavicon()
109    */
110   Dali::PixelData GetFavicon() const;
111
112   /**
113    * @copydoc Dali::WebEngine::GetUrl()
114    */
115   std::string GetUrl() const;
116
117   /**
118    * @copydoc Dali::WebEngine::GetUserAgent()
119    */
120   std::string GetUserAgent() const;
121
122   /**
123    * @copydoc Dali::WebEngine::SetUserAgent()
124    */
125   void SetUserAgent(const std::string& userAgent);
126
127   /**
128    * @copydoc Dali::WebEngine::LoadHtmlString()
129    */
130   void LoadHtmlString(const std::string& htmlString);
131
132   /**
133    * @copydoc Dali::WebEngine::LoadHtmlStringOverrideCurrentEntry()
134    */
135   bool LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl);
136
137   /**
138    * @copydoc Dali::WebEngine::LoadContents()
139    */
140   bool LoadContents(const std::string& contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri);
141
142   /**
143    * @copydoc Dali::WebEngine::Reload()
144    */
145   void Reload();
146
147   /**
148    * @copydoc Dali::WebEngine::ReloadWithoutCache()
149    */
150   bool ReloadWithoutCache();
151
152   /**
153    * @copydoc Dali::WebEngine::StopLoading()
154    */
155   void StopLoading();
156
157   /**
158    * @copydoc Dali::WebEngine::Suspend()
159    */
160   void Suspend();
161
162   /**
163    * @copydoc Dali::WebEngine::Resume()
164    */
165   void Resume();
166
167   /**
168    * @copydoc Dali::WebEngine::SuspendNetworkLoading()
169    */
170   void SuspendNetworkLoading();
171
172   /**
173    * @copydoc Dali::WebEngine::ResumeNetworkLoading()
174    */
175   void ResumeNetworkLoading();
176
177   /**
178    * @copydoc Dali::WebEngine::AddCustomHeader()
179    */
180   bool AddCustomHeader(const std::string& name, const std::string& value);
181
182   /**
183    * @copydoc Dali::WebEngine::RemoveCustomHeader()
184    */
185   bool RemoveCustomHeader(const std::string& name);
186
187   /**
188    * @copydoc Dali::WebEngine::StartInspectorServer()
189    */
190   uint32_t StartInspectorServer(uint32_t port);
191
192   /**
193    * @copydoc Dali::WebEngine::StopInspectorServer()
194    */
195   bool StopInspectorServer();
196
197   /**
198    * @copydoc Dali::WebEngine::ScrollBy()
199    */
200   void ScrollBy(int32_t deltaX, int32_t deltaY);
201
202   /**
203    * @copydoc Dali::WebEngine::ScrollEdgeBy()
204    */
205   bool ScrollEdgeBy(int32_t deltaX, int32_t deltaY);
206
207   /**
208    * @copydoc Dali::WebEngine::SetScrollPosition()
209    */
210   void SetScrollPosition(int32_t x, int32_t y);
211
212   /**
213    * @copydoc Dali::WebEngine::GetScrollPosition()
214    */
215   Dali::Vector2 GetScrollPosition() const;
216
217   /**
218    * @copydoc Dali::WebEngine::GetScrollSize()
219    */
220   Dali::Vector2 GetScrollSize() const;
221
222   /**
223    * @copydoc Dali::WebEngine::GetContentSize()
224    */
225   Dali::Vector2 GetContentSize() const;
226
227   /**
228    * @copydoc Dali::WebEngine::RegisterJavaScriptAlertCallback()
229    */
230   void RegisterJavaScriptAlertCallback(Dali::WebEnginePlugin::JavaScriptAlertCallback callback);
231
232   /**
233    * @copydoc Dali::WebEngine::JavaScriptAlertReply()
234    */
235   void JavaScriptAlertReply();
236
237   /**
238    * @copydoc Dali::WebEngine::RegisterJavaScriptConfirmCallback()
239    */
240   void RegisterJavaScriptConfirmCallback(Dali::WebEnginePlugin::JavaScriptConfirmCallback callback);
241
242   /**
243    * @copydoc Dali::WebEngine::JavaScriptConfirmReply()
244    */
245   void JavaScriptConfirmReply(bool confirmed);
246
247   /**
248    * @copydoc Dali::WebEngine::RegisterJavaScriptPromptCallback()
249    */
250   void RegisterJavaScriptPromptCallback(Dali::WebEnginePlugin::JavaScriptPromptCallback callback);
251
252   /**
253    * @copydoc Dali::WebEngine::JavaScriptPromptReply()
254    */
255   void JavaScriptPromptReply(const std::string& result);
256
257   /**
258    * @copydoc Dali::WebEngine::CreateHitTest()
259    */
260   std::unique_ptr<Dali::WebEngineHitTest> CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode);
261
262   /**
263    * @copydoc Dali::WebEngine::CreateHitTestAsynchronously()
264    */
265   bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback);
266
267   /**
268    * @copydoc Dali::WebEngine::CanGoForward()
269    */
270   bool CanGoForward();
271
272   /**
273    * @copydoc Dali::WebEngine::GoForward()
274    */
275   void GoForward();
276
277   /**
278    * @copydoc Dali::WebEngine::CanGoBack()
279    */
280   bool CanGoBack();
281
282   /**
283    * @copydoc Dali::WebEngine::GoBack()
284    */
285   void GoBack();
286
287   /**
288    * @copydoc Dali::WebEngine::EvaluateJavaScript()
289    */
290   void EvaluateJavaScript(const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler);
291
292   /**
293    * @copydoc Dali::WebEngine::AddJavaScriptMessageHandler()
294    */
295   void AddJavaScriptMessageHandler(const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler);
296
297   /**
298    * @copydoc Dali::WebEngine::ClearAllTilesResources()
299    */
300   void ClearAllTilesResources();
301
302   /**
303    * @copydoc Dali::WebEngine::ClearHistory()
304    */
305   void ClearHistory();
306
307   /**
308    * @copydoc Dali::WebEngine::SetSize()
309    */
310   void SetSize(uint32_t width, uint32_t height);
311
312   /**
313    * @copydoc Dali::WebEngine::EnableMouseEvents()
314    */
315   void EnableMouseEvents(bool enabled);
316
317   /**
318    * @copydoc Dali::WebEngine::EnableKeyEvents()
319    */
320   void EnableKeyEvents(bool enabled);
321
322   /**
323    * @copydoc Dali::WebEngine::SetDocumentBackgroundColor()
324    */
325   void SetDocumentBackgroundColor(Dali::Vector4 color);
326
327   /**
328    * @copydoc Dali::WebEngine::ClearTilesWhenHidden()
329    */
330   void ClearTilesWhenHidden(bool cleared);
331
332   /**
333    * @copydoc Dali::WebEngine::SetTileCoverAreaMultiplier()
334    */
335   void SetTileCoverAreaMultiplier(float multiplier);
336
337   /**
338    * @copydoc Dali::WebEngine::EnableCursorByClient()
339    */
340   void EnableCursorByClient(bool enabled);
341
342   /**
343    * @copydoc Dali::WebEngine::GetSelectedText()
344    */
345   std::string GetSelectedText() const;
346
347   /**
348    * @copydoc Dali::WebEngine::SendTouchEvent()
349    */
350   bool SendTouchEvent(const Dali::TouchEvent& touch);
351
352   /**
353    * @copydoc Dali::WebEngine::SendKeyEvent()
354    */
355   bool SendKeyEvent(const Dali::KeyEvent& event);
356
357   /**
358    * @copydoc Dali::WebEngine::SetFocus()
359    */
360   void SetFocus(bool focused);
361
362   /**
363    * @copydoc Dali::WebEngine::SetPageZoomFactor()
364    */
365   void SetPageZoomFactor(float zoomFactor);
366
367   /**
368    * @copydoc Dali::WebEngine::GetPageZoomFactor()
369    */
370   float GetPageZoomFactor() const;
371
372   /**
373    * @copydoc Dali::WebEngine::SetTextZoomFactor()
374    */
375   void SetTextZoomFactor(float zoomFactor);
376
377   /**
378    * @copydoc Dali::WebEngine::GetTextZoomFactor()
379    */
380   float GetTextZoomFactor() const;
381
382   /**
383    * @copydoc Dali::WebEngine::GetLoadProgressPercentage()
384    */
385   float GetLoadProgressPercentage() const;
386
387   /**
388    * @copydoc Dali::WebEngine::SetScaleFactor()
389    */
390   void SetScaleFactor(float scaleFactor, Dali::Vector2 point);
391
392   /**
393    * @copydoc Dali::WebEngine::GetScaleFactor()
394    */
395   float GetScaleFactor() const;
396
397   /**
398    * @copydoc Dali::WebEngine::ActivateAccessibility()
399    */
400   void ActivateAccessibility(bool activated);
401
402   /**
403    * @copydoc Dali::WebEngine::SetVisibility()
404    */
405   bool SetVisibility(bool visible);
406
407   /**
408    * @copydoc Dali::WebEngine::HighlightText()
409    */
410   bool HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount);
411
412   /**
413    * @copydoc Dali::WebEngine::AddDynamicCertificatePath()
414    */
415   void AddDynamicCertificatePath(const std::string& host, const std::string& certPath);
416
417   /**
418    * @copydoc Dali::WebEngine::GetScreenshot()
419    */
420   Dali::PixelData GetScreenshot(Dali::Rect<int32_t> viewArea, float scaleFactor);
421
422   /**
423    * @copydoc Dali::WebEngine::GetScreenshotAsync()
424    */
425   bool GetScreenshotAsynchronously(Dali::Rect<int32_t> viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback);
426
427   /**
428    * @copydoc Dali::WebEngine::IsVideoPlaying()
429    */
430   bool CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback);
431
432   /**
433    * @copydoc Dali::WebEngine::RegisterGeolocationPermissionCallback()
434    */
435   void RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback);
436
437   /**
438    * @copydoc Dali::WebEngine::UpdateDisplayArea()
439    */
440   void UpdateDisplayArea(Dali::Rect<int32_t> displayArea);
441
442   /**
443    * @copydoc Dali::WebEngine::EnableVideoHole()
444    */
445   void EnableVideoHole(bool enabled);
446
447   /**
448    * @copydoc Dali::WebEngine::SendHoverEvent()
449    */
450   bool SendHoverEvent(const Dali::HoverEvent& event);
451
452   /**
453    * @copydoc Dali::WebEngine::SendWheelEvent()
454    */
455   bool SendWheelEvent(const Dali::WheelEvent& event);
456
457   /**
458    * @copydoc Dali::WebEngine::FrameRenderedSignal()
459    */
460   Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& FrameRenderedSignal();
461
462   /**
463    * @copydoc Dali::WebEngine::RegisterPageLoadStartedCallback()
464    */
465   void RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
466
467   /**
468    * @copydoc Dali::WebEngine::RegisterPageLoadInProgressCallback()
469    */
470   void RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
471
472   /**
473    * @copydoc Dali::WebEngine::RegisterPageLoadFinishedCallback()
474    */
475   void RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
476
477   /**
478    * @copydoc Dali::WebEngine::RegisterPageLoadErrorCallback()
479    */
480   void RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback);
481
482   /**
483    * @copydoc Dali::WebEngine::RegisterScrollEdgeReachedCallback()
484    */
485   void RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback);
486
487   /**
488    * @copydoc Dali::WebEngine::RegisterUrlChangedCallback()
489    */
490   void RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback);
491
492   /**
493    * @copydoc Dali::WebEngine::RegisterFormRepostDecidedCallback()
494    */
495   void RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback);
496
497   /**
498    * @copydoc Dali::WebEngine::RegisterRequestInterceptorCallback()
499    */
500   void RegisterRequestInterceptorCallback(Dali::WebEnginePlugin::WebEngineRequestInterceptorCallback callback);
501
502   /**
503    @copydoc Dali::WebEngine::RegisterConsoleMessageReceivedCallback()
504    */
505   void RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback);
506
507   /**
508    @copydoc Dali::WebEngine::RegisterResponsePolicyDecidedCallback()
509    */
510   void RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback);
511
512   /**
513    * @copydoc Dali::WebEngine::RegisterCertificateConfirmedCallback()
514    */
515   void RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback);
516
517   /**
518    * @copydoc Dali::WebEngine::RegisterSslCertificateChangedCallback()
519    */
520   void RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback);
521
522   /**
523    * @copydoc Dali::WebEngine::RegisterHttpAuthHandlerCallback()
524    */
525   void RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback);
526
527   /**
528    * @copydoc Dali::WebEngine::RegisterContextMenuShownCallback()
529    */
530   void RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback);
531
532   /**
533    * @copydoc Dali::WebEngine::RegisterContextMenuHiddenCallback()
534    */
535   void RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback);
536
537 private:
538   /**
539    * @brief Constructor.
540    */
541   WebEngine();
542
543   /**
544    * @brief Destructor.
545    */
546   virtual ~WebEngine();
547
548   // Undefined copy constructor
549   WebEngine(const WebEngine& WebEngine);
550
551   // Undefined assignment operator
552   WebEngine& operator=(const WebEngine& WebEngine);
553
554   /**
555    * @brief Initialize member data.
556    *
557    * @return Whether the initialization succeed or not.
558    */
559   bool Initialize();
560
561   /**
562    * @brief Initialize library handle by loading web engine plugin.
563    *
564    * @return Whether the initialization succeed or not.
565    */
566   bool InitializePluginHandle();
567
568 private:
569   typedef Dali::WebEnginePlugin* (*CreateWebEngineFunction)();
570   typedef void (*DestroyWebEngineFunction)(Dali::WebEnginePlugin* plugin);
571
572   Dali::WebEnginePlugin*   mPlugin;              ///< WebEnginePlugin instance
573   void*                    mHandle;              ///< Handle for the loaded library
574   CreateWebEngineFunction  mCreateWebEnginePtr;  ///< Function to create plugin instance
575   DestroyWebEngineFunction mDestroyWebEnginePtr; ///< Function to destroy plugin instance
576 };
577
578 } // namespace Adaptor
579 } // namespace Internal
580
581 inline static Internal::Adaptor::WebEngine& GetImplementation(Dali::WebEngine& webEngine)
582 {
583   DALI_ASSERT_ALWAYS(webEngine && "WebEngine handle is empty.");
584
585   BaseObject& handle = webEngine.GetBaseObject();
586
587   return static_cast<Internal::Adaptor::WebEngine&>(handle);
588 }
589
590 inline static const Internal::Adaptor::WebEngine& GetImplementation(const Dali::WebEngine& webEngine)
591 {
592   DALI_ASSERT_ALWAYS(webEngine && "WebEngine handle is empty.");
593
594   const BaseObject& handle = webEngine.GetBaseObject();
595
596   return static_cast<const Internal::Adaptor::WebEngine&>(handle);
597 }
598
599 } // namespace Dali
600
601 #endif