[libgdata] core: Add a GDataClientLoginAuthorizer:proxy-resolver property
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgdata] core: Add a GDataClientLoginAuthorizer:proxy-resolver property
- Date: Tue, 22 Oct 2013 17:11:52 +0000 (UTC)
commit 4647e0b5cd60cb5429c14e77733bb6e423d27472
Author: Philip Withnall <philip tecnocode co uk>
Date: Sat Oct 12 09:25:42 2013 +0100
core: Add a GDataClientLoginAuthorizer:proxy-resolver property
Bound to SoupSession’s ‘proxy-resolver’ property. Based on commit
8f1923fcd9c4203f68ce6a0405526500a77783e5 by Matthew Barnes <mbarnes redhat com>.
This deprecates the following API:
• GDataClientLoginAuthorizer:proxy-uri
• gdata_client_login_authorizer_[get|set]_proxy_uri()
and adds the following new API:
• GDataClientLoginAuthorizer:proxy-resolver
• gdata_client_login_authorizer_[get|set]_proxy_resolver()
Helps: https://bugzilla.gnome.org/show_bug.cgi?id=709758
docs/reference/gdata-sections.txt | 2 +
gdata/gdata-client-login-authorizer.c | 123 ++++++++++++++++++++++++++++----
gdata/gdata-client-login-authorizer.h | 9 ++-
gdata/gdata.symbols | 2 +
gdata/tests/client-login-authorizer.c | 66 +++++++++---------
5 files changed, 151 insertions(+), 51 deletions(-)
---
diff --git a/docs/reference/gdata-sections.txt b/docs/reference/gdata-sections.txt
index 773600a..995fb5e 100644
--- a/docs/reference/gdata-sections.txt
+++ b/docs/reference/gdata-sections.txt
@@ -2278,6 +2278,8 @@ gdata_client_login_authorizer_get_username
gdata_client_login_authorizer_get_password
gdata_client_login_authorizer_get_proxy_uri
gdata_client_login_authorizer_set_proxy_uri
+gdata_client_login_authorizer_get_proxy_resolver
+gdata_client_login_authorizer_set_proxy_resolver
gdata_client_login_authorizer_get_timeout
gdata_client_login_authorizer_set_timeout
<SUBSECTION Standard>
diff --git a/gdata/gdata-client-login-authorizer.c b/gdata/gdata-client-login-authorizer.c
index 29f17a1..7185271 100644
--- a/gdata/gdata-client-login-authorizer.c
+++ b/gdata/gdata-client-login-authorizer.c
@@ -118,9 +118,13 @@ static gboolean is_authorized_for_domain (GDataAuthorizer *self, GDataAuthorizat
static void notify_proxy_uri_cb (GObject *gobject, GParamSpec *pspec, GDataClientLoginAuthorizer *self);
static void notify_timeout_cb (GObject *gobject, GParamSpec *pspec, GObject *self);
+static SoupURI *_get_proxy_uri (GDataClientLoginAuthorizer *self);
+static void _set_proxy_uri (GDataClientLoginAuthorizer *self, SoupURI *proxy_uri);
+
struct _GDataClientLoginAuthorizerPrivate {
SoupSession *session;
SoupURI *proxy_uri; /* cached version only set if gdata_client_login_authorizer_get_proxy_uri() is
called */
+ GProxyResolver *proxy_resolver;
gchar *client_id;
@@ -142,6 +146,7 @@ enum {
PROP_PASSWORD,
PROP_PROXY_URI,
PROP_TIMEOUT,
+ PROP_PROXY_RESOLVER,
};
enum {
@@ -227,6 +232,7 @@ gdata_client_login_authorizer_class_init (GDataClientLoginAuthorizerClass *klass
* The proxy URI used internally for all network requests.
*
* Since: 0.9.0
+ * Deprecated: Use #GDataClientLoginAuthorizer:proxy-resolver instead, which gives more flexibility
over the proxy used. (Since: 0.15.0.)
*/
g_object_class_install_property (gobject_class, PROP_PROXY_URI,
g_param_spec_boxed ("proxy-uri",
@@ -251,6 +257,19 @@ gdata_client_login_authorizer_class_init (GDataClientLoginAuthorizerClass *klass
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
/**
+ * GDataClientLoginAuthorizer:proxy-resolver:
+ *
+ * The #GProxyResolver used to determine a proxy URI. Setting this will clear the
#GDataClientLoginAuthorizer:proxy-uri property.
+ *
+ * Since: 0.15.0
+ */
+ g_object_class_install_property (gobject_class, PROP_PROXY_RESOLVER,
+ g_param_spec_object ("proxy-resolver",
+ "Proxy Resolver", "A GProxyResolver used to
determine a proxy URI.",
+ G_TYPE_PROXY_RESOLVER,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
* GDataClientLoginAuthorizer::captcha-challenge:
* @authorizer: the #GDataClientLoginAuthorizer which received the challenge
* @uri: the URI of the CAPTCHA image to be used
@@ -293,6 +312,9 @@ gdata_client_login_authorizer_init (GDataClientLoginAuthorizer *self)
/* Proxy the SoupSession's proxy-uri and timeout properties */
g_signal_connect (self->priv->session, "notify::proxy-uri", (GCallback) notify_proxy_uri_cb, self);
g_signal_connect (self->priv->session, "notify::timeout", (GCallback) notify_timeout_cb, self);
+
+ /* Keep our GProxyResolver synchronized with SoupSession's. */
+ g_object_bind_property (self->priv->session, "proxy-resolver", self, "proxy-resolver",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
}
static void
@@ -305,6 +327,8 @@ dispose (GObject *object)
}
priv->session = NULL;
+ g_clear_object (&priv->proxy_resolver);
+
/* Chain up to the parent class */
G_OBJECT_CLASS (gdata_client_login_authorizer_parent_class)->dispose (object);
}
@@ -349,11 +373,14 @@ get_property (GObject *object, guint property_id, GValue *value, GParamSpec *psp
g_rec_mutex_unlock (&(priv->mutex));
break;
case PROP_PROXY_URI:
- g_value_set_boxed (value, gdata_client_login_authorizer_get_proxy_uri
(GDATA_CLIENT_LOGIN_AUTHORIZER (object)));
+ g_value_set_boxed (value, _get_proxy_uri (GDATA_CLIENT_LOGIN_AUTHORIZER (object)));
break;
case PROP_TIMEOUT:
g_value_set_uint (value, gdata_client_login_authorizer_get_timeout
(GDATA_CLIENT_LOGIN_AUTHORIZER (object)));
break;
+ case PROP_PROXY_RESOLVER:
+ g_value_set_object (value, gdata_client_login_authorizer_get_proxy_resolver
(GDATA_CLIENT_LOGIN_AUTHORIZER (object)));
+ break;
default:
/* We don't have any other property... */
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -371,11 +398,14 @@ set_property (GObject *object, guint property_id, const GValue *value, GParamSpe
priv->client_id = g_value_dup_string (value);
break;
case PROP_PROXY_URI:
- gdata_client_login_authorizer_set_proxy_uri (GDATA_CLIENT_LOGIN_AUTHORIZER (object),
g_value_get_boxed (value));
+ _set_proxy_uri (GDATA_CLIENT_LOGIN_AUTHORIZER (object), g_value_get_boxed (value));
break;
case PROP_TIMEOUT:
gdata_client_login_authorizer_set_timeout (GDATA_CLIENT_LOGIN_AUTHORIZER (object),
g_value_get_uint (value));
break;
+ case PROP_PROXY_RESOLVER:
+ gdata_client_login_authorizer_set_proxy_resolver (GDATA_CLIENT_LOGIN_AUTHORIZER
(object), g_value_get_object (value));
+ break;
default:
/* We don't have any other property... */
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -1093,18 +1123,9 @@ notify_proxy_uri_cb (GObject *object, GParamSpec *pspec, GDataClientLoginAuthori
g_object_notify (G_OBJECT (self), "proxy-uri");
}
-/**
- * gdata_client_login_authorizer_get_proxy_uri:
- * @self: a #GDataClientLoginAuthorizer
- *
- * Gets the proxy URI on the #GDataClientLoginAuthorizer's #SoupSession.
- *
- * Return value: (transfer full): the proxy URI, or %NULL; free with soup_uri_free()
- *
- * Since: 0.9.0
- */
-SoupURI *
-gdata_client_login_authorizer_get_proxy_uri (GDataClientLoginAuthorizer *self)
+/* Static function which isn't deprecated so we can continue using it internally. */
+static SoupURI *
+_get_proxy_uri (GDataClientLoginAuthorizer *self)
{
SoupURI *proxy_uri;
@@ -1124,6 +1145,34 @@ gdata_client_login_authorizer_get_proxy_uri (GDataClientLoginAuthorizer *self)
}
/**
+ * gdata_client_login_authorizer_get_proxy_uri:
+ * @self: a #GDataClientLoginAuthorizer
+ *
+ * Gets the proxy URI on the #GDataClientLoginAuthorizer's #SoupSession.
+ *
+ * Return value: (transfer full): the proxy URI, or %NULL; free with soup_uri_free()
+ *
+ * Since: 0.9.0
+ * Deprecated: Use gdata_client_login_authorizer_get_proxy_resolver() instead, which gives more flexibility
over the proxy used. (Since: 0.15.0.)
+ */
+SoupURI *
+gdata_client_login_authorizer_get_proxy_uri (GDataClientLoginAuthorizer *self)
+{
+ return _get_proxy_uri (self);
+}
+
+/* Static function which isn't deprecated so we can continue using it internally. */
+static void
+_set_proxy_uri (GDataClientLoginAuthorizer *self, SoupURI *proxy_uri)
+{
+ g_return_if_fail (GDATA_IS_CLIENT_LOGIN_AUTHORIZER (self));
+
+ g_object_set (self->priv->session, SOUP_SESSION_PROXY_URI, proxy_uri, NULL);
+
+ /* Notification is handled in notify_proxy_uri_cb() which is called as a result of setting the
property on the session */
+}
+
+/**
* gdata_client_login_authorizer_set_proxy_uri:
* @self: a #GDataClientLoginAuthorizer
* @proxy_uri: (allow-none): the proxy URI, or %NULL
@@ -1133,15 +1182,57 @@ gdata_client_login_authorizer_get_proxy_uri (GDataClientLoginAuthorizer *self)
* If @proxy_uri is %NULL, no proxy will be used.
*
* Since: 0.9.0
+ * Deprecated: Use gdata_client_login_authorizer_set_proxy_resolver() instead, which gives more flexibility
over the proxy used. (Since: 0.15.0.)
*/
void
gdata_client_login_authorizer_set_proxy_uri (GDataClientLoginAuthorizer *self, SoupURI *proxy_uri)
{
+ _set_proxy_uri (self, proxy_uri);
+}
+
+/**
+ * gdata_client_login_authorizer_get_proxy_resolver:
+ * @self: a #GDataClientLoginAuthorizer
+ *
+ * Gets the #GProxyResolver on the #GDataClientLoginAuthorizer's #SoupSession.
+ *
+ * Return value: (transfer none) (allow-none): a #GProxyResolver, or %NULL
+ *
+ * Since: 0.15.0
+ */
+GProxyResolver *
+gdata_client_login_authorizer_get_proxy_resolver (GDataClientLoginAuthorizer *self)
+{
+ g_return_val_if_fail (GDATA_IS_CLIENT_LOGIN_AUTHORIZER (self), NULL);
+
+ return self->priv->proxy_resolver;
+}
+
+/**
+ * gdata_client_login_authorizer_set_proxy_resolver:
+ * @self: a #GDataClientLoginAuthorizer
+ * @proxy_resolver: (allow-none): a #GProxyResolver, or %NULL
+ *
+ * Sets the #GProxyResolver on the #SoupSession used internally by the given #GDataClientLoginAuthorizer.
+ *
+ * Setting this will clear the #GDataClientLoginAuthorizer:proxy-uri property.
+ *
+ * Since: 0.15.0
+ */
+void
+gdata_client_login_authorizer_set_proxy_resolver (GDataClientLoginAuthorizer *self, GProxyResolver
*proxy_resolver)
+{
g_return_if_fail (GDATA_IS_CLIENT_LOGIN_AUTHORIZER (self));
+ g_return_if_fail (proxy_resolver == NULL || G_IS_PROXY_RESOLVER (proxy_resolver));
- g_object_set (self->priv->session, SOUP_SESSION_PROXY_URI, proxy_uri, NULL);
+ if (proxy_resolver != NULL) {
+ g_object_ref (proxy_resolver);
+ }
- /* Notification is handled in notify_proxy_uri_cb() which is called as a result of setting the
property on the session */
+ g_clear_object (&self->priv->proxy_resolver);
+ self->priv->proxy_resolver = proxy_resolver;
+
+ g_object_notify (G_OBJECT (self), "proxy-resolver");
}
static void
diff --git a/gdata/gdata-client-login-authorizer.h b/gdata/gdata-client-login-authorizer.h
index d6d4f19..c4b4722 100644
--- a/gdata/gdata-client-login-authorizer.h
+++ b/gdata/gdata-client-login-authorizer.h
@@ -119,8 +119,13 @@ const gchar *gdata_client_login_authorizer_get_client_id (GDataClientLoginAuthor
const gchar *gdata_client_login_authorizer_get_username (GDataClientLoginAuthorizer *self) G_GNUC_PURE;
const gchar *gdata_client_login_authorizer_get_password (GDataClientLoginAuthorizer *self) G_GNUC_PURE;
-SoupURI *gdata_client_login_authorizer_get_proxy_uri (GDataClientLoginAuthorizer *self) G_GNUC_PURE;
-void gdata_client_login_authorizer_set_proxy_uri (GDataClientLoginAuthorizer *self, SoupURI *proxy_uri);
+#ifndef LIBGDATA_DISABLE_DEPRECATED
+SoupURI *gdata_client_login_authorizer_get_proxy_uri (GDataClientLoginAuthorizer *self) G_GNUC_PURE
G_GNUC_DEPRECATED_FOR (gdata_client_login_authorizer_get_proxy_resolver);
+void gdata_client_login_authorizer_set_proxy_uri (GDataClientLoginAuthorizer *self, SoupURI *proxy_uri)
G_GNUC_DEPRECATED_FOR (gdata_client_login_authorizer_set_proxy_resolver);
+#endif /* !LIBGDATA_DISABLE_DEPRECATED */
+
+GProxyResolver *gdata_client_login_authorizer_get_proxy_resolver (GDataClientLoginAuthorizer *self)
G_GNUC_PURE;
+void gdata_client_login_authorizer_set_proxy_resolver (GDataClientLoginAuthorizer *self, GProxyResolver
*proxy_resolver);
guint gdata_client_login_authorizer_get_timeout (GDataClientLoginAuthorizer *self) G_GNUC_PURE;
void gdata_client_login_authorizer_set_timeout (GDataClientLoginAuthorizer *self, guint timeout);
diff --git a/gdata/gdata.symbols b/gdata/gdata.symbols
index a22723c..12e0b9e 100644
--- a/gdata/gdata.symbols
+++ b/gdata/gdata.symbols
@@ -886,6 +886,8 @@ gdata_client_login_authorizer_get_username
gdata_client_login_authorizer_get_password
gdata_client_login_authorizer_get_proxy_uri
gdata_client_login_authorizer_set_proxy_uri
+gdata_client_login_authorizer_get_proxy_resolver
+gdata_client_login_authorizer_set_proxy_resolver
gdata_client_login_authorizer_get_timeout
gdata_client_login_authorizer_set_timeout
gdata_client_login_authorizer_error_quark
diff --git a/gdata/tests/client-login-authorizer.c b/gdata/tests/client-login-authorizer.c
index e87d9f4..6c8a87a 100644
--- a/gdata/tests/client-login-authorizer.c
+++ b/gdata/tests/client-login-authorizer.c
@@ -78,8 +78,8 @@ test_client_login_authorizer_constructor_for_domains (void)
typedef struct {
GDataClientLoginAuthorizer *authorizer;
- guint proxy_uri_notification_count;
- gulong proxy_uri_signal_handler;
+ guint proxy_resolver_notification_count;
+ gulong proxy_resolver_signal_handler;
guint timeout_notification_count;
gulong timeout_signal_handler;
guint username_notification_count;
@@ -103,8 +103,8 @@ static void
connect_to_client_login_authorizer (ClientLoginAuthorizerData *data)
{
/* Connect to notifications from the object to verify they're only emitted the correct number of
times */
- data->proxy_uri_signal_handler = g_signal_connect (data->authorizer, "notify::proxy-uri", (GCallback)
notify_cb,
- &(data->proxy_uri_notification_count));
+ data->proxy_resolver_signal_handler = g_signal_connect (data->authorizer, "notify::proxy-resolver",
(GCallback) notify_cb,
+ &(data->proxy_resolver_notification_count));
data->timeout_signal_handler = g_signal_connect (data->authorizer, "notify::timeout", (GCallback)
notify_cb,
&(data->timeout_notification_count));
data->username_signal_handler = g_signal_connect (data->authorizer, "notify::username", (GCallback)
notify_cb,
@@ -152,7 +152,7 @@ tear_down_client_login_authorizer_data (ClientLoginAuthorizerData *data, gconstp
g_signal_handler_disconnect (data->authorizer, data->password_signal_handler);
g_signal_handler_disconnect (data->authorizer, data->username_signal_handler);
g_signal_handler_disconnect (data->authorizer, data->timeout_signal_handler);
- g_signal_handler_disconnect (data->authorizer, data->proxy_uri_signal_handler);
+ g_signal_handler_disconnect (data->authorizer, data->proxy_resolver_signal_handler);
g_object_unref (data->authorizer);
}
@@ -199,52 +199,52 @@ test_client_login_authorizer_properties_password (ClientLoginAuthorizerData *dat
g_free (password);
}
-/* Test getting and setting the proxy-uri property */
+/* Test getting and setting the proxy-resolver property */
static void
-test_client_login_authorizer_properties_proxy_uri (ClientLoginAuthorizerData *data, gconstpointer user_data)
+test_client_login_authorizer_properties_proxy_resolver (ClientLoginAuthorizerData *data, gconstpointer
user_data)
{
- SoupURI *proxy_uri, *new_proxy_uri;
+ GProxyResolver *proxy_resolver, *new_proxy_resolver;
/* Verifying the normal state of the property in a newly-constructed instance of
GDataClientLoginAuthorizer */
- g_assert (gdata_client_login_authorizer_get_proxy_uri (data->authorizer) == NULL);
+ g_assert (gdata_client_login_authorizer_get_proxy_resolver (data->authorizer) == NULL);
- g_object_get (data->authorizer, "proxy-uri", &proxy_uri, NULL);
- g_assert (proxy_uri == NULL);
+ g_object_get (data->authorizer, "proxy-resolver", &proxy_resolver, NULL);
+ g_assert (proxy_resolver == NULL);
- g_assert_cmpuint (data->proxy_uri_notification_count, ==, 0);
+ g_assert_cmpuint (data->proxy_resolver_notification_count, ==, 0);
/* Check setting it works and emits a notification */
- new_proxy_uri = soup_uri_new ("http://example.com/");
- gdata_client_login_authorizer_set_proxy_uri (data->authorizer, new_proxy_uri);
+ new_proxy_resolver = g_object_ref (g_proxy_resolver_get_default ());
+ gdata_client_login_authorizer_set_proxy_resolver (data->authorizer, new_proxy_resolver);
- g_assert_cmpuint (data->proxy_uri_notification_count, ==, 1);
+ g_assert_cmpuint (data->proxy_resolver_notification_count, ==, 1);
- g_assert (gdata_client_login_authorizer_get_proxy_uri (data->authorizer) != NULL);
- g_assert (soup_uri_equal (gdata_client_login_authorizer_get_proxy_uri (data->authorizer),
new_proxy_uri) == TRUE);
+ g_assert (gdata_client_login_authorizer_get_proxy_resolver (data->authorizer) != NULL);
+ g_assert (gdata_client_login_authorizer_get_proxy_resolver (data->authorizer) == new_proxy_resolver);
- g_object_get (data->authorizer, "proxy-uri", &proxy_uri, NULL);
- g_assert (proxy_uri != NULL);
- g_assert (soup_uri_equal (gdata_client_login_authorizer_get_proxy_uri (data->authorizer),
new_proxy_uri) == TRUE);
- soup_uri_free (proxy_uri);
+ g_object_get (data->authorizer, "proxy-resolver", &proxy_resolver, NULL);
+ g_assert (proxy_resolver != NULL);
+ g_assert (gdata_client_login_authorizer_get_proxy_resolver (data->authorizer) == new_proxy_resolver);
+ g_object_unref (proxy_resolver);
- soup_uri_free (new_proxy_uri);
+ g_object_unref (new_proxy_resolver);
/* Check setting it back to NULL works */
- gdata_client_login_authorizer_set_proxy_uri (data->authorizer, NULL);
+ gdata_client_login_authorizer_set_proxy_resolver (data->authorizer, NULL);
- g_assert_cmpuint (data->proxy_uri_notification_count, ==, 2);
+ g_assert_cmpuint (data->proxy_resolver_notification_count, ==, 2);
- g_assert (gdata_client_login_authorizer_get_proxy_uri (data->authorizer) == NULL);
+ g_assert (gdata_client_login_authorizer_get_proxy_resolver (data->authorizer) == NULL);
- g_object_get (data->authorizer, "proxy-uri", &proxy_uri, NULL);
- g_assert (proxy_uri == NULL);
+ g_object_get (data->authorizer, "proxy-resolver", &proxy_resolver, NULL);
+ g_assert (proxy_resolver == NULL);
/* Test that setting it using g_object_set() works */
- new_proxy_uri = soup_uri_new ("http://example.com/");
- g_object_set (data->authorizer, "proxy-uri", new_proxy_uri, NULL);
- soup_uri_free (new_proxy_uri);
+ new_proxy_resolver = g_object_ref (g_proxy_resolver_get_default ());
+ g_object_set (data->authorizer, "proxy-resolver", new_proxy_resolver, NULL);
+ g_object_unref (new_proxy_resolver);
- g_assert (gdata_client_login_authorizer_get_proxy_uri (data->authorizer) != NULL);
+ g_assert (gdata_client_login_authorizer_get_proxy_resolver (data->authorizer) != NULL);
}
/* Test getting and setting the timeout property */
@@ -745,8 +745,8 @@ main (int argc, char *argv[])
test_client_login_authorizer_properties_username, tear_down_client_login_authorizer_data);
g_test_add ("/client-login-authorizer/properties/password", ClientLoginAuthorizerData, NULL,
set_up_client_login_authorizer_data,
test_client_login_authorizer_properties_password, tear_down_client_login_authorizer_data);
- g_test_add ("/client-login-authorizer/properties/proxy-uri", ClientLoginAuthorizerData, NULL,
set_up_client_login_authorizer_data,
- test_client_login_authorizer_properties_proxy_uri,
tear_down_client_login_authorizer_data);
+ g_test_add ("/client-login-authorizer/properties/proxy-resolver", ClientLoginAuthorizerData, NULL,
set_up_client_login_authorizer_data,
+ test_client_login_authorizer_properties_proxy_resolver,
tear_down_client_login_authorizer_data);
g_test_add ("/client-login-authorizer/properties/timeout", ClientLoginAuthorizerData, NULL,
set_up_client_login_authorizer_data,
test_client_login_authorizer_properties_timeout, tear_down_client_login_authorizer_data);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]