2 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <dali-toolkit-test-suite-utils.h>
22 #include "dali-toolkit-test-utils/toolkit-timer.h"
25 #include <dali/integration-api/events/key-event-integ.h>
26 #include <dali/integration-api/events/touch-event-integ.h>
27 #include <dali-toolkit/public-api/focus-manager/keyboard-focus-manager.h>
28 #include <dali-toolkit/devel-api/controls/web-view/web-back-forward-list.h>
29 #include <dali-toolkit/devel-api/controls/web-view/web-back-forward-list-item.h>
30 #include <dali-toolkit/devel-api/controls/web-view/web-context.h>
31 #include <dali-toolkit/devel-api/controls/web-view/web-cookie-manager.h>
32 #include <dali-toolkit/devel-api/controls/web-view/web-settings.h>
33 #include <dali-toolkit/devel-api/controls/web-view/web-view.h>
37 using namespace Toolkit;
42 const char* const TEST_URL1( "http://www.somewhere.valid1.com" );
43 const char* const TEST_URL2( "http://www.somewhere.valid2.com" );
45 static int gPageLoadStartedCallbackCalled = 0;
46 static int gPageLoadFinishedCallbackCalled = 0;
47 static int gScrollEdgeReachedCallbackCalled = 0;
48 static int gEvaluateJavaScriptCallbackCalled = 0;
49 static bool gTouched = false;
51 struct CallbackFunctor
53 CallbackFunctor(bool* callbackFlag)
54 : mCallbackFlag( callbackFlag )
60 *mCallbackFlag = true;
65 static void OnPageLoadStarted( WebView view, const std::string& url )
67 gPageLoadStartedCallbackCalled++;
70 static void OnPageLoadFinished( WebView view, const std::string& url )
72 gPageLoadFinishedCallbackCalled++;
75 static void OnScrollEdgeReached( WebView view, Dali::WebEnginePlugin::ScrollEdge edge )
77 gScrollEdgeReachedCallbackCalled++;
80 static void OnPageLoadError( WebView view, const std::string& url, WebView::LoadErrorCode errorCode )
84 static void OnEvaluateJavaScript( const std::string& result )
86 gEvaluateJavaScriptCallbackCalled++;
89 static bool OnTouched( Actor actor, const Dali::TouchEvent& touch )
97 void web_view_startup(void)
99 test_return_value = TET_UNDEF;
102 void web_view_cleanup(void)
104 test_return_value = TET_PASS;
107 int UtcDaliWebViewBasics(void)
109 ToolkitTestApplication application;
111 // Copy and Assignment Test
112 tet_infoline( "UtcDaliWebViewBasic Copy and Assignment Test" );
113 WebView view = WebView::New();
114 DALI_TEST_CHECK( view );
116 WebView copy( view );
117 DALI_TEST_CHECK( view == copy );
120 DALI_TEST_CHECK( !assign );
123 DALI_TEST_CHECK( assign == view );
127 tet_infoline( "UtcDaliWebViewBasic DownCast Test" );
128 BaseHandle handle(view);
130 WebView view2 = WebView::DownCast( handle );
131 DALI_TEST_CHECK( view );
132 DALI_TEST_CHECK( view2 );
133 DALI_TEST_CHECK( view == view2 );
137 tet_infoline( "UtcDaliWebViewBasic TypeRegistry Test" );
138 TypeRegistry typeRegistry = TypeRegistry::Get();
139 DALI_TEST_CHECK( typeRegistry );
141 TypeInfo typeInfo = typeRegistry.GetTypeInfo( "WebView" );
142 DALI_TEST_CHECK( typeInfo );
144 BaseHandle handle2 = typeInfo.CreateInstance();
145 DALI_TEST_CHECK( handle2 );
147 WebView view3 = WebView::DownCast( handle2 );
148 DALI_TEST_CHECK( view3 );
153 int UtcDaliWebViewPageNavigation(void)
155 ToolkitTestApplication application;
157 WebView view = WebView::New();
158 view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
159 view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
160 view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
161 view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
162 application.GetScene().Add( view );
163 application.SendNotification();
164 application.Render();
165 DALI_TEST_CHECK( view );
167 ConnectionTracker* testTracker = new ConnectionTracker();
168 view.PageLoadStartedSignal().Connect( &OnPageLoadStarted );
169 view.PageLoadFinishedSignal().Connect( &OnPageLoadFinished );
170 view.PageLoadErrorSignal().Connect( &OnPageLoadError );
171 bool signal1 = false;
172 bool signal2 = false;
173 bool signal3 = false;
174 view.ConnectSignal( testTracker, "pageLoadStarted", CallbackFunctor(&signal1) );
175 view.ConnectSignal( testTracker, "pageLoadFinished", CallbackFunctor(&signal2) );
176 view.ConnectSignal( testTracker, "invalidname", CallbackFunctor(&signal3) );
177 DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 0, TEST_LOCATION );
178 DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 0, TEST_LOCATION );
181 view.LoadUrl( TEST_URL1 );
182 view.GetNaturalSize();
183 Test::EmitGlobalTimerSignal();
184 DALI_TEST_EQUALS( view.CanGoBack(), false, TEST_LOCATION );
185 DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 1, TEST_LOCATION );
186 DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 1, TEST_LOCATION );
187 DALI_TEST_CHECK( signal1 & signal2 );
188 DALI_TEST_CHECK( !signal3 );
190 view.LoadUrl( TEST_URL2 );
192 view.SetProperty( Actor::Property::SIZE, Vector2( 400, 300 ) );
193 application.SendNotification();
194 application.Render();
195 Test::EmitGlobalTimerSignal();
197 DALI_TEST_EQUALS( view.CanGoBack(), true, TEST_LOCATION );
198 DALI_TEST_EQUALS( view.CanGoForward(), false, TEST_LOCATION );
199 DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 2, TEST_LOCATION );
200 DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 2, TEST_LOCATION );
203 Test::EmitGlobalTimerSignal();
204 DALI_TEST_CHECK( !view.CanGoBack() );
205 DALI_TEST_CHECK( view.CanGoForward() );
208 Test::EmitGlobalTimerSignal();
209 DALI_TEST_CHECK( view.CanGoBack() );
210 DALI_TEST_CHECK( !view.CanGoForward() );
215 Test::EmitGlobalTimerSignal();
216 DALI_TEST_CHECK( !view.CanGoBack() );
217 DALI_TEST_CHECK( !view.CanGoForward() );
222 int UtcDaliWebViewTouchAndKeys(void)
224 ToolkitTestApplication application;
226 WebView view = WebView::New();
227 view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
228 view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
229 view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
230 view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
232 application.GetScene().Add( view );
233 application.SendNotification();
234 application.Render();
236 view.GetNaturalSize();
237 view.TouchedSignal().Connect( &OnTouched );
240 Dali::Integration::TouchEvent event;
241 Dali::Integration::Point pointDown, pointUp;
243 event = Dali::Integration::TouchEvent();
244 pointDown.SetState( PointState::DOWN );
245 pointDown.SetScreenPosition( Vector2( 10, 10 ) );
246 event.AddPoint( pointDown );
247 application.ProcessEvent( event );
249 event = Dali::Integration::TouchEvent();
250 pointUp.SetState( PointState::UP );
251 pointUp.SetScreenPosition( Vector2( 10, 10 ) );
252 event.AddPoint( pointUp );
253 application.ProcessEvent( event );
256 Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor( view );
257 application.ProcessEvent( Integration::KeyEvent( "", "", "", DALI_KEY_ESCAPE, 0, 0, Integration::KeyEvent::DOWN, "", "", Device::Class::NONE, Device::Subclass::NONE ) );
258 application.SendNotification();
260 DALI_TEST_CHECK( gTouched );
261 DALI_TEST_CHECK( view );
266 int UtcDaliWebViewFocusGainedAndLost(void)
268 ToolkitTestApplication application;
270 WebView view = WebView::New();
271 DALI_TEST_CHECK( view );
273 view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
274 view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
275 view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
276 view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
278 application.GetScene().Add( view );
279 application.SendNotification();
280 application.Render();
282 view.SetKeyInputFocus();
283 DALI_TEST_CHECK( view.HasKeyInputFocus() );
286 view.ClearKeyInputFocus();
287 DALI_TEST_CHECK( !view.HasKeyInputFocus() );
292 int UtcDaliWebViewGetWebBackForwardList(void)
294 ToolkitTestApplication application;
296 WebView view = WebView::New();
297 DALI_TEST_CHECK( view );
299 Dali::Toolkit::WebBackForwardList* bfList = view.GetBackForwardList();
300 DALI_TEST_CHECK( bfList != 0 );
305 int UtcDaliWebViewGetWebContext(void)
307 ToolkitTestApplication application;
309 WebView view = WebView::New();
310 DALI_TEST_CHECK( view );
312 Dali::Toolkit::WebContext* context = view.GetContext();
313 DALI_TEST_CHECK( context != 0 );
318 int UtcDaliWebViewGetWebCookieManager(void)
320 ToolkitTestApplication application;
322 WebView view = WebView::New();
323 DALI_TEST_CHECK( view );
325 Dali::Toolkit::WebCookieManager* cookieManager = view.GetCookieManager();
326 DALI_TEST_CHECK( cookieManager != 0 );
331 int UtcDaliWebViewGetWebSettings(void)
333 ToolkitTestApplication application;
335 WebView view = WebView::New();
336 DALI_TEST_CHECK( view );
338 Dali::Toolkit::WebSettings* settings = view.GetSettings();
339 DALI_TEST_CHECK( settings != 0 );
344 int UtcDaliWebViewProperty1(void)
347 ToolkitTestApplication application;
349 WebView view = WebView::New();
350 DALI_TEST_CHECK( view );
353 view.SetProperty( WebView::Property::URL, TEST_URL1 );
354 Property::Value val = view.GetProperty( WebView::Property::URL );
355 DALI_TEST_CHECK( val.Get( local ) );
356 DALI_TEST_EQUALS( local, TEST_URL1, TEST_LOCATION );
361 int UtcDaliWebViewProperty4(void)
364 ToolkitTestApplication application;
366 WebView view = WebView::New();
367 DALI_TEST_CHECK( view );
369 const std::string kDefaultValue;
370 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";
372 // Check default value
374 Property::Value value = view.GetProperty( WebView::Property::USER_AGENT );
375 DALI_TEST_CHECK( value.Get( output ) );
376 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
378 // Check Set/GetProperty
379 view.SetProperty( WebView::Property::USER_AGENT, kTestValue );
380 value = view.GetProperty( WebView::Property::USER_AGENT );
381 DALI_TEST_CHECK( value.Get( output ) );
382 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
387 int UtcDaliWebViewProperty9(void)
390 ToolkitTestApplication application;
392 WebView view = WebView::New();
393 DALI_TEST_CHECK( view );
395 // Check default value
396 Dali::Vector2 output = Dali::Vector2::ONE;
397 view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output );
398 DALI_TEST_CHECK( output.x == 0 && output.y == 0 );
400 // Check Set/GetProperty
401 Dali::Vector2 testValue = Dali::Vector2( 100, 100 );
402 view.SetProperty( WebView::Property::SCROLL_POSITION, testValue );
403 view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output );
404 DALI_TEST_EQUALS( output, testValue, TEST_LOCATION );
406 // Check default value of scroll size
407 output = Dali::Vector2::ONE;
408 view.GetProperty( WebView::Property::SCROLL_SIZE ).Get( output );
409 DALI_TEST_CHECK( output.x == 500 && output.y == 500 );
411 // Check default value of content size
412 output = Dali::Vector2::ONE;
413 view.GetProperty( WebView::Property::CONTENT_SIZE ).Get( output );
414 DALI_TEST_CHECK( output.x == 500 && output.y == 500 );
419 int UtcDaliWebViewScrollBy(void)
421 ToolkitTestApplication application;
423 WebView view = WebView::New();
424 DALI_TEST_CHECK( view );
427 ConnectionTracker* testTracker = new ConnectionTracker();
428 view.ScrollEdgeReachedSignal().Connect( &OnScrollEdgeReached );
429 bool signal1 = false;
430 view.ConnectSignal( testTracker, "scrollEdgeReached", CallbackFunctor(&signal1) );
431 DALI_TEST_EQUALS( gScrollEdgeReachedCallbackCalled, 0, TEST_LOCATION );
433 view.LoadUrl( TEST_URL1 );
434 Test::EmitGlobalTimerSignal();
436 // set scroll position.
437 Dali::Vector2 output = Dali::Vector2::ONE;
438 Dali::Vector2 testValue = Dali::Vector2( 100, 100 );
439 view.SetProperty( WebView::Property::SCROLL_POSITION, testValue );
440 view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output );
441 DALI_TEST_EQUALS( output, testValue, TEST_LOCATION );
443 // scroll by and trigger scrollEdgeReached event.
444 view.ScrollBy( 50, 50 );
445 view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output );
446 DALI_TEST_CHECK( output.x == 150 && output.y == 150 );
447 DALI_TEST_EQUALS( gScrollEdgeReachedCallbackCalled, 1, TEST_LOCATION );
448 DALI_TEST_CHECK( signal1 );
453 int UtcDaliWebViewEvaluteJavaScript(void)
455 ToolkitTestApplication application;
457 WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
459 view.LoadHtmlString( "<body>Hello World!</body>" );
460 view.EvaluateJavaScript( "jsObject.postMessage('Hello')" );
461 view.EvaluateJavaScript( "jsObject.postMessage('World')", OnEvaluateJavaScript );
462 Test::EmitGlobalTimerSignal();
464 DALI_TEST_EQUALS( gEvaluateJavaScriptCallbackCalled, 1, TEST_LOCATION );
469 int UtcDaliWebViewMethodsForCoverage(void)
471 ToolkitTestApplication application;
473 WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
475 view.LoadHtmlString( "<body>Hello World!</body>" );
476 view.AddJavaScriptMessageHandler( "jsObject",
477 []( const std::string& arg ) {
481 DALI_TEST_CHECK( view );
486 // test cases for web backforward list.
488 int UtcDaliWebBackForwardListCheckItem(void)
490 ToolkitTestApplication application;
492 WebView view = WebView::New();
493 DALI_TEST_CHECK( view );
495 Dali::Toolkit::WebBackForwardList* bfList = view.GetBackForwardList();
496 DALI_TEST_CHECK( bfList != 0 )
498 unsigned int itemCount = bfList->GetItemCount();
499 DALI_TEST_CHECK( itemCount == 1 )
501 Dali::Toolkit::WebBackForwardListItem* citem = bfList->GetCurrentItem();
502 DALI_TEST_CHECK( citem != 0 );
504 const std::string kDefaultUrl( "http://url" );
505 std::string testValue = citem->GetUrl();
506 DALI_TEST_EQUALS( testValue, kDefaultUrl, TEST_LOCATION );
508 const std::string kDefaultTitle( "title" );
509 testValue = citem->GetTitle();
510 DALI_TEST_EQUALS( testValue, kDefaultTitle, TEST_LOCATION );
512 const std::string kDefaultOriginalUrl( "http://originalurl" );
513 testValue = citem->GetOriginalUrl();
514 DALI_TEST_EQUALS( testValue, kDefaultOriginalUrl, TEST_LOCATION );
516 Dali::Toolkit::WebBackForwardListItem* item = bfList->GetItemAtIndex( 0 );
517 DALI_TEST_CHECK( item != 0 );
522 // test cases for web context.
524 int UtcDaliWebContextGetSetCacheModel(void)
526 ToolkitTestApplication application;
528 WebView view = WebView::New();
529 DALI_TEST_CHECK( view );
531 Dali::Toolkit::WebContext* context = view.GetContext();
532 DALI_TEST_CHECK( context != 0 )
534 std::string kDefaultValue;
537 context->SetProxyUri( kDefaultValue );
538 context->SetCertificateFilePath( kDefaultValue );
539 context->DisableCache( false );
540 context->SetDefaultProxyAuth( kDefaultValue, kDefaultValue );
541 context->DeleteWebDatabase();
542 context->DeleteWebStorage();
543 context->DeleteLocalFileSystem();
544 context->ClearCache();
546 // Check default value
547 Dali::WebEngineContext::CacheModel value = context->GetCacheModel();
548 DALI_TEST_CHECK( value == Dali::WebEngineContext::CacheModel::DOCUMENT_VIEWER );
550 // Check Set/GetProperty
551 context->SetCacheModel( Dali::WebEngineContext::CacheModel::DOCUMENT_BROWSER );
552 value = context->GetCacheModel();
553 DALI_TEST_CHECK( value == Dali::WebEngineContext::CacheModel::DOCUMENT_BROWSER );
558 // test cases for web cookie manager.
560 int UtcDaliWebCookieManagerGetSetCookieAcceptPolicy(void)
562 ToolkitTestApplication application;
564 WebView view = WebView::New();
565 DALI_TEST_CHECK( view );
567 Dali::Toolkit::WebCookieManager* cookieManager = view.GetCookieManager();
568 DALI_TEST_CHECK( cookieManager != 0 )
570 const std::string kDefaultValue;
573 cookieManager->SetPersistentStorage( kDefaultValue, Dali::WebEngineCookieManager::CookiePersistentStorage::SQLITE );
574 cookieManager->ClearCookies();
576 // Check default value
577 Dali::WebEngineCookieManager::CookieAcceptPolicy value = cookieManager->GetCookieAcceptPolicy();
578 DALI_TEST_CHECK( value == Dali::WebEngineCookieManager::CookieAcceptPolicy::NO_THIRD_PARTY );
580 // Check Set/GetProperty
581 cookieManager->SetCookieAcceptPolicy( Dali::WebEngineCookieManager::CookieAcceptPolicy::ALWAYS );
582 value = cookieManager->GetCookieAcceptPolicy();
583 DALI_TEST_CHECK( value == Dali::WebEngineCookieManager::CookieAcceptPolicy::ALWAYS );
588 // test cases for web settings.
590 int UtcDaliWebSettingsGetSetDefaultFontSize(void)
592 ToolkitTestApplication application;
594 WebView view = WebView::New();
595 DALI_TEST_CHECK( view );
597 Dali::Toolkit::WebSettings* settings = view.GetSettings();
598 DALI_TEST_CHECK( settings != 0 )
601 settings->AllowMixedContents( false );
602 settings->EnableSpatialNavigation( false );
603 settings->EnableWebSecurity( false );
604 settings->AllowFileAccessFromExternalUrl( false );
605 settings->AllowScriptsOpenWindows( false );
607 // Check default value
608 int value = settings->GetDefaultFontSize();
609 DALI_TEST_CHECK( value == 16 );
611 // Check Set/GetProperty
612 settings->SetDefaultFontSize( 20 );
613 value = settings->GetDefaultFontSize();
614 DALI_TEST_CHECK( value == 20 );
619 int UtcDaliWebSettingsCheckEnableJavaScript(void)
621 ToolkitTestApplication application;
623 WebView view = WebView::New();
624 DALI_TEST_CHECK( view );
626 Dali::Toolkit::WebSettings* settings = view.GetSettings();
627 DALI_TEST_CHECK( settings != 0 )
630 settings->AllowMixedContents( false );
631 settings->EnableSpatialNavigation( false );
632 settings->EnableWebSecurity( false );
633 settings->AllowFileAccessFromExternalUrl( false );
634 settings->AllowScriptsOpenWindows( false );
636 // Check default value is true or not
637 bool value = settings->IsJavaScriptEnabled();
638 DALI_TEST_CHECK( value );
640 // Check Set/GetProperty
641 settings->EnableJavaScript( false );
642 value = settings->IsJavaScriptEnabled();
643 DALI_TEST_CHECK( !value );
648 int UtcDaliWebSettingsCheckAllowImagesLoadAutomatically(void)
650 ToolkitTestApplication application;
652 WebView view = WebView::New();
653 DALI_TEST_CHECK( view );
655 Dali::Toolkit::WebSettings* settings = view.GetSettings();
656 DALI_TEST_CHECK( settings != 0 )
659 settings->AllowMixedContents( false );
660 settings->EnableSpatialNavigation( false );
661 settings->EnableWebSecurity( false );
662 settings->AllowFileAccessFromExternalUrl( false );
663 settings->AllowScriptsOpenWindows( false );
665 // Check default value is true or not
666 bool value = settings->AreImagesLoadedAutomatically();
667 DALI_TEST_CHECK( value );
669 // Check Set/GetProperty
670 settings->AllowImagesLoadAutomatically( false );
671 value = settings->AreImagesLoadedAutomatically();
672 DALI_TEST_CHECK( !value );
677 int UtcDaliWebSettingsGetSetDefaultTextEncodingName(void)
679 ToolkitTestApplication application;
681 WebView view = WebView::New();
682 DALI_TEST_CHECK( view );
684 Dali::Toolkit::WebSettings* settings = view.GetSettings();
685 DALI_TEST_CHECK( settings != 0 )
687 const std::string kDefaultValue;
688 const std::string kTestValue = "UTF-8";
691 settings->AllowMixedContents( false );
692 settings->EnableSpatialNavigation( false );
693 settings->EnableWebSecurity( false );
694 settings->AllowFileAccessFromExternalUrl( false );
695 settings->AllowScriptsOpenWindows( false );
697 // Check default value
698 std::string value = settings->GetDefaultTextEncodingName();
699 DALI_TEST_EQUALS( value, kDefaultValue, TEST_LOCATION );
701 // Check Set/GetProperty
702 settings->SetDefaultTextEncodingName( kTestValue );
703 value = settings->GetDefaultTextEncodingName();
704 DALI_TEST_EQUALS( value, kTestValue, TEST_LOCATION );