From c50824c8c589c5261a10c13f8cd6689d5481f953 Mon Sep 17 00:00:00 2001 From: Jihoon Chung Date: Thu, 13 Dec 2012 19:59:03 +0900 Subject: [PATCH] Support plugin without feature define [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 | 9 +++++++ src/plugin-loading/js_page_session.cpp | 33 ++++++++++++++++++----- src/plugin-loading/plugin_container_support.cpp | 15 +++++++++++ src/plugin-loading/plugin_container_support.h | 4 +-- src/plugin-loading/plugin_logic.cpp | 5 ++-- 5 files changed, 55 insertions(+), 11 deletions(-) diff --git a/src/modules/tizen/PluginManager/PluginManager.cpp b/src/modules/tizen/PluginManager/PluginManager.cpp index 0f23423..d7c6080 100644 --- a/src/modules/tizen/PluginManager/PluginManager.cpp +++ b/src/modules/tizen/PluginManager/PluginManager.cpp @@ -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(m_context)); + } + //check does plugin with feature was requested FOREACH (it, features) { diff --git a/src/plugin-loading/js_page_session.cpp b/src/plugin-loading/js_page_session.cpp index 2262e2d..1534d24 100644 --- a/src/plugin-loading/js_page_session.cpp +++ b/src/plugin-loading/js_page_session.cpp @@ -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(); diff --git a/src/plugin-loading/plugin_container_support.cpp b/src/plugin-loading/plugin_container_support.cpp index 7094056..6bc1d31 100644 --- a/src/plugin-loading/plugin_container_support.cpp +++ b/src/plugin-loading/plugin_container_support.cpp @@ -24,10 +24,12 @@ #include #include +#include #include 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); diff --git a/src/plugin-loading/plugin_container_support.h b/src/plugin-loading/plugin_container_support.h index 1211318..9186e70 100644 --- a/src/plugin-loading/plugin_container_support.h +++ b/src/plugin-loading/plugin_container_support.h @@ -59,7 +59,6 @@ private: void readStandardFeaturesList(); // Plugin models - void registerPluginModel(WrtDB::DbPluginHandle handle); typedef std::multimap 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 getAllowedFeatures(int widgetHandle) const; void readAllowedPlugins(int widgetHandle); - + void readRootPlugins(int widgetHandle); FeaturesList getStandardFeatures() const; PluginsList getStandardPlugins() const; diff --git a/src/plugin-loading/plugin_logic.cpp b/src/plugin-loading/plugin_logic.cpp index 315bb74..dbb45b7 100644 --- a/src/plugin-loading/plugin_logic.cpp +++ b/src/plugin-loading/plugin_logic.cpp @@ -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 -- 2.7.4