How to clear cookies in WebKit?
Question: i'm currently working with PyWebKitGtk in python
(http://live.gnome.org/PyWebKitGtk). I would like to clear all cookies in my
own little browser. I found interesting method
webkit.HTTPResponse.clearCookies() but I have no idea how to lay my hands on
instance of HTTPResponse object :/

I wouldn't like to use java script for that task.


Answer: If you look at the current state of the bindings on
[GitHub](https://github.com/jmalonzo/pywebkitgtk/), you'll see PyWebKitGTK
[doesn't yet
provide](https://github.com/jmalonzo/pywebkitgtk/blob/master/webkit/webkit-1.1-types.defs)
quite what you want- there's not mapping for the `HTTPResponse` type it looks
like. Unfortunately, I think Javascript or a proxy are your only options right
now.

EDIT:

...unless, of course, you want it _real_ bad and stay up into the night
learning ctypes. In which case, you can do magic. To clear _all_ the browser's
cookies, try this.

    
    
    import gtk, webkit, ctypes
    
    libwebkit = ctypes.CDLL('libwebkit-1.0.so')
    libgobject = ctypes.CDLL('libgobject-2.0.so')
    libsoup = ctypes.CDLL('libsoup-2.4.so')
    
    v = webkit.WebView()
    
    #do whatever it is you do with WebView...
    ....
    
    #get the cookiejar from the default session
    #(assumes one session and one cookiesjar)
    generic_cookiejar_type = libgobject.g_type_from_name('SoupCookieJar')
    cookiejar = libsoup.soup_session_get_feature(session, generic_cookiejar_type)
    
    #build a callback to delete cookies
    DEL_COOKIE_FUNC = ctypes.CFUNCTYPE(None, ctypes.c_void_p)
    def del_cookie(cookie):
        libsoup.soup_cookie_jar_delete_cookie(cookiejar, cookie)
    
    #run the callback on all the cookies
    cookie_list =  libsoup.soup_cookie_jar_all_cookies(cookiejar)
    libsoup.g_slist_foreach(cookie_list, DEL_COOKIE_FUNC(del_cookie), None)
    

EDIT:

Just started needing this myself, and while it's the right idea it needed
work. Instead, try this- the function type and cookiejar access are fixed.

    
    
    #add a new cookie jar
    cookiejar = libsoup.soup_cookie_jar_new()
    
    #uncomment the below line for a persistent jar instead
    #cookiejar = libsoup.soup_cookie_jar_text_new('/path/to/your/cookies.txt',False)
    
    libsoup.soup_session_add_feature(session, cookiejar)
    
    #build a callback to delete cookies
    DEL_COOKIE_FUNC = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p)
    def del_cookie(cookie, userdata):
        libsoup.soup_cookie_jar_delete_cookie(cookiejar, cookie)
        return 0
    
    #run the callback on all the cookies
    cookie_list =  libsoup.soup_cookie_jar_all_cookies(cookiejar)
    libsoup.g_slist_foreach(cookie_list, DEL_COOKIE_FUNC(del_cookie), None)
    

Note that you should only do this _before_ using the WebView, or maybe in
WebKit callbacks, or you will have threading issues above and beyond those
usually associated with GTK programming.

