Support plugin without feature define
authorJihoon Chung <jihoon.chung@samsung.com>
Thu, 13 Dec 2012 10:59:03 +0000 (19:59 +0900)
committerJihoon Chung <jihoon.chung@samsung.com>
Tue, 18 Dec 2012 05:27:51 +0000 (14:27 +0900)
[Issue#] N/A
[Problem] N/A
[Cause] N/A
[Solution] Support plugin without feature define in the config.xml
Plugin will be controlled by access control
[SCMRequest] N/A

Change-Id: I9d4c0ba7953629bb75182abdc9d6e97a2fa51728

src/modules/tizen/PluginManager/PluginManager.cpp
src/plugin-loading/js_page_session.cpp
src/plugin-loading/plugin_container_support.cpp
src/plugin-loading/plugin_container_support.h
src/plugin-loading/plugin_logic.cpp

index 0f23423..d7c6080 100644 (file)
@@ -90,10 +90,12 @@ bool PluginManager::loadChild(const string &name) const
     }
 
     WrtDB::DbWidgetFeatureSet features;
+    WrtDB::WidgetType widgetType;
     Try
     {
         WrtDB::WidgetDAOReadOnly dao(m_widgetHandle);
         features = dao.getFeaturesList();
+        widgetType = dao.getWidgetType();
     }
     Catch(WrtDB::WidgetDAOReadOnly::Exception::Base)
     {
@@ -103,6 +105,13 @@ bool PluginManager::loadChild(const string &name) const
         return false;
     }
 
+    if (widgetType == WrtDB::APP_TYPE_TIZENWEBAPP) {
+        JavaScriptObject jsObject = {m_objectInstance,
+                                          m_shortUri};
+        return PluginLogicSingleton::Instance().loadPluginOnDemand(
+            handle, jsObject, const_cast<JSGlobalContextRef>(m_context));
+    }
+
     //check does plugin with feature was requested
     FOREACH (it, features)
     {
index 2262e2d..1534d24 100644 (file)
@@ -67,6 +67,7 @@ using namespace WrtPlugins::W3C;
 
 namespace {
 const char *LIBRARY_PATH_SEPARATOR = "/";
+const char *TIZEN_ROOT_FEATURES = "http://tizen.org/privilege/tizen";
 }
 
 class JSPageSession::Impl
@@ -102,6 +103,7 @@ class JSPageSession::Impl
 
     void loadInjectedJavaScript();
     void installStandardFeatures();
+    void installRootFeatures();
     void installRequestedFeatures();
 
     //returns true if success or false if failed
@@ -189,6 +191,15 @@ void JSPageSession::Impl::installStandardFeatures()
     LogInfo("Standard widget features installed.");
 }
 
+void JSPageSession::Impl::installRootFeatures()
+{
+    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.");
+}
+
 bool JSPageSession::Impl::installPlugin(PluginModelPtr plugin)
 {
     Assert(plugin && "Plugin Model is NULL");
@@ -279,13 +290,16 @@ bool JSPageSession::Impl::loadPluginOnDemand(
 //        return;
 //    }
 //
-    auto plugin = m_pluginsSupport->getPluginModelById(pluginHandle);
-    if (!plugin) {
-        LogError("Failed to load plugin. plugin handle: " << pluginHandle);
-        return false;
-    }
-
-    return installPluginOnDemand(plugin,parentObject,context);
+//    auto plugin = m_pluginsSupport->getPluginModelById(pluginHandle);
+//    if (!plugin) {
+//        LogError("Failed to load plugin. plugin handle: " << pluginHandle);
+//        return false;
+//    }
+    m_pluginsSupport->registerPluginModel(pluginHandle);
+    return installPluginOnDemand(
+        m_pluginsSupport->getPluginModelById(pluginHandle),
+        parentObject,
+        context);
 }
 
 bool JSPageSession::Impl::installPluginOnDemand(PluginModelPtr plugin,
@@ -498,6 +512,11 @@ void JSPageSession::Impl::startSession(int widgetHandle,
     // Register standard features
     installStandardFeatures();
 
+    WidgetDAOReadOnly dao(m_widgetHandle);
+    WidgetType appType = dao.getWidgetType();
+    if (appType == WrtDB::APP_TYPE_TIZENWEBAPP) {
+        installRootFeatures();
+    }
     // Register special features
     installRequestedFeatures();
 
index 7094056..6bc1d31 100644 (file)
 #include <fstream>
 
 #include <dpl/foreach.h>
+#include <dpl/wrt-dao-ro/feature_dao_read_only.h>
 #include <dpl/wrt-dao-ro/global_config.h>
 
 namespace {
 const char *STANDARD_FEATURES_LIST_FILE = "standard-features-list";
+const char *TIZEN_ROOT_FEATURES = "http://tizen.org/privilege/tizen";
 }
 
 using namespace WrtDB;
@@ -93,6 +95,19 @@ void PluginContainerSupport::readAllowedPlugins(int widgetHandle)
     m_initialized = true;
 }
 
+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());
+    } else {
+        LogDebug("Not defined app type");
+    }
+    m_initialized = true;
+}
+
 void PluginContainerSupport::registerFeatureModel(FeatureHandle handle, FeatureData* data, DeviceCapList deviceCapabilities)
 {
     LogDebug("Analyzing feature: " << handle);
index 1211318..9186e70 100644 (file)
@@ -59,7 +59,6 @@ private:
     void readStandardFeaturesList();
 
     // Plugin models
-    void registerPluginModel(WrtDB::DbPluginHandle handle);
     typedef std::multimap<WrtDB::FeatureHandle, std::string> DeviceCapList;
     void registerFeatureModel(WrtDB::FeatureHandle handle, WrtDB::FeatureData* data, DeviceCapList deviceCapabilities);
 
@@ -72,9 +71,10 @@ public:
     PluginContainerSupport();
 
     bool isInitialized() { return m_initialized; }
+    void registerPluginModel(WrtDB::DbPluginHandle handle);
     std::list<std::string> getAllowedFeatures(int widgetHandle) const;
     void readAllowedPlugins(int widgetHandle);
-
+    void readRootPlugins(int widgetHandle);
     FeaturesList getStandardFeatures() const;
     PluginsList  getStandardPlugins() const;
 
index 315bb74..dbb45b7 100644 (file)
@@ -238,9 +238,10 @@ void PluginLogic::Impl::startSession(int widgetHandle,
 {
     LogInfo("Starting widget session...");
 
-    if (!m_pluginsSupport->isInitialized())
+    if (!m_pluginsSupport->isInitialized()) {
+        m_pluginsSupport->readRootPlugins(widgetHandle);
         m_pluginsSupport->readAllowedPlugins(widgetHandle);
-
+    }
     auto sessionIt = m_sessions.find(context);
 
     // Check if corresponding session if not already created