Modification the root plugins register function
authorHoseon LEE <hoseon46.lee@samsung.com>
Sat, 23 Mar 2013 07:21:33 +0000 (16:21 +0900)
committerHoseon LEE <hoseon46.lee@samsung.com>
Sat, 23 Mar 2013 07:21:33 +0000 (16:21 +0900)
[Issue#] N/A
[Problem] The implicit root plugins should be loaded by WRT
[Cause] WRT loads the explicit root plugins
[Solution] Modification the root plugins register function for the implicit
[SCMRequest] N/A

Change-Id: Id42bfab2be8b78616451444efda92e877aa18662

src/plugin-loading/js_page_session.cpp
src/plugin-loading/plugin_container_support.cpp
src/plugin-loading/plugin_container_support.h

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);