WebView create a visual when it got a first frame 50/260750/3
authorJiyun Yang <ji.yang@samsung.com>
Fri, 2 Jul 2021 06:35:20 +0000 (15:35 +0900)
committerJiyun Yang <ji.yang@samsung.com>
Mon, 5 Jul 2021 01:39:23 +0000 (10:39 +0900)
Change-Id: I609647abec9c89bf5f421632f6036298ac1f9e61
Signed-off-by: Jiyun Yang <ji.yang@samsung.com>
dali-toolkit/internal/controls/web-view/web-view-impl.cpp [changed mode: 0755->0644]
dali-toolkit/internal/controls/web-view/web-view-impl.h

old mode 100755 (executable)
new mode 100644 (file)
index bf85d8d..4a0219d
@@ -286,23 +286,12 @@ void WebView::LoadUrl(const std::string& url)
   mUrl = url;
   if(mWebEngine)
   {
-    Texture           texture        = Dali::Texture::New(*mWebEngine.GetNativeImageSource());
-    const std::string nativeImageUrl = Dali::Toolkit::TextureManager::AddTexture(texture);
-    mVisual                          = Toolkit::VisualFactory::Get().CreateVisual(
-      {{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE},
-       {Toolkit::ImageVisual::Property::URL, nativeImageUrl}});
-
-    if(mVisual)
+    if(!mVisual)
     {
-      // Clean up previously registered visual and add new one.
-      DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, mVisual);
-      mWebEngine.LoadUrl(url);
+      mWebEngine.FrameRenderedSignal().Connect(this, &WebView::OnInitialFrameRendered);
     }
 
-    if(mVideoHoleEnabled)
-    {
-      EnableBlendMode(false);
-    }
+    mWebEngine.LoadUrl(url);
   }
 }
 
@@ -310,22 +299,12 @@ void WebView::LoadHtmlString(const std::string& htmlString)
 {
   if(mWebEngine)
   {
-    Texture           texture        = Dali::Texture::New(*mWebEngine.GetNativeImageSource());
-    const std::string nativeImageUrl = Dali::Toolkit::TextureManager::AddTexture(texture);
-    mVisual                          = Toolkit::VisualFactory::Get().CreateVisual(
-      {{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE},
-       {Toolkit::ImageVisual::Property::URL, nativeImageUrl}});
-
-    if(mVisual)
+    if(!mVisual)
     {
-      DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, mVisual);
-      mWebEngine.LoadHtmlString(htmlString);
+      mWebEngine.FrameRenderedSignal().Connect(this, &WebView::OnInitialFrameRendered);
     }
 
-    if(mVideoHoleEnabled)
-    {
-      EnableBlendMode(false);
-    }
+    mWebEngine.LoadHtmlString(htmlString);
   }
 }
 
@@ -334,24 +313,12 @@ bool WebView::LoadHtmlStringOverrideCurrentEntry(const std::string& html, const
   if(!mWebEngine)
     return false;
 
-  Texture           texture        = Dali::Texture::New(*mWebEngine.GetNativeImageSource());
-  const std::string nativeImageUrl = Dali::Toolkit::TextureManager::AddTexture(texture);
-  mVisual                          = Toolkit::VisualFactory::Get().CreateVisual(
-    {{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE},
-     {Toolkit::ImageVisual::Property::URL, nativeImageUrl}});
-
-  bool result = false;
-  if(mVisual)
+  if(!mVisual)
   {
-    DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, mVisual);
-    result = mWebEngine.LoadHtmlStringOverrideCurrentEntry(html, basicUri, unreachableUrl);
+    mWebEngine.FrameRenderedSignal().Connect(this, &WebView::OnInitialFrameRendered);
   }
 
-  if(mVideoHoleEnabled)
-  {
-    EnableBlendMode(false);
-  }
-  return result;
+  return mWebEngine.LoadHtmlStringOverrideCurrentEntry(html, basicUri, unreachableUrl);
 }
 
 bool WebView::LoadContents(const std::string& contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri)
@@ -359,24 +326,12 @@ bool WebView::LoadContents(const std::string& contents, uint32_t contentSize, co
   if(!mWebEngine)
     return false;
 
-  Texture           texture        = Dali::Texture::New(*mWebEngine.GetNativeImageSource());
-  const std::string nativeImageUrl = Dali::Toolkit::TextureManager::AddTexture(texture);
-  mVisual                          = Toolkit::VisualFactory::Get().CreateVisual(
-    {{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE},
-     {Toolkit::ImageVisual::Property::URL, nativeImageUrl}});
-
-  bool result = false;
-  if(mVisual)
+  if(!mVisual)
   {
-    DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, mVisual);
-    result = mWebEngine.LoadContents(contents, contentSize, mimeType, encoding, baseUri);
+    mWebEngine.FrameRenderedSignal().Connect(this, &WebView::OnInitialFrameRendered);
   }
 
-  if(mVideoHoleEnabled)
-  {
-    EnableBlendMode(false);
-  }
-  return result;
+  return mWebEngine.LoadContents(contents, contentSize, mimeType, encoding, baseUri);
 }
 
 void WebView::Reload()
@@ -874,6 +829,21 @@ void WebView::OnFrameRendered()
   }
 }
 
+void WebView::OnInitialFrameRendered()
+{
+  mWebEngine.FrameRenderedSignal().Disconnect(this, &WebView::OnInitialFrameRendered);
+
+  Texture           texture        = Dali::Texture::New(*mWebEngine.GetNativeImageSource());
+  const std::string nativeImageUrl = Dali::Toolkit::TextureManager::AddTexture(texture);
+  mVisual                          = Toolkit::VisualFactory::Get().CreateVisual({{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE}, {Toolkit::ImageVisual::Property::URL, nativeImageUrl}});
+
+  if(mVisual)
+  {
+    DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, mVisual);
+    EnableBlendMode(!mVideoHoleEnabled);
+  }
+}
+
 void WebView::OnVisibilityChanged(Actor actor, bool isVisible, Dali::DevelActor::VisibilityChange::Type type)
 {
   if(type == Dali::DevelActor::VisibilityChange::Type::SELF)
index a5cefa4..8cc532f 100755 (executable)
@@ -683,6 +683,11 @@ private:
   void OnFrameRendered();
 
   /**
+   * @brief Callback function to be called when frame is rendered. This is to check initial buffer is ready.
+   */
+  void OnInitialFrameRendered();
+
+  /**
    * @brief Callback function to be called when visibility is changed.
    * @param[in] actor The actor, or child of actor, whose visibility has changed
    * @param[in] isVisible Whether the actor is now visible or not