diff options
author | Vincent Untz <vuntz@gnome.org> | 2009-12-19 03:32:51 +0800 |
---|---|---|
committer | Xan Lopez <xan@gnome.org> | 2009-12-19 03:40:06 +0800 |
commit | e896b194fbff39b480c571483c7d549865f38960 (patch) | |
tree | ce631db5e6d7cb3fb2e57d5448fd7193ad9f095e /embed | |
parent | dcdebec53b1da88a6b3477d13437af2c53ac73b4 (diff) | |
download | gsoc2013-epiphany-e896b194fbff39b480c571483c7d549865f38960.tar.gz gsoc2013-epiphany-e896b194fbff39b480c571483c7d549865f38960.tar.zst gsoc2013-epiphany-e896b194fbff39b480c571483c7d549865f38960.zip |
Add custom user-agent support
We default to the WebKitGTK+ user agent with Epiphany and the version
appended to it.
This can be overriden/modified in two ways:
- The gconf key /apps/epiphany/general/user_agent has the maximum
priority, and if it's set it will be always used.
- If the gconf key is not set, vendors can still customize the UA by
placing a branding.conf file in the share data directory. One
example would be:
[User Agent]
Vendor=SUSE
VendorSub=11.2
VendorComment=2.29.94-1
And the result would be:
Mozilla/5.0 (X11; U; Linux i686; fr-fr) AppleWebKit/531.2+ (KHTML, like Gecko)
Safari/531.2+ SUSE/11.2 (2.29.94-1) Epiphany/2.29.94
Bug #580903
Signed-off-by: Xan Lopez <xan@gnome.org>
Diffstat (limited to 'embed')
-rw-r--r-- | embed/ephy-embed-prefs.c | 88 | ||||
-rw-r--r-- | embed/ephy-embed-prefs.h | 1 |
2 files changed, 88 insertions, 1 deletions
diff --git a/embed/ephy-embed-prefs.c b/embed/ephy-embed-prefs.c index cb64b3012..a7cf60eaa 100644 --- a/embed/ephy-embed-prefs.c +++ b/embed/ephy-embed-prefs.c @@ -134,6 +134,89 @@ webkit_pref_callback_user_stylesheet (GConfClient *client, g_free (uri); } +static char * +webkit_pref_get_internal_user_agent (void) +{ + char *user_agent; + char *webkit_user_agent; + char *vendor_user_agent; + GKeyFile *branding_keyfile; + + vendor_user_agent = NULL; + branding_keyfile = g_key_file_new (); + + if (g_key_file_load_from_file (branding_keyfile, SHARE_DIR"/branding.conf", + G_KEY_FILE_NONE, NULL)) { + char *vendor; + char *vendor_sub; + char *vendor_comment; + + vendor = g_key_file_get_string (branding_keyfile, + "User Agent", "Vendor", NULL); + vendor_sub = g_key_file_get_string (branding_keyfile, + "User Agent", "VendorSub", NULL); + vendor_comment = g_key_file_get_string (branding_keyfile, + "User Agent", "VendorComment", NULL); + + if (vendor) { + vendor_user_agent = g_strconcat (vendor, + vendor_sub ? "/" : "", + vendor_sub ? vendor_sub : "", + vendor_comment ? " (" : "", + vendor_comment ? vendor_comment : "", + vendor_comment ? ")" : "", + NULL); + } + + g_free (vendor); + g_free (vendor_sub); + g_free (vendor_comment); + } + + g_key_file_free (branding_keyfile); + + g_object_get (settings, "user-agent", &webkit_user_agent, NULL); + + user_agent = g_strconcat (webkit_user_agent, " ", + vendor_user_agent ? vendor_user_agent : "", + vendor_user_agent ? " " : "", + "Epiphany/"VERSION, + NULL); + + g_free (vendor_user_agent); + g_free (webkit_user_agent); + + return user_agent; +} + +static void +webkit_pref_callback_user_agent (GConfClient *client, + guint cnxn_id, + GConfEntry *entry, + gpointer data) +{ + GConfValue *gcvalue; + const char *value = NULL; + static char *internal_user_agent = NULL; + char *webkit_pref = data; + + gcvalue = gconf_entry_get_value (entry); + + /* happens on initial notify if the key doesn't exist */ + if (gcvalue != NULL && + gcvalue->type == GCONF_VALUE_STRING) { + value = gconf_value_get_string (gcvalue); + } + + if (value == NULL || value[0] == '\0') { + if (internal_user_agent == NULL) + internal_user_agent = webkit_pref_get_internal_user_agent (); + + g_object_set (settings, webkit_pref, internal_user_agent, NULL); + } else + g_object_set (settings, webkit_pref, value, NULL); +} + static void webkit_pref_callback_font_size (GConfClient *client, guint cnxn_id, @@ -286,7 +369,10 @@ static const PrefData webkit_pref_entries[] = webkit_pref_callback_boolean }, { CONF_RENDERING_LANGUAGE, "accept-language", - webkit_pref_callback_accept_languages } + webkit_pref_callback_accept_languages }, + { CONF_USER_AGENT, + "user-agent", + webkit_pref_callback_user_agent } }; static void diff --git a/embed/ephy-embed-prefs.h b/embed/ephy-embed-prefs.h index ada4ac860..4865aa0ed 100644 --- a/embed/ephy-embed-prefs.h +++ b/embed/ephy-embed-prefs.h @@ -41,6 +41,7 @@ #define CONF_DISPLAY_SMOOTHSCROLL "/apps/epiphany/web/smooth_scroll" #define CONF_WEB_INSPECTOR_ENABLED "/apps/epiphany/web/inspector_enabled" #define CONF_CARET_BROWSING_ENABLED "/apps/epiphany/web/browse_with_caret" +#define CONF_USER_AGENT "/apps/epiphany/general/user_agent" /* These are defined gnome wide now */ #define CONF_NETWORK_PROXY_MODE "/system/proxy/mode" |