tAdd config option for microphone and webcam access - surf - customized build of surf, the suckless webkit browser
 (HTM) git clone git://src.adamsgaard.dk/surf
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit bcd05ae321de686840fd560931f2894f62ba8345
 (DIR) parent f5be376ccc1fef96722df610c4783e99ce1e944e
 (HTM) Author: Quentin Rameau <quinq@fifth.space>
       Date:   Thu, 18 May 2017 11:20:07 +0200
       
       Add config option for microphone and webcam access
       
       Diffstat:
         M config.def.h                        |       2 ++
         M surf.c                              |      30 ++++++++++++++++++++++++------
       
       2 files changed, 26 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/config.def.h b/config.def.h
       t@@ -10,6 +10,8 @@ static char *cookiefile     = "~/.surf/cookies.txt";
        /* Webkit default features */
        static Parameter defconfig[ParameterLast] = {
                SETB(AcceleratedCanvas,  1),
       +        SETB(AccessMicrophone,   0),
       +        SETB(AccessWebcam,       0),
                SETB(Certificate,        0),
                SETB(CaretBrowsing,      0),
                SETV(CookiePolicies,     "@Aa"),
 (DIR) diff --git a/surf.c b/surf.c
       t@@ -61,6 +61,8 @@ enum {
        
        typedef enum {
                AcceleratedCanvas,
       +        AccessMicrophone,
       +        AccessWebcam,
                CaretBrowsing,
                Certificate,
                CookiePolicies,
       t@@ -678,6 +680,10 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a)
                case AcceleratedCanvas:
                        webkit_settings_set_enable_accelerated_2d_canvas(s, a->b);
                        break;
       +        case AccessMicrophone:
       +                return; /* do nothing */
       +        case AccessWebcam:
       +                return; /* do nothing */
                case CaretBrowsing:
                        webkit_settings_set_enable_caret_browsing(s, a->b);
                        refresh = 0;
       t@@ -1450,15 +1456,27 @@ mousetargetchanged(WebKitWebView *v, WebKitHitTestResult *h, guint modifiers,
        gboolean
        permissionrequested(WebKitWebView *v, WebKitPermissionRequest *r, Client *c)
        {
       +        ParamName param = ParameterLast;
       +
                if (WEBKIT_IS_GEOLOCATION_PERMISSION_REQUEST(r)) {
       -                if (curconfig[Geolocation].val.b)
       -                        webkit_permission_request_allow(r);
       -                else
       -                        webkit_permission_request_deny(r);
       -                return TRUE;
       +                param = Geolocation;
       +        } else if (WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST(r)) {
       +                if (webkit_user_media_permission_is_for_audio_device(
       +                    WEBKIT_USER_MEDIA_PERMISSION_REQUEST(r)))
       +                        param = AccessMicrophone;
       +                else if (webkit_user_media_permission_is_for_video_device(
       +                         WEBKIT_USER_MEDIA_PERMISSION_REQUEST(r)))
       +                        param = AccessWebcam;
       +        } else {
       +                return FALSE;
                }
        
       -        return FALSE;
       +        if (curconfig[param].val.b)
       +                webkit_permission_request_allow(r);
       +        else
       +                webkit_permission_request_deny(r);
       +
       +        return TRUE;
        }
        
        gboolean