[Tizen] Add an API for 'create,window' event.
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / dali-toolkit-test-utils / toolkit-web-engine.cpp
index 3f626dc..f3e4656 100755 (executable)
@@ -44,6 +44,9 @@ class WebEngine;
 
 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;
 
@@ -382,7 +385,10 @@ public:
     , mContentSize( 500, 500 )
   {
     gInstanceCount++;
-    gInstance = this;
+    if (gInstanceCount == 1) // only first web engine need be saved.
+    {
+      gInstance = this;
+    }
 
     mockWebEngineSettings = new MockWebEngineSettings();
     mockWebEngineContext = new MockWebEngineContext();
@@ -393,9 +399,9 @@ public:
   virtual ~WebEngine()
   {
     gInstanceCount--;
-    if( !gInstanceCount )
+    if(!gInstanceCount)
     {
-      gInstance = NULL;
+      gInstance = nullptr;
     }
 
     delete mockWebEngineSettings;
@@ -424,6 +430,11 @@ public:
     return *mockWebEngineBackForwardList;
   }
 
+  Dali::WebEnginePlugin* GetPlugin() const
+  {
+    return nullptr;
+  }
+
   void LoadUrl( const std::string& url )
   {
     mUrl = url;
@@ -576,6 +587,11 @@ public:
     mNavigationPolicyDecisionCallback = callback;
   }
 
+  void RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback)
+  {
+    mNewWindowCreatedCallback = callback;
+  }
+
   void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback)
   {
     if (callback)
@@ -596,6 +612,7 @@ public:
   Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback       mScrollEdgeReachedCallback;
   Dali::WebEnginePlugin::WebEngineUrlChangedCallback              mUrlChangedCallback;
   Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback mNavigationPolicyDecisionCallback;
+  Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback        mNewWindowCreatedCallback;
 
   std::vector<Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback> mResultCallbacks;
   bool                                                                 mEvaluating;
@@ -682,6 +699,11 @@ bool OnLoadUrl()
       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;
 }
@@ -977,6 +999,11 @@ void WebEngine::RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::W
   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);