// temp
// m_vibrationSupport->initialize();
-
- ViewModule::GeolocationSupport::Webkit2::initialize(m_model->TizenId);
- ViewModule::GeolocationSupport::Webkit2::
- adjustGeolocationModuleState(m_currentEwkView);
}
void ViewLogic::initializePluginLoading()
void ViewLogic::ewkClientInit(Evas_Object *wkView) {
Assert(NULL != wkView && "ewk_view not created at this point");
- ViewModule::GeolocationSupport::Webkit2::
- initialize(m_model->TizenId);
-
// WKPageLoaderClient
evas_object_smart_callback_add(
wkView,
}
void ViewLogic::geolocationPermissionRequestCallback(
- void* /*data*/,
+ void* data,
Evas_Object* /*obj*/,
void* eventInfo)
{
- LogDebug("geolocationPermissionRequestCallback called");
+ Assert(data);
+ ViewLogic* This = static_cast<ViewLogic*>(data);
Assert(eventInfo);
- ViewModule::GeolocationSupport::Webkit2::
- geolocationPermissionRequest(eventInfo);
- return;
+ ViewModule::GeolocationSupport::Webkit2::geolocationPermissionRequest(
+ This->m_window,
+ This->m_securityOriginSupport->getSecurityOriginDAO(),
+ eventInfo);
}
void ViewLogic::notificationShowCallback(
#include "view_logic_geolocation_support_webkit2.h"
+#include <string>
+#include <sstream>
#include <dpl/log/log.h>
#include <dpl/assert.h>
-#include <common/view_logic_geolocation_support.h>
+#include <wrt-commons/security-origin-dao/security_origin_dao_types.h>
+#include <wrt-commons/security-origin-dao/security_origin_dao.h>
#include <EWebKit2.h>
-
-namespace {
-DPL::String s_tizenId;
-const double GEOLOCATION_POSITION_ACCURACY = 0.0;
-} // anonymous namespace
+#include <common/view_logic_security_origin_support.h>
+#include <Elementary.h>
namespace ViewModule {
namespace GeolocationSupport {
namespace Webkit2 {
-void initialize(const DPL::String& tizenId)
+using namespace SecurityOriginDB;
+using namespace ViewModule::SecurityOriginSupportUtil;
+
+namespace {
+const char* const GEOLOCATION_ASK_BODY =
+ "Application requests your current location. Do you allow it?";
+const char* const GEOLOCATION_ASK_CHECK = "Don't ask again";
+
+// function declare
+void askUserForGeolocationPermission(
+ Evas_Object* window,
+ PermissionData* data);
+static void popupCallback(void* data, Evas_Object* obj, void* eventInfo);
+
+void askUserForGeolocationPermission(
+ Evas_Object* window,
+ PermissionData* data)
{
- s_tizenId = tizenId;
+ LogDebug("askUserForGeolocationPermission called");
+ Evas_Object* popup = createPopup(window,
+ GEOLOCATION_ASK_BODY,
+ GEOLOCATION_ASK_CHECK,
+ popupCallback,
+ data);
+
+ if (popup == NULL) {
+ LogError("Fail to create popup object");
+ delete data;
+ return;
+ } else {
+ evas_object_show(popup);
+ }
}
-void geolocationPermissionRequest(void* data)
+void popupCallback(void* data, Evas_Object* obj, void* /*eventInfo*/)
{
- LogDebug("geolocationPermissionRequest called");
- Assert(s_tizenId.length() > 0);
+ LogDebug("popupCallback");
Assert(data);
+ PermissionData* permData = static_cast<PermissionData*>(data);
+ Ewk_Geolocation_Permission_Data* permissionRequest =
+ static_cast<Ewk_Geolocation_Permission_Data*>(permData->m_data);
- bool state = ViewModule::GeolocationSupport::
- getLocalizationState(s_tizenId, false);
+ Evas_Object* popup = getPopup(obj);
+ Result result = getResult(obj);
+ if (result != RESULT_UNKNOWN) {
+ permData->m_originDao->setSecurityOriginData(permData->m_originData, result);
+ }
+ Eina_Bool ret =
+ (result == RESULT_ALLOW_ALWAYS || result == RESULT_ALLOW_ONCE) ?
+ EINA_TRUE : EINA_FALSE;
+ ewk_geolocation_permission_request_allow_set(
+ ewk_geolocation_permission_request_get(permissionRequest),
+ ret);
+ delete permData;
+ evas_object_hide(popup);
+ evas_object_del(popup);
+}
+} // namespace
+
+void geolocationPermissionRequest(
+ Evas_Object* window,
+ SecurityOriginDB::SecurityOriginDAO* securityOriginDAO,
+ void* data)
+{
+ LogDebug("geolocationPermissionRequest called");
+ Assert(securityOriginDAO);
+ Assert(data);
Ewk_Geolocation_Permission_Data* permissionRequest =
static_cast<Ewk_Geolocation_Permission_Data*>(data);
+ const Ewk_Security_Origin* ewkOrigin =
+ ewk_geolocation_permission_request_origin_get(
+ permissionRequest);
+ Assert(ewkOrigin);
- // return permission
- if (true == state) {
- LogDebug("permit");
+ SecurityOriginData securityOriginData(
+ FEATURE_GEOLOCATION,
+ Origin(
+ DPL::FromUTF8String(ewk_security_origin_protocol_get(ewkOrigin)),
+ DPL::FromUTF8String(ewk_security_origin_host_get(ewkOrigin)),
+ ewk_security_origin_port_get(ewkOrigin)));
+
+ // check cache database
+ Result result = securityOriginDAO->getResult(securityOriginData);
+ if (RESULT_ALLOW_ONCE == result || RESULT_ALLOW_ALWAYS == result) {
+ LogDebug("allow");
ewk_geolocation_permission_request_allow_set(
ewk_geolocation_permission_request_get(permissionRequest),
EINA_TRUE);
- } else {
+ return;
+ } else if (RESULT_DENY_ONCE == result || RESULT_DENY_ALWAYS == result) {
LogDebug("deny");
ewk_geolocation_permission_request_allow_set(
ewk_geolocation_permission_request_get(permissionRequest),
EINA_FALSE);
+ return;
}
+ // ask to user
+ PermissionData* permissionData =
+ new PermissionData(securityOriginDAO,
+ securityOriginData,
+ permissionRequest);
+ askUserForGeolocationPermission(window, permissionData);
return;
}
-
-void adjustGeolocationModuleState(const void* wkView)
-{
- bool state = getGeolocationModuleState(s_tizenId);
- LogDebug("Geolocation state: " << state);
- Ewk_Settings* setting = ewk_view_settings_get((Evas_Object*)wkView);
- Assert(setting);
- ewk_settings_geolocation_enabled_set(setting,state);
}
-}
} // namespace GeolocationSupport
} // namespace ViewModule