[epiphany] Add support for 'Do Not Track'



commit f7a3fca8a8e03a5362d14e55613ac6d4103978fb
Author: Xan Lopez <xan igalia com>
Date:   Sat May 19 20:23:44 2012 +0900

    Add support for 'Do Not Track'
    
    If the org.gnome.Epiphany.web.do-not-track setting is enabled, we'll
    send the DNT: 1 header with every outbound request we make.
    
    See http://donottrack.us/ for more details.

 data/org.gnome.epiphany.gschema.xml |    5 ++++
 embed/ephy-web-view.c               |   46 +++++++++++++++++++++++++++++++++++
 lib/ephy-prefs.h                    |    1 +
 3 files changed, 52 insertions(+), 0 deletions(-)
---
diff --git a/data/org.gnome.epiphany.gschema.xml b/data/org.gnome.epiphany.gschema.xml
index d69c7ab..1a38d95 100644
--- a/data/org.gnome.epiphany.gschema.xml
+++ b/data/org.gnome.epiphany.gschema.xml
@@ -179,6 +179,11 @@
 			<summary>Enable WebGL</summary>
 			<description>Whether to enable support for WebGL contexts.</description>
 		</key>
+		<key type="b" name="do-not-track">
+			<default>false</default>
+			<summary>Do Not Track</summary>
+			<description>Whether to tell websites that we do not wish to be tracked. Please note that web pages are not forced to follow this setting.</description>
+		</key>
 	</schema>
 	<schema path="/org/gnome/epiphany/state/" id="org.gnome.Epiphany.state">
 		<key type="s" name="open-dir">
diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c
index 038f8ce..149ae62 100644
--- a/embed/ephy-web-view.c
+++ b/embed/ephy-web-view.c
@@ -108,6 +108,8 @@ struct _EphyWebViewPrivate {
   GCancellable *history_service_cancellable;
 
   EphyHistoryPageVisitType visit_type;
+
+  gulong do_not_track_handler;
 };
 
 typedef struct {
@@ -2304,6 +2306,43 @@ zoom_changed_cb (WebKitWebView *web_view,
 }
 
 static void
+add_do_not_track_header_cb (WebKitWebView *view, WebKitWebFrame *frame,
+                            WebKitWebResource *resource, WebKitNetworkRequest *request,
+                            WebKitNetworkResponse *response, gpointer user_data)
+{
+  SoupMessage *message;
+
+  message = webkit_network_request_get_message (request);
+
+  if (!message)
+    return;
+
+  /* Do Not Track header. '1' means 'opt-out'. See:
+   * http://tools.ietf.org/id/draft-mayer-do-not-track-00.txt */
+  soup_message_headers_append (message->request_headers, "DNT", "1");
+}
+
+static void
+do_not_track_setting_changed_cb (GSettings *settings,
+                                 char *key,
+                                 EphyWebView *view)
+{
+  gboolean do_not_track;
+  EphyWebViewPrivate *priv = view->priv;
+
+  do_not_track = g_settings_get_boolean (EPHY_SETTINGS_WEB,
+                                         EPHY_PREFS_WEB_DO_NOT_TRACK);
+
+  if (do_not_track && !priv->do_not_track_handler)
+    priv->do_not_track_handler = g_signal_connect (view, "resource-request-starting",
+                                                   G_CALLBACK (add_do_not_track_header_cb), NULL);
+  else {
+    g_signal_handlers_disconnect_by_func (view, add_do_not_track_header_cb, NULL);
+    priv->do_not_track_handler = 0;
+  }
+}
+
+static void
 ephy_web_view_init (EphyWebView *web_view)
 {
   EphyWebViewPrivate *priv;
@@ -2376,6 +2415,13 @@ ephy_web_view_init (EphyWebView *web_view)
                     G_CALLBACK (ge_popup_blocked_cb),
                     NULL);
 
+  if (g_settings_get_boolean (EPHY_SETTINGS_WEB, EPHY_PREFS_WEB_DO_NOT_TRACK))
+    priv->do_not_track_handler = g_signal_connect (web_view, "resource-request-starting",
+                                                   G_CALLBACK (add_do_not_track_header_cb), NULL);
+
+  g_signal_connect (EPHY_SETTINGS_WEB,
+                    "changed::" EPHY_PREFS_WEB_DO_NOT_TRACK,
+                    G_CALLBACK (do_not_track_setting_changed_cb), web_view);
 }
 
 /**
diff --git a/lib/ephy-prefs.h b/lib/ephy-prefs.h
index d2a5f58..7e035de 100644
--- a/lib/ephy-prefs.h
+++ b/lib/ephy-prefs.h
@@ -106,6 +106,7 @@ typedef enum
 #define EPHY_PREFS_WEB_COOKIES_POLICY        "cookies-policy"
 #define EPHY_PREFS_WEB_IMAGE_ANIMATION_MODE  "image-animation-mode"
 #define EPHY_PREFS_WEB_DEFAULT_ENCODING      "default-encoding"
+#define EPHY_PREFS_WEB_DO_NOT_TRACK          "do-not-track"
 
 #define EPHY_PREFS_SCHEMA                         "org.gnome.Epiphany"
 #define EPHY_PREFS_USER_AGENT                     "user-agent"



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]