namespace
{
+
+// Generally only one WebEngine instance exists.
+// If > 1, a new web engine has been created by NewWindowCreated callback.
static WebEngine* gInstance = nullptr;
static int gInstanceCount = 0;
, mContentSize( 500, 500 )
{
gInstanceCount++;
- gInstance = this;
+ if (gInstanceCount == 1) // only first web engine need be saved.
+ {
+ gInstance = this;
+ }
mockWebEngineSettings = new MockWebEngineSettings();
mockWebEngineContext = new MockWebEngineContext();
virtual ~WebEngine()
{
gInstanceCount--;
- if( !gInstanceCount )
+ if(!gInstanceCount)
{
- gInstance = NULL;
+ gInstance = nullptr;
}
delete mockWebEngineSettings;
return *mockWebEngineBackForwardList;
}
+ Dali::WebEnginePlugin* GetPlugin() const
+ {
+ return nullptr;
+ }
+
void LoadUrl( const std::string& url )
{
mUrl = url;
mNavigationPolicyDecisionCallback = callback;
}
+ void RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback)
+ {
+ mNewWindowCreatedCallback = callback;
+ }
+
void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback)
{
if (callback)
Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback mScrollEdgeReachedCallback;
Dali::WebEnginePlugin::WebEngineUrlChangedCallback mUrlChangedCallback;
Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback mNavigationPolicyDecisionCallback;
+ Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback mNewWindowCreatedCallback;
std::vector<Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback> mResultCallbacks;
bool mEvaluating;
std::unique_ptr<Dali::WebEnginePolicyDecision> policyDecision(new MockWebEnginePolicyDecision());
gInstance->mNavigationPolicyDecisionCallback(std::move(policyDecision));
}
+ if (gInstance->mNewWindowCreatedCallback)
+ {
+ Dali::WebEnginePlugin* plugin = 0;
+ gInstance->mNewWindowCreatedCallback(plugin);
+ }
}
return false;
}
Internal::Adaptor::GetImplementation(*this).RegisterNavigationPolicyDecidedCallback(callback);
}
+void WebEngine::RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback)
+{
+ Internal::Adaptor::GetImplementation(*this).RegisterNewWindowCreatedCallback(callback);
+}
+
void WebEngine::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback)
{
Internal::Adaptor::GetImplementation(*this).GetPlainTextAsynchronously(callback);
static int gScrollEdgeReachedCallbackCalled = 0;
static int gUrlChangedCallbackCalled = 0;
static int gNavigationPolicyDecidedCallbackCalled = 0;
+static int gNewWindowCreatedCallbackCalled = 0;
static int gEvaluateJavaScriptCallbackCalled = 0;
static bool gTouched = false;
static int gPlainTextReceivedCallbackCalled = 0;
gScrollEdgeReachedCallbackCalled++;
}
-static void OnUrlChanged( WebView view, const std::string& url )
+static void OnUrlChanged(const std::string& url)
{
gUrlChangedCallbackCalled++;
}
gNavigationPolicyDecidedCallbackCalled++;
}
+static void OnNewWindowCreated(Dali::WebEnginePlugin*& outPlugin)
+{
+ gNewWindowCreatedCallbackCalled++;
+ WebView newView = WebView::New();
+ outPlugin = newView.GetPlugin();
+}
+
static bool OnPlainTextReceived(const std::string& plainText)
{
gPlainTextReceivedCallbackCalled++;
END_TEST;
}
+int UtcDaliWebViewNewWindowCreated(void)
+{
+ ToolkitTestApplication application;
+
+ WebView view = WebView::New();
+ DALI_TEST_CHECK(view);
+
+ // load url.
+ view.RegisterNewWindowCreatedCallback(&OnNewWindowCreated);
+ DALI_TEST_EQUALS(gNewWindowCreatedCallbackCalled, 0, TEST_LOCATION);
+
+ view.LoadUrl(TEST_URL1);
+ Test::EmitGlobalTimerSignal();
+ DALI_TEST_EQUALS(gNewWindowCreatedCallbackCalled, 1, TEST_LOCATION);
+
+ END_TEST;
+}
+
int UtcDaliWebViewGetPlainText(void)
{
ToolkitTestApplication application;
return Dali::Toolkit::GetImpl( *this ).GetBackForwardList();
}
+Dali::WebEnginePlugin* WebView::GetPlugin() const
+{
+ return Dali::Toolkit::GetImpl(*this).GetPlugin();
+}
+
Dali::Toolkit::ImageView WebView::GetFavicon() const
{
return Dali::Toolkit::GetImpl( *this ).GetFavicon();
Dali::Toolkit::GetImpl(*this).RegisterNavigationPolicyDecidedCallback(callback);
}
+void WebView::RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback)
+{
+ Dali::Toolkit::GetImpl(*this).RegisterNewWindowCreatedCallback(callback);
+}
+
void WebView::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback)
{
Dali::Toolkit::GetImpl(*this).GetPlainTextAsynchronously(callback);
Dali::Toolkit::WebBackForwardList* GetBackForwardList() const;
/**
+ * @brief Gets web engine plugin.
+ */
+ Dali::WebEnginePlugin* GetPlugin() const;
+
+ /**
* @brief Get favicon of web page.
*
* @return Handle to a favicon
void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback);
/**
+ * @brief Callback to be called when a new window would be created.
+ *
+ * @param[in] callback
+ */
+ void RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback);
+
+ /**
* @brief Get a plain text of current web page asynchronously.
*
* @param[in] callback The callback function called asynchronously.
WebView::WebView( const std::string& locale, const std::string& timezoneId )
: Control( ControlBehaviour( ACTOR_BEHAVIOUR_DEFAULT | DISABLE_STYLE_CHANGE_SIGNALS ) ),
- mUrl(),
mVisual(),
mWebViewSize( Stage::GetCurrent().GetSize() ),
mWebEngine(),
WebView::WebView( int argc, char** argv )
: Control( ControlBehaviour( ACTOR_BEHAVIOUR_DEFAULT | DISABLE_STYLE_CHANGE_SIGNALS ) ),
- mUrl(),
mVisual(),
mWebViewSize( Stage::GetCurrent().GetSize() ),
mWebEngine(),
return mWebBackForwardList.get();
}
+Dali::WebEnginePlugin* WebView::GetPlugin() const
+{
+ return mWebEngine ? mWebEngine.GetPlugin() : nullptr;
+}
+
Dali::Toolkit::ImageView WebView::GetFavicon() const
{
Dali::Toolkit::ImageView faviconView;
void WebView::LoadUrl( const std::string& url )
{
- mUrl = url;
if( mWebEngine )
{
mVisual = CreateNativeImageVisual( mWebEngine.GetNativeImageSource() );
}
}
+void WebView::RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.RegisterNewWindowCreatedCallback(callback);
+ }
+}
+
void WebView::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback)
{
if(mWebEngine)
{
case Toolkit::WebView::Property::URL:
{
- value = impl.mUrl;
+ value = impl.GetUrl();
break;
}
case Toolkit::WebView::Property::USER_AGENT:
}
}
+std::string WebView::GetUrl() const
+{
+ return mWebEngine ? mWebEngine.GetUrl() : kEmptyString;
+}
+
std::string WebView::GetTitle() const
{
return mWebEngine ? mWebEngine.GetTitle() : kEmptyString;
}
-const std::string& WebView::GetUserAgent() const
+std::string WebView::GetUserAgent() const
{
return mWebEngine ? mWebEngine.GetUserAgent() : kEmptyString;
}
static Toolkit::WebView New( int argc, char** argv );
/**
+ * @copydoc Dali::Toolkit::WebView::GetPlugin()
+ */
+ Dali::WebEnginePlugin* GetPlugin() const;
+
+ /**
* @brief Get favicon of web page.
*
* @return Handle to a favicon
void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback);
/**
+ * @copydoc Dali::Toolkit::WebView::RegisterNewWindowCreatedCallback()
+ */
+ void RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback);
+
+ /**
* @copydoc Dali::Toolkit::WebView::GetPlainTextAsynchronously()
*/
void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback);
void GetContentSize( int& width, int& height ) const;
/**
+ * @brief Get current url.
+ * @return The string value of current url
+ */
+ std::string GetUrl() const;
+
+ /**
* @brief Returns the title of the Web.
*
* @return The title of web page
* @brief Get user agent string.
* @return The string value of user agent
*/
- const std::string& GetUserAgent() const;
+ std::string GetUserAgent() const;
/**
* @brief Set user agent string.
private:
- std::string mUrl;
Dali::Toolkit::Visual::Base mVisual;
Dali::Size mWebViewSize;
Dali::WebEngine mWebEngine;