[Tizen] Add an API for 'create,window' event.
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / web-view / web-view-impl.h
1 #ifndef DALI_TOOLKIT_INTERNAL_WEB_VIEW_H
2 #define DALI_TOOLKIT_INTERNAL_WEB_VIEW_H
3
4 /*
5  * Copyright (c) 2020 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 <memory>
23 #include <dali/devel-api/adaptor-framework/web-engine.h>
24 #include <dali/public-api/images/image-operations.h>
25 #include <dali/public-api/object/property-notification.h>
26
27 // INTERNAL INCLUDES
28 #include <dali-toolkit/devel-api/controls/web-view/web-view.h>
29 #include <dali-toolkit/devel-api/visual-factory/visual-base.h>
30 #include <dali-toolkit/public-api/controls/control-impl.h>
31 #include <dali-toolkit/public-api/controls/image-view/image-view.h>
32
33 namespace Dali
34 {
35
36 namespace Toolkit
37 {
38
39 class KeyEvent;
40 class TouchEvent;
41 class WebBackForwardList;
42 class WebContext;
43 class WebCookieManager;
44 class WebSettings;
45 class WebView;
46
47 namespace Internal
48 {
49
50 class WebView : public Control
51 {
52 protected:
53
54   WebView();
55
56   WebView( const std::string& locale, const std::string& timezoneId );
57
58   WebView( int argc, char** argv );
59
60   virtual ~WebView();
61
62 public:
63
64   /**
65    * @copydoc Dali::Toolkit::WebView::New()
66    */
67   static Toolkit::WebView New();
68
69   /**
70    * @copydoc Dali::Toolkit::WebView::New( const std::string&, const std::string& )
71    */
72   static Toolkit::WebView New( const std::string& locale, const std::string& timezoneId );
73
74   /**
75    * @brief Get settings of WebEngine.
76    */
77   Dali::Toolkit::WebSettings* GetSettings() const;
78
79   /**
80    * @brief Get context of WebEngine.
81    */
82   Dali::Toolkit::WebContext* GetContext() const;
83
84   /**
85    * @brief Get cookie manager of WebEngine.
86    */
87   Dali::Toolkit::WebCookieManager* GetCookieManager() const;
88
89   /**
90    * @brief Get WebBackForwardList of WebEngine.
91    */
92   Dali::Toolkit::WebBackForwardList* GetBackForwardList() const;
93
94   /**
95    * @copydoc Dali::Toolkit::WebView::New( int, char** )
96    */
97   static Toolkit::WebView New( int argc, char** argv );
98
99   /**
100    * @copydoc Dali::Toolkit::WebView::GetPlugin()
101    */
102   Dali::WebEnginePlugin* GetPlugin() const;
103
104   /**
105    * @brief Get favicon of web page.
106    *
107    * @return Handle to a favicon
108    */
109   Dali::Toolkit::ImageView GetFavicon() const;
110
111   /**
112    * @copydoc Dali::Toolkit::WebView::LoadUrl()
113    */
114   void LoadUrl( const std::string& url );
115
116   /**
117    * @copydoc Dali::WebEngine::LoadHTMLString()
118    */
119   void LoadHtmlString( const std::string& htmlString );
120
121   /**
122    * @copydoc Dali::Toolkit::WebView::Reload()
123    */
124   void Reload();
125
126   /**
127    * @copydoc Dali::Toolkit::WebView::StopLoading()
128    */
129   void StopLoading();
130
131   /**
132    * @copydoc Dali::Toolkit::WebView::StopLoading()
133    */
134   void Suspend();
135
136   /**
137    * @copydoc Dali::Toolkit::WebView::Resume()
138    */
139   void Resume();
140
141   /**
142    * @copydoc Dali::Toolkit::WebView::ScrollBy()
143    */
144   void ScrollBy( int deltaX, int deltaY );
145
146   /**
147    * @copydoc Dali::Toolkit::WebView::CanGoForward()
148    */
149   bool CanGoForward();
150
151   /**
152    * @copydoc Dali::Toolkit::WebView::GoForward()
153    */
154   void GoForward();
155
156   /**
157    * @copydoc Dali::Toolkit::WebView::CanGoBack()
158    */
159   bool CanGoBack();
160
161   /**
162    * @copydoc Dali::Toolkit::WebView::GoBack()
163    */
164   void GoBack();
165
166   /**
167    * @copydoc Dali::Toolkit::WebView::EvaluateJavaScript()
168    */
169   void EvaluateJavaScript( const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler );
170
171   /**
172    * @copydoc Dali::Toolkit::WebView::AddJavaScriptMessageHandler()
173    */
174   void AddJavaScriptMessageHandler( const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler );
175
176   /**
177    * @brief Clears all tiles resources of Web.
178    */
179   void ClearAllTilesResources();
180
181   /**
182    * @copydoc Dali::Toolkit::WebView::ClearHistory()
183    */
184   void ClearHistory();
185
186   /**
187    * @copydoc Dali::Toolkit::WebView::SetTtsFocus()
188    */
189   void SetTtsFocus(bool focused);
190
191   /**
192    * @copydoc Dali::Toolkit::WebView::RegisterPageLoadStartedCallback()
193    */
194   void RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
195
196   /**
197    * @copydoc Dali::Toolkit::WebView::RegisterPageLoadFinishedCallback()
198    */
199   void RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
200
201   /**
202    * @copydoc Dali::Toolkit::WebView::RegisterPageLoadErrorCallback()
203    */
204   void RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback);
205
206   /**
207    * @copydoc Dali::Toolkit::WebView::RegisterScrollEdgeReachedCallback()
208    */
209   void RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback);
210
211   /**
212    * @copydoc Dali::Toolkit::WebView::RegisterUrlChangedCallback()
213    */
214   void RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback);
215
216   /**
217    * @copydoc Dali::Toolkit::WebView::RegisterNavigationPolicyDecidedCallback()
218    */
219   void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback);
220
221   /**
222    * @copydoc Dali::Toolkit::WebView::RegisterNewWindowCreatedCallback()
223    */
224   void RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback);
225
226   /**
227    * @copydoc Dali::Toolkit::WebView::GetPlainTextAsynchronously()
228    */
229   void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback);
230
231 public: // Properties
232
233   /**
234    * @brief Called when a property of an object of this type is set.
235    *
236    * @param[in] object The object whose property is set.
237    * @param[in] index The property index.
238    * @param[in] value The new property value.
239    */
240   static void SetProperty( Dali::BaseObject* object, Dali::Property::Index index, const Dali::Property::Value& value );
241
242   /**
243    * @brief Called to retrieve a property of an object of this type.
244    *
245    * @param[in] object The object whose property is to be retrieved.
246    * @param[in] index The property index.
247    * @return The current value of the property.
248    */
249   static Dali::Property::Value GetProperty( Dali::BaseObject* object, Dali::Property::Index propertyIndex );
250
251 private: // From Control
252
253   /**
254    * @copydoc Toolkit::Control::OnInitialize()
255    */
256   void OnInitialize() override;
257
258   /**
259    * @copydoc Toolkit::Control::GetNaturalSize
260    */
261   Vector3 GetNaturalSize() override;
262
263   /**
264    * Signal occurs when the Web View has been touched.
265    * @param[in] actor The Actor Touched
266    * @param[in] touch The Touch Data.
267    * @return Whether to consume event or not.
268    */
269   bool OnTouchEvent( Actor actor, const Dali::TouchEvent& touch );
270
271   /**
272    * @copydoc Toolkit::Control::OnKeyEvent()
273    */
274   bool OnKeyEvent( const Dali::KeyEvent& event ) override;
275
276   /**
277    * @copydoc Toolkit::Control::OnKeyInputFocusGained()
278    */
279   void OnKeyInputFocusGained() override;
280
281   /**
282    * @copydoc Toolkit::Control::OnKeyInputFocusLost()
283    */
284   void OnKeyInputFocusLost() override;
285
286   /**
287    * @copydoc Toolkit::Control::OnSceneConnection()
288    */
289   void OnSceneConnection( int depth ) override;
290
291 private:
292
293   // Undefined
294   WebView( const WebView& webView );
295
296   WebView& operator=( const WebView& webView );
297
298   /**
299    * @brief Sets an absolute scroll of the given view.
300    * @param[in] x The coordinate x of scroll
301    * @param[in] y The coordinate y of scroll
302    */
303   void SetScrollPosition( int x, int y );
304
305   /**
306    * @brief Gets the current scroll position of the given view.
307    * @param[out] x The coordinate x of scroll
308    * @param[out] y The coordinate y of scroll
309    */
310   void GetScrollPosition( int& x, int& y ) const;
311
312   /**
313    * @brief Gets the possible scroll size of the given view.
314    * @param[out] width The width of scroll size
315    * @param[out] height The height of scroll size
316    */
317   void GetScrollSize( int& width, int& height ) const;
318
319   /**
320    * @brief Gets the last known content's size.
321    * @param[out] width The width of content's size
322    * @param[out] height The height of content's size
323    */
324   void GetContentSize( int& width, int& height ) const;
325
326   /**
327    * @brief Get current url.
328    * @return The string value of current url
329    */
330   std::string GetUrl() const;
331
332   /**
333    * @brief Returns the title of the Web.
334    *
335    * @return The title of web page
336    */
337   std::string GetTitle() const;
338
339   /**
340    * @brief Get user agent string.
341    * @return The string value of user agent
342    */
343   std::string GetUserAgent() const;
344
345   /**
346    * @brief Set user agent string.
347    * @param[in] userAgent The string value of user agent
348    */
349   void SetUserAgent( const std::string& userAgent );
350
351   /**
352    * @brief Updates display area of web view.
353    * @param[in] source The soource triggers Notification.
354    */
355   void UpdateDisplayArea( Dali::PropertyNotification& source );
356
357   /**
358    * @brief Enable/Disable video hole for video playing.
359    * @param[in] enabled True if video hole is enabled, false otherwise.
360    */
361   void EnableVideoHole( bool enabled );
362
363   /**
364    * @brief Enable blend mode.
365    * @param[in] blendEnabled True if turn on blend mode, false otherwise.
366    */
367   void EnableBlendMode( bool blendEnabled );
368
369 private:
370
371   Dali::Toolkit::Visual::Base                        mVisual;
372   Dali::Size                                         mWebViewSize;
373   Dali::WebEngine                                    mWebEngine;
374
375   std::unique_ptr<Dali::Toolkit::WebContext>         mWebContext;
376   std::unique_ptr<Dali::Toolkit::WebCookieManager>   mWebCookieManager;
377   std::unique_ptr<Dali::Toolkit::WebSettings>        mWebSettings;
378   std::unique_ptr<Dali::Toolkit::WebBackForwardList> mWebBackForwardList;
379
380   Dali::PropertyNotification                         mPositionUpdateNotification;
381   Dali::PropertyNotification                         mSizeUpdateNotification;
382   Dali::PropertyNotification                         mScaleUpdateNotification;
383   bool                                               mVideoHoleEnabled;
384   Dali::Rect< int >                                  mWebViewArea;
385 };
386
387 } // namespace Internal
388
389 inline Toolkit::Internal::WebView& GetImpl( Toolkit::WebView& handle )
390 {
391   DALI_ASSERT_ALWAYS( handle );
392   Dali::RefObject& impl = handle.GetImplementation();
393   return static_cast< Toolkit::Internal::WebView& >( impl );
394 }
395
396 inline const Toolkit::Internal::WebView& GetImpl( const Toolkit::WebView& handle )
397 {
398   DALI_ASSERT_ALWAYS( handle );
399   const Dali::RefObject& impl = handle.GetImplementation();
400   return static_cast< const Toolkit::Internal::WebView& >( impl );
401 }
402
403 } // namespace Toolkit
404
405 } // namespace Dali
406
407 #endif // DALI_TOOLKIT_INTERNAL_WEB_VIEW_H