[Xfce4-commits] <midori:master> Implement basic site data policy and unit tests
Christian Dywan
noreply at xfce.org
Sun Feb 26 00:04:04 CET 2012
Updating branch refs/heads/master
to 4c142e76883ba1805e4f5a042d53b7a4f3364ed2 (commit)
from 307c79274d1b3fba1391cbb61578542818b3a29a (commit)
commit 4c142e76883ba1805e4f5a042d53b7a4f3364ed2
Author: Christian Dywan <christian at twotoasts.de>
Date: Sun Feb 26 00:00:14 2012 +0100
Implement basic site data policy and unit tests
See: https://bugs.launchpad.net/midori/+bug/836729
midori/midori-websettings.c | 64 +++++++++++++++++++++++++++++++++++++++++++
midori/midori-websettings.h | 12 ++++++++
tests/browser.c | 33 ++++++++++++++++++++++
3 files changed, 109 insertions(+), 0 deletions(-)
diff --git a/midori/midori-websettings.c b/midori/midori-websettings.c
index d586261..f8d6379 100644
--- a/midori/midori-websettings.c
+++ b/midori/midori-websettings.c
@@ -13,6 +13,7 @@
#include "midori-websettings.h"
#include "sokoke.h"
+#include <midori/midori-core.h> /* Vala API */
#include <glib/gi18n.h>
#include <glib/gstdio.h>
@@ -85,6 +86,7 @@ struct _MidoriWebSettings
gint clear_private_data;
gchar* clear_data;
+ gchar* site_data_rules;
#if !WEBKIT_CHECK_VERSION (1, 3, 13)
gboolean enable_dns_prefetching;
#endif
@@ -174,6 +176,7 @@ enum
PROP_CLEAR_PRIVATE_DATA,
PROP_CLEAR_DATA,
+ PROP_SITE_DATA_RULES,
PROP_ENABLE_DNS_PREFETCHING,
PROP_STRIP_REFERER,
PROP_ENFORCE_FONT_FAMILY,
@@ -1027,6 +1030,22 @@ midori_web_settings_class_init (MidoriWebSettingsClass* class)
_("The data selected for deletion"),
NULL,
flags));
+ /**
+ * MidoriWebSettings:site-data-rules:
+ *
+ * Rules for accepting, denying and preserving cookies and other data.
+ * See midori_web_settings_get_site_data_policy() for details.
+ *
+ * Since: 0.4.4
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_SITE_DATA_RULES,
+ g_param_spec_string (
+ "site-data-rules",
+ "Rules for accepting, denying and preserving cookies and other data",
+ "Cookies, HTML5 databases, local storage and application cache blocking",
+ NULL,
+ flags));
#if !WEBKIT_CHECK_VERSION (1, 3, 13)
/**
* MidoriWebSettings:enable-dns-prefetching:
@@ -1206,6 +1225,45 @@ midori_web_settings_has_plugin_support (void)
#endif
}
+/**
+ * midori_web_settings_get_site_data_policy:
+ *
+ * Tests if @uri may store site data.
+ *
+ * Returns: a #MidoriSiteDataPolicy
+ *
+ * Since: 0.4.4
+ **/
+MidoriSiteDataPolicy
+midori_web_settings_get_site_data_policy (MidoriWebSettings* settings,
+ const gchar* uri)
+{
+ /*
+ * Values prefixed with "-" are always blocked
+ * Values prefixed with "+" are always accepted
+ * Values prefixed with "!" are not cleared in Clear Private Data
+ * FIXME: "*" is a wildcard
+ * FIXME: indicate type of storage the rule applies to
+ * FIXME: support matching of the whole URI
+ **/
+ MidoriSiteDataPolicy policy = MIDORI_SITE_DATA_UNDETERMINED;
+ gchar* hostname = midori_uri_parse_hostname (uri, NULL);
+ const gchar* match = strstr (settings->site_data_rules, hostname ? hostname : uri);
+ if (match != NULL && match != settings->site_data_rules)
+ {
+ const gchar* prefix = match - 1;
+ if (*prefix == '-')
+ policy = MIDORI_SITE_DATA_BLOCK;
+ else if (*prefix == '+')
+ policy = MIDORI_SITE_DATA_ACCEPT;
+ else if (*prefix == '!')
+ policy = MIDORI_SITE_DATA_PRESERVE;
+ else
+ g_warning ("%s: Matched with no prefix '%s'", G_STRFUNC, match);
+ }
+ return policy;
+}
+
#if (!HAVE_OSX && defined (G_OS_UNIX)) || defined (G_OS_WIN32)
static gchar*
get_sys_name (gchar** architecture)
@@ -1570,6 +1628,9 @@ midori_web_settings_set_property (GObject* object,
case PROP_CLEAR_DATA:
katze_assign (web_settings->clear_data, g_value_dup_string (value));
break;
+ case PROP_SITE_DATA_RULES:
+ katze_assign (web_settings->site_data_rules, g_value_dup_string (value));
+ break;
#if !WEBKIT_CHECK_VERSION (1, 3, 13)
case PROP_ENABLE_DNS_PREFETCHING:
web_settings->enable_dns_prefetching = g_value_get_boolean (value);
@@ -1875,6 +1936,9 @@ midori_web_settings_get_property (GObject* object,
case PROP_CLEAR_DATA:
g_value_set_string (value, web_settings->clear_data);
break;
+ case PROP_SITE_DATA_RULES:
+ g_value_set_string (value, web_settings->site_data_rules);
+ break;
#if !WEBKIT_CHECK_VERSION (1, 3, 13)
case PROP_ENABLE_DNS_PREFETCHING:
g_value_set_boolean (value, web_settings->enable_dns_prefetching);
diff --git a/midori/midori-websettings.h b/midori/midori-websettings.h
index 3b96fc7..f73a2b8 100644
--- a/midori/midori-websettings.h
+++ b/midori/midori-websettings.h
@@ -176,6 +176,18 @@ midori_web_settings_get_system_name (gchar** architecture,
gboolean
midori_web_settings_has_plugin_support (void);
+typedef enum
+{
+ MIDORI_SITE_DATA_UNDETERMINED,
+ MIDORI_SITE_DATA_BLOCK,
+ MIDORI_SITE_DATA_ACCEPT,
+ MIDORI_SITE_DATA_PRESERVE,
+} MidoriSiteDataPolicy;
+
+MidoriSiteDataPolicy
+midori_web_settings_get_site_data_policy (MidoriWebSettings* settings,
+ const gchar* uri);
+
G_END_DECLS
#endif /* __MIDORI_WEB_SETTINGS_H__ */
diff --git a/tests/browser.c b/tests/browser.c
index 2317ad7..c6fda19 100644
--- a/tests/browser.c
+++ b/tests/browser.c
@@ -94,6 +94,38 @@ browser_tooltips (void)
g_error ("Tooltip errors");
}
+static void
+browser_site_data (void)
+{
+ typedef struct
+ {
+ const gchar* url;
+ MidoriSiteDataPolicy policy;
+ } PolicyItem;
+
+ static const PolicyItem items[] = {
+ { "google.com", MIDORI_SITE_DATA_BLOCK },
+ { "facebook.com", MIDORI_SITE_DATA_BLOCK },
+ { "bugzilla.gnome.org", MIDORI_SITE_DATA_PRESERVE },
+ { "bugs.launchpad.net", MIDORI_SITE_DATA_ACCEPT },
+ };
+
+ const gchar* rules = "-google.com,-facebook.com,!bugzilla.gnome.org,+bugs.launchpad.net";
+ MidoriWebSettings* settings = g_object_new (MIDORI_TYPE_WEB_SETTINGS,
+ "site-data-rules", rules, NULL);
+
+ guint i;
+ for (i = 0; i < G_N_ELEMENTS (items); i++)
+ {
+ MidoriSiteDataPolicy policy = midori_web_settings_get_site_data_policy (
+ settings, items[i].url);
+ if (policy != items[i].policy)
+ g_error ("Match '%s' yields %d but %d expected",
+ items[i].url, policy, items[i].policy);
+ }
+ g_object_unref (settings);
+}
+
int
main (int argc,
char** argv)
@@ -106,6 +138,7 @@ main (int argc,
g_test_add_func ("/browser/create", browser_create);
g_test_add_func ("/browser/tooltips", browser_tooltips);
+ g_test_add_func ("/browser/site_data", browser_site_data);
return g_test_run ();
}
More information about the Xfce4-commits
mailing list