Source/WebKit/efl/ChangeLog

 12012-07-17 Kihong Kwon <kihong.kwon@samsung.com>
 2
 3 [EFL] Support the permission function of the Web Notification.
 4 https://bugs.webkit.org/show_bug.cgi?id=90603
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Implement permission related functions of Web Notifications.
 9 checkPermission for Notification.permissionLevel().
 10 requestPermission for Notification.requestPermission().
 11 In addition, if there are stored permissions in the outside application(like a browser)
 12 need to be cached by ewk_view_notification_permissions_cache_add.
 13
 14 * WebCoreSupport/NotificationPresenterClientEfl.cpp:
 15 (WebCore::NotificationPresenterClientEfl::NotificationPresenterClientEfl):
 16 (WebCore::NotificationPresenterClientEfl::requestPermission):
 17 (WebCore::NotificationPresenterClientEfl::checkPermission):
 18 (WebCore::NotificationPresenterClientEfl::addPermissionCache):
 19 (WebCore):
 20 (WebCore::NotificationPresenterClientEfl::setPermission):
 21 * WebCoreSupport/NotificationPresenterClientEfl.h:
 22 (NotificationPresenterClientEfl):
 23 (WebCore::NotificationPresenterClientEfl::requestPermission):
 24 (WebCore::NotificationPresenterClientEfl::cancelRequestsForPermission):
 25 * ewk/ewk_view.cpp:
 26 (_ewk_view_priv_new):
 27 (ewk_view_notification_permission_cache_add):
 28 (ewk_view_notification_permissions_set):
 29 (ewk_view_notification_permission_request):
 30 * ewk/ewk_view.h:
 31 * ewk/ewk_view_private.h:
 32
1332012-07-15 Kihong Kwon <kihong.kwon@samsung.com>
234
335 [EFL] Add a API for getting security origin string

Source/WebKit/efl/WebCoreSupport/NotificationPresenterClientEfl.cpp

2020#include "config.h"
2121#include "NotificationPresenterClientEfl.h"
2222
23 #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
 23#if ENABLE(NOTIFICATIONS)
2424#include "NotImplemented.h"
 25#include "ScriptExecutionContext.h"
 26#include "SecurityOrigin.h"
 27#include "ewk_security_origin_private.h"
 28#include "ewk_view_private.h"
2529
2630namespace WebCore {
2731
28 NotificationPresenterClientEfl::NotificationPresenterClientEfl()
 32NotificationPresenterClientEfl::NotificationPresenterClientEfl(Evas_Object* view)
 33 : m_view(view)
2934{
3035}
3136

@@void NotificationPresenterClientEfl::notificationControllerDestroyed()
5459 notImplemented();
5560}
5661
57 void NotificationPresenterClientEfl::requestPermission(ScriptExecutionContext* context, PassRefPtr<VoidCallback> callback)
 62void NotificationPresenterClientEfl::requestPermission(ScriptExecutionContext* context, PassRefPtr<NotificationPermissionCallback> callback)
5863{
59  notImplemented();
 64 Ewk_Security_Origin* origin = ewk_security_origin_new(context->securityOrigin());
 65 m_pendingPermissionRequests.add(origin, callback);
 66 ewk_view_notification_permission_request(m_view, origin);
6067}
6168
6269NotificationClient::Permission NotificationPresenterClientEfl::checkPermission(ScriptExecutionContext* context)
6370{
64  notImplemented();
 71 PermissionsMap::iterator iter = m_cachedPermissions.find(context->securityOrigin()->toString());
 72
 73 if (iter == m_cachedPermissions.end())
 74 return PermissionNotAllowed;
 75
 76 if (iter->second)
 77 return PermissionAllowed;
 78
6579 return PermissionDenied;
6680}
6781
68 void NotificationPresenterClientEfl::cancelRequestsForPermission(ScriptExecutionContext* context)
 82void NotificationPresenterClientEfl::addPermissionCache(const char* domain, const bool isAllowed)
6983{
70  notImplemented();
 84 PermissionsMap::iterator iter = m_cachedPermissions.find(String(domain));
 85
 86 if (iter == m_cachedPermissions.end())
 87 return;
 88
 89 m_cachedPermissions.add(String(domain), isAllowed);
 90}
 91
 92void NotificationPresenterClientEfl::setPermission(const Ewk_Security_Origin* origin, const bool isAllowed)
 93{
 94 PermissionRequestMap::iterator iter = m_pendingPermissionRequests.find(const_cast<Ewk_Security_Origin*>(origin));
 95
 96 if (iter == m_pendingPermissionRequests.end())
 97 return;
 98
 99 iter->second->handleEvent(Notification::permissionString(isAllowed ? NotificationClient::PermissionAllowed : NotificationClient::PermissionDenied));
 100 m_pendingPermissionRequests.remove(iter);
 101 m_cachedPermissions.add(String(ewk_security_origin_string_get(origin)), isAllowed);
 102 ewk_security_origin_free(const_cast<Ewk_Security_Origin*>(origin));
71103}
72104
73105}

Source/WebKit/efl/WebCoreSupport/NotificationPresenterClientEfl.h

2020#ifndef NotificationPresenterClientEfl_h
2121#define NotificationPresenterClientEfl_h
2222
23 #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
 23#if ENABLE(NOTIFICATIONS)
2424#include "Notification.h"
2525#include "NotificationClient.h"
 26#include "ewk_security_origin.h"
 27#include <Evas.h>
 28#include <wtf/HashMap.h>
2629
2730namespace WebCore {
2831
2932class NotificationPresenterClientEfl : public NotificationClient {
30 
3133public:
32  NotificationPresenterClientEfl();
 34 NotificationPresenterClientEfl(Evas_Object* view);
3335 ~NotificationPresenterClientEfl();
3436
3537 virtual bool show(Notification*);
3638 virtual void cancel(Notification*);
3739 virtual void notificationObjectDestroyed(Notification*);
3840 virtual void notificationControllerDestroyed();
39  virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<VoidCallback>);
 41#if ENABLE(LEGACY_NOTIFICATIONS)
 42 virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<VoidCallback>) { }
 43#endif
 44 virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<NotificationPermissionCallback>);
4045 virtual NotificationClient::Permission checkPermission(ScriptExecutionContext*);
41  virtual void cancelRequestsForPermission(ScriptExecutionContext*);
 46 virtual void cancelRequestsForPermission(ScriptExecutionContext*) { }
 47
 48 void addPermissionCache(const char* domain, bool isAllowed);
 49 void setPermission(const Ewk_Security_Origin*, bool isAllowed);
 50
 51private:
 52 Evas_Object* m_view;
 53
 54 typedef HashMap<Ewk_Security_Origin*, RefPtr<WebCore::NotificationPermissionCallback> > PermissionRequestMap;
 55 PermissionRequestMap m_pendingPermissionRequests;
 56 typedef HashMap<String, bool> PermissionsMap;
 57 PermissionsMap m_cachedPermissions;
4258};
4359
4460}

Source/WebKit/efl/ewk/ewk_view.cpp

103103#include "ColorChooserClient.h"
104104#endif
105105
 106#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
 107#include "NotificationController.h"
 108#include "NotificationPresenterClientEfl.h"
 109#endif
 110
106111static const float zoomMinimum = 0.05;
107112static const float zoomMaximum = 4.0;
108113

@@static Ewk_View_Private_Data* _ewk_view_priv_new(Ewk_View_Smart_Data* smartData)
757762 WebCore::provideBatteryTo(priv->page.get(), new BatteryClientEfl);
758763#endif
759764
 765#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
 766 WebCore::provideNotification(priv->page.get(), new WebCore::NotificationPresenterClientEfl(smartData->self));
 767#endif
 768
760769 priv->pageSettings = priv->page->settings();
761770
762771 priv->viewportArguments.width = WebCore::ViewportArguments::ValueAuto;

@@void ewk_view_cursor_set(Evas_Object* ewkView, const WebCore::Cursor& cursor)
45004509 }
45014510}
45024511
 4512Eina_Bool ewk_view_notification_permission_cache_add(Evas_Object* ewkView, const char* domain, Eina_Bool permitted)
 4513{
 4514#if ENABLE(NOTIFICATIONS)
 4515 EWK_VIEW_SD_GET(ewkView, smartData);
 4516 EWK_VIEW_PRIV_GET(smartData, priv);
 4517 static_cast<WebCore::NotificationPresenterClientEfl*>(WebCore::NotificationController::clientFrom(priv->page.get()))->addPermissionCache(domain, permitted);
 4518 return true;
 4519#else
 4520 return false;
 4521#endif
 4522}
 4523
 4524Eina_Bool ewk_view_notification_permissions_set(Evas_Object* ewkView, const Ewk_Security_Origin* origin, Eina_Bool permitted)
 4525{
 4526#if ENABLE(NOTIFICATIONS)
 4527 EWK_VIEW_SD_GET(ewkView, smartData);
 4528 EWK_VIEW_PRIV_GET(smartData, priv);
 4529 static_cast<WebCore::NotificationPresenterClientEfl*>(WebCore::NotificationController::clientFrom(priv->page.get()))->setPermission(origin, permitted);
 4530 return true;
 4531#else
 4532 return false;
 4533#endif
 4534}
 4535
 4536#if ENABLE(NOTIFICATIONS)
 4537void ewk_view_notification_permission_request(Evas_Object* ewkView, const Ewk_Security_Origin* origin)
 4538{
 4539 evas_object_smart_callback_call(ewkView, "notification,permission,request", const_cast<Ewk_Security_Origin*>(origin));
 4540}
 4541#endif
 4542
45034543namespace EWKPrivate {
45044544
45054545WebCore::Page* corePage(const Evas_Object* ewkView)

Source/WebKit/efl/ewk/ewk_view.h

7474 * - "mixedcontent,displayed", void: any of the containing frames has loaded and displayed mixed content.
7575 * - "mixedcontent,run", void: any of the containing frames has loaded and run mixed content.
7676 * - "navigate,with,data", Ewk_View_Navigation_Data*: reports that view did navigation and gives the navigation details.
 77 * - "notification,permission,request", const Ewk_Security_Origin*: request to confirm permission for security origin from user.
7778 * - "perform,client,redirect", Ewk_View_Redirection_Data*: reports that view performed a client redirect and gives the redirection details.
7879 * - "perform,server,redirect", Ewk_View_Redirection_Data*: reports that view performed a server redirect and gives the redirection details.
7980 * - "protocolhandler,registration,requested", Ewk_Custom_Handler_Data: add a handler url for the given protocol.

@@EAPI Evas_Object* ewk_view_web_inspector_view_get(const Evas_Object *o);
26932694 */
26942695EAPI void ewk_view_web_inspector_view_set(Evas_Object *o, Evas_Object *inspector_view);
26952696
 2697/**
 2698 * Add permitted or denied list to the permission cache for Web Notificaitons.
 2699 *
 2700 * If there are stored permission lists for Web Notifications,
 2701 * this function need to be called with permission.
 2702 *
 2703 * @param o view object to set the permission cache list.
 2704 * @param domain string for determine the permission.
 2705 * @param permitted @c EINA_TRUE to permit, @c EINA_FALSE to deny.
 2706 *
 2707 * @return @c EINA_TRUE on success or @c EINA_FALSE on failure
 2708 */
 2709Eina_Bool ewk_view_notification_permission_cache_add(Evas_Object *o, const char *domain, Eina_Bool permitted);
 2710
 2711/**
 2712 * Set permitted or denied lists to the permission cache for the Web Notificaitons.
 2713 *
 2714 * After checking permission, this function have to be called to set permission.
 2715 *
 2716 * @param o view object to set the permission.
 2717 * @param origin security origin object
 2718 * @param allow @c EINA_TRUE to permit, @c EINA_FALSE to deny.
 2719 *
 2720 * @return @c EINA_TRUE on success or @c EINA_FALSE on failure
 2721 */
 2722EAPI Eina_Bool ewk_view_notification_permissions_set(Evas_Object *o, const Ewk_Security_Origin *origin, Eina_Bool permitted);
 2723
26962724#ifdef __cplusplus
26972725}
26982726#endif

Source/WebKit/efl/ewk/ewk_view_private.h

@@bool ewk_view_accelerated_compositing_object_create(Evas_Object* ewkView, Evas_N
156156WebCore::GraphicsContext3D* ewk_view_accelerated_compositing_context_get(Evas_Object* ewkView);
157157#endif
158158
 159#if ENABLE(NOTIFICATIONS)
 160void ewk_view_notification_permission_request(Evas_Object* ewkView, const Ewk_Security_Origin* origin);
 161#endif
 162
159163namespace EWKPrivate {
160164WebCore::Page *corePage(const Evas_Object *ewkView);
161165PlatformPageClient corePageClient(Evas_Object* ewkView);