Implement security setting checking routine for permission popup
authorJihoon Chung <jihoon.chung@samsung.com>
Fri, 21 Dec 2012 08:03:46 +0000 (17:03 +0900)
committerJihoon Chung <jihoon.chung@samsung.com>
Wed, 2 Jan 2013 04:39:35 +0000 (13:39 +0900)
[Issue#] N/A
[Problem] N/A
[Cause] N/A
[Solution] Implement security setting checking routine for permission popup
Permission popup will be disabled in case of setting value is set to off
[SCMRequest] must be imported with wrt-commons

Change-Id: I7b889e55cf22cfcef75c7794ace178d3294f1e98

src/view/common/view_logic_security_origin_support.cpp
src/view/common/view_logic_security_origin_support.h
src/view/webkit/view_logic.cpp

index 812492c..bc2f8fa 100644 (file)
 #include <memory>
 #include <Evas.h>
 #include <Elementary.h>
+#include <vconf.h>
 #include <dpl/log/log.h>
 #include <dpl/assert.h>
+#include <dpl/wrt-dao-ro/common_dao_types.h>
+#include <dpl/wrt-dao-ro/vconf_config.h>
 #include <wrt-commons/security-origin-dao/security_origin_dao.h>
 #include <widget_model.h>
 
@@ -69,6 +72,35 @@ class SecurityOriginSupportImplementation
         }
         return m_securityOriginDAO.get();
     }
+
+    WrtDB::SettingsType isNeedPermissionCheck(
+        SecurityOriginDB::Feature feature)
+    {
+        using namespace SecurityOriginDB;
+        std::string key;
+        if (feature == FEATURE_GEOLOCATION) {
+            key = WrtDB::VconfConfig::GetVconfKeyGeolocationUsage(
+                m_model->TizenId);
+        } else if (feature == FEATURE_WEB_NOTIFICATION) {
+            key = WrtDB::VconfConfig::GetVconfKeyWebNotificationUsage(
+                m_model->TizenId);
+        } else if (feature == FEATURE_WEB_DATABASE) {
+            key = WrtDB::VconfConfig::GetVconfKeyWebDatabaseUsage(
+                m_model->TizenId);
+        } else if (feature == FEATURE_FILE_SYSTEM_ACCESS) {
+            key = WrtDB::VconfConfig::GetVconfKeyFilesystemUsage(
+                m_model->TizenId);
+        } else {
+            Assert("Wrong feature argument is input");
+        }
+
+        int value = 0;
+        vconf_get_int(key.c_str(), &value);
+        LogDebug(key << " = " << value);
+        WrtDB::SettingsType ret = static_cast<WrtDB::SettingsType>(value);
+
+        return ret;
+    }
 };
 
 SecurityOriginSupport::SecurityOriginSupport(WidgetModel* widgetModel) :
@@ -85,6 +117,12 @@ SecurityOriginDB::SecurityOriginDAO* SecurityOriginSupport::getSecurityOriginDAO
     return m_impl->getSecurityOriginDAO();
 }
 
+WrtDB::SettingsType SecurityOriginSupport::isNeedPermissionCheck(
+    SecurityOriginDB::Feature feature)
+{
+    return m_impl->isNeedPermissionCheck(feature);
+}
+
 Evas_Object* SecurityOriginSupportUtil::createPopup(Evas_Object* window,
                          const char* bodyText,
                          const char* checkText,
index 98ab404..f7fadc0 100644 (file)
@@ -26,6 +26,7 @@
 #include <memory>
 #include <Evas.h>
 #include <Elementary.h>
+#include <dpl/wrt-dao-ro/common_dao_types.h>
 #include <wrt-commons/security-origin-dao/security_origin_dao.h>
 
 class WidgetModel;
@@ -43,6 +44,8 @@ class SecurityOriginSupport
     SecurityOriginSupport(WidgetModel* widgetModel);
     virtual ~SecurityOriginSupport();
     SecurityOriginDB::SecurityOriginDAO* getSecurityOriginDAO();
+    WrtDB::SettingsType isNeedPermissionCheck(
+        SecurityOriginDB::Feature feature);
 
   private:
     std::unique_ptr<SecurityOriginSupportImplementation> m_impl;
index 52924e5..4699fb6 100644 (file)
@@ -1498,6 +1498,18 @@ void ViewLogic::geolocationPermissionRequestCallback(
     Assert(data);
     ViewLogic* This = static_cast<ViewLogic*>(data);
     Assert(eventInfo);
+    Ewk_Geolocation_Permission_Data* permissionRequest =
+         static_cast<Ewk_Geolocation_Permission_Data*>(eventInfo);
+
+    if (This->m_securityOriginSupport->isNeedPermissionCheck(
+        SecurityOriginDB::FEATURE_GEOLOCATION)
+        == WrtDB::SETTINGS_TYPE_OFF)
+    {
+        ewk_geolocation_permission_request_allow_set(
+            ewk_geolocation_permission_request_get(permissionRequest),
+            EINA_FALSE);
+        return;
+    }
     ViewModule::GeolocationSupport::Webkit2::geolocationPermissionRequest(
         This->m_window,
         This->m_securityOriginSupport->getSecurityOriginDAO(),
@@ -2155,8 +2167,15 @@ void ViewLogic::databaseUsagePermissionRequestCallback(
     LogDebug("databaseUsagePermissionRequestCallback called");
     Assert(data);
     ViewLogic* This = static_cast<ViewLogic*>(data);
-
     Assert(eventInfo);
+
+    if (This->m_securityOriginSupport->isNeedPermissionCheck(
+        SecurityOriginDB::FEATURE_WEB_DATABASE)
+        == WrtDB::SETTINGS_TYPE_OFF)
+    {
+        // default value is deny
+        return;
+    }
     ViewModule::WebStorageSupport::webStorageCreatePermissionRequest(
         This->m_window,
         This->m_securityOriginSupport->getSecurityOriginDAO(),
@@ -2172,6 +2191,18 @@ void ViewLogic::fileSystemPermissionRequestCallback(
     LogDebug("fileSystemPermissionRequestCallback called");
     Assert(data);
     ViewLogic* This = static_cast<ViewLogic*>(data);
+
+    if (This->m_securityOriginSupport->isNeedPermissionCheck(
+        SecurityOriginDB::FEATURE_FILE_SYSTEM_ACCESS)
+        == WrtDB::SETTINGS_TYPE_OFF)
+    {
+        Ewk_Context_File_System_Permission* fileSystemPermission =
+             static_cast<Ewk_Context_File_System_Permission*>(eventInfo);
+        ewk_context_file_system_permission_allow_set(fileSystemPermission,
+                                                     EINA_FALSE);
+        return;
+    }
+
     Assert(eventInfo);
     ViewModule::FileSystemSupport::fileSystemPermissionRequest(
         This->m_window,