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