[Release] livebox.web-provider-1.8 submit/tizen_2.1/20130417.121359
authorLukasz Marek <l.marek@samsung.com>
Fri, 12 Apr 2013 08:42:11 +0000 (10:42 +0200)
committerYunchan Cho <yunchan.cho@samsung.com>
Wed, 17 Apr 2013 12:00:27 +0000 (21:00 +0900)
Change-Id: I79f0d944e04e6564fe94d1e4e24d94f2456b7cfc

CMakeLists.txt
packaging/livebox.web-provider.spec
src/API/SqliteDB.cpp
src/API/web_provider_plugin_info.cpp
src/Daemon/BoxDaemonImpl.cpp
src/Daemon/BoxDaemonUtil.cpp
src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp
src/Plugin/BoxPluginConnector.cpp

index 67aa8f8..8315d5b 100644 (file)
@@ -25,6 +25,11 @@ IF(NOT CMAKE_BUILD_TYPE)
     SET(CMAKE_BUILD_TYPE "Release")
 ENDIF(NOT CMAKE_BUILD_TYPE)
 
+OPTION(MULTIPROCESS_SERVICE_SUPPORT "Process per service" OFF)
+IF(MULTIPROCESS_SERVICE_SUPPORT)
+    ADD_DEFINITIONS("-DMULTIPROCESS_SERVICE_SUPPORT")
+ENDIF(MULTIPROCESS_SERVICE_SUPPORT)
+
 # Compiler flags
 SET(CMAKE_C_FLAGS_PROFILING    "-O0 -g -pg")
 SET(CMAKE_CXX_FLAGS_PROFILING  "-O0 -std=c++0x -g -pg")
index 9c2cb3b..eba4dde 100644 (file)
@@ -1,6 +1,6 @@
 Name: livebox.web-provider
 Summary: web framework for livebox 
-Version: 1.7
+Version: 1.8
 Release: 1
 Group: main/app
 License: Flora License, Version 1.0
index 900bda7..fefa41d 100644 (file)
@@ -91,6 +91,7 @@ bool SqliteDB::setCommand(std::string& query, const char* fmt, ...)
             intValue = va_arg(ap, int);
             ret = sqlite3_bind_int(m_stmt, i + 1, intValue);
             if (ret != SQLITE_OK) {
+                va_end(ap);
                 return false;
             }
             break;
@@ -98,6 +99,7 @@ bool SqliteDB::setCommand(std::string& query, const char* fmt, ...)
             stringValue = va_arg(ap, char*);
             ret = sqlite3_bind_text(m_stmt, i + 1, stringValue, -1, NULL);
             if (ret != SQLITE_OK) {
+                va_end(ap);
                 return false;
             }
             break;
index 1262a5f..9a3ce08 100644 (file)
@@ -31,6 +31,7 @@
 #include <json-glib/json-glib.h>
 #include <Core/Util/Log.h>
 #include "web_provider_plugin_info.h"
+#include <memory>
 
 // static functions
 static web_provider_plugin_info* get_parsed_json_data(std::string& configPath);
@@ -52,7 +53,7 @@ static const std::string jsonMemberBoxId("service_boxid");
 
 web_provider_plugin_info** web_provider_plugin_get_installed_list(int* count)
 {
-    DIR* dir = opendir(installedPluginDirPath.c_str());
+    std::unique_ptr<DIR, int(*)(DIR*)> dir (opendir(installedPluginDirPath.c_str()), closedir);
     if (!dir) {
         LogD("failed to open directory for web livebox plugins");
         *count = 0;
@@ -64,7 +65,7 @@ web_provider_plugin_info** web_provider_plugin_get_installed_list(int* count)
     struct dirent* entry;
     struct stat configStat;
     std::string configPath;
-    while (entry = readdir(dir)) {
+    while ((entry = readdir(dir.get()))) {
         if (!strcmp(entry->d_name, ".") || 
                 !strcmp(entry->d_name, "..")) {
             continue;
@@ -94,8 +95,7 @@ web_provider_plugin_info** web_provider_plugin_get_installed_list(int* count)
     std::list<web_provider_plugin_info*> pluginList;
     for (auto it = configList.begin(); 
             it != configList.end(); it++) {
-        web_provider_plugin_info* info = 
-            get_parsed_json_data(*it);
+        web_provider_plugin_info* info = get_parsed_json_data(*it) ;
         if (!info) {
             continue;
         }
@@ -138,16 +138,19 @@ void web_provider_plugin_release_installed_list(
     for (int i = 0; i < count; i++) {
         if (info_list[i]) {
             if (info_list[i]->type) {
-                free(const_cast<char*>(info_list[i]->type));
+                delete[] info_list[i]->type;
             }
             if (info_list[i]->path) {
-                free(const_cast<char*>(info_list[i]->path));
+                delete[] info_list[i]->path;
             }
             if (info_list[i]->service_boxid) {
-                free(const_cast<char*>(info_list[i]->service_boxid));
+                delete[] info_list[i]->service_boxid;
             }
         }
     }
+    if (info_list) {
+        delete[] info_list;
+    }
 }
 
 static web_provider_plugin_info* get_parsed_json_data(std::string& configPath)
index 016bc78..8bccd36 100644 (file)
@@ -125,12 +125,13 @@ int BoxDaemonImpl::boxCreateCallback(
 
     if ((arg->info.lb_create.width == 0) || (arg->info.lb_create.height == 0)) {
         livebox_service_get_size(LB_SIZE_TYPE_1x1, width, height);
-        arg->info.lb_create.width = *width;
-        arg->info.lb_create.height = *height;
+    } else {
+        *width = arg->info.lb_create.width;
+        *height = arg->info.lb_create.height;
     }
 
-    info->boxWidth = arg->info.lb_create.width;
-    info->boxHeight = arg->info.lb_create.height;
+    info->boxWidth = *width;
+    info->boxHeight = *height;
     info->priority = 1.0f;
     info->period = arg->info.lb_create.period;
     if (arg->info.lb_create.content) {
@@ -146,10 +147,10 @@ int BoxDaemonImpl::boxCreateCallback(
     LogD("update period: %d", info->period);
     LogD("--------------------------------------------");
 
-    JobInfo* jobInfo = new JobInfo(REQUEST_CMD_ADD_BOX, info, This);
-    Ecore_Job* ret = ecore_job_add(requestBoxJobCallback, jobInfo);
-
-    return ret ? 0 : -1;
+    return ecore_job_add(
+                    requestBoxJobCallback,
+                    new JobInfo(REQUEST_CMD_ADD_BOX, info, This))
+                    ? 0 : -1;
 }
 
 int BoxDaemonImpl::boxReCreateCallback(ProviderEventArgPtr arg, void* data)
@@ -188,10 +189,10 @@ int BoxDaemonImpl::boxReCreateCallback(ProviderEventArgPtr arg, void* data)
     LogD("update period: %f", info->period);
     LogD("--------------------------------------------");
 
-    JobInfo* jobInfo = new JobInfo(REQUEST_CMD_ADD_BOX, info, This);
-    Ecore_Job* ret = ecore_job_add(requestBoxJobCallback, jobInfo);
-
-    return ret ? 0 : -1;
+    return ecore_job_add(
+                    requestBoxJobCallback,
+                    new JobInfo(REQUEST_CMD_ADD_BOX, info, This))
+                    ? 0 : -1;
 }
 
 int BoxDaemonImpl::boxDestroyCallback(ProviderEventArgPtr arg, void* data)
@@ -209,10 +210,10 @@ int BoxDaemonImpl::boxDestroyCallback(ProviderEventArgPtr arg, void* data)
     LogD("InstanceId: %s", info->instanceId.c_str());
     LogD("--------------------------------------------");
 
-    JobInfo* jobInfo = new JobInfo(REQUEST_CMD_REMOVE_BOX, info, This);
-    Ecore_Job* ret = ecore_job_add(requestBoxJobCallback, jobInfo);
-
-    return ret ? 0 : -1;
+    return ecore_job_add(
+                    requestBoxJobCallback,
+                    new JobInfo(REQUEST_CMD_REMOVE_BOX, info, This))
+                    ? 0 : -1;
 }
 
 int BoxDaemonImpl::pdCreateCallback(ProviderEventArgPtr arg, void* data)
@@ -238,10 +239,10 @@ int BoxDaemonImpl::pdCreateCallback(ProviderEventArgPtr arg, void* data)
     LogD("height: %d", info->pdHeight);
     LogD("--------------------------------------------");
 
-    JobInfo* jobInfo = new JobInfo(REQUEST_CMD_OPEN_PD, info, This);
-    Ecore_Job* ret = ecore_job_add(requestBoxJobCallback, jobInfo);
-
-    return ret ? 0 : -1;
+    return ecore_job_add(
+                requestBoxJobCallback,
+                new JobInfo(REQUEST_CMD_OPEN_PD, info, This))
+                ? 0 : -1;
 }
 
 int BoxDaemonImpl::pdDestroyCallback(ProviderEventArgPtr arg, void* data)
@@ -259,10 +260,10 @@ int BoxDaemonImpl::pdDestroyCallback(ProviderEventArgPtr arg, void* data)
     LogD("InstanceId: %s", info->instanceId.c_str());
     LogD("--------------------------------------------");
 
-    JobInfo* jobInfo = new JobInfo(REQUEST_CMD_CLOSE_PD, info, This);
-    Ecore_Job* ret = ecore_job_add(requestBoxJobCallback, jobInfo);
-
-    return ret ? 0 : -1;
+    return ecore_job_add(
+                requestBoxJobCallback,
+                new JobInfo(REQUEST_CMD_CLOSE_PD, info, This))
+                ? 0 : -1;
 }
 
 int BoxDaemonImpl::clickedCallback(ProviderEventArgPtr arg, void* data)
@@ -308,10 +309,10 @@ int BoxDaemonImpl::resizeCallback(ProviderEventArgPtr arg, void* data)
     LogD("height: %d", info->boxHeight);
     LogD("--------------------------------------------");
 
-    JobInfo* jobInfo = new JobInfo(REQUEST_CMD_RESIZE_BOX, info, This);
-    Ecore_Job* ret = ecore_job_add(requestBoxJobCallback, jobInfo);
-
-    return ret ? 0 : -1;
+    return ecore_job_add(
+                requestBoxJobCallback,
+                new JobInfo(REQUEST_CMD_RESIZE_BOX, info, This))
+                ? 0 : -1;
 }
 
 int BoxDaemonImpl::boxPauseCallback(ProviderEventArgPtr arg, void* data)
@@ -330,10 +331,10 @@ int BoxDaemonImpl::boxPauseCallback(ProviderEventArgPtr arg, void* data)
     LogD("InstanceId: %s", info->instanceId.c_str());
     LogD("--------------------------------------------");
 
-    JobInfo* jobInfo = new JobInfo(REQUEST_CMD_PAUSE_BOX, info, This);
-    Ecore_Job* ret = ecore_job_add(requestBoxJobCallback, jobInfo);
-
-    return ret ? 0 : -1;
+    return ecore_job_add(
+                requestBoxJobCallback,
+                new JobInfo(REQUEST_CMD_PAUSE_BOX, info, This))
+                ? 0 : -1;
 }
 
 int BoxDaemonImpl::boxResumeCallback(ProviderEventArgPtr arg, void* data)
@@ -352,10 +353,10 @@ int BoxDaemonImpl::boxResumeCallback(ProviderEventArgPtr arg, void* data)
     LogD("InstanceId: %s", info->instanceId.c_str());
     LogD("--------------------------------------------");
 
-    JobInfo* jobInfo = new JobInfo(REQUEST_CMD_RESUME_BOX, info, This);
-    Ecore_Job* ret = ecore_job_add(requestBoxJobCallback, jobInfo);
-
-    return ret ? 0 : -1;
+    return ecore_job_add(
+                requestBoxJobCallback,
+                new JobInfo(REQUEST_CMD_RESUME_BOX, info, This))
+                ? 0 : -1;
 }
 
 int BoxDaemonImpl::pauseCallback(ProviderEventArgPtr arg, void* data)
@@ -368,10 +369,10 @@ int BoxDaemonImpl::pauseCallback(ProviderEventArgPtr arg, void* data)
     LogD("web-provider is paused");
     LogD("--------------------------------------------");
 
-    JobInfo* jobInfo = new JobInfo(REQUEST_CMD_PAUSE_ALL, BoxInfoPtr(), This);
-    Ecore_Job* ret = ecore_job_add(requestBoxJobCallback, jobInfo);
-
-    return ret ? 0 : -1;
+    return ecore_job_add(
+                requestBoxJobCallback,
+                new JobInfo(REQUEST_CMD_PAUSE_ALL, BoxInfoPtr(), This))
+                ? 0 : -1;
 }
 
 int BoxDaemonImpl::resumeCallback(ProviderEventArgPtr arg, void* data)
@@ -384,10 +385,10 @@ int BoxDaemonImpl::resumeCallback(ProviderEventArgPtr arg, void* data)
     LogD("web-provider is resumed");
     LogD("--------------------------------------------");
 
-    JobInfo* jobInfo = new JobInfo(REQUEST_CMD_RESUME_ALL, BoxInfoPtr(), This);
-    Ecore_Job* ret = ecore_job_add(requestBoxJobCallback, jobInfo);
-
-    return ret ? 0 : -1;
+    return ecore_job_add(
+                requestBoxJobCallback,
+                new JobInfo(REQUEST_CMD_RESUME_ALL, BoxInfoPtr(), This))
+                ? 0 : -1;
 }
 
 int BoxDaemonImpl::updateContentCallback(ProviderEventArgPtr arg, void* data)
@@ -413,10 +414,10 @@ int BoxDaemonImpl::changePeriodCallback(ProviderEventArgPtr arg, void* data)
     LogD("period: %f", info->period);
     LogD("--------------------------------------------");
 
-    JobInfo* jobInfo = new JobInfo(REQUEST_CMD_CHANGE_PERIOD, info, This);
-    Ecore_Job* ret = ecore_job_add(requestBoxJobCallback, jobInfo);
-
-    return ret ? 0 : -1;
+    return ecore_job_add(
+                requestBoxJobCallback,
+                new JobInfo(REQUEST_CMD_CHANGE_PERIOD, info, This))
+                ? 0 : -1;
 }
 
 void BoxDaemonImpl::setProviderCallbacks(ProviderCallbacks& callbacks)
@@ -450,9 +451,10 @@ const char* BoxDaemonImpl::getBoxType(const char* boxId)
     }
     
     const char* type = web_provider_livebox_get_box_type(boxId);
+    std::string boxType;
     if (!type) {
         std::string serviceBoxId(boxId);
-        std::string boxType = m_pluginConnector->getBoxType(serviceBoxId);
+        boxType = m_pluginConnector->getBoxType(serviceBoxId);
         if (boxType.empty()) {
             LogD("unrecognized box id");
             return NULL; 
@@ -482,7 +484,10 @@ BoxInfoPtr BoxDaemonImpl::initializeBoxInfo(ProviderEventArgPtr arg)
         return BoxInfoPtr();
     }
 
-    return BoxInfoPtr(new BoxInfo(type, arg->pkgname, arg->id));
+    BoxInfoPtr infoPtr = BoxInfoPtr(new BoxInfo(type, arg->pkgname, arg->id));
+    delete[] type;
+
+    return infoPtr;
 }
 
 Eina_Bool BoxDaemonImpl::pingToMasterCallback(void* data)
index 9719b43..de79683 100644 (file)
@@ -49,6 +49,7 @@ bool BoxDaemonUtil::launchApplication(std::string& boxId, std::string& instanceI
     if (ret != SERVICE_ERROR_NONE) {
         LogD("failed to set package");
         service_destroy(handle);
+        delete[] appId;
         return false;
     }
 
@@ -59,10 +60,12 @@ bool BoxDaemonUtil::launchApplication(std::string& boxId, std::string& instanceI
     if (ret != SERVICE_ERROR_NONE) {
         LogD("failed to launch package");
         service_destroy(handle);
+        delete[] appId;
         return false;
     }
 
     service_destroy(handle);
     LogD("success to launch app of %s", boxId.c_str());
+    delete[] appId;
     return true;
 }
index 1cc3404..f496455 100644 (file)
@@ -116,10 +116,13 @@ bool AppBoxRenderView::createView()
         m_view.reset();
         m_baseWebView = NULL;
     }
-
+#ifdef MULTIPROCESS_SERVICE_SUPPORT
+    m_view = WRT::CoreModuleSingleton::
+                Instance().getRunnableWidgetObject(m_appId, DPL::Optional<unsigned>());
+#else
     m_view = WRT::CoreModuleSingleton::
                 Instance().getRunnableWidgetObject(m_appId);
-
+#endif
     // prepare webview
     if (m_startUrl.empty()) {
         LogD("no start url");
@@ -152,6 +155,7 @@ bool AppBoxRenderView::destroyView()
     LogD("enter");
 
     m_renderBuffer->stopCanvasUpdate();
+    deleteRenderTimer();
     if (m_view) {
         m_view->Hide();
         m_view.reset();
@@ -197,9 +201,8 @@ void AppBoxRenderView::hidePd()
     m_pdHelper->close();
     m_pdHelper.reset();
 
-    // destory box webview to stop rendering
-    evas_object_show(getCurrentSnapShot());
-    destroyView();
+    // stop box webview after render timer
+    addRenderTimer();
 }
 
 std::string AppBoxRenderView::getAppId(std::string& boxId)
index 9f62912..3b42b01 100644 (file)
@@ -46,8 +46,9 @@ bool BoxPluginConnector::initialize()
         return false;
     }
 
-    if (!(count > 0)) {
+    if (count <= 0) {
         LogD("There is no available livebox plugins");
+        web_provider_plugin_release_installed_list(pluginList, count);
         return false;
     }