[M67 Migration] Add "frame,rendered" message and DidRenderFrame() callback 12/189512/3
authorGajendra N <gajendra.n@samsung.com>
Wed, 14 Mar 2018 09:36:10 +0000 (15:06 +0530)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Wed, 19 Sep 2018 13:08:34 +0000 (13:08 +0000)
Below patches have been migrated from m56 beta:

[1] Add "frame,rendered" message and DidRenderFrame() callback
    https://review.tizen.org/gerrit/#/c/118118

[2] Added a function to send "frame,rendered" SmartCallback
    https://review.tizen.org/gerrit/#/c/143556

[3] Keep frame,rendered can call correctly if page loading fast.
    https://review.tizen.org/gerrit/#/c/145079

[4] Remove FrameRendered callback in LoadProgressChanged
    https://review.tizen.org/gerrit/#/c/163533

Change-Id: I6bee5bd3d299046abca330f0320cacc57935bfe8
Signed-off-by: Gajendra N <gajendra.n@samsung.com>
Signed-off-by: Uzair <uzair.jaleel@samsung.com>
content/public/browser/web_contents_delegate.h
content/renderer/render_widget.cc
tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc
tizen_src/ewk/efl_integration/web_contents_delegate_efl.cc
tizen_src/ewk/efl_integration/web_contents_delegate_efl.h

index 28cf408..9834972 100644 (file)
@@ -427,6 +427,10 @@ class CONTENT_EXPORT WebContentsDelegate {
                          int active_match_ordinal,
                          bool final_update) {}
 
+#if defined(USE_EFL)
+  virtual void DidRenderFrame() {}
+#endif
+
 #if defined(OS_ANDROID)
   // Provides the rects of the current find-in-page matches.
   // Sent as a reply to RequestFindMatchRects.
index 889e1b4..accbed6 100644 (file)
@@ -1532,8 +1532,12 @@ void RenderWidget::WillCloseLayerTreeView() {
 
 void RenderWidget::DidMeaningfulLayout(blink::WebMeaningfulLayout layout_type) {
   if (layout_type == blink::WebMeaningfulLayout::kVisuallyNonEmpty) {
+#if defined(USE_EFL)
+    Send(new ViewHostMsg_DidFirstVisuallyNonEmptyPaint(routing_id_));
+#else
     QueueMessage(new ViewHostMsg_DidFirstVisuallyNonEmptyPaint(routing_id_),
                  MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE);
+#endif
   }
 
   for (auto& observer : render_frames_)
index 83b44cd..a379e65 100644 (file)
@@ -391,6 +391,7 @@ void RenderWidgetHostViewEfl::SwapBrowserFrame(
   DCHECK(evasgl_delegated_frame_host_);
   evasgl_delegated_frame_host_->SwapDelegatedFrame(local_surface_id,
                                                    std::move(frame));
+  web_contents_.GetDelegate()->DidRenderFrame();
   Invalidate(false);
 }
 
index 2c57091..b6602bc 100644 (file)
@@ -92,6 +92,8 @@ WebContentsDelegateEfl::WebContentsDelegateEfl(EWebView* view)
       web_view_(view),
       is_fullscreen_(false),
       web_contents_(view->web_contents()),
+      did_render_frame_(false),
+      did_first_visually_non_empty_paint_(false),
       document_created_(false),
       dialog_manager_(NULL),
       weak_ptr_factory_(this) {
@@ -474,6 +476,23 @@ void WebContentsDelegateEfl::FindReply(WebContents* web_contents,
   }
 }
 
+void WebContentsDelegateEfl::DidRenderFrame() {
+  // Call FrameRendered callback when loading and first layout is finished.
+  if (!did_render_frame_ && did_first_visually_non_empty_paint_ &&
+      (web_view_->GetProgressValue() > 0.1)) {
+    did_first_visually_non_empty_paint_ = false;
+    did_render_frame_ = true;
+#if defined(USE_TTRACE)
+    TTRACE_WEB("WebContentsDelegateEfl::DidRenderFrame");
+#endif
+    LOG(INFO) << "WebContentsDelegateEfl::DidRenderFrame";
+
+    // "frame,rendered" message is triggered as soon as rendering of a frame
+    // is completed.
+    web_view_->SmartCallback<EWebViewCallbacks::FrameRendered>().call(0);
+  }
+}
+
 JavaScriptDialogManager* WebContentsDelegateEfl::GetJavaScriptDialogManager(
     WebContents* source) {
   if (!dialog_manager_)
@@ -560,9 +579,13 @@ void WebContentsDelegateEfl::OnWrtPluginSyncMessage(
 }
 
 void WebContentsDelegateEfl::DidFirstVisuallyNonEmptyPaint() {
+  did_first_visually_non_empty_paint_ = true;
   web_view_->SmartCallback<EWebViewCallbacks::LoadNonEmptyLayoutFinished>()
       .call();
-  web_view_->SmartCallback<EWebViewCallbacks::FrameRendered>().call(0);
+}
+
+void WebContentsDelegateEfl::DidStartLoading() {
+  did_render_frame_ = false;
 }
 
 void WebContentsDelegateEfl::OnGetContentSecurityPolicy(
index d06f26b..1aa643e 100644 (file)
@@ -94,6 +94,8 @@ class WebContentsDelegateEfl : public WebContentsDelegate,
                  int active_match_ordinal,
                  bool final_update) override;
 
+  void DidRenderFrame() override;
+
   void RequestCertificateConfirm(
       WebContents* web_contents,
       int cert_error,
@@ -112,6 +114,7 @@ class WebContentsDelegateEfl : public WebContentsDelegate,
                                 Ewk_CSP_Header_Type header_type);
 
   void DidFirstVisuallyNonEmptyPaint() override;
+  void DidStartLoading() override;
 
   bool OnMessageReceived(const IPC::Message& message) override;
   void OnPrintedMetafileReceived(const DidPrintPagesParams& params);
@@ -200,6 +203,9 @@ class WebContentsDelegateEfl : public WebContentsDelegate,
   bool is_fullscreen_;
   WebContents& web_contents_;
 
+  bool did_render_frame_;
+  bool did_first_visually_non_empty_paint_;
+
   struct ContentSecurityPolicy {
     ContentSecurityPolicy(const std::string& p, Ewk_CSP_Header_Type type)
         : policy(p), header_type(type) {}