X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fweb-view%2Fweb-view-impl.cpp;h=b0d81de349deabde3ce624bc492e25c953e22569;hp=5836f42537083a9a3974a6f7ff4adec3df194ed8;hb=e5d379064ba0e9a68d1d2680906952dbde263f34;hpb=d65d27692a440b8fb20b69668c32d365ee822320 diff --git a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp index 5836f42..b0d81de 100644 --- a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp +++ b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp @@ -20,6 +20,8 @@ // EXTERNAL INCLUDES #include +#include +#include #include #include #include @@ -47,17 +49,45 @@ BaseHandle Create() return Toolkit::WebView::New(); } -DALI_TYPE_REGISTRATION_BEGIN( Toolkit::WebView, Toolkit::Control, Create ); - -DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "url", STRING, URL ); - -DALI_SIGNAL_REGISTRATION( Toolkit, WebView, "pageLoadStarted", PAGE_LOAD_STARTED_SIGNAL ); -DALI_SIGNAL_REGISTRATION( Toolkit, WebView, "pageLoadFinished", PAGE_LOAD_FINISHED_SIGNAL ); +DALI_ENUM_TO_STRING_TABLE_BEGIN( CacheModel ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::WebView::CacheModel, DOCUMENT_VIEWER ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::WebView::CacheModel, DOCUMENT_BROWSER ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::WebView::CacheModel, PRIMARY_WEB_BROWSER ) +DALI_ENUM_TO_STRING_TABLE_END( CacheModel ) + +DALI_ENUM_TO_STRING_TABLE_BEGIN( CookieAcceptPolicy ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::WebView::CookieAcceptPolicy, ALWAYS ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::WebView::CookieAcceptPolicy, NEVER ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::WebView::CookieAcceptPolicy, NO_THIRD_PARTY ) +DALI_ENUM_TO_STRING_TABLE_END( CookieAcceptPolicy ) + +DALI_TYPE_REGISTRATION_BEGIN( Toolkit::WebView, Toolkit::Control, Create ) + +DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "url", STRING, URL ) +DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "cacheModel", STRING, CACHE_MODEL ) +DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "cookieAcceptPolicy", STRING, COOKIE_ACCEPT_POLICY ) +DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "userAgent", STRING, USER_AGENT ) +DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "enableJavaScript", BOOLEAN, ENABLE_JAVASCRIPT ) +DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "loadImagesAutomatically", BOOLEAN, LOAD_IMAGES_AUTOMATICALLY ) +DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "defaultTextEncodingName", STRING, DEFAULT_TEXT_ENCODING_NAME ) +DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "defaultFontSize", INTEGER, DEFAULT_FONT_SIZE ) + +DALI_SIGNAL_REGISTRATION( Toolkit, WebView, "pageLoadStarted", PAGE_LOAD_STARTED_SIGNAL ) +DALI_SIGNAL_REGISTRATION( Toolkit, WebView, "pageLoadFinished", PAGE_LOAD_FINISHED_SIGNAL ) +DALI_SIGNAL_REGISTRATION( Toolkit, WebView, "pageLoadError", PAGE_LOAD_ERROR_SIGNAL ) DALI_TYPE_REGISTRATION_END() +const std::string kEmptyString; + } // anonymous namepsace +#define GET_ENUM_STRING( structName, inputExp ) \ + Scripting::GetLinearEnumerationName< Toolkit::WebView::structName::Type >( static_cast< Toolkit::WebView::structName::Type >( inputExp ), structName##_TABLE, structName##_TABLE_COUNT ) + +#define GET_ENUM_VALUE( structName, inputExp, outputExp ) \ + Scripting::GetEnumerationProperty< Toolkit::WebView::structName::Type >( inputExp, structName##_TABLE, structName##_TABLE_COUNT, outputExp ) + WebView::WebView( const std::string& locale, const std::string& timezoneId ) : Control( ControlBehaviour( ACTOR_BEHAVIOUR_DEFAULT | DISABLE_STYLE_CHANGE_SIGNALS ) ), mUrl(), @@ -65,10 +95,13 @@ WebView::WebView( const std::string& locale, const std::string& timezoneId ) mWebViewSize( Stage::GetCurrent().GetSize() ), mWebEngine(), mPageLoadStartedSignal(), - mPageLoadFinishedSignal() + mPageLoadFinishedSignal(), + mPageLoadErrorSignal() { mWebEngine = Dali::WebEngine::New(); - if ( mWebEngine ) + + // WebEngine is empty when it is not properly initialized. + if( mWebEngine ) { mWebEngine.Create( mWebViewSize.width, mWebViewSize.height, locale, timezoneId ); } @@ -106,22 +139,23 @@ void WebView::OnInitialize() Self().SetKeyboardFocusable( true ); Self().TouchSignal().Connect( this, &WebView::OnTouchEvent ); - if ( mWebEngine ) + if( mWebEngine ) { mWebEngine.PageLoadStartedSignal().Connect( this, &WebView::OnPageLoadStarted ); mWebEngine.PageLoadFinishedSignal().Connect( this, &WebView::OnPageLoadFinished ); + mWebEngine.PageLoadErrorSignal().Connect( this, &WebView::OnPageLoadError ); } } void WebView::LoadUrl( const std::string& url ) { mUrl = url; - if ( mWebEngine ) + if( mWebEngine ) { Dali::Image image = Dali::NativeImage::New( *mWebEngine.GetNativeImageSource() ); mVisual = Toolkit::VisualFactory::Get().CreateVisual( image ); - if ( mVisual ) + if( mVisual ) { // Clean up previously registered visual and add new one. DevelControl::RegisterVisual( *this, Toolkit::WebView::Property::URL, mVisual ); @@ -130,19 +164,14 @@ void WebView::LoadUrl( const std::string& url ) } } -const std::string& WebView::GetUrl() -{ - return mWebEngine ? mWebEngine.GetUrl() : mUrl; -} - void WebView::LoadHTMLString( const std::string& htmlString ) { - if ( mWebEngine ) + if( mWebEngine ) { Dali::Image image = Dali::NativeImage::New( *mWebEngine.GetNativeImageSource() ); mVisual = Toolkit::VisualFactory::Get().CreateVisual( image ); - if ( mVisual ) + if( mVisual ) { DevelControl::RegisterVisual( *this, Toolkit::WebView::Property::URL, mVisual ); mWebEngine.LoadHTMLString( htmlString ); @@ -152,7 +181,7 @@ void WebView::LoadHTMLString( const std::string& htmlString ) void WebView::Reload() { - if ( mWebEngine ) + if( mWebEngine ) { mWebEngine.Reload(); } @@ -160,12 +189,28 @@ void WebView::Reload() void WebView::StopLoading() { - if ( mWebEngine ) + if( mWebEngine ) { mWebEngine.StopLoading(); } } +void WebView::Suspend() +{ + if( mWebEngine ) + { + mWebEngine.Suspend(); + } +} + +void WebView::Resume() +{ + if( mWebEngine ) + { + mWebEngine.Resume(); + } +} + bool WebView::CanGoForward() { return mWebEngine ? mWebEngine.CanGoForward() : false; @@ -173,7 +218,7 @@ bool WebView::CanGoForward() void WebView::GoForward() { - if ( mWebEngine ) + if( mWebEngine ) { mWebEngine.GoForward(); } @@ -186,23 +231,23 @@ bool WebView::CanGoBack() void WebView::GoBack() { - if ( mWebEngine ) + if( mWebEngine ) { mWebEngine.GoBack(); } } -void WebView::EvaluateJavaScript( const std::string& script ) +void WebView::EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler ) { - if ( mWebEngine ) + if( mWebEngine ) { - mWebEngine.EvaluateJavaScript( script ); + mWebEngine.EvaluateJavaScript( script, resultHandler ); } } void WebView::AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void( const std::string& ) > handler ) { - if ( mWebEngine ) + if( mWebEngine ) { mWebEngine.AddJavaScriptMessageHandler( exposedObjectName, handler ); } @@ -210,7 +255,7 @@ void WebView::AddJavaScriptMessageHandler( const std::string& exposedObjectName, void WebView::ClearHistory() { - if ( mWebEngine ) + if( mWebEngine ) { mWebEngine.ClearHistory(); } @@ -218,22 +263,35 @@ void WebView::ClearHistory() void WebView::ClearCache() { - if ( mWebEngine ) + if( mWebEngine ) { mWebEngine.ClearCache(); } } -Dali::Toolkit::WebView::WebViewSignalType& WebView::PageLoadStartedSignal() +void WebView::ClearCookies() +{ + if( mWebEngine ) + { + mWebEngine.ClearCookies(); + } +} + +Dali::Toolkit::WebView::WebViewPageLoadSignalType& WebView::PageLoadStartedSignal() { return mPageLoadStartedSignal; } -Dali::Toolkit::WebView::WebViewSignalType& WebView::PageLoadFinishedSignal() +Dali::Toolkit::WebView::WebViewPageLoadSignalType& WebView::PageLoadFinishedSignal() { return mPageLoadFinishedSignal; } +Dali::Toolkit::WebView::WebViewPageLoadErrorSignalType& WebView::PageLoadErrorSignal() +{ + return mPageLoadErrorSignal; +} + void WebView::OnPageLoadStarted( const std::string& url ) { if( !mPageLoadStartedSignal.Empty() ) @@ -252,6 +310,15 @@ void WebView::OnPageLoadFinished( const std::string& url ) } } +void WebView::OnPageLoadError( const std::string& url, int errorCode ) +{ + if( !mPageLoadErrorSignal.Empty() ) + { + Dali::Toolkit::WebView handle( GetOwner() ); + mPageLoadErrorSignal.Emit( handle, url, static_cast< Toolkit::WebView::LoadErrorCode >( errorCode ) ); + } +} + bool WebView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ) { Dali::BaseHandle handle( object ); @@ -269,6 +336,11 @@ bool WebView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* t webView.PageLoadFinishedSignal().Connect( tracker, functor ); connected = true; } + else if( 0 == strcmp( signalName.c_str(), PAGE_LOAD_ERROR_SIGNAL ) ) + { + webView.PageLoadErrorSignal().Connect( tracker, functor ); + connected = true; + } return connected; } @@ -318,6 +390,65 @@ void WebView::SetProperty( BaseObject* object, Property::Index index, const Prop } break; } + case Toolkit::WebView::Property::CACHE_MODEL: + { + Toolkit::WebView::CacheModel::Type output = impl.GetCacheModel(); + GET_ENUM_VALUE( CacheModel, value, output ); + impl.SetCacheModel( output ); + break; + } + case Toolkit::WebView::Property::COOKIE_ACCEPT_POLICY: + { + Toolkit::WebView::CookieAcceptPolicy::Type output = impl.GetCookieAcceptPolicy(); + GET_ENUM_VALUE( CookieAcceptPolicy, value, output ); + impl.SetCookieAcceptPolicy( output ); + break; + } + case Toolkit::WebView::Property::USER_AGENT: + { + std::string input; + if( value.Get( input ) ) + { + impl.SetUserAgent( input ); + } + break; + } + case Toolkit::WebView::Property::ENABLE_JAVASCRIPT: + { + bool input; + if( value.Get( input ) ) + { + impl.EnableJavaScript( input ); + } + break; + } + case Toolkit::WebView::Property::LOAD_IMAGES_AUTOMATICALLY: + { + bool input; + if( value.Get( input ) ) + { + impl.LoadImagesAutomatically( input ); + } + break; + } + case Toolkit::WebView::Property::DEFAULT_TEXT_ENCODING_NAME: + { + std::string input; + if( value.Get( input ) ) + { + impl.SetDefaultTextEncodingName( input ); + } + break; + } + case Toolkit::WebView::Property::DEFAULT_FONT_SIZE: + { + int input; + if( value.Get( input ) ) + { + impl.SetDefaultFontSize( input ); + } + break; + } } } } @@ -335,9 +466,46 @@ Property::Value WebView::GetProperty( BaseObject* object, Property::Index proper { case Toolkit::WebView::Property::URL: { - value = impl.GetUrl(); + value = impl.mUrl; + break; + } + case Toolkit::WebView::Property::CACHE_MODEL: + { + value = GET_ENUM_STRING( CacheModel, impl.GetCacheModel() ); + break; + } + case Toolkit::WebView::Property::COOKIE_ACCEPT_POLICY: + { + value = GET_ENUM_STRING( CookieAcceptPolicy, impl.GetCookieAcceptPolicy() ); break; } + case Toolkit::WebView::Property::USER_AGENT: + { + value = impl.GetUserAgent(); + break; + } + case Toolkit::WebView::Property::ENABLE_JAVASCRIPT: + { + value = impl.IsJavaScriptEnabled(); + break; + } + case Toolkit::WebView::Property::LOAD_IMAGES_AUTOMATICALLY: + { + value = impl.AreImagesAutomaticallyLoaded(); + break; + } + case Toolkit::WebView::Property::DEFAULT_TEXT_ENCODING_NAME: + { + value = impl.GetDefaultTextEncodingName(); + break; + } + case Toolkit::WebView::Property::DEFAULT_FONT_SIZE: + { + value = impl.GetDefaultFontSize(); + break; + } + default: + break; } } @@ -348,7 +516,7 @@ bool WebView::OnTouchEvent( Actor actor, const Dali::TouchData& touch ) { bool result = false; - if ( mWebEngine ) + if( mWebEngine ) { result = mWebEngine.SendTouchEvent( touch ); } @@ -359,13 +527,107 @@ bool WebView::OnKeyEvent( const Dali::KeyEvent& event ) { bool result = false; - if ( mWebEngine ) + if( mWebEngine ) { result = mWebEngine.SendKeyEvent( event ); } return result; } +Toolkit::WebView::CacheModel::Type WebView::GetCacheModel() const +{ + return mWebEngine ? static_cast< Toolkit::WebView::CacheModel::Type >( mWebEngine.GetCacheModel() ) : Toolkit::WebView::CacheModel::DOCUMENT_VIEWER; +} + +void WebView::SetCacheModel( Toolkit::WebView::CacheModel::Type cacheModel ) +{ + if( mWebEngine ) + { + mWebEngine.SetCacheModel( static_cast< WebEnginePlugin::CacheModel >( cacheModel ) ); + } +} + +Toolkit::WebView::CookieAcceptPolicy::Type WebView::GetCookieAcceptPolicy() const +{ + return mWebEngine ? static_cast< Toolkit::WebView::CookieAcceptPolicy::Type >( mWebEngine.GetCookieAcceptPolicy() ) : Toolkit::WebView::CookieAcceptPolicy::NO_THIRD_PARTY; +} + +void WebView::SetCookieAcceptPolicy( Toolkit::WebView::CookieAcceptPolicy::Type policy ) +{ + if( mWebEngine ) + { + mWebEngine.SetCookieAcceptPolicy( static_cast< WebEnginePlugin::CookieAcceptPolicy >( policy ) ); + } +} + +const std::string& WebView::GetUserAgent() const +{ + return mWebEngine ? mWebEngine.GetUserAgent() : kEmptyString; +} + +void WebView::SetUserAgent( const std::string& userAgent ) +{ + if( mWebEngine ) + { + mWebEngine.SetUserAgent( userAgent ); + } +} + +bool WebView::IsJavaScriptEnabled() const +{ + return mWebEngine ? mWebEngine.IsJavaScriptEnabled() : true; +} + +void WebView::EnableJavaScript( bool enabled ) +{ + if( mWebEngine ) + { + mWebEngine.EnableJavaScript( enabled ); + } +} + +bool WebView::AreImagesAutomaticallyLoaded() const +{ + return mWebEngine ? mWebEngine.AreImagesAutomaticallyLoaded() : true; +} + +void WebView::LoadImagesAutomatically( bool automatic ) +{ + if( mWebEngine ) + { + mWebEngine.LoadImagesAutomatically( automatic ); + } +} + +const std::string& WebView::GetDefaultTextEncodingName() const +{ + return mWebEngine ? mWebEngine.GetDefaultTextEncodingName() : kEmptyString; +} + +void WebView::SetDefaultTextEncodingName( const std::string& defaultTextEncodingName ) +{ + if( mWebEngine ) + { + mWebEngine.SetDefaultTextEncodingName( defaultTextEncodingName ); + } +} + +int WebView::GetDefaultFontSize() const +{ + return mWebEngine ? mWebEngine.GetDefaultFontSize() : 0; +} + +void WebView::SetDefaultFontSize( int defaultFontSize ) +{ + if( mWebEngine ) + { + mWebEngine.SetDefaultFontSize( defaultFontSize ); + } +} + +#undef GET_ENUM_STRING +#undef GET_ENUM_VALUE + } // namespace Internal } // namespace Toolkit