[M108 Aura Migration][NaCl][PPFW] Fix crash when get render process in UnregisterPepp... 04/290004/3
authorpengxia <pengxia.shen@samsung.com>
Fri, 17 Mar 2023 03:55:12 +0000 (11:55 +0800)
committerBot Blink <blinkbot@samsung.com>
Mon, 27 Mar 2023 12:30:32 +0000 (12:30 +0000)
EWeb View will destruct in EvasObjectDelete callback called.
If ewk_shutdown called before EvasObjectDelete, it may cause crash
during get render process in UnregisterPepperExtensionDelegate,
which is in EWeb View destructor.

This change is for DF190114-00719

from M94 Aura Patch:
https://review.tizen.org/gerrit/#/c/platform/framework/web/chromium-efl/+/279978/

Change-Id: I76685eb3ea0a9e2c1fcfc9aeedf476b52813ac05
Signed-off-by: pengxia <pengxia.shen@samsung.com>
tizen_src/ewk/efl_integration/eweb_view.cc
tizen_src/ewk/efl_integration/eweb_view.h

index 5ba9fd0..ae65b38 100644 (file)
@@ -358,6 +358,9 @@ EWebView::EWebView(Ewk_Context* context, Evas_Object* object)
       use_early_rwi_(false),
       rwi_info_showed_(false),
 #endif
+#if defined(TIZEN_PEPPER_EXTENSIONS)
+      render_frame_id_{0, 0},
+#endif
       is_initialized_(false) {
   LOG(INFO) << "EWebView: " << this;
   if (evas_object_) {
@@ -3251,11 +3254,8 @@ EwkExtensionSystemDelegate* EWebView::GetExtensionDelegate() {
   if (!render_frame_host)
     return nullptr;
 
-  ExtensionSystemDelegateManager::RenderFrameID id;
-  id.render_process_id = render_frame_host->GetProcess()->GetID();
-  id.render_frame_id = render_frame_host->GetRoutingID();
   return static_cast<EwkExtensionSystemDelegate*>(
-      ExtensionSystemDelegateManager::GetInstance()->GetDelegateForFrame(id));
+      ExtensionSystemDelegateManager::GetInstance()->GetDelegateForFrame(render_frame_id_));
 }
 
 void EWebView::SetWindowId() {
@@ -3299,13 +3299,12 @@ void EWebView::RegisterPepperExtensionDelegate() {
     return;
   }
 
-  ExtensionSystemDelegateManager::RenderFrameID id;
-  id.render_process_id = render_frame_host->GetProcess()->GetID();
-  id.render_frame_id = render_frame_host->GetRoutingID();
+  render_frame_id_.render_process_id = render_frame_host->GetProcess()->GetID();
+  render_frame_id_.render_frame_id = render_frame_host->GetRoutingID();
 
   EwkExtensionSystemDelegate* delegate = new EwkExtensionSystemDelegate;
   ExtensionSystemDelegateManager::GetInstance()->RegisterDelegate(
-      id, std::unique_ptr<EwkExtensionSystemDelegate>{delegate});
+      render_frame_id_, std::unique_ptr<EwkExtensionSystemDelegate>{delegate});
 }
 
 void EWebView::UnregisterPepperExtensionDelegate() {
@@ -3313,17 +3312,7 @@ void EWebView::UnregisterPepperExtensionDelegate() {
     LOG(WARNING) << "web_contents_ is nullptr, can't unregister delegate";
     return;
   }
-  RenderFrameHost* render_frame_host = web_contents_->GetPrimaryMainFrame();
-  if (!render_frame_host) {
-    LOG(WARNING) << "render_frame_host is nullptr, can't unregister delegate";
-    return;
-  }
-
-  ExtensionSystemDelegateManager::RenderFrameID id;
-  id.render_process_id = render_frame_host->GetProcess()->GetID();
-  id.render_frame_id = render_frame_host->GetRoutingID();
-
-  if (!ExtensionSystemDelegateManager::GetInstance()->UnregisterDelegate(id))
+  if (!ExtensionSystemDelegateManager::GetInstance()->UnregisterDelegate(render_frame_id_))
     LOG(WARNING) << "Unregistering pepper extension delegate failed";
 }
 #endif  // defined(TIZEN_PEPPER_EXTENSIONS)
index 981217e..ce0b1c1 100644 (file)
@@ -974,6 +974,9 @@ class EWebView {
   std::unique_ptr<EWebAccessibility> eweb_accessibility_;
   bool lazy_initialize_atk_ = false;
 #endif
+#if defined(TIZEN_PEPPER_EXTENSIONS)
+  content::ExtensionSystemDelegateManager::RenderFrameID render_frame_id_;
+#endif
 #if defined(TIZEN_VIDEO_HOLE)
   bool pending_video_hole_setting_ = false;
 #endif