Avoid force close on OpenPanel
authorJihye Kang <jye.kang@samsung.com>
Fri, 4 Oct 2013 08:15:26 +0000 (17:15 +0900)
committerGerrit Code Review <gerrit@gerrit.vlan144.tizendev.org>
Fri, 4 Oct 2013 08:33:44 +0000 (08:33 +0000)
[Title] Avoid force close on OpenPanel
[Issue#] N_SE-53655
[Problem] Internet has closed unexpectedly due to upload giant image
[Cause] removed view is referenced
[Solution] Reply error on service launch rather than return without reply error and clear member varialbe on destructing openPanel for avoiding illegal reference of view.

Change-Id: Iaf972c89f0e8732208f2aa42a4779ae2634b0848

Source/WebKit2/UIProcess/API/efl/tizen/OpenPanel.cpp

index 4f01a75..acae696 100755 (executable)
@@ -35,6 +35,7 @@ OpenPanel::OpenPanel(Evas_Object* ewkView)
 
 OpenPanel::~OpenPanel()
 {
+    m_ewkView = 0;
     close();
 }
 
@@ -122,13 +123,19 @@ static void _cameraResultCb(service_h request, service_h reply, service_result_e
     OpenPanel* openPanel = static_cast<OpenPanel*>(data);
 
     TIZEN_LOGI("result(%d)", result);
+    if (!openPanel->ewkView()) {
+        TIZEN_LOGE("view does not exist");
+        return;
+    }
 
     if (result == SERVICE_RESULT_SUCCEEDED) {
         char** resultFileNames = 0;
         int length = 0;
         int ret = service_get_extra_data_array(reply, SERVICE_DATA_SELECTED, &resultFileNames, &length);
-        if (ret != SERVICE_ERROR_NONE)
+        if (ret != SERVICE_ERROR_NONE) {
+            ewk_view_open_panel_reply(openPanel->ewkView(), 0, false);
             return;
+        }
 
         if (length) {
              Eina_List* list = 0;
@@ -145,12 +152,10 @@ static void _cameraResultCb(service_h request, service_h reply, service_result_e
                 list = eina_list_append(list, fileName);
             }
             ewk_view_open_panel_reply(openPanel->ewkView(), list, true);
-        } else {
+        } else
             ewk_view_open_panel_reply(openPanel->ewkView(), 0, false);
-        }
-    } else {
+    } else
         ewk_view_open_panel_reply(openPanel->ewkView(), 0, false);
-    }
 }
 
 bool OpenPanel::_capturePicture()