Fixed crash issue occurred when terminating App using HOME Key 88/188388/7 accepted/tizen/unified/20180912.061624 submit/tizen/20180911.073008
authorjaekuk, lee <juku1999@samsung.com>
Tue, 4 Sep 2018 10:23:17 +0000 (19:23 +0900)
committerjaekuk, lee <juku1999@samsung.com>
Thu, 6 Sep 2018 09:13:00 +0000 (18:13 +0900)
Change-Id: Iecdadb9e2baf5c41b8389576dc7103ac63534b9a
Signed-off-by: jaekuk, lee <juku1999@samsung.com>
runtime/browser/web_application.cc
runtime/browser/web_application.h

index 9039ca7..2b8eb4a 100755 (executable)
@@ -775,7 +775,7 @@ void WebApplication::OnCreatedNewWebView(WebView* /*view*/, WebView* new_view) {
   vc_webview_->vc_webview_set_view(new_view->evas_object());
 }
 
-void WebApplication::RemoveWebViewFromStack(WebView* view) {
+void WebApplication::RemoveWebViewFromStack(WebView* view, bool is_closed_webview_called) {
   if (view_stack_.size() == 0)
     return;
 
@@ -815,13 +815,17 @@ void WebApplication::RemoveWebViewFromStack(WebView* view) {
     vc_webview_->vc_webview_set_view(view_stack_.front()->evas_object());
   }
 
-  // Delete after the callback context(for ewk view) was not used
-  ecore_idler_add([](void* view) {
-                    WebView* obj = static_cast<WebView*>(view);
-                    delete obj;
-                    return EINA_FALSE;
-                  },
-                  view);
+  if (is_closed_webview_called)
+    delete view;
+  else {
+    // Delete after the callback context(for ewk view) was not used
+    ecore_idler_add([](void* view) {
+                      WebView* obj = static_cast<WebView*>(view);
+                      delete obj;
+                      return EINA_FALSE;
+                    },
+                    view);
+  }
 }
 
 Eina_Bool WebApplication::CheckPluginSession(void* user_data)
@@ -842,7 +846,7 @@ Eina_Bool WebApplication::CheckPluginSession(void* user_data)
 void WebApplication::OnClosedWebView(WebView* view) {
   // Reply to javascript dialog for preventing freeze issue.
   view->ReplyToJavascriptDialog();
-  RemoveWebViewFromStack(view);
+  RemoveWebViewFromStack(view, true);
 
 #if defined(TIZEN_PRODUCT_TV)
   LOGGER(DEBUG) << "plugin_session_count : " <<
@@ -1011,7 +1015,7 @@ void WebApplication::OnHardwareKey(WebView* view, const std::string& keyname) {
           LOGGER(DEBUG) << "Terminate";
           Terminate();
         } else {
-          RemoveWebViewFromStack(view_stack_.front());
+          RemoveWebViewFromStack(view_stack_.front(), false);
         }
       }
     }
@@ -1031,7 +1035,7 @@ void WebApplication::OnHardwareKey(WebView* view, const std::string& keyname) {
           LOGGER(DEBUG) << "Terminate";
           Terminate();
         } else {
-          RemoveWebViewFromStack(view_stack_.front());
+          RemoveWebViewFromStack(view_stack_.front(), false);
         }
       }
 
index a724a09..af4fce2 100755 (executable)
@@ -125,7 +125,7 @@ class WebApplication : public WebView::EventListener {
   void LaunchInspector(common::AppControl* appcontrol);
   void SetupWebView(WebView* view);
   void SetupWebViewCompatibilitySettings(WebView* view);
-  void RemoveWebViewFromStack(WebView* view);
+  void RemoveWebViewFromStack(WebView* view, bool is_closed_webview_called);
 
   void SetupTizenVersion();
   bool tizenWebKitCompatibilityEnabled() const;