[Release] wrt-plugins-common_0.3.76 submit/tizen_2.1/20130326.084932
authorJihoon Chung <jihoon.chung@samsung.com>
Tue, 26 Mar 2013 08:49:06 +0000 (17:49 +0900)
committerJihoon Chung <jihoon.chung@samsung.com>
Tue, 26 Mar 2013 08:49:06 +0000 (17:49 +0900)
debian/changelog
packaging/wrt-plugins-common.spec
src/plugin-loading/js_page_session.cpp
src/plugin-loading/plugin_container_support.cpp
src/plugin-loading/plugin_container_support.h
src/wrt-popup/wrt/popup-runner/PopupInvoker.cpp
src/wrt-popup/wrt/popup-runner/PopupInvoker.h

index a1358e2..e55fa31 100644 (file)
@@ -1,3 +1,10 @@
+wrt-plugins-common (0.3.76) unstable; urgency=low
+
+  * Modification the root plugins register function
+  * Prevent issue fix
+
+ -- Jihoon Chung <jihoon.chung@samsung.com>  Tue, 26 Mar 2013 17:40:02 +0900
+
 wrt-plugins-common (0.3.75) unstable; urgency=low
 
   * Update unmerged source code
index 07a014e..473b1a1 100644 (file)
@@ -1,7 +1,7 @@
-#git:framework/web/wrt-plugins-common wrt-plugins-common_0.3.75
+#git:framework/web/wrt-plugins-common wrt-plugins-common_0.3.76
 Name:       wrt-plugins-common
 Summary:    wrt-plugins common library
-Version:    0.3.75
+Version:    0.3.76
 Release:    1
 Group:      Development/Libraries
 License:    Apache License, Version 2.0
index 91f8cec..2fe19cd 100644 (file)
@@ -67,7 +67,6 @@ using namespace WrtPlugins::W3C;
 
 namespace {
 const char *LIBRARY_PATH_SEPARATOR = "/";
-const char *TIZEN_ROOT_FEATURES = "http://tizen.org/privilege/tizen";
 }
 
 class JSPageSession::Impl
@@ -103,7 +102,7 @@ class JSPageSession::Impl
 
     void loadInjectedJavaScript();
     void installStandardFeatures();
-    void installRootFeatures();
+    void installRootPlugins();
     void installRequestedFeatures();
 
     //returns true if success or false if failed
@@ -191,13 +190,18 @@ void JSPageSession::Impl::installStandardFeatures()
     LogInfo("Standard widget features installed.");
 }
 
-void JSPageSession::Impl::installRootFeatures()
+void JSPageSession::Impl::installRootPlugins()
 {
-    LogInfo("Installing requested widget features...");
-    WrtDB::FeatureDAOReadOnly dao(TIZEN_ROOT_FEATURES);
-    auto plugin = m_pluginsSupport->getPluginModelById(dao.GetPluginHandle());
-    installPlugin(plugin);
-    LogInfo("requested root feature installed.");
+    LogInfo("Installing requested root plugins...");
+
+    PluginContainerSupport::PluginsList rootPlugins =
+                    m_pluginsSupport->getRootPlugins();
+    FOREACH(it, rootPlugins)
+    {
+        installPlugin(*it);
+    }
+
+    LogInfo("requested root plugins installed.");
 }
 
 bool JSPageSession::Impl::installPlugin(PluginModelPtr plugin)
@@ -517,7 +521,7 @@ void JSPageSession::Impl::startSession(int widgetHandle,
     WidgetDAOReadOnly dao(m_widgetHandle);
     WidgetType appType = dao.getWidgetType();
     if (appType == WrtDB::APP_TYPE_TIZENWEBAPP) {
-        installRootFeatures();
+        installRootPlugins();
     }
     // Register special features
     installRequestedFeatures();
index 5565e96..a9cf516 100644 (file)
@@ -29,7 +29,6 @@
 
 namespace {
 const char *STANDARD_FEATURES_LIST_FILE = "standard-features-list";
-const char *TIZEN_ROOT_FEATURES = "http://tizen.org/privilege/tizen";
 }
 
 using namespace WrtDB;
@@ -40,6 +39,9 @@ PluginContainerSupport::PluginContainerSupport() : m_initialized(false)
 {
     // Reading standard features list from file
     readStandardFeaturesList();
+
+    // Reading root plugins list from so files
+    readRootPluginsList();
 }
 
 PluginContainerSupport::~PluginContainerSupport()
@@ -112,8 +114,11 @@ void PluginContainerSupport::readRootPlugins(int widgetHandle)
     WidgetDAOReadOnly dao(widgetHandle);
     WidgetType appType = dao.getWidgetType();
     if (appType == WrtDB::APP_TYPE_TIZENWEBAPP) {
-        WrtDB::FeatureDAOReadOnly dao(TIZEN_ROOT_FEATURES);
-        registerPluginModel(dao.GetPluginHandle());
+         FOREACH(it_rootPluginHandle, m_rootPluginsList)
+        {
+            LogDebug("*it_rootPluginHandle: " << *it_rootPluginHandle);
+            registerPluginModel(*it_rootPluginHandle);
+        }
     } else {
         LogDebug("Not defined app type");
     }
@@ -204,6 +209,25 @@ void PluginContainerSupport::readStandardFeaturesList()
     standardFeatureFile.close();
 }
 
+void PluginContainerSupport::readRootPluginsList()
+{
+    LogDebug("Reading root plugins list from so files...");
+
+    PluginHandleList pluginHandleList =
+        PluginDAOReadOnly::getPluginHandleList();
+
+    FOREACH(it_pluginHandle, pluginHandleList)
+    {
+        PluginDAOReadOnly pluginDao(*it_pluginHandle);
+        PluginHandleSetPtr retDependencies;
+        retDependencies = pluginDao.getLibraryDependencies();
+        if (retDependencies->empty()) {
+            LogDebug("Root plugin Handle: " << *it_pluginHandle);
+            m_rootPluginsList.push_back(*it_pluginHandle);
+        }
+    }
+}
+
 FeatureModelPtr
 PluginContainerSupport::getFeatureModel(const std::string &name) const
 {
@@ -296,6 +320,25 @@ PluginContainerSupport::getStandardPlugins() const
 }
 
 PluginContainerSupport::PluginsList
+PluginContainerSupport::getRootPlugins() const
+{
+    PluginsList plugins;
+
+    FOREACH(it, m_rootPluginsList)
+    {
+        PluginModelPtr plugin = getPluginModelById(*it);
+        if (!plugin) {
+            LogError("PluginModel not found");
+            continue;
+        }
+
+        plugins.push_back(plugin);
+    }
+
+    return plugins;
+}
+
+PluginContainerSupport::PluginsList
 PluginContainerSupport::getPluginsList() const
 {
     LogDebug("");
index 1069cf9..c5df084 100644 (file)
@@ -48,6 +48,8 @@ class PluginContainerSupport
 
     StandardFeatureList m_standardFeatureList;
 
+    WrtDB::PluginHandleList m_rootPluginsList;
+
     PluginModelsContainer m_pluginModels;
 
     FeatureModelContainer m_featureModels;
@@ -57,6 +59,7 @@ class PluginContainerSupport
   private:
     // Reading
     void readStandardFeaturesList();
+    void readRootPluginsList();
 
     // Plugin models
     typedef std::multimap<WrtDB::FeatureHandle, std::string> DeviceCapList;
@@ -83,6 +86,7 @@ class PluginContainerSupport
     void readRootPlugins(int widgetHandle);
     FeaturesList getStandardFeatures() const;
     PluginsList  getStandardPlugins() const;
+    PluginsList  getRootPlugins() const;
     PluginsList  getPluginsList() const;
 
     PluginModelPtr getPluginForFeature(const std::string& featureName);
index 10997dc..28f32a1 100644 (file)
@@ -22,6 +22,7 @@
 #include <dpl/waitable_handle.h>
 #include <dpl/binary_queue.h>
 #include <dpl/serialization.h>
+#include <dpl/exception.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include "PopupEnum.h"
@@ -33,20 +34,20 @@ const char *POPUP_EXEC = "/usr/bin/wrt-popup-wrt-runtime";
 
 namespace Wrt {
 namespace Popup {
-PopupInvoker::PopupInvoker() :
-    m_inputName(tmpnam_r(NULL)),
-    m_outputName(tmpnam_r(NULL))
+PopupInvoker::PopupInvoker()
 {
-    Try
-    {
-        m_input.Create(m_inputName);
-        m_output.Create(m_outputName);
-        LogDebug("Pipes created");
-    }
-    Catch(DPL::Exception)
-    {
-        LogError("Cannot create pipes");
-    }
+    char tmp[L_tmpnam + 1];
+    if (NULL == tmpnam(tmp))
+        ThrowMsg(DPL::Exception, "Failed to get pipe name");
+    m_inputName = tmp;
+
+    if (NULL == tmpnam(tmp))
+        ThrowMsg(DPL::Exception, "Failed to get pipe name");
+    m_outputName = tmp;
+
+    m_input.Create(m_inputName);
+    m_output.Create(m_outputName);
+    LogDebug("Pipes created");
 }
 
 PopupInvoker::~PopupInvoker()
index 157640a..278db6d 100644 (file)
@@ -66,8 +66,8 @@ class PopupInvoker
 
     DPL::NamedInputPipe m_input;
     DPL::NamedOutputPipe m_output;
-    const std::string m_inputName;
-    const std::string m_outputName;
+    std::string m_inputName;
+    std::string m_outputName;
 };
 } // Popup
 } // Wrt