7b7e39787c7c06a56328221c1b0c1542edb7717d
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-WebView.cpp
1 /*
2  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include <iostream>
19 #include <stdlib.h>
20
21 #include <dali-toolkit-test-suite-utils.h>
22 #include "dali-toolkit-test-utils/toolkit-timer.h"
23
24 #include <dali.h>
25 #include <dali/integration-api/events/key-event-integ.h>
26 #include <dali/integration-api/events/touch-event-integ.h>
27 #include <dali/public-api/images/pixel-data.h>
28 #include <dali-toolkit/public-api/controls/image-view/image-view.h>
29 #include <dali-toolkit/public-api/focus-manager/keyboard-focus-manager.h>
30 #include <dali-toolkit/devel-api/controls/web-view/web-back-forward-list.h>
31 #include <dali-toolkit/devel-api/controls/web-view/web-back-forward-list-item.h>
32 #include <dali-toolkit/devel-api/controls/web-view/web-context.h>
33 #include <dali-toolkit/devel-api/controls/web-view/web-cookie-manager.h>
34 #include <dali-toolkit/devel-api/controls/web-view/web-settings.h>
35 #include <dali-toolkit/devel-api/controls/web-view/web-view.h>
36
37 using namespace Dali;
38 using namespace Toolkit;
39
40 namespace
41 {
42
43 const char* const TEST_URL1( "http://www.somewhere.valid1.com" );
44 const char* const TEST_URL2( "http://www.somewhere.valid2.com" );
45
46 static int gPageLoadStartedCallbackCalled = 0;
47 static int gPageLoadInProgressCallbackCalled = 0;
48 static int gPageLoadFinishedCallbackCalled = 0;
49 static int gScrollEdgeReachedCallbackCalled = 0;
50 static int gUrlChangedCallbackCalled = 0;
51 static int gEvaluateJavaScriptCallbackCalled = 0;
52 static int gJavaScriptAlertCallbackCalled = 0;
53 static int gJavaScriptConfirmCallbackCalled = 0;
54 static int gJavaScriptPromptCallbackCalled = 0;
55 static bool gTouched = false;
56
57 struct CallbackFunctor
58 {
59   CallbackFunctor(bool* callbackFlag)
60   : mCallbackFlag( callbackFlag )
61   {
62   }
63
64   void operator()()
65   {
66     *mCallbackFlag = true;
67   }
68   bool* mCallbackFlag;
69 };
70
71 static void OnPageLoadStarted( WebView view, const std::string& url )
72 {
73   gPageLoadStartedCallbackCalled++;
74 }
75
76 static void OnPageLoadInProgress( WebView view, const std::string& url )
77 {
78   gPageLoadInProgressCallbackCalled++;
79 }
80
81 static void OnPageLoadFinished( WebView view, const std::string& url )
82 {
83   gPageLoadFinishedCallbackCalled++;
84 }
85
86 static void OnScrollEdgeReached( WebView view, Dali::WebEnginePlugin::ScrollEdge edge )
87 {
88   gScrollEdgeReachedCallbackCalled++;
89 }
90
91 static void OnUrlChanged( WebView view, const std::string& url )
92 {
93   gUrlChangedCallbackCalled++;
94 }
95
96 static void OnPageLoadError( WebView view, const std::string& url, WebView::LoadErrorCode errorCode )
97 {
98 }
99
100 static void OnEvaluateJavaScript( const std::string& result )
101 {
102   gEvaluateJavaScriptCallbackCalled++;
103 }
104
105 static bool OnJavaScriptAlert( const std::string& result )
106 {
107   gJavaScriptAlertCallbackCalled++;
108   return true;
109 }
110
111 static bool OnJavaScriptConfirm( const std::string& result )
112 {
113   gJavaScriptConfirmCallbackCalled++;
114   return true;
115 }
116
117 static bool OnJavaScriptPrompt( const std::string& meesage1, const std::string& message2 )
118 {
119   gJavaScriptPromptCallbackCalled++;
120   return true;
121 }
122
123 static bool OnTouched( Actor actor, const Dali::TouchEvent& touch )
124 {
125   gTouched = true;
126   return true;
127 }
128
129 } // namespace
130
131 void web_view_startup(void)
132 {
133   test_return_value = TET_UNDEF;
134 }
135
136 void web_view_cleanup(void)
137 {
138   test_return_value = TET_PASS;
139 }
140
141 int UtcDaliWebViewBasics(void)
142 {
143   ToolkitTestApplication application;
144
145   // Copy and Assignment Test
146   tet_infoline( "UtcDaliWebViewBasic Copy and Assignment Test" );
147   WebView view = WebView::New();
148   DALI_TEST_CHECK( view );
149
150   WebView copy( view );
151   DALI_TEST_CHECK( view == copy );
152
153   WebView assign;
154   DALI_TEST_CHECK( !assign );
155
156   assign = copy;
157   DALI_TEST_CHECK( assign == view );
158
159
160   // DownCast Test
161   tet_infoline( "UtcDaliWebViewBasic DownCast Test" );
162   BaseHandle handle(view);
163
164   WebView view2 = WebView::DownCast( handle );
165   DALI_TEST_CHECK( view );
166   DALI_TEST_CHECK( view2 );
167   DALI_TEST_CHECK( view == view2 );
168
169
170   // TypeRegistry Test
171   tet_infoline( "UtcDaliWebViewBasic TypeRegistry Test" );
172   TypeRegistry typeRegistry = TypeRegistry::Get();
173   DALI_TEST_CHECK( typeRegistry );
174
175   TypeInfo typeInfo = typeRegistry.GetTypeInfo( "WebView" );
176   DALI_TEST_CHECK( typeInfo );
177
178   BaseHandle handle2 = typeInfo.CreateInstance();
179   DALI_TEST_CHECK( handle2 );
180
181   WebView view3 = WebView::DownCast( handle2 );
182   DALI_TEST_CHECK( view3 );
183
184   END_TEST;
185 }
186
187 int UtcDaliWebViewPageNavigation(void)
188 {
189   ToolkitTestApplication application;
190
191   WebView view = WebView::New();
192   view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
193   view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
194   view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
195   view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
196   application.GetScene().Add( view );
197   application.SendNotification();
198   application.Render();
199   DALI_TEST_CHECK( view );
200
201   ConnectionTracker* testTracker = new ConnectionTracker();
202   view.PageLoadStartedSignal().Connect( &OnPageLoadStarted );
203   view.PageLoadInProgressSignal().Connect( &OnPageLoadInProgress );
204   view.PageLoadFinishedSignal().Connect( &OnPageLoadFinished );
205   view.PageLoadErrorSignal().Connect( &OnPageLoadError );
206   view.UrlChangedSignal().Connect( &OnUrlChanged );
207   bool signal1 = false;
208   bool signal2 = false;
209   bool signal3 = false;
210   bool signal4 = false;
211   bool signal5 = false;
212   view.ConnectSignal( testTracker, "pageLoadStarted", CallbackFunctor(&signal1) );
213   view.ConnectSignal( testTracker, "pageLoadInProgress", CallbackFunctor(&signal2) );
214   view.ConnectSignal( testTracker, "pageLoadFinished", CallbackFunctor(&signal3) );
215   view.ConnectSignal( testTracker, "urlChanged", CallbackFunctor(&signal4) );
216   view.ConnectSignal( testTracker, "invalidname", CallbackFunctor(&signal5) );
217   DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 0, TEST_LOCATION );
218   DALI_TEST_EQUALS( gPageLoadInProgressCallbackCalled, 0, TEST_LOCATION );
219   DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 0, TEST_LOCATION );
220   DALI_TEST_EQUALS( gUrlChangedCallbackCalled, 0, TEST_LOCATION );
221
222   view.LoadUrl( TEST_URL1 );
223   view.GetNaturalSize();
224   Test::EmitGlobalTimerSignal();
225   DALI_TEST_EQUALS( view.CanGoBack(), false, TEST_LOCATION );
226   DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 1, TEST_LOCATION );
227   DALI_TEST_EQUALS( gPageLoadInProgressCallbackCalled, 1, TEST_LOCATION );
228   DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 1, TEST_LOCATION );
229   DALI_TEST_EQUALS( gUrlChangedCallbackCalled, 1, TEST_LOCATION );
230   DALI_TEST_CHECK( signal1 & signal2 & signal3 & signal4 );
231   DALI_TEST_CHECK( !signal5 );
232
233   view.LoadUrl( TEST_URL2 );
234   view.Suspend();
235   view.SetProperty( Actor::Property::SIZE, Vector2( 400, 300 ) );
236   application.SendNotification();
237   application.Render();
238   Test::EmitGlobalTimerSignal();
239   view.Resume();
240   DALI_TEST_EQUALS( view.CanGoBack(), true, TEST_LOCATION );
241   DALI_TEST_EQUALS( view.CanGoForward(), false, TEST_LOCATION );
242   DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 2, TEST_LOCATION );
243   DALI_TEST_EQUALS( gPageLoadInProgressCallbackCalled, 2, TEST_LOCATION );
244   DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 2, TEST_LOCATION );
245   DALI_TEST_EQUALS( gUrlChangedCallbackCalled, 2, TEST_LOCATION );
246
247   view.GoBack();
248   Test::EmitGlobalTimerSignal();
249   DALI_TEST_CHECK( !view.CanGoBack() );
250   DALI_TEST_CHECK( view.CanGoForward() );
251
252   view.GoForward();
253   Test::EmitGlobalTimerSignal();
254   DALI_TEST_CHECK( view.CanGoBack() );
255   DALI_TEST_CHECK( !view.CanGoForward() );
256
257   view.Reload();
258   view.StopLoading();
259   view.ClearHistory();
260   Test::EmitGlobalTimerSignal();
261   DALI_TEST_CHECK( !view.CanGoBack() );
262   DALI_TEST_CHECK( !view.CanGoForward() );
263
264   END_TEST;
265 }
266
267 int UtcDaliWebViewTouchAndKeys(void)
268 {
269   ToolkitTestApplication application;
270
271   WebView view = WebView::New();
272   view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
273   view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
274   view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
275   view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
276
277   application.GetScene().Add( view );
278   application.SendNotification();
279   application.Render();
280
281   view.GetNaturalSize();
282   view.TouchedSignal().Connect( &OnTouched );
283
284   // Touch event
285   Dali::Integration::TouchEvent event;
286   Dali::Integration::Point pointDown, pointUp;
287
288   event = Dali::Integration::TouchEvent();
289   pointDown.SetState( PointState::DOWN );
290   pointDown.SetScreenPosition( Vector2( 10, 10 ) );
291   event.AddPoint( pointDown );
292   application.ProcessEvent( event );
293
294   event = Dali::Integration::TouchEvent();
295   pointUp.SetState( PointState::UP );
296   pointUp.SetScreenPosition( Vector2( 10, 10 ) );
297   event.AddPoint( pointUp );
298   application.ProcessEvent( event );
299
300   // Key event
301   Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor( view );
302   application.ProcessEvent( Integration::KeyEvent( "", "", "", DALI_KEY_ESCAPE, 0, 0, Integration::KeyEvent::DOWN, "", "", Device::Class::NONE, Device::Subclass::NONE ) );
303   application.SendNotification();
304
305   DALI_TEST_CHECK( gTouched );
306   DALI_TEST_CHECK( view );
307
308   END_TEST;
309 }
310
311 int UtcDaliWebViewFocusGainedAndLost(void)
312 {
313   ToolkitTestApplication application;
314
315   WebView view = WebView::New();
316   DALI_TEST_CHECK( view );
317
318   view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
319   view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
320   view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
321   view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
322
323   application.GetScene().Add( view );
324   application.SendNotification();
325   application.Render();
326
327   view.SetKeyInputFocus();
328   DALI_TEST_CHECK( view.HasKeyInputFocus() );
329
330   // reset
331   view.ClearKeyInputFocus();
332   DALI_TEST_CHECK( !view.HasKeyInputFocus() );
333
334   END_TEST;
335 }
336
337 int UtcDaliWebViewMove(void)
338 {
339   ToolkitTestApplication application;
340
341   WebView view = WebView::New();
342   DALI_TEST_CHECK( view );
343
344   view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
345   view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
346   view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
347   view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
348
349   application.GetScene().Add( view );
350   application.SendNotification();
351   application.Render();
352
353   view.SetProperty( Actor::Property::POSITION, Vector2( 100, 100 ));
354   Vector3 viewPos = view.GetProperty<Vector3>( Actor::Property::POSITION );
355   DALI_TEST_EQUALS( viewPos, Vector3( 100, 100, 0 ), TEST_LOCATION );
356
357   END_TEST;
358 }
359
360 int UtcDaliWebViewPropertyVideoHole(void)
361 {
362   ToolkitTestApplication application;
363
364   WebView view = WebView::New();
365   DALI_TEST_CHECK( view );
366
367   const bool kDefaultValue = true;
368   const bool kTestValue = false;
369
370   // Check default value
371   bool output;
372   Property::Value value = view.GetProperty( WebView::Property::VIDEO_HOLE_ENABLED );
373   DALI_TEST_CHECK( value.Get( output ) );
374   DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
375
376   // Check Set/GetProperty
377   view.SetProperty( WebView::Property::VIDEO_HOLE_ENABLED, kTestValue );
378   value = view.GetProperty( WebView::Property::VIDEO_HOLE_ENABLED );
379   DALI_TEST_CHECK( value.Get( output ) );
380   DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
381
382   END_TEST;
383 }
384
385 int UtcDaliWebViewGetWebBackForwardList(void)
386 {
387   ToolkitTestApplication application;
388
389   WebView view = WebView::New();
390   DALI_TEST_CHECK( view );
391
392   Dali::Toolkit::WebBackForwardList* bfList = view.GetBackForwardList();
393   DALI_TEST_CHECK( bfList != 0 );
394
395   END_TEST;
396 }
397
398 int UtcDaliWebViewGetWebContext(void)
399 {
400   ToolkitTestApplication application;
401
402   WebView view = WebView::New();
403   DALI_TEST_CHECK( view );
404
405   Dali::Toolkit::WebContext* context = view.GetContext();
406   DALI_TEST_CHECK( context != 0 );
407
408   END_TEST;
409 }
410
411 int UtcDaliWebViewGetWebCookieManager(void)
412 {
413   ToolkitTestApplication application;
414
415   WebView view = WebView::New();
416   DALI_TEST_CHECK( view );
417
418   Dali::Toolkit::WebCookieManager* cookieManager = view.GetCookieManager();
419   DALI_TEST_CHECK( cookieManager != 0 );
420
421   END_TEST;
422 }
423
424 int UtcDaliWebViewGetWebSettings(void)
425 {
426   ToolkitTestApplication application;
427
428   WebView view = WebView::New();
429   DALI_TEST_CHECK( view );
430
431   Dali::Toolkit::WebSettings* settings = view.GetSettings();
432   DALI_TEST_CHECK( settings != 0 );
433
434   END_TEST;
435 }
436
437 int UtcDaliWebViewProperty1(void)
438 {
439   // URL
440   ToolkitTestApplication application;
441
442   WebView view = WebView::New();
443   DALI_TEST_CHECK( view );
444
445   std::string local;
446   view.SetProperty( WebView::Property::URL, TEST_URL1 );
447   Property::Value val = view.GetProperty( WebView::Property::URL );
448   DALI_TEST_CHECK( val.Get( local ) );
449   DALI_TEST_EQUALS( local, TEST_URL1, TEST_LOCATION );
450
451   END_TEST;
452 }
453
454 int UtcDaliWebViewProperty4(void)
455 {
456   // USER_AGENT
457   ToolkitTestApplication application;
458
459   WebView view = WebView::New();
460   DALI_TEST_CHECK( view );
461
462   const std::string kDefaultValue;
463   const std::string kTestValue = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36";
464
465   // Check default value
466   std::string output;
467   Property::Value value = view.GetProperty( WebView::Property::USER_AGENT );
468   DALI_TEST_CHECK( value.Get( output ) );
469   DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
470
471   // Check Set/GetProperty
472   view.SetProperty( WebView::Property::USER_AGENT, kTestValue );
473   value = view.GetProperty( WebView::Property::USER_AGENT );
474   DALI_TEST_CHECK( value.Get( output ) );
475   DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
476
477   END_TEST;
478 }
479
480 int UtcDaliWebViewProperty9(void)
481 {
482   // SCROLL_POSITION
483   ToolkitTestApplication application;
484
485   WebView view = WebView::New();
486   DALI_TEST_CHECK( view );
487
488   // Check default value
489   Dali::Vector2 output = Dali::Vector2::ONE;
490   view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output );
491   DALI_TEST_CHECK( output.x == 0 && output.y == 0 );
492
493   // Check Set/GetProperty
494   Dali::Vector2 testValue = Dali::Vector2( 100, 100 );
495   view.SetProperty( WebView::Property::SCROLL_POSITION, testValue );
496   view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output );
497   DALI_TEST_EQUALS( output, testValue, TEST_LOCATION );
498
499   // Check default value of scroll size
500   output = Dali::Vector2::ONE;
501   view.GetProperty( WebView::Property::SCROLL_SIZE ).Get( output );
502   DALI_TEST_CHECK( output.x == 500 && output.y == 500 );
503
504   // Check default value of content size
505   output = Dali::Vector2::ONE;
506   view.GetProperty( WebView::Property::CONTENT_SIZE ).Get( output );
507   DALI_TEST_CHECK( output.x == 500 && output.y == 500 );
508
509   END_TEST;
510 }
511
512 int UtcDaliWebViewPropertyTitleFavicon(void)
513 {
514   // SCROLL_POSITION
515   ToolkitTestApplication application;
516
517   char argv[] = "--test";
518   WebView view = WebView::New( 1, (char**)&argv );
519   DALI_TEST_CHECK( view );
520
521   // reset something
522   view.ClearAllTilesResources();
523
524   // Check default value of title
525   std::string testValue("title");
526   std::string output;
527   view.GetProperty( WebView::Property::TITLE ).Get( output );
528   DALI_TEST_EQUALS( output, testValue, TEST_LOCATION );
529
530   // Check default value of favicon
531   Dali::Toolkit::ImageView* favicon = &view.GetFavicon();
532   DALI_TEST_CHECK( favicon );
533   Dali::Vector3 iconsize = favicon->GetProperty< Vector3 >( Dali::Actor::Property::SIZE );
534   DALI_TEST_CHECK( ( int )iconsize.width == 2 && ( int )iconsize.height == 2 );
535
536   END_TEST;
537 }
538
539 int UtcDaliWebViewScrollBy(void)
540 {
541   ToolkitTestApplication application;
542
543   WebView view = WebView::New();
544   DALI_TEST_CHECK( view );
545
546   // load url.
547   ConnectionTracker* testTracker = new ConnectionTracker();
548   view.ScrollEdgeReachedSignal().Connect( &OnScrollEdgeReached );
549   bool signal1 = false;
550   view.ConnectSignal( testTracker, "scrollEdgeReached", CallbackFunctor(&signal1) );
551   DALI_TEST_EQUALS( gScrollEdgeReachedCallbackCalled, 0, TEST_LOCATION );
552
553   view.LoadUrl( TEST_URL1 );
554   Test::EmitGlobalTimerSignal();
555
556   // set scroll position.
557   Dali::Vector2 output = Dali::Vector2::ONE;
558   Dali::Vector2 testValue = Dali::Vector2( 100, 100 );
559   view.SetProperty( WebView::Property::SCROLL_POSITION, testValue );
560   view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output );
561   DALI_TEST_EQUALS( output, testValue, TEST_LOCATION );
562
563   // scroll by and trigger scrollEdgeReached event.
564   view.ScrollBy( 50, 50 );
565   Test::EmitGlobalTimerSignal();
566
567   view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output );
568   DALI_TEST_CHECK( output.x == 150 && output.y == 150 );
569   DALI_TEST_EQUALS( gScrollEdgeReachedCallbackCalled, 1, TEST_LOCATION );
570   DALI_TEST_CHECK( signal1 );
571
572   END_TEST;
573 }
574
575 int UtcDaliWebViewEvaluteJavaScript(void)
576 {
577   ToolkitTestApplication application;
578
579   WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
580
581   view.LoadHtmlString( "<body>Hello World!</body>" );
582   view.EvaluateJavaScript( "jsObject.postMessage('Hello')" );
583   view.EvaluateJavaScript( "jsObject.postMessage('World')", OnEvaluateJavaScript );
584   Test::EmitGlobalTimerSignal();
585
586   DALI_TEST_EQUALS( gEvaluateJavaScriptCallbackCalled, 1, TEST_LOCATION );
587
588   END_TEST;
589 }
590
591 int UtcDaliWebViewJavaScriptAlertConfirmPrompt(void)
592 {
593   ToolkitTestApplication application;
594
595   WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
596
597   view.RegisterJavaScriptAlertCallback( &OnJavaScriptAlert );
598   view.LoadHtmlString( "<head><script type='text/javascript'>alert('this is an alert popup.');</script></head><body>Hello World!</body>" );
599   view.JavaScriptAlertReply();
600   Test::EmitGlobalTimerSignal();
601   DALI_TEST_EQUALS( gJavaScriptAlertCallbackCalled, 1, TEST_LOCATION );
602
603   view.RegisterJavaScriptConfirmCallback( &OnJavaScriptConfirm );
604   view.LoadHtmlString( "<head><script type='text/javascript'>confirm('this is a confirm popup.');</script></head><body>Hello World!</body>" );
605   view.JavaScriptConfirmReply( true );
606   Test::EmitGlobalTimerSignal();
607   DALI_TEST_EQUALS( gJavaScriptConfirmCallbackCalled, 1, TEST_LOCATION );
608
609   view.RegisterJavaScriptPromptCallback( &OnJavaScriptPrompt );
610   view.LoadHtmlString( "<head><script type='text/javascript'>prompt('this is a prompt popup.');</script></head><body>Hello World!</body>" );
611   view.JavaScriptPromptReply( "it is a prompt." );
612   Test::EmitGlobalTimerSignal();
613   DALI_TEST_EQUALS( gJavaScriptPromptCallbackCalled, 1, TEST_LOCATION );
614
615   END_TEST;
616 }
617
618 int UtcDaliWebViewMethodsForCoverage(void)
619 {
620   ToolkitTestApplication application;
621
622   WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
623
624   view.LoadHtmlString( "<body>Hello World!</body>" );
625   view.AddJavaScriptMessageHandler( "jsObject",
626     []( const std::string& arg ) {
627     }
628   );
629
630   DALI_TEST_CHECK( view );
631
632   END_TEST;
633 }
634
635 // test cases for web backforward list.
636
637 int UtcDaliWebBackForwardListCheckItem(void)
638 {
639   ToolkitTestApplication application;
640
641   WebView view = WebView::New();
642   DALI_TEST_CHECK( view );
643
644   Dali::Toolkit::WebBackForwardList* bfList = view.GetBackForwardList();
645   DALI_TEST_CHECK( bfList != 0 )
646
647   unsigned int itemCount = bfList->GetItemCount();
648   DALI_TEST_CHECK( itemCount == 1 )
649
650   Dali::Toolkit::WebBackForwardListItem* citem = bfList->GetCurrentItem();
651   DALI_TEST_CHECK( citem != 0 );
652
653   const std::string kDefaultUrl( "http://url" );
654   std::string testValue = citem->GetUrl();
655   DALI_TEST_EQUALS( testValue, kDefaultUrl, TEST_LOCATION );
656
657   const std::string kDefaultTitle( "title" );
658   testValue = citem->GetTitle();
659   DALI_TEST_EQUALS( testValue, kDefaultTitle, TEST_LOCATION );
660
661   const std::string kDefaultOriginalUrl( "http://originalurl" );
662   testValue = citem->GetOriginalUrl();
663   DALI_TEST_EQUALS( testValue, kDefaultOriginalUrl, TEST_LOCATION );
664
665   Dali::Toolkit::WebBackForwardListItem* item = bfList->GetItemAtIndex( 0 );
666   DALI_TEST_CHECK( item != 0 );
667
668   END_TEST;
669 }
670
671 // test cases for web context.
672
673 int UtcDaliWebContextGetSetCacheModel(void)
674 {
675   ToolkitTestApplication application;
676
677   WebView view = WebView::New();
678   DALI_TEST_CHECK( view );
679
680   Dali::Toolkit::WebContext* context = view.GetContext();
681   DALI_TEST_CHECK( context != 0 )
682
683   std::string kDefaultValue;
684
685   // Reset something
686   context->SetProxyUri( kDefaultValue );
687   context->SetCertificateFilePath( kDefaultValue );
688   context->DisableCache( false );
689   context->SetDefaultProxyAuth( kDefaultValue, kDefaultValue );
690   context->DeleteWebDatabase();
691   context->DeleteWebStorage();
692   context->DeleteLocalFileSystem();
693   context->ClearCache();
694
695   // Check default value
696   Dali::WebEngineContext::CacheModel value = context->GetCacheModel();
697   DALI_TEST_CHECK( value == Dali::WebEngineContext::CacheModel::DOCUMENT_VIEWER );
698
699   // Check Set/GetProperty
700   context->SetCacheModel( Dali::WebEngineContext::CacheModel::DOCUMENT_BROWSER );
701   value = context->GetCacheModel();
702   DALI_TEST_CHECK( value == Dali::WebEngineContext::CacheModel::DOCUMENT_BROWSER );
703
704   END_TEST;
705 }
706
707 // test cases for web cookie manager.
708
709 int UtcDaliWebCookieManagerGetSetCookieAcceptPolicy(void)
710 {
711   ToolkitTestApplication application;
712
713   WebView view = WebView::New();
714   DALI_TEST_CHECK( view );
715
716   Dali::Toolkit::WebCookieManager* cookieManager = view.GetCookieManager();
717   DALI_TEST_CHECK( cookieManager != 0 )
718
719   const std::string kDefaultValue;
720
721   // Reset something
722   cookieManager->SetPersistentStorage( kDefaultValue, Dali::WebEngineCookieManager::CookiePersistentStorage::SQLITE );
723   cookieManager->ClearCookies();
724
725   // Check default value
726   Dali::WebEngineCookieManager::CookieAcceptPolicy value = cookieManager->GetCookieAcceptPolicy();
727   DALI_TEST_CHECK( value == Dali::WebEngineCookieManager::CookieAcceptPolicy::NO_THIRD_PARTY );
728
729   // Check Set/GetProperty
730   cookieManager->SetCookieAcceptPolicy( Dali::WebEngineCookieManager::CookieAcceptPolicy::ALWAYS );
731   value = cookieManager->GetCookieAcceptPolicy();
732   DALI_TEST_CHECK( value == Dali::WebEngineCookieManager::CookieAcceptPolicy::ALWAYS );
733
734   END_TEST;
735 }
736
737 // test cases for web settings.
738
739 int UtcDaliWebSettingsGetSetDefaultFontSize(void)
740 {
741   ToolkitTestApplication application;
742
743   WebView view = WebView::New();
744   DALI_TEST_CHECK( view );
745
746   Dali::Toolkit::WebSettings* settings = view.GetSettings();
747   DALI_TEST_CHECK( settings != 0 )
748
749   // Reset something
750   settings->AllowMixedContents( false );
751   settings->EnableSpatialNavigation( false );
752   settings->EnableWebSecurity( false );
753   settings->EnableCacheBuilder( false );
754   settings->EnableDoNotTrack( false );
755   settings->UseScrollbarThumbFocusNotifications( false );
756   settings->AllowFileAccessFromExternalUrl( false );
757   settings->AllowScriptsOpenWindows( false );
758
759   // Check default value
760   int value = settings->GetDefaultFontSize();
761   DALI_TEST_CHECK( value == 16 );
762
763   // Check Set/GetProperty
764   settings->SetDefaultFontSize( 20 );
765   value = settings->GetDefaultFontSize();
766   DALI_TEST_CHECK( value == 20 );
767
768   END_TEST;
769 }
770
771 int UtcDaliWebSettingsCheckEnableJavaScript(void)
772 {
773   ToolkitTestApplication application;
774
775   WebView view = WebView::New();
776   DALI_TEST_CHECK( view );
777
778   Dali::Toolkit::WebSettings* settings = view.GetSettings();
779   DALI_TEST_CHECK( settings != 0 )
780
781   // Reset something
782   settings->AllowMixedContents( false );
783   settings->EnableSpatialNavigation( false );
784   settings->EnableWebSecurity( false );
785   settings->EnableCacheBuilder( false );
786   settings->EnableDoNotTrack( false );
787   settings->UseScrollbarThumbFocusNotifications( false );
788   settings->AllowFileAccessFromExternalUrl( false );
789   settings->AllowScriptsOpenWindows( false );
790
791   // Check default value is true or not
792   bool value = settings->IsJavaScriptEnabled();
793   DALI_TEST_CHECK( value );
794
795   // Check Set/GetProperty
796   settings->EnableJavaScript( false );
797   value = settings->IsJavaScriptEnabled();
798   DALI_TEST_CHECK( !value );
799
800   END_TEST;
801 }
802
803 int UtcDaliWebSettingsCheckEnableAutoFitting(void)
804 {
805   ToolkitTestApplication application;
806
807   WebView view = WebView::New();
808   DALI_TEST_CHECK( view );
809
810   Dali::Toolkit::WebSettings* settings = view.GetSettings();
811   DALI_TEST_CHECK( settings != 0 )
812
813   // Reset something
814   settings->AllowMixedContents( false );
815   settings->EnableSpatialNavigation( false );
816   settings->EnableWebSecurity( false );
817   settings->EnableCacheBuilder( false );
818   settings->EnableDoNotTrack( false );
819   settings->UseScrollbarThumbFocusNotifications( false );
820   settings->AllowFileAccessFromExternalUrl( false );
821   settings->AllowScriptsOpenWindows( false );
822
823   // Check default value is true or not
824   bool value = settings->IsAutoFittingEnabled();
825   DALI_TEST_CHECK( value );
826
827   // Check Set/GetProperty
828   settings->EnableAutoFitting( false );
829   value = settings->IsAutoFittingEnabled();
830   DALI_TEST_CHECK( !value );
831
832   END_TEST;
833 }
834
835 int UtcDaliWebSettingsCheckEnablePlugins(void)
836 {
837   ToolkitTestApplication application;
838
839   WebView view = WebView::New();
840   DALI_TEST_CHECK( view );
841
842   Dali::Toolkit::WebSettings* settings = view.GetSettings();
843   DALI_TEST_CHECK( settings != 0 )
844
845   // Reset something
846   settings->AllowMixedContents( false );
847   settings->EnableSpatialNavigation( false );
848   settings->EnableWebSecurity( false );
849   settings->EnableCacheBuilder( false );
850   settings->EnableDoNotTrack( false );
851   settings->UseScrollbarThumbFocusNotifications( false );
852   settings->AllowFileAccessFromExternalUrl( false );
853   settings->AllowScriptsOpenWindows( false );
854
855   // Check default value is true or not
856   bool value = settings->ArePluginsEnabled();
857   DALI_TEST_CHECK( value );
858
859   // Check Set/GetProperty
860   settings->EnablePlugins( false );
861   value = settings->ArePluginsEnabled();
862   DALI_TEST_CHECK( !value );
863
864   END_TEST;
865 }
866
867 int UtcDaliWebSettingsCheckEnablePrivateBrowsing(void)
868 {
869   ToolkitTestApplication application;
870
871   WebView view = WebView::New();
872   DALI_TEST_CHECK( view );
873
874   Dali::Toolkit::WebSettings* settings = view.GetSettings();
875   DALI_TEST_CHECK( settings != 0 )
876
877   // Reset something
878   settings->AllowMixedContents( false );
879   settings->EnableSpatialNavigation( false );
880   settings->EnableWebSecurity( false );
881   settings->EnableCacheBuilder( false );
882   settings->EnableDoNotTrack( false );
883   settings->UseScrollbarThumbFocusNotifications( false );
884   settings->AllowFileAccessFromExternalUrl( false );
885   settings->AllowScriptsOpenWindows( false );
886
887   // Check default value is true or not
888   bool value = settings->IsPrivateBrowsingEnabled();
889   DALI_TEST_CHECK( value );
890
891   // Check Set/GetProperty
892   settings->EnablePrivateBrowsing( false );
893   value = settings->IsPrivateBrowsingEnabled();
894   DALI_TEST_CHECK( !value );
895
896   END_TEST;
897 }
898
899 int UtcDaliWebSettingsCheckEnableLinkMagnifier(void)
900 {
901   ToolkitTestApplication application;
902
903   WebView view = WebView::New();
904   DALI_TEST_CHECK( view );
905
906   Dali::Toolkit::WebSettings* settings = view.GetSettings();
907   DALI_TEST_CHECK( settings != 0 )
908
909   // Reset something
910   settings->AllowMixedContents( false );
911   settings->EnableSpatialNavigation( false );
912   settings->EnableWebSecurity( false );
913   settings->EnableCacheBuilder( false );
914   settings->EnableDoNotTrack( false );
915   settings->UseScrollbarThumbFocusNotifications( false );
916   settings->AllowFileAccessFromExternalUrl( false );
917   settings->AllowScriptsOpenWindows( false );
918
919   // Check default value is true or not
920   bool value = settings->IsLinkMagnifierEnabled();
921   DALI_TEST_CHECK( value );
922
923   // Check Set/GetProperty
924   settings->EnableLinkMagnifier( false );
925   value = settings->IsLinkMagnifierEnabled();
926   DALI_TEST_CHECK( !value );
927
928   END_TEST;
929 }
930
931 int UtcDaliWebSettingsCheckUseKeypadWithoutUserAction(void)
932 {
933   ToolkitTestApplication application;
934
935   WebView view = WebView::New();
936   DALI_TEST_CHECK( view );
937
938   Dali::Toolkit::WebSettings* settings = view.GetSettings();
939   DALI_TEST_CHECK( settings != 0 )
940
941   // Reset something
942   settings->AllowMixedContents( false );
943   settings->EnableSpatialNavigation( false );
944   settings->EnableWebSecurity( false );
945   settings->EnableCacheBuilder( false );
946   settings->EnableDoNotTrack( false );
947   settings->UseScrollbarThumbFocusNotifications( false );
948   settings->AllowFileAccessFromExternalUrl( false );
949   settings->AllowScriptsOpenWindows( false );
950
951   // Check default value is true or not
952   bool value = settings->IsKeypadWithoutUserActionUsed();
953   DALI_TEST_CHECK( value );
954
955   // Check Set/GetProperty
956   settings->UseKeypadWithoutUserAction( false );
957   value = settings->IsKeypadWithoutUserActionUsed();
958   DALI_TEST_CHECK( !value );
959
960   END_TEST;
961 }
962
963 int UtcDaliWebSettingsCheckEnableAutofillPasswordForm(void)
964 {
965   ToolkitTestApplication application;
966
967   WebView view = WebView::New();
968   DALI_TEST_CHECK( view );
969
970   Dali::Toolkit::WebSettings* settings = view.GetSettings();
971   DALI_TEST_CHECK( settings != 0 )
972
973   // Reset something
974   settings->AllowMixedContents( false );
975   settings->EnableSpatialNavigation( false );
976   settings->EnableWebSecurity( false );
977   settings->EnableCacheBuilder( false );
978   settings->EnableDoNotTrack( false );
979   settings->UseScrollbarThumbFocusNotifications( false );
980   settings->AllowFileAccessFromExternalUrl( false );
981   settings->AllowScriptsOpenWindows( false );
982
983   // Check default value is true or not
984   bool value = settings->IsAutofillPasswordFormEnabled();
985   DALI_TEST_CHECK( value );
986   settings->EnableAutofillPasswordForm( false );
987   value = settings->IsAutofillPasswordFormEnabled();
988   DALI_TEST_CHECK( !value );
989   END_TEST;
990 }
991
992 int UtcDaliWebSettingsCheckEnableFormCandidateData(void)
993 {
994   ToolkitTestApplication application;
995
996   WebView view = WebView::New();
997   DALI_TEST_CHECK( view );
998
999   Dali::Toolkit::WebSettings* settings = view.GetSettings();
1000   DALI_TEST_CHECK( settings != 0 );
1001
1002   // Reset something
1003   settings->AllowMixedContents( false );
1004   settings->EnableSpatialNavigation( false );
1005   settings->EnableWebSecurity( false );
1006   settings->EnableCacheBuilder( false );
1007   settings->EnableDoNotTrack( false );
1008   settings->UseScrollbarThumbFocusNotifications( false );
1009   settings->AllowFileAccessFromExternalUrl( false );
1010   settings->AllowScriptsOpenWindows( false );
1011
1012   // Check default value is true or not
1013   bool value = settings->IsFormCandidateDataEnabled();
1014   DALI_TEST_CHECK( value );
1015
1016   // Check Set/GetProperty
1017   settings->EnableFormCandidateData( false );
1018   value = settings->IsFormCandidateDataEnabled();
1019   DALI_TEST_CHECK( !value );
1020
1021   END_TEST;
1022 }
1023
1024 int UtcDaliWebSettingsCheckEnableTextSelection(void)
1025 {
1026   ToolkitTestApplication application;
1027
1028   WebView view = WebView::New();
1029   DALI_TEST_CHECK( view );
1030
1031   Dali::Toolkit::WebSettings* settings = view.GetSettings();
1032   DALI_TEST_CHECK( settings != 0 );
1033
1034   // Reset something
1035   settings->AllowMixedContents( false );
1036   settings->EnableSpatialNavigation( false );
1037   settings->EnableWebSecurity( false );
1038   settings->EnableCacheBuilder( false );
1039   settings->EnableDoNotTrack( false );
1040   settings->UseScrollbarThumbFocusNotifications( false );
1041   settings->AllowFileAccessFromExternalUrl( false );
1042   settings->AllowScriptsOpenWindows( false );
1043
1044   // Check default value is true or not
1045   bool value = settings->IsTextSelectionEnabled();
1046   DALI_TEST_CHECK( value );
1047
1048   //Check Set/GetProperty
1049   settings->EnableTextSelection(false);
1050   value = settings->IsTextSelectionEnabled();
1051   DALI_TEST_CHECK( !value );
1052
1053   END_TEST;
1054 }
1055
1056 int UtcDaliWebSettingsCheckEnableTextAutosizing(void)
1057 {
1058   ToolkitTestApplication application;
1059
1060   WebView view = WebView::New();
1061   DALI_TEST_CHECK( view );
1062
1063   Dali::Toolkit::WebSettings* settings = view.GetSettings();
1064   DALI_TEST_CHECK( settings != 0 );
1065
1066   // Reset something
1067   settings->AllowMixedContents( false );
1068   settings->EnableSpatialNavigation( false );
1069   settings->EnableWebSecurity( false );
1070   settings->EnableCacheBuilder( false );
1071   settings->EnableDoNotTrack( false );
1072   settings->UseScrollbarThumbFocusNotifications( false );
1073   settings->AllowFileAccessFromExternalUrl( false );
1074   settings->AllowScriptsOpenWindows( false );
1075
1076   // Check default value is true or not
1077   bool value = settings->IsTextAutosizingEnabled();
1078   DALI_TEST_CHECK( value );
1079
1080   // Check Set/GetProperty
1081   settings->EnableTextAutosizing(false);
1082   value = settings->IsTextAutosizingEnabled();
1083   DALI_TEST_CHECK( !value );
1084
1085   END_TEST;
1086 }
1087
1088 int UtcDaliWebSettingsCheckEnableArrowScroll(void)
1089 {
1090   ToolkitTestApplication application;
1091
1092   WebView view = WebView::New();
1093   DALI_TEST_CHECK( view );
1094
1095   Dali::Toolkit::WebSettings* settings = view.GetSettings();
1096   DALI_TEST_CHECK( settings != 0 );
1097
1098   // Reset something
1099   settings->AllowMixedContents( false );
1100   settings->EnableSpatialNavigation( false );
1101   settings->EnableWebSecurity( false );
1102   settings->EnableCacheBuilder( false );
1103   settings->EnableDoNotTrack( false );
1104   settings->UseScrollbarThumbFocusNotifications( false );
1105   settings->AllowFileAccessFromExternalUrl( false );
1106   settings->AllowScriptsOpenWindows( false );
1107
1108   // Check default value is true or not
1109   bool value = settings->IsArrowScrollEnabled();
1110   DALI_TEST_CHECK( value );
1111
1112   // Check Set/GetProperty
1113   settings->EnableArrowScroll(false);
1114   value = settings->IsArrowScrollEnabled();
1115   DALI_TEST_CHECK( !value );
1116
1117   END_TEST;
1118 }
1119
1120 int UtcDaliWebSettingsCheckEnableClipboard(void)
1121 {
1122   ToolkitTestApplication application;
1123
1124   WebView view = WebView::New();
1125   DALI_TEST_CHECK( view );
1126
1127   Dali::Toolkit::WebSettings* settings = view.GetSettings();
1128   DALI_TEST_CHECK( settings != 0 );
1129
1130   // Reset something
1131   settings->AllowMixedContents( false );
1132   settings->EnableSpatialNavigation( false );
1133   settings->EnableWebSecurity( false );
1134   settings->EnableCacheBuilder( false );
1135   settings->EnableDoNotTrack( false );
1136   settings->UseScrollbarThumbFocusNotifications( false );
1137   settings->AllowFileAccessFromExternalUrl( false );
1138   settings->AllowScriptsOpenWindows( false );
1139
1140   // Check default value is true or not
1141   bool value = settings->IsClipboardEnabled();
1142   DALI_TEST_CHECK( value );
1143   settings->EnableClipboard(false);
1144   value = settings->IsClipboardEnabled();
1145   DALI_TEST_CHECK( !value );
1146   END_TEST;
1147 }
1148
1149 int UtcDaliWebSettingsCheckEnableImePanel(void)
1150 {
1151   ToolkitTestApplication application;
1152
1153   WebView view = WebView::New();
1154   DALI_TEST_CHECK( view );
1155
1156   Dali::Toolkit::WebSettings* settings = view.GetSettings();
1157   DALI_TEST_CHECK( settings != 0 );
1158
1159   // Reset something
1160   settings->AllowMixedContents( false );
1161   settings->EnableSpatialNavigation( false );
1162   settings->EnableWebSecurity( false );
1163   settings->EnableCacheBuilder( false );
1164   settings->EnableDoNotTrack( false );
1165   settings->UseScrollbarThumbFocusNotifications( false );
1166   settings->AllowFileAccessFromExternalUrl( false );
1167   settings->AllowScriptsOpenWindows( false );
1168
1169   // Check default value is true or not
1170   bool value = settings->IsImePanelEnabled();
1171   DALI_TEST_CHECK( value );
1172
1173   // Check Set/GetProperty
1174   settings->EnableImePanel(false);
1175   value = settings->IsImePanelEnabled();
1176   DALI_TEST_CHECK( !value );
1177
1178   END_TEST;
1179 }
1180
1181 int UtcDaliWebSettingsCheckAllowImagesLoadAutomatically(void)
1182 {
1183   ToolkitTestApplication application;
1184
1185   WebView view = WebView::New();
1186   DALI_TEST_CHECK( view );
1187
1188   Dali::Toolkit::WebSettings* settings = view.GetSettings();
1189   DALI_TEST_CHECK( settings != 0 )
1190
1191   // Reset something
1192   settings->AllowMixedContents( false );
1193   settings->EnableSpatialNavigation( false );
1194   settings->EnableWebSecurity( false );
1195   settings->EnableCacheBuilder( false );
1196   settings->EnableDoNotTrack( false );
1197   settings->UseScrollbarThumbFocusNotifications( false );
1198   settings->AllowFileAccessFromExternalUrl( false );
1199   settings->AllowScriptsOpenWindows( false );
1200
1201   // Check default value is true or not
1202   bool value = settings->AreImagesLoadedAutomatically();
1203   DALI_TEST_CHECK( value );
1204
1205   // Check Set/GetProperty
1206   settings->AllowImagesLoadAutomatically( false );
1207   value = settings->AreImagesLoadedAutomatically();
1208   DALI_TEST_CHECK( !value );
1209
1210   END_TEST;
1211 }
1212
1213 int UtcDaliWebSettingsGetSetDefaultTextEncodingName(void)
1214 {
1215   ToolkitTestApplication application;
1216
1217   WebView view = WebView::New();
1218   DALI_TEST_CHECK( view );
1219
1220   Dali::Toolkit::WebSettings* settings = view.GetSettings();
1221   DALI_TEST_CHECK( settings != 0 )
1222
1223   const std::string kDefaultValue;
1224   const std::string kTestValue = "UTF-8";
1225
1226   // Reset something
1227   settings->AllowMixedContents( false );
1228   settings->EnableSpatialNavigation( false );
1229   settings->EnableWebSecurity( false );
1230   settings->EnableCacheBuilder( false );
1231   settings->EnableDoNotTrack( false );
1232   settings->UseScrollbarThumbFocusNotifications( false );
1233   settings->AllowFileAccessFromExternalUrl( false );
1234   settings->AllowScriptsOpenWindows( false );
1235
1236   // Check default value
1237   std::string value = settings->GetDefaultTextEncodingName();
1238   DALI_TEST_EQUALS( value, kDefaultValue, TEST_LOCATION );
1239
1240   // Check Set/GetProperty
1241   settings->SetDefaultTextEncodingName( kTestValue );
1242   value = settings->GetDefaultTextEncodingName();
1243   DALI_TEST_EQUALS( value, kTestValue, TEST_LOCATION );
1244
1245   END_TEST;
1246 }
1247