diff options
author | Carlos Garcia Campos <cgarcia@igalia.com> | 2012-07-12 17:35:28 +0800 |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@gnome.org> | 2012-07-13 18:02:55 +0800 |
commit | 86d659967dac6e46d639729ce8a3571d87591310 (patch) | |
tree | e98602b070b53b94d4880fe34934baf786ab659d | |
parent | eeeba03717a64d0750ccccdecae756f61260e087 (diff) | |
download | gsoc2013-epiphany-86d659967dac6e46d639729ce8a3571d87591310.tar.gz gsoc2013-epiphany-86d659967dac6e46d639729ce8a3571d87591310.tar.zst gsoc2013-epiphany-86d659967dac6e46d639729ce8a3571d87591310.zip |
Port persistent cookies to WebKit2
https://bugzilla.gnome.org/show_bug.cgi?id=679369
-rw-r--r-- | embed/ephy-embed-single.c | 15 | ||||
-rw-r--r-- | lib/ephy-web-app-utils.c | 44 |
2 files changed, 45 insertions, 14 deletions
diff --git a/embed/ephy-embed-single.c b/embed/ephy-embed-single.c index da4704206..fbea9bcfc 100644 --- a/embed/ephy-embed-single.c +++ b/embed/ephy-embed-single.c @@ -406,18 +406,27 @@ ephy_embed_single_initialize (EphyEmbedSingle *single) { #ifdef HAVE_WEBKIT2 WebKitWebContext *web_context; + WebKitCookieManager *cookie_manager; + char *filename; char *cookie_policy; - /* TODO: Network features */ + /* TODO: SoupCache, SSL, favicons */ web_context = webkit_web_context_get_default (); + /* Store cookies in moz-compatible SQLite format */ + cookie_manager = webkit_web_context_get_cookie_manager (web_context); + filename = g_build_filename (ephy_dot_dir (), "cookies.sqlite", NULL); + webkit_cookie_manager_set_persistent_storage (cookie_manager, filename, + WEBKIT_COOKIE_PERSISTENT_STORAGE_SQLITE); + g_free (filename); + cookie_policy = g_settings_get_string (EPHY_SETTINGS_WEB, EPHY_PREFS_WEB_COOKIES_POLICY); - ephy_embed_prefs_set_cookie_accept_policy (webkit_web_context_get_cookie_manager (web_context), - cookie_policy); + ephy_embed_prefs_set_cookie_accept_policy (cookie_manager, cookie_policy); g_free (cookie_policy); + /* about: URIs handler */ webkit_web_context_register_uri_scheme (web_context, EPHY_ABOUT_SCHEME, about_request_cb, diff --git a/lib/ephy-web-app-utils.c b/lib/ephy-web-app-utils.c index 57ba3561a..c686f95e8 100644 --- a/lib/ephy-web-app-utils.c +++ b/lib/ephy-web-app-utils.c @@ -257,13 +257,39 @@ out: return desktop_file_path; } +#ifdef HAVE_WEBKIT2 +static SoupCookieJar *get_current_cookie_jar () +{ + char *filename; + SoupCookieJar *jar; + + /* FIXME: There's no API in WebKit2 to get all cookies, so we create a + * temp read-only jar for the current cookies to read from it. + * It would be better to have an API in WebKit to get the cookies instead. + */ + filename = g_build_filename (ephy_dot_dir (), "cookies.sqlite", NULL); + jar = (SoupCookieJar*)soup_cookie_jar_sqlite_new (filename, TRUE); + g_free (filename); + + return jar; +} +#else +static SoupCookieJar *get_current_cookie_jar () +{ + SoupSession *session = webkit_get_default_session (); + SoupCookieJar *jar; + + jar = (SoupCookieJar*)soup_session_get_feature (session, SOUP_TYPE_COOKIE_JAR); + + /* WebKit might not have a cookie jar yet, if it has not needed one + * and none has been set by Epiphany. */ + return jar ? g_object_ref (jar) : NULL; +} +#endif + static void create_cookie_jar_for_domain (const char *address, const char *directory) { -#ifdef HAVE_WEBKIT2 - /* TODO: Cookies */ -#else - SoupSession *session; GSList *cookies, *p; SoupCookieJar *current_jar, *new_jar; char *domain, *filename; @@ -279,12 +305,8 @@ create_cookie_jar_for_domain (const char *address, const char *directory) domain = uri->host; /* The current cookies */ - session = webkit_get_default_session (); - current_jar = (SoupCookieJar*)soup_session_get_feature (session, SOUP_TYPE_COOKIE_JAR); - - /* WebKit might not have a cookie jar yet, if it has not needed one - * and none has been set by Epiphany. */ - if (current_jar == NULL) { + current_jar = get_current_cookie_jar (); + if (!current_jar) { soup_uri_free (uri); return; } @@ -302,7 +324,7 @@ create_cookie_jar_for_domain (const char *address, const char *directory) soup_uri_free (uri); g_slist_free (cookies); -#endif + g_object_unref (current_jar); g_object_unref (new_jar); } |