[libsoup] Move SoupRequester API into SoupSession, declare SoupRequest stable



commit e00cf242322f82f0800956b17d726f0437db683a
Author: Dan Winship <danw gnome org>
Date:   Mon Dec 5 16:00:40 2011 -0500

    Move SoupRequester API into SoupSession, declare SoupRequest stable
    
    Add soup_session_request() and soup_session_request_uri(),
    implementing basically the same behavior as soup_requester_request()
    and soup_requester_request_uri() (but without requiring a separate
    SoupSessionFeature), and remove the unstable-api ifdefs from
    soup-request*.h.
    
    SoupRequester still exists, but it is still guarded by the
    unstable-api ifdefs, and is just a dummy wrapper around the
    functionality that is now in SoupSession.

 docs/reference/libsoup-2.4-docs.sgml    |   17 +--
 docs/reference/libsoup-2.4-sections.txt |   33 ++----
 libsoup/libsoup-2.4.sym                 |    5 +
 libsoup/soup-cache.c                    |    2 -
 libsoup/soup-cache.h                    |    4 -
 libsoup/soup-request-data.c             |    4 +-
 libsoup/soup-request-data.h             |    4 -
 libsoup/soup-request-file.c             |    6 +-
 libsoup/soup-request-file.h             |    4 -
 libsoup/soup-request-http.c             |   15 +-
 libsoup/soup-request-http.h             |    4 -
 libsoup/soup-request.c                  |   45 ++++---
 libsoup/soup-request.h                  |    5 -
 libsoup/soup-requester.c                |  213 ++++++-------------------------
 libsoup/soup-requester.h                |    6 +-
 libsoup/soup-session.c                  |  187 ++++++++++++++++++++++++++-
 libsoup/soup-session.h                  |   21 +++
 libsoup/soup-types.h                    |    1 +
 libsoup/soup.h                          |    5 +
 po/POTFILES.in                          |    2 +-
 tests/coding-test.c                     |   26 ++---
 tests/connection-test.c                 |    9 +-
 tests/misc-test.c                       |   34 ++----
 tests/proxy-test.c                      |    7 +-
 tests/redirect-test.c                   |    8 +-
 tests/requester-test.c                  |   51 ++++++--
 tests/timeout-test.c                    |   32 +----
 27 files changed, 380 insertions(+), 370 deletions(-)
---
diff --git a/docs/reference/libsoup-2.4-docs.sgml b/docs/reference/libsoup-2.4-docs.sgml
index ae74c01..3f24676 100644
--- a/docs/reference/libsoup-2.4-docs.sgml
+++ b/docs/reference/libsoup-2.4-docs.sgml
@@ -19,6 +19,7 @@
     <xi:include href="xml/soup-auth-domain.xml"/>
     <xi:include href="xml/soup-auth-domain-basic.xml"/>
     <xi:include href="xml/soup-auth-domain-digest.xml"/>
+    <xi:include href="xml/soup-cache.xml"/>
     <xi:include href="xml/soup-cookie.xml"/>
     <xi:include href="xml/soup-message.xml"/>
     <xi:include href="xml/soup-message-headers.xml"/>
@@ -26,6 +27,11 @@
     <xi:include href="xml/soup-method.xml"/>
     <xi:include href="xml/soup-misc.xml"/>
     <xi:include href="xml/soup-multipart.xml"/>
+    <xi:include href="xml/soup-multipart-input-stream.xml"/>
+    <xi:include href="xml/soup-request.xml"/>
+    <xi:include href="xml/soup-request-http.xml"/>
+    <xi:include href="xml/soup-request-file.xml"/>
+    <xi:include href="xml/soup-request-data.xml"/>
     <xi:include href="xml/soup-server.xml"/>
     <xi:include href="xml/soup-session.xml"/>
     <xi:include href="xml/soup-session-async.xml"/>
@@ -67,17 +73,6 @@
     <xi:include href="xml/soup-socket.xml"/>
   </chapter>
 
-  <chapter>
-    <title>Experimental streaming API</title>
-    <xi:include href="xml/soup-requester.xml"/>
-    <xi:include href="xml/soup-request.xml"/>
-    <xi:include href="xml/soup-request-http.xml"/>
-    <xi:include href="xml/soup-request-file.xml"/>
-    <xi:include href="xml/soup-request-data.xml"/>
-    <xi:include href="xml/soup-cache.xml"/>
-    <xi:include href="xml/soup-multipart-input-stream.xml"/>
-  </chapter>
-
   <index>
     <title>Index</title>
   </index>
diff --git a/docs/reference/libsoup-2.4-sections.txt b/docs/reference/libsoup-2.4-sections.txt
index 81f4b77..237d3f0 100644
--- a/docs/reference/libsoup-2.4-sections.txt
+++ b/docs/reference/libsoup-2.4-sections.txt
@@ -386,11 +386,17 @@ SoupAddressClass
 <TITLE>SoupSession</TITLE>
 SoupSession
 <SUBSECTION>
+soup_session_request
+soup_session_request_uri
+SoupRequestError
+SOUP_REQUEST_ERROR
+<SUBSECTION>
 SoupSessionCallback
 soup_session_queue_message
 soup_session_requeue_message
 soup_session_send_message
 soup_session_cancel_message
+<SUBSECTION>
 soup_session_prefetch_dns
 soup_session_prepare_for_uri
 soup_session_abort
@@ -410,6 +416,7 @@ soup_session_remove_feature_by_type
 soup_session_get_features
 soup_session_get_feature
 soup_session_get_feature_for_message
+soup_session_has_feature
 <SUBSECTION>
 SOUP_SESSION_PROXY_URI
 SOUP_SESSION_MAX_CONNS
@@ -440,6 +447,8 @@ SOUP_SESSION_GET_CLASS
 SOUP_TYPE_SESSION
 SoupSessionClass
 soup_session_get_type
+soup_request_error_get_type
+soup_request_error_quark
 <SUBSECTION Private>
 SoupConnection
 SoupConnectionState
@@ -1090,30 +1099,6 @@ SOUP_IS_PROXY_RESOLVER_DEFAULT_CLASS
 </SECTION>
 
 <SECTION>
-<FILE>soup-requester</FILE>
-<TITLE>SoupRequester</TITLE>
-SoupRequester
-soup_requester_new
-soup_requester_request
-soup_requester_request_uri
-<SUBSECTION>
-SoupRequesterError
-SOUP_REQUESTER_ERROR
-<SUBSECTION Standard>
-soup_requester_get_type
-SoupRequesterClass
-SoupRequesterPrivate
-SOUP_TYPE_REQUESTER
-SOUP_REQUESTER
-SOUP_REQUESTER_CLASS
-SOUP_REQUESTER_GET_CLASS
-SOUP_IS_REQUESTER
-SOUP_IS_REQUESTER_CLASS
-<SUBSECTION Private>
-soup_requester_error_quark
-</SECTION>
-
-<SECTION>
 <FILE>soup-request</FILE>
 <TITLE>SoupRequest</TITLE>
 SoupRequest
diff --git a/libsoup/libsoup-2.4.sym b/libsoup/libsoup-2.4.sym
index 62cb933..24dcc17 100644
--- a/libsoup/libsoup-2.4.sym
+++ b/libsoup/libsoup-2.4.sym
@@ -316,6 +316,8 @@ soup_requester_get_type
 soup_requester_new
 soup_requester_request
 soup_requester_request_uri
+soup_request_error_get_type
+soup_request_error_quark
 soup_request_file_get_file
 soup_request_file_get_type
 soup_request_get_content_length
@@ -362,6 +364,7 @@ soup_session_get_feature
 soup_session_get_feature_for_message
 soup_session_get_features
 soup_session_get_type
+soup_session_has_feature
 soup_session_pause_message
 soup_session_prefetch_dns
 soup_session_prepare_for_uri
@@ -369,6 +372,8 @@ soup_session_queue_message
 soup_session_redirect_message
 soup_session_remove_feature
 soup_session_remove_feature_by_type
+soup_session_request
+soup_session_request_uri
 soup_session_requeue_message
 soup_session_send_message
 soup_session_sync_get_type
diff --git a/libsoup/soup-cache.c b/libsoup/soup-cache.c
index 50ea592..24a4b2c 100644
--- a/libsoup/soup-cache.c
+++ b/libsoup/soup-cache.c
@@ -31,8 +31,6 @@
 
 #include <string.h>
 
-#define LIBSOUP_USE_UNSTABLE_REQUEST_API
-
 #include "soup-cache.h"
 #include "soup-cache-private.h"
 #include "soup.h"
diff --git a/libsoup/soup-cache.h b/libsoup/soup-cache.h
index 64dcb78..ce19b5e 100644
--- a/libsoup/soup-cache.h
+++ b/libsoup/soup-cache.h
@@ -23,8 +23,6 @@
 #ifndef SOUP_CACHE_H
 #define SOUP_CACHE_H 1
 
-#ifdef LIBSOUP_USE_UNSTABLE_REQUEST_API
-
 #include <libsoup/soup-types.h>
 #include <gio/gio.h>
 
@@ -100,7 +98,5 @@ guint      soup_cache_get_max_size (SoupCache     *cache);
 
 G_END_DECLS
 
-#endif /* LIBSOUP_USE_UNSTABLE_REQUEST_API */
-
 #endif /* SOUP_CACHE_H */
 
diff --git a/libsoup/soup-request-data.c b/libsoup/soup-request-data.c
index 933d752..0ff30c9 100644
--- a/libsoup/soup-request-data.c
+++ b/libsoup/soup-request-data.c
@@ -25,9 +25,7 @@
 #include <config.h>
 #endif
 
-#include <glib/gi18n-lib.h>
-
-#define LIBSOUP_USE_UNSTABLE_REQUEST_API
+#include <string.h>
 
 #include "soup-request-data.h"
 #include "soup.h"
diff --git a/libsoup/soup-request-data.h b/libsoup/soup-request-data.h
index f750b04..929c590 100644
--- a/libsoup/soup-request-data.h
+++ b/libsoup/soup-request-data.h
@@ -22,8 +22,6 @@
 #ifndef SOUP_REQUEST_DATA_H
 #define SOUP_REQUEST_DATA_H 1
 
-#ifdef LIBSOUP_USE_UNSTABLE_REQUEST_API
-
 #include "soup-request.h"
 
 G_BEGIN_DECLS
@@ -52,6 +50,4 @@ GType soup_request_data_get_type (void);
 
 G_END_DECLS
 
-#endif /* LIBSOUP_USE_UNSTABLE_REQUEST_API */
-
 #endif /* SOUP_REQUEST_DATA_H */
diff --git a/libsoup/soup-request-file.c b/libsoup/soup-request-file.c
index 22642f4..a71827b 100644
--- a/libsoup/soup-request-file.c
+++ b/libsoup/soup-request-file.c
@@ -25,10 +25,6 @@
 #include <config.h>
 #endif
 
-#include <glib/gi18n-lib.h>
-
-#define LIBSOUP_USE_UNSTABLE_REQUEST_API
-
 #include "soup-request-file.h"
 #include "soup.h"
 #include "soup-directory-input-stream.h"
@@ -281,7 +277,7 @@ soup_request_file_class_init (SoupRequestFileClass *request_file_class)
  *
  * Return value: (transfer full): a #GFile corresponding to @file
  *
- * Since: 2.34
+ * Since: 2.40
  */
 GFile *
 soup_request_file_get_file (SoupRequestFile *file)
diff --git a/libsoup/soup-request-file.h b/libsoup/soup-request-file.h
index e86c597..df2cbab 100644
--- a/libsoup/soup-request-file.h
+++ b/libsoup/soup-request-file.h
@@ -22,8 +22,6 @@
 #ifndef SOUP_REQUEST_FILE_H
 #define SOUP_REQUEST_FILE_H 1
 
-#ifdef LIBSOUP_USE_UNSTABLE_REQUEST_API
-
 #include "soup-request.h"
 
 G_BEGIN_DECLS
@@ -55,6 +53,4 @@ GFile *soup_request_file_get_file (SoupRequestFile *file);
 
 G_END_DECLS
 
-#endif /* LIBSOUP_USE_UNSTABLE_REQUEST_API */
-
 #endif /* SOUP_REQUEST_FILE_H */
diff --git a/libsoup/soup-request-http.c b/libsoup/soup-request-http.c
index d817cd0..96ba251 100644
--- a/libsoup/soup-request-http.c
+++ b/libsoup/soup-request-http.c
@@ -27,8 +27,6 @@
 
 #include <glib/gi18n-lib.h>
 
-#define LIBSOUP_USE_UNSTABLE_REQUEST_API
-
 #include "soup-request-http.h"
 #include "soup.h"
 #include "soup-cache-private.h"
@@ -91,9 +89,11 @@ soup_request_http_send (SoupRequest          *request,
 			GError              **error)
 {
 	SoupRequestHTTP *http = SOUP_REQUEST_HTTP (request);
+	SoupSession *session = soup_request_get_session (request);
+
+	g_return_val_if_fail (!SOUP_IS_SESSION_ASYNC (session), NULL);
 
-	return soup_session_send_request (soup_request_get_session (request),
-					  http->priv->msg,
+	return soup_session_send_request (session, http->priv->msg,
 					  cancellable, error);
 }
 
@@ -187,17 +187,18 @@ soup_request_http_send_async (SoupRequest          *request,
 			      gpointer              user_data)
 {
 	SoupRequestHTTP *http = SOUP_REQUEST_HTTP (request);
+	SoupSession *session = soup_request_get_session (request);
 	GTask *task;
 	SendAsyncData *sadata;
 	GInputStream *stream;
-	SoupSession *session;
 	SoupCache *cache;
 
+	g_return_if_fail (!SOUP_IS_SESSION_SYNC (session));
+
 	task = g_task_new (request, cancellable, callback, user_data);
 	sadata = g_slice_new0 (SendAsyncData);
 	g_task_set_task_data (task, sadata, (GDestroyNotify)free_send_async_data);
 
-	session = soup_request_get_session (request);
 	cache = (SoupCache *)soup_session_get_feature (session, SOUP_TYPE_CACHE);
 
 	if (cache) {
@@ -320,7 +321,7 @@ soup_request_http_class_init (SoupRequestHTTPClass *request_http_class)
  *
  * Returns: (transfer full): a new reference to the #SoupMessage
  *
- * Since: 2.34
+ * Since: 2.40
  */
 SoupMessage *
 soup_request_http_get_message (SoupRequestHTTP *http)
diff --git a/libsoup/soup-request-http.h b/libsoup/soup-request-http.h
index 750005a..bad4345 100644
--- a/libsoup/soup-request-http.h
+++ b/libsoup/soup-request-http.h
@@ -22,8 +22,6 @@
 #ifndef SOUP_REQUEST_HTTP_H
 #define SOUP_REQUEST_HTTP_H 1
 
-#ifdef LIBSOUP_USE_UNSTABLE_REQUEST_API
-
 #include "soup-request.h"
 
 G_BEGIN_DECLS
@@ -55,6 +53,4 @@ SoupMessage *soup_request_http_get_message (SoupRequestHTTP *http);
 
 G_END_DECLS
 
-#endif /* LIBSOUP_USE_UNSTABLE_REQUEST_API */
-
 #endif /* SOUP_REQUEST_HTTP_H */
diff --git a/libsoup/soup-request.c b/libsoup/soup-request.c
index dbc8361..006a253 100644
--- a/libsoup/soup-request.c
+++ b/libsoup/soup-request.c
@@ -27,8 +27,6 @@
 
 #include <glib/gi18n-lib.h>
 
-#define LIBSOUP_USE_UNSTABLE_REQUEST_API
-
 #include "soup-request.h"
 #include "soup.h"
 #include "soup-requester.h"
@@ -37,8 +35,8 @@
  * SECTION:soup-request
  * @short_description: Protocol-independent streaming request interface
  *
- * A #SoupRequest is created by #SoupRequester, and represents a
- * request to retrieve a particular URI.
+ * A #SoupRequest is created by #SoupSession, and represents a request
+ * to retrieve a particular URI.
  */
 
 /**
@@ -46,7 +44,7 @@
  *
  * A request to retrieve a particular URI.
  *
- * Since: 2.34
+ * Since: 2.42
  */
 
 static void soup_request_initable_interface_init (GInitableIface *initable_interface);
@@ -138,7 +136,7 @@ soup_request_initable_init (GInitable     *initable,
 	gboolean ok;
 
 	if (!request->priv->uri) {
-		g_set_error (error, SOUP_REQUESTER_ERROR, SOUP_REQUESTER_ERROR_BAD_URI,
+		g_set_error (error, SOUP_REQUEST_ERROR, SOUP_REQUEST_ERROR_BAD_URI,
 			     _("No URI provided"));
 		return FALSE;
 	}
@@ -148,7 +146,7 @@ soup_request_initable_init (GInitable     *initable,
 
 	if (!ok && error && !*error) {
 		char *uri_string = soup_uri_to_string (request->priv->uri, FALSE);
-		g_set_error (error, SOUP_REQUESTER_ERROR, SOUP_REQUESTER_ERROR_BAD_URI,
+		g_set_error (error, SOUP_REQUEST_ERROR, SOUP_REQUEST_ERROR_BAD_URI,
 			     _("Invalid '%s' URI: %s"),
 			     request->priv->uri->scheme,
 			     uri_string);
@@ -204,10 +202,13 @@ soup_request_default_send_finish (SoupRequest          *request,
  * Synchronously requests the URI pointed to by @request, and returns
  * a #GInputStream that can be used to read its contents.
  *
+ * Note that you cannot use this method with #SoupRequests attached to
+ * a #SoupSessionAsync.
+ *
  * Return value: (transfer full): a #GInputStream that can be used to
  *   read from the URI pointed to by @request.
  *
- * Since: 2.34
+ * Since: 2.42
  */
 GInputStream *
 soup_request_send (SoupRequest          *request,
@@ -228,7 +229,10 @@ soup_request_send (SoupRequest          *request,
  * Begins an asynchronously request for the URI pointed to by
  * @request.
  *
- * Since: 2.34
+ * Note that you cannot use this method with #SoupRequests attached to
+ * a #SoupSessionSync.
+ *
+ * Since: 2.42
  */
 void
 soup_request_send_async (SoupRequest         *request,
@@ -251,7 +255,7 @@ soup_request_send_async (SoupRequest         *request,
  * Return value: (transfer full): a #GInputStream that can be used to
  *   read from the URI pointed to by @request.
  *
- * Since: 2.34
+ * Since: 2.42
  */
 GInputStream *
 soup_request_send_finish (SoupRequest          *request,
@@ -307,7 +311,7 @@ soup_request_initable_interface_init (GInitableIface *initable_interface)
  *
  * Return value: (transfer none): @request's URI
  *
- * Since: 2.34
+ * Since: 2.42
  */
 SoupURI *
 soup_request_get_uri (SoupRequest *request)
@@ -323,7 +327,7 @@ soup_request_get_uri (SoupRequest *request)
  *
  * Return value: (transfer none): @request's #SoupSession
  *
- * Since: 2.34
+ * Since: 2.42
  */
 SoupSession *
 soup_request_get_session (SoupRequest *request)
@@ -335,12 +339,14 @@ soup_request_get_session (SoupRequest *request)
  * soup_request_get_content_length:
  * @request: a #SoupRequest
  *
- * Gets the length of the data represented by @request.
+ * Gets the length of the data represented by @request. For most
+ * request types, this will not be known until after you call
+ * soup_request_send() or soup_request_send_finish().
  *
  * Return value: the length of the data represented by @request,
  *   or -1 if not known.
  *
- * Since: 2.34
+ * Since: 2.42
  */
 goffset
 soup_request_get_content_length (SoupRequest *request)
@@ -352,14 +358,17 @@ soup_request_get_content_length (SoupRequest *request)
  * soup_request_get_content_type:
  * @request: a #SoupRequest
  *
- * Gets the type of the data represented by @request. As in the
- * HTTP Content-Type header, this may include parameters after
- * the MIME type.
+ * Gets the type of the data represented by @request. For most request
+ * types, this will not be known until after you call
+ * soup_request_send() or soup_request_send_finish().
+ *
+ * As in the HTTP Content-Type header, this may include parameters
+ * after the MIME type.
  *
  * Return value: the type of the data represented by @request,
  *   or %NULL if not known.
  *
- * Since: 2.34
+ * Since: 2.42
  */
 const char *
 soup_request_get_content_type (SoupRequest  *request)
diff --git a/libsoup/soup-request.h b/libsoup/soup-request.h
index bc6cdff..84ad6d6 100644
--- a/libsoup/soup-request.h
+++ b/libsoup/soup-request.h
@@ -22,8 +22,6 @@
 #ifndef SOUP_REQUEST_H
 #define SOUP_REQUEST_H 1
 
-#ifdef LIBSOUP_USE_UNSTABLE_REQUEST_API
-
 #include <gio/gio.h>
 
 #include <libsoup/soup-types.h>
@@ -37,7 +35,6 @@ G_BEGIN_DECLS
 #define SOUP_IS_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SOUP_TYPE_REQUEST))
 #define SOUP_REQUEST_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), SOUP_TYPE_REQUEST, SoupRequestClass))
 
-typedef struct _SoupRequest SoupRequest;
 typedef struct _SoupRequestPrivate SoupRequestPrivate;
 typedef struct _SoupRequestClass SoupRequestClass;
 
@@ -103,6 +100,4 @@ const char   *soup_request_get_content_type   (SoupRequest          *request);
 
 G_END_DECLS
 
-#endif /* LIBSOUP_USE_UNSTABLE_REQUEST_API */
-
 #endif /* SOUP_REQUEST_H */
diff --git a/libsoup/soup-requester.c b/libsoup/soup-requester.c
index 281ebb1..ce67982 100644
--- a/libsoup/soup-requester.c
+++ b/libsoup/soup-requester.c
@@ -22,22 +22,18 @@
 
 #include "config.h"
 
-#include <glib/gi18n-lib.h>
-
 #define LIBSOUP_USE_UNSTABLE_REQUEST_API
 
 #include "soup-requester.h"
 #include "soup.h"
-#include "soup-request-data.h"
-#include "soup-request-file.h"
-#include "soup-request-http.h"
+
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
 
 static SoupSessionFeatureInterface *soup_requester_default_feature_interface;
 static void soup_requester_session_feature_init (SoupSessionFeatureInterface *feature_interface, gpointer interface_data);
 
 struct _SoupRequesterPrivate {
 	SoupSession *session;
-	GHashTable *request_types;
 };
 
 G_DEFINE_TYPE_WITH_CODE (SoupRequester, soup_requester, G_TYPE_OBJECT,
@@ -47,44 +43,19 @@ G_DEFINE_TYPE_WITH_CODE (SoupRequester, soup_requester, G_TYPE_OBJECT,
 static void
 soup_requester_init (SoupRequester *requester)
 {
-	SoupSessionFeature *feature;
-
 	requester->priv = G_TYPE_INSTANCE_GET_PRIVATE (requester,
 						       SOUP_TYPE_REQUESTER,
 						       SoupRequesterPrivate);
-
-	requester->priv->request_types = g_hash_table_new (soup_str_case_hash,
-							   soup_str_case_equal);
-
-	feature = SOUP_SESSION_FEATURE (requester);
-	soup_session_feature_add_feature (feature, SOUP_TYPE_REQUEST_HTTP);
-	soup_session_feature_add_feature (feature, SOUP_TYPE_REQUEST_FILE);
-	soup_session_feature_add_feature (feature, SOUP_TYPE_REQUEST_DATA);
-}
-
-static void
-soup_requester_finalize (GObject *object)
-{
-	SoupRequester *requester = SOUP_REQUESTER (object);
-
-	g_hash_table_destroy (requester->priv->request_types);
-
-	G_OBJECT_CLASS (soup_requester_parent_class)->finalize (object);
 }
 
 static void
 soup_requester_class_init (SoupRequesterClass *requester_class)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS (requester_class);
-
 	g_type_class_add_private (requester_class, sizeof (SoupRequesterPrivate));
-
-	/* virtual method override */
-	object_class->finalize = soup_requester_finalize;
 }
 
 static void
-attach (SoupSessionFeature *feature, SoupSession *session)
+soup_requester_attach (SoupSessionFeature *feature, SoupSession *session)
 {
 	SoupRequester *requester = SOUP_REQUESTER (feature);
 
@@ -94,7 +65,7 @@ attach (SoupSessionFeature *feature, SoupSession *session)
 }
 
 static void
-detach (SoupSessionFeature *feature, SoupSession *session)
+soup_requester_detach (SoupSessionFeature *feature, SoupSession *session)
 {
 	SoupRequester *requester = SOUP_REQUESTER (feature);
 
@@ -103,66 +74,6 @@ detach (SoupSessionFeature *feature, SoupSession *session)
 	soup_requester_default_feature_interface->detach (feature, session);
 }
 
-static gboolean
-add_feature (SoupSessionFeature *feature, GType type)
-{
-	SoupRequester *requester = SOUP_REQUESTER (feature);
-	SoupRequestClass *request_class;
-	int i;
-
-	if (!g_type_is_a (type, SOUP_TYPE_REQUEST))
-		return FALSE;
-
-	request_class = g_type_class_ref (type);
-	for (i = 0; request_class->schemes[i]; i++) {
-		g_hash_table_insert (requester->priv->request_types,
-				     (char *)request_class->schemes[i],
-				     GSIZE_TO_POINTER (type));
-	}
-	return TRUE;
-}
-
-static gboolean
-remove_feature (SoupSessionFeature *feature, GType type)
-{
-	SoupRequester *requester = SOUP_REQUESTER (feature);
-	SoupRequestClass *request_class;
-	int i, orig_size;
-
-	if (!g_type_is_a (type, SOUP_TYPE_REQUEST))
-		return FALSE;
-
-	request_class = g_type_class_peek (type);
-	if (!request_class)
-		return FALSE;
-
-	orig_size = g_hash_table_size (requester->priv->request_types);
-	for (i = 0; request_class->schemes[i]; i++) {
-		g_hash_table_remove (requester->priv->request_types,
-				     request_class->schemes[i]);
-	}
-
-	return g_hash_table_size (requester->priv->request_types) != orig_size;
-}
-
-static gboolean
-has_feature (SoupSessionFeature *feature, GType type)
-{
-	SoupRequester *requester = SOUP_REQUESTER (feature);
-	GHashTableIter iter;
-	gpointer key, value;
-
-	if (!g_type_is_a (type, SOUP_TYPE_REQUEST))
-		return FALSE;
-
-	g_hash_table_iter_init (&iter, requester->priv->request_types);
-	while (g_hash_table_iter_next (&iter, &key, &value)) {
-		if (value == GSIZE_TO_POINTER (type))
-			return TRUE;
-	}
-	return FALSE;
-}
-
 static void
 soup_requester_session_feature_init (SoupSessionFeatureInterface *feature_interface,
 				     gpointer interface_data)
@@ -170,115 +81,65 @@ soup_requester_session_feature_init (SoupSessionFeatureInterface *feature_interf
 	soup_requester_default_feature_interface =
 		g_type_default_interface_peek (SOUP_TYPE_SESSION_FEATURE);
 
-	feature_interface->attach = attach;
-	feature_interface->detach = detach;
-	feature_interface->add_feature = add_feature;
-	feature_interface->remove_feature = remove_feature;
-	feature_interface->has_feature = has_feature;
+	feature_interface->attach = soup_requester_attach;
+	feature_interface->detach = soup_requester_detach;
 }
 
-/**
- * soup_requester_new:
- *
- * Creates a new #SoupRequester object, which can be added to
- * a #SoupSession with soup_session_add_feature().
- *
- * Return value: the new #SoupRequester
- *
- * Since: 2.34
- */
 SoupRequester *
 soup_requester_new (void)
 {
 	return g_object_new (SOUP_TYPE_REQUESTER, NULL);
 }
 
-/**
- * soup_requester_request:
- * @requester: a #SoupRequester
- * @uri_string: a URI, in string form
- * @error: return location for a #GError, or %NULL
- *
- * Creates a #SoupRequest for retrieving @uri_string.
- *
- * Return value: (transfer full): a new #SoupRequest, or
- *   %NULL on error.
- *
- * Since: 2.34
- */
+static void
+translate_error (GError *error)
+{
+	if (error->domain != SOUP_REQUEST_ERROR)
+		return;
+
+	error->domain = SOUP_REQUESTER_ERROR;
+	if (error->code == SOUP_REQUEST_ERROR_BAD_URI)
+		error->code = SOUP_REQUESTER_ERROR_BAD_URI;
+	else if (error->code == SOUP_REQUEST_ERROR_UNSUPPORTED_URI_SCHEME)
+		error->code = SOUP_REQUESTER_ERROR_UNSUPPORTED_URI_SCHEME;
+	else
+		g_warn_if_reached ();
+}
+
 SoupRequest *
 soup_requester_request (SoupRequester *requester, const char *uri_string,
 			GError **error)
 {
-	SoupURI *uri;
 	SoupRequest *req;
 
-	uri = soup_uri_new (uri_string);
-	if (!uri) {
-		g_set_error (error, SOUP_REQUESTER_ERROR, SOUP_REQUESTER_ERROR_BAD_URI,
-			     _("Could not parse URI '%s'"), uri_string);
-		return NULL;
-	}
+	g_return_val_if_fail (SOUP_IS_REQUESTER (requester), NULL);
+
+	req = soup_session_request (requester->priv->session,
+				    uri_string, error);
+	if (req || !error)
+		return req;
 
-	req = soup_requester_request_uri (requester, uri, error);
-	soup_uri_free (uri);
-	return req;
+	translate_error (*error);
+	return NULL;
 }
 
-/**
- * soup_requester_request_uri:
- * @requester: a #SoupRequester
- * @uri: a #SoupURI representing the URI to retrieve
- * @error: return location for a #GError, or %NULL
- *
- * Creates a #SoupRequest for retrieving @uri.
- *
- * Return value: (transfer full): a new #SoupRequest, or
- *   %NULL on error.
- *
- * Since: 2.34
- */
 SoupRequest *
 soup_requester_request_uri (SoupRequester *requester, SoupURI *uri,
 			    GError **error)
 {
-	GType request_type;
+	SoupRequest *req;
 
 	g_return_val_if_fail (SOUP_IS_REQUESTER (requester), NULL);
 
-	request_type = (GType)GPOINTER_TO_SIZE (g_hash_table_lookup (requester->priv->request_types, uri->scheme));
-	if (!request_type) {
-		g_set_error (error, SOUP_REQUESTER_ERROR,
-			     SOUP_REQUESTER_ERROR_UNSUPPORTED_URI_SCHEME,
-			     _("Unsupported URI scheme '%s'"), uri->scheme);
-		return NULL;
-	}
+	req = soup_session_request_uri (requester->priv->session,
+					uri, error);
+	if (req || !error)
+		return req;
 
-	return g_initable_new (request_type, NULL, error,
-			       "uri", uri,
-			       "session", requester->priv->session,
-			       NULL);
+	translate_error (*error);
+	return NULL;
 }
 
-/**
- * SOUP_REQUESTER_ERROR:
- *
- * A #GError domain for #SoupRequester errors. Used with
- * #SoupRequesterError.
- *
- * Since: 2.34
- */
-/**
- * SoupRequesterError:
- * @SOUP_REQUESTER_ERROR_BAD_URI: the URI could not be parsed
- * @SOUP_REQUESTER_ERROR_UNSUPPORTED_URI_SCHEME: the URI scheme is not
- *   supported by this #SoupRequester
- *
- * A #SoupRequester error.
- *
- * Since: 2.34
- */
-
 GQuark
 soup_requester_error_quark (void)
 {
@@ -287,3 +148,5 @@ soup_requester_error_quark (void)
 		error = g_quark_from_static_string ("soup_requester_error_quark");
 	return error;
 }
+
+G_GNUC_END_IGNORE_DEPRECATIONS
diff --git a/libsoup/soup-requester.h b/libsoup/soup-requester.h
index 3bf249c..0635513 100644
--- a/libsoup/soup-requester.h
+++ b/libsoup/soup-requester.h
@@ -24,7 +24,6 @@
 #ifdef LIBSOUP_USE_UNSTABLE_REQUEST_API
 
 #include <libsoup/soup-types.h>
-#include <libsoup/soup-request.h>
 
 G_BEGIN_DECLS
 
@@ -49,22 +48,27 @@ typedef struct {
 } SoupRequesterClass;
 
 SOUP_AVAILABLE_IN_2_34
+SOUP_DEPRECATED_IN_2_42
 GType          soup_requester_get_type        (void);
 
 SOUP_AVAILABLE_IN_2_34
+SOUP_DEPRECATED_IN_2_42
 SoupRequester *soup_requester_new             (void);
 
 SOUP_AVAILABLE_IN_2_34
+SOUP_DEPRECATED_IN_2_42_FOR(soup_session_request)
 SoupRequest   *soup_requester_request         (SoupRequester  *requester,
 					       const char     *uri_string,
 					       GError        **error);
 
 SOUP_AVAILABLE_IN_2_34
+SOUP_DEPRECATED_IN_2_42_FOR(soup_session_request_uri)
 SoupRequest   *soup_requester_request_uri     (SoupRequester  *requester,
 					       SoupURI        *uri,
 					       GError        **error);
 
 SOUP_AVAILABLE_IN_2_34
+SOUP_DEPRECATED_IN_2_42_FOR(SOUP_REQUEST_ERROR)
 GQuark soup_requester_error_quark (void);
 #define SOUP_REQUESTER_ERROR soup_requester_error_quark ()
 
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index eb26e8c..20d1c06 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -78,6 +78,7 @@ static gboolean soup_host_uri_equal (gconstpointer v1, gconstpointer v2);
 
 typedef struct {
 	SoupSession *session;
+	gboolean disposed;
 
 	GTlsDatabase *tlsdb;
 	char *ssl_ca_file;
@@ -116,7 +117,7 @@ typedef struct {
 
 	char **http_aliases, **https_aliases;
 
-	gboolean disposed;
+	GHashTable *request_types;
 } SoupSessionPrivate;
 #define SOUP_SESSION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SOUP_TYPE_SESSION, SoupSessionPrivate))
 
@@ -232,6 +233,12 @@ soup_session_init (SoupSession *session)
 	priv->http_aliases = g_new (char *, 2);
 	priv->http_aliases[0] = (char *)g_intern_string ("*");
 	priv->http_aliases[1] = NULL;
+
+	priv->request_types = g_hash_table_new (soup_str_case_hash,
+						soup_str_case_equal);
+	soup_session_add_feature_by_type (session, SOUP_TYPE_REQUEST_HTTP);
+	soup_session_add_feature_by_type (session, SOUP_TYPE_REQUEST_FILE);
+	soup_session_add_feature_by_type (session, SOUP_TYPE_REQUEST_DATA);
 }
 
 static GObject *
@@ -322,6 +329,8 @@ soup_session_finalize (GObject *object)
 	g_free (priv->http_aliases);
 	g_free (priv->https_aliases);
 
+	g_hash_table_destroy (priv->request_types);
+
 	G_OBJECT_CLASS (soup_session_parent_class)->finalize (object);
 }
 
@@ -2359,10 +2368,10 @@ soup_session_add_feature (SoupSession *session, SoupSessionFeature *feature)
  * adds it to @session as with soup_session_add_feature(). You can use
  * this when you don't need to customize the new feature in any way.
  *
- * If @feature_type is not a #SoupSessionFeature type, this gives
- * each existing feature on @session the chance to accept @feature_type
- * as a "subfeature". This can be used to add new #SoupAuth types,
- * for instance.
+ * If @feature_type is not a #SoupSessionFeature type, this gives each
+ * existing feature on @session the chance to accept @feature_type as
+ * a "subfeature". This can be used to add new #SoupAuth or
+ * #SoupRequest types, for instance.
  *
  * You can also add a feature to the session at construct time by
  * using the %SOUP_SESSION_ADD_FEATURE_BY_TYPE property.
@@ -2372,16 +2381,29 @@ soup_session_add_feature (SoupSession *session, SoupSessionFeature *feature)
 void
 soup_session_add_feature_by_type (SoupSession *session, GType feature_type)
 {
+	SoupSessionPrivate *priv;
+
 	g_return_if_fail (SOUP_IS_SESSION (session));
 
+	priv = SOUP_SESSION_GET_PRIVATE (session);
+
 	if (g_type_is_a (feature_type, SOUP_TYPE_SESSION_FEATURE)) {
 		SoupSessionFeature *feature;
 
 		feature = g_object_new (feature_type, NULL);
 		soup_session_add_feature (session, feature);
 		g_object_unref (feature);
+	} else if (g_type_is_a (feature_type, SOUP_TYPE_REQUEST)) {
+		SoupRequestClass *request_class;
+		int i;
+
+		request_class = g_type_class_ref (feature_type);
+		for (i = 0; request_class->schemes[i]; i++) {
+			g_hash_table_insert (priv->request_types,
+					     (char *)request_class->schemes[i],
+					     GSIZE_TO_POINTER (feature_type));
+		}
 	} else {
-		SoupSessionPrivate *priv = SOUP_SESSION_GET_PRIVATE (session);
 		GSList *f;
 
 		for (f = priv->features; f; f = f->next) {
@@ -2447,6 +2469,17 @@ soup_session_remove_feature_by_type (SoupSession *session, GType feature_type)
 				goto restart;
 			}
 		}
+	} else if (g_type_is_a (feature_type, SOUP_TYPE_REQUEST)) {
+		SoupRequestClass *request_class;
+		int i;
+
+		request_class = g_type_class_peek (feature_type);
+		if (!request_class)
+			return;
+		for (i = 0; request_class->schemes[i]; i++) {
+			g_hash_table_remove (priv->request_types,
+					     request_class->schemes[i]);
+		}
 	} else {
 		for (f = priv->features; f; f = f->next) {
 			if (soup_session_feature_remove_feature (f->data, feature_type))
@@ -2457,6 +2490,49 @@ soup_session_remove_feature_by_type (SoupSession *session, GType feature_type)
 }
 
 /**
+ * soup_session_has_feature:
+ * @session: a #SoupSession
+ * @feature_type: the #GType of the class of features to check for
+ *
+ * Tests if @session has at a feature of type @feature_type (which can
+ * be the type of either a #SoupSessionFeature, or else a subtype of
+ * some class managed by another feature, such as #SoupAuth or
+ * #SoupRequest).
+ *
+ * Return value: %TRUE or %FALSE
+ *
+ * Since: 2.42
+ **/
+gboolean
+soup_session_has_feature (SoupSession *session,
+			  GType        feature_type)
+{
+	SoupSessionPrivate *priv;
+	GSList *f;
+
+	g_return_val_if_fail (SOUP_IS_SESSION (session), FALSE);
+
+	priv = SOUP_SESSION_GET_PRIVATE (session);
+
+	if (g_type_is_a (feature_type, SOUP_TYPE_SESSION_FEATURE)) {
+		for (f = priv->features; f; f = f->next) {
+			if (G_TYPE_CHECK_INSTANCE_TYPE (f->data, feature_type))
+				return TRUE;
+		}
+	} else if (g_type_is_a (feature_type, SOUP_TYPE_REQUEST)) {
+		return g_hash_table_lookup (priv->request_types,
+					    GSIZE_TO_POINTER (feature_type)) != NULL;
+	} else {
+		for (f = priv->features; f; f = f->next) {
+			if (soup_session_feature_has_feature (f->data, feature_type))
+				return TRUE;
+		}
+	}
+
+	return FALSE;
+}
+
+/**
  * soup_session_get_features:
  * @session: a #SoupSession
  * @feature_type: the #GType of the class of features to get
@@ -3655,3 +3731,102 @@ soup_session_send_request (SoupSession   *session,
 	soup_message_queue_item_unref (item);
 	return stream;
 }
+
+/**
+ * soup_session_request:
+ * @session: a #SoupSession
+ * @uri_string: a URI, in string form
+ * @error: return location for a #GError, or %NULL
+ *
+ * Creates a #SoupRequest for retrieving @uri_string.
+ *
+ * Return value: (transfer full): a new #SoupRequest, or
+ *   %NULL on error.
+ *
+ * Since: 2.42
+ */
+SoupRequest *
+soup_session_request (SoupSession *session, const char *uri_string,
+		      GError **error)
+{
+	SoupURI *uri;
+	SoupRequest *req;
+
+	uri = soup_uri_new (uri_string);
+	if (!uri) {
+		g_set_error (error, SOUP_REQUEST_ERROR,
+			     SOUP_REQUEST_ERROR_BAD_URI,
+			     _("Could not parse URI '%s'"), uri_string);
+		return NULL;
+	}
+
+	req = soup_session_request_uri (session, uri, error);
+	soup_uri_free (uri);
+	return req;
+}
+
+/**
+ * soup_session_request_uri:
+ * @session: a #SoupSession
+ * @uri: a #SoupURI representing the URI to retrieve
+ * @error: return location for a #GError, or %NULL
+ *
+ * Creates a #SoupRequest for retrieving @uri.
+ *
+ * Return value: (transfer full): a new #SoupRequest, or
+ *   %NULL on error.
+ *
+ * Since: 2.42
+ */
+SoupRequest *
+soup_session_request_uri (SoupSession *session, SoupURI *uri,
+			  GError **error)
+{
+	SoupSessionPrivate *priv;
+	GType request_type;
+
+	g_return_val_if_fail (SOUP_IS_SESSION (session), NULL);
+
+	priv = SOUP_SESSION_GET_PRIVATE (session);
+
+	request_type = (GType)GPOINTER_TO_SIZE (g_hash_table_lookup (priv->request_types, uri->scheme));
+	if (!request_type) {
+		g_set_error (error, SOUP_REQUEST_ERROR,
+			     SOUP_REQUEST_ERROR_UNSUPPORTED_URI_SCHEME,
+			     _("Unsupported URI scheme '%s'"), uri->scheme);
+		return NULL;
+	}
+
+	return g_initable_new (request_type, NULL, error,
+			       "uri", uri,
+			       "session", session,
+			       NULL);
+}
+
+/**
+ * SOUP_REQUEST_ERROR:
+ *
+ * A #GError domain for #SoupRequest-related errors. Used with
+ * #SoupRequestError.
+ *
+ * Since: 2.42
+ */
+/**
+ * SoupRequestError:
+ * @SOUP_REQUEST_ERROR_BAD_URI: the URI could not be parsed
+ * @SOUP_REQUEST_ERROR_UNSUPPORTED_URI_SCHEME: the URI scheme is not
+ *   supported by this #SoupSession
+ *
+ * A #SoupRequest error.
+ *
+ * Since: 2.42
+ */
+
+GQuark
+soup_request_error_quark (void)
+{
+	static GQuark error;
+	if (!error)
+		error = g_quark_from_static_string ("soup_request_error_quark");
+	return error;
+}
diff --git a/libsoup/soup-session.h b/libsoup/soup-session.h
index 4dd79ff..acc12a9 100644
--- a/libsoup/soup-session.h
+++ b/libsoup/soup-session.h
@@ -134,6 +134,9 @@ void                soup_session_remove_feature         (SoupSession        *ses
 SOUP_AVAILABLE_IN_2_24
 void                soup_session_remove_feature_by_type (SoupSession        *session,
 							 GType               feature_type);
+SOUP_AVAILABLE_IN_2_42
+gboolean            soup_session_has_feature            (SoupSession        *session,
+							 GType               feature_type);
 SOUP_AVAILABLE_IN_2_26
 GSList             *soup_session_get_features           (SoupSession        *session,
 							 GType               feature_type);
@@ -145,6 +148,24 @@ SoupSessionFeature *soup_session_get_feature_for_message(SoupSession        *ses
 							 GType               feature_type,
 							 SoupMessage        *msg);
 
+SOUP_AVAILABLE_IN_2_42
+SoupRequest *soup_session_request     (SoupSession  *session,
+				       const char   *uri_string,
+				       GError      **error);
+SOUP_AVAILABLE_IN_2_42
+SoupRequest *soup_session_request_uri (SoupSession  *session,
+				       SoupURI      *uri,
+				       GError      **error);
+
+SOUP_AVAILABLE_IN_2_42
+GQuark soup_request_error_quark (void);
+#define SOUP_REQUEST_ERROR soup_request_error_quark ()
+
+typedef enum {
+	SOUP_REQUEST_ERROR_BAD_URI,
+	SOUP_REQUEST_ERROR_UNSUPPORTED_URI_SCHEME
+} SoupRequestError;
+
 G_END_DECLS
 
 #endif /* SOUP_SESSION_H */
diff --git a/libsoup/soup-types.h b/libsoup/soup-types.h
index 77e5425..4134b83 100644
--- a/libsoup/soup-types.h
+++ b/libsoup/soup-types.h
@@ -20,6 +20,7 @@ typedef struct _SoupCookie            SoupCookie;
 typedef struct _SoupCookieJar         SoupCookieJar;
 typedef struct _SoupDate              SoupDate;
 typedef struct _SoupMessage           SoupMessage;
+typedef struct _SoupRequest           SoupRequest;
 typedef struct _SoupServer            SoupServer;
 typedef struct _SoupSession           SoupSession;
 typedef struct _SoupSessionAsync      SoupSessionAsync;
diff --git a/libsoup/soup.h b/libsoup/soup.h
index 2a2b051..f99f3e6 100644
--- a/libsoup/soup.h
+++ b/libsoup/soup.h
@@ -15,6 +15,7 @@ extern "C" {
 #include <libsoup/soup-auth-domain.h>
 #include <libsoup/soup-auth-domain-basic.h>
 #include <libsoup/soup-auth-domain-digest.h>
+#include <libsoup/soup-cache.h>
 #include <libsoup/soup-content-decoder.h>
 #include <libsoup/soup-content-sniffer.h>
 #include <libsoup/soup-cookie.h>
@@ -34,6 +35,10 @@ extern "C" {
 #include <libsoup/soup-proxy-resolver.h>
 #include <libsoup/soup-proxy-resolver-default.h>
 #include <libsoup/soup-proxy-uri-resolver.h>
+#include <libsoup/soup-request.h>
+#include <libsoup/soup-request-data.h>
+#include <libsoup/soup-request-file.h>
+#include <libsoup/soup-request-http.h>
 #include <libsoup/soup-server.h>
 #include <libsoup/soup-session-async.h>
 #include <libsoup/soup-session-feature.h>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index a05aa79..ba5d82d 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -2,5 +2,5 @@ libsoup/soup-body-input-stream.c
 libsoup/soup-converter-wrapper.c
 libsoup/soup-message-io.c
 libsoup/soup-request.c
-libsoup/soup-requester.c
+libsoup/soup-session.c
 libsoup/soup-tld.c
diff --git a/tests/coding-test.c b/tests/coding-test.c
index cd7321e..2718353 100644
--- a/tests/coding-test.c
+++ b/tests/coding-test.c
@@ -397,7 +397,6 @@ static void
 do_coding_req_test (void)
 {
 	SoupSession *session;
-	SoupRequester *requester;
 	SoupRequest *req;
 	SoupMessage *msg;
 	SoupURI *uri;
@@ -407,21 +406,19 @@ do_coding_req_test (void)
 
 	session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
 					 SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
-					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_REQUESTER,
 					 NULL);
-	requester = (SoupRequester *)soup_session_get_feature (session, SOUP_TYPE_REQUESTER);
 	uri = soup_uri_new_with_base (base_uri, "/mbox");
 
 	/* Plain text data, no claim */
 	debug_printf (1, "  GET /mbox, plain\n");
-	req = soup_requester_request_uri (requester, uri, NULL);
+	req = soup_session_request_uri (session, uri, NULL);
 	plain = do_single_coding_req_test (req, NULL, "text/plain", EXPECT_NOT_DECODED);
 	g_object_unref (req);
 
 	/* Plain text data, claim gzip */
 	debug_printf (1, "  GET /mbox, Accept-Encoding: gzip\n");
 	soup_session_add_feature_by_type (session, SOUP_TYPE_CONTENT_DECODER);
-	req = soup_requester_request_uri (requester, uri, NULL);
+	req = soup_session_request_uri (session, uri, NULL);
 	cmp = do_single_coding_req_test (req, "gzip", "text/plain", EXPECT_DECODED);
 	check_req_bodies (plain, cmp, "plain", "compressed");
 	g_byte_array_free (cmp, TRUE);
@@ -429,7 +426,7 @@ do_coding_req_test (void)
 
 	/* Plain text data, claim gzip w/ junk */
 	debug_printf (1, "  GET /mbox, Accept-Encoding: gzip, plus trailing junk\n");
-	req = soup_requester_request_uri (requester, uri, NULL);
+	req = soup_session_request_uri (session, uri, NULL);
 	msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (req));
 	soup_message_headers_append (msg->request_headers,
 				     "X-Test-Options", "trailing-junk");
@@ -441,7 +438,7 @@ do_coding_req_test (void)
 
 	/* Plain text data, claim gzip with server error */
 	debug_printf (1, "  GET /mbox, Accept-Encoding: gzip, with server error\n");
-	req = soup_requester_request_uri (requester, uri, NULL);
+	req = soup_session_request_uri (session, uri, NULL);
 	msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (req));
 	soup_message_headers_append (msg->request_headers,
 				     "X-Test-Options", "force-encode");
@@ -458,7 +455,7 @@ do_coding_req_test (void)
 
 	/* Plain text data, claim deflate */
 	debug_printf (1, "  GET /mbox, Accept-Encoding: deflate\n");
-	req = soup_requester_request_uri (requester, uri, NULL);
+	req = soup_session_request_uri (session, uri, NULL);
 	msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (req));
 	soup_message_headers_append (msg->request_headers,
 				     "X-Test-Options", "prefer-deflate-zlib");
@@ -470,7 +467,7 @@ do_coding_req_test (void)
 
 	/* Plain text data, claim deflate w/ junk */
 	debug_printf (1, "  GET /mbox, Accept-Encoding: deflate, plus trailing junk\n");
-	req = soup_requester_request_uri (requester, uri, NULL);
+	req = soup_session_request_uri (session, uri, NULL);
 	msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (req));
 	soup_message_headers_append (msg->request_headers,
 				     "X-Test-Options", "prefer-deflate-zlib, trailing-junk");
@@ -482,7 +479,7 @@ do_coding_req_test (void)
 
 	/* Plain text data, claim deflate with server error */
 	debug_printf (1, "  GET /mbox, Accept-Encoding: deflate, with server error\n");
-	req = soup_requester_request_uri (requester, uri, NULL);
+	req = soup_session_request_uri (session, uri, NULL);
 	msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (req));
 	soup_message_headers_append (msg->request_headers,
 				     "X-Test-Options", "force-encode, prefer-deflate-zlib");
@@ -494,7 +491,7 @@ do_coding_req_test (void)
 
 	/* Plain text data, claim deflate (no zlib headers)*/
 	debug_printf (1, "  GET /mbox, Accept-Encoding: deflate (raw data)\n");
-	req = soup_requester_request_uri (requester, uri, NULL);
+	req = soup_session_request_uri (session, uri, NULL);
 	msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (req));
 	soup_message_headers_append (msg->request_headers,
 				     "X-Test-Options", "prefer-deflate-raw");
@@ -506,7 +503,7 @@ do_coding_req_test (void)
 
 	/* Plain text data, claim deflate with server error */
 	debug_printf (1, "  GET /mbox, Accept-Encoding: deflate (raw data), with server error\n");
-	req = soup_requester_request_uri (requester, uri, NULL);
+	req = soup_session_request_uri (session, uri, NULL);
 	msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (req));
 	soup_message_headers_append (msg->request_headers,
 				     "X-Test-Options", "force-encode, prefer-deflate-raw");
@@ -528,7 +525,6 @@ do_coding_empty_test (void)
 	SoupSession *session;
 	SoupMessage *msg;
 	SoupURI *uri;
-	SoupRequester *requester;
 	SoupRequest *req;
 	GByteArray *body;
 
@@ -537,9 +533,7 @@ do_coding_empty_test (void)
 	session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
 					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER,
 					 SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
-					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_REQUESTER,
 					 NULL);
-	requester = (SoupRequester *)soup_session_get_feature (session, SOUP_TYPE_REQUESTER);
 	uri = soup_uri_new_with_base (base_uri, "/mbox");
 
 	debug_printf (1, "  SoupMessage\n");
@@ -551,7 +545,7 @@ do_coding_empty_test (void)
 	g_object_unref (msg);
 
 	debug_printf (1, "  SoupRequest\n");
-	req = soup_requester_request_uri (requester, uri, NULL);
+	req = soup_session_request_uri (session, uri, NULL);
 	msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (req));
 	soup_message_headers_append (msg->request_headers,
 				     "X-Test-Options", "empty");
diff --git a/tests/connection-test.c b/tests/connection-test.c
index 8050b3d..6b57f24 100644
--- a/tests/connection-test.c
+++ b/tests/connection-test.c
@@ -299,7 +299,6 @@ do_timeout_test_for_session (SoupSession *session)
 static void
 do_timeout_req_test_for_session (SoupSession *session)
 {
-	SoupRequester *requester;
 	SoupRequest *req;
 	SoupMessage *msg;
 	GInputStream *stream;
@@ -308,17 +307,13 @@ do_timeout_req_test_for_session (SoupSession *session)
 	GError *error = NULL;
 	int i;
 
-	requester = soup_requester_new ();
-	soup_session_add_feature (session, SOUP_SESSION_FEATURE (requester));
-	g_object_unref (requester);
-
 	g_signal_connect (session, "request-started",
 			  G_CALLBACK (request_started_socket_collector),
 			  &sockets);
 
 	debug_printf (1, "    First request\n");
 	timeout_uri = soup_uri_new_with_base (base_uri, "/timeout-persistent");
-	req = soup_requester_request_uri (requester, timeout_uri, NULL);
+	req = soup_session_request_uri (session, timeout_uri, NULL);
 	soup_uri_free (timeout_uri);
 
 	stream = soup_test_request_send (req, NULL, &error);
@@ -346,7 +341,7 @@ do_timeout_req_test_for_session (SoupSession *session)
 	g_object_unref (req);
 
 	debug_printf (1, "    Second request\n");
-	req = soup_requester_request_uri (requester, base_uri, NULL);
+	req = soup_session_request_uri (session, base_uri, NULL);
 
 	stream = soup_test_request_send (req, NULL, &error);
 	if (!stream) {
diff --git a/tests/misc-test.c b/tests/misc-test.c
index b564f26..b243ce4 100644
--- a/tests/misc-test.c
+++ b/tests/misc-test.c
@@ -318,7 +318,6 @@ do_callback_unref_req_test (void)
 	SoupServer *bad_server;
 	SoupAddress *addr;
 	SoupSession *session;
-	SoupRequester *requester;
 	SoupRequest *one, *two;
 	GMainLoop *loop;
 	char *bad_uri;
@@ -337,18 +336,15 @@ do_callback_unref_req_test (void)
 	g_object_unref (bad_server);
 
 	session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
-					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_REQUESTER,
 					 SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
 					 NULL);
 	g_object_add_weak_pointer (G_OBJECT (session), (gpointer *)&session);
 
-	requester = (SoupRequester *)soup_session_get_feature (session, SOUP_TYPE_REQUESTER);
-
 	loop = g_main_loop_new (NULL, TRUE);
 
-	one = soup_requester_request (requester, bad_uri, NULL);
+	one = soup_session_request (session, bad_uri, NULL);
 	g_object_add_weak_pointer (G_OBJECT (one), (gpointer *)&one);
-	two = soup_requester_request (requester, bad_uri, NULL);
+	two = soup_session_request (session, bad_uri, NULL);
 	g_object_add_weak_pointer (G_OBJECT (two), (gpointer *)&two);
 	g_free (bad_uri);
 
@@ -708,7 +704,6 @@ static void
 do_early_abort_req_test (void)
 {
 	SoupSession *session;
-	SoupRequester *requester;
 	SoupRequest *req;
 	GMainContext *context;
 	GMainLoop *loop;
@@ -717,11 +712,9 @@ do_early_abort_req_test (void)
 	debug_printf (1, "\nAbort with pending connection (request api)\n");
 
 	session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
-					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_REQUESTER,
 					 SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
 					 NULL);
-	requester = (SoupRequester *)soup_session_get_feature (session, SOUP_TYPE_REQUESTER);
-	req = soup_requester_request_uri (requester, base_uri, NULL);
+	req = soup_session_request_uri (session, base_uri, NULL);
 
 	context = g_main_context_default ();
 	loop = g_main_loop_new (context, TRUE);
@@ -735,11 +728,9 @@ do_early_abort_req_test (void)
 	soup_test_session_abort_unref (session);
 
 	session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
-					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_REQUESTER,
 					 SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
 					 NULL);
-	requester = (SoupRequester *)soup_session_get_feature (session, SOUP_TYPE_REQUESTER);
-	req = soup_requester_request_uri (requester, base_uri, NULL);
+	req = soup_session_request_uri (session, base_uri, NULL);
 
 	g_signal_connect (session, "connection-created",
 			  G_CALLBACK (ea_connection_created), NULL);
@@ -753,11 +744,9 @@ do_early_abort_req_test (void)
 	soup_test_session_abort_unref (session);
 
 	session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
-					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_REQUESTER,
 					 SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
 					 NULL);
-	requester = (SoupRequester *)soup_session_get_feature (session, SOUP_TYPE_REQUESTER);
-	req = soup_requester_request_uri (requester, base_uri, NULL);
+	req = soup_session_request_uri (session, base_uri, NULL);
 
 	cancellable = g_cancellable_new ();
 	g_signal_connect (session, "request-started",
@@ -933,7 +922,7 @@ cancel_request_thread (gpointer cancellable)
 }
 
 static void
-do_cancel_while_reading_req_test_for_session (SoupRequester *requester)
+do_cancel_while_reading_req_test_for_session (SoupSession *session)
 {
 	SoupRequest *req;
 	SoupURI *uri;
@@ -941,7 +930,7 @@ do_cancel_while_reading_req_test_for_session (SoupRequester *requester)
 	GError *error = NULL;
 
 	uri = soup_uri_new_with_base (base_uri, "/slow");
-	req = soup_requester_request_uri (requester, uri, NULL);
+	req = soup_session_request_uri (session, uri, NULL);
 	soup_uri_free (uri);
 
 	cancellable = g_cancellable_new ();
@@ -975,25 +964,20 @@ static void
 do_cancel_while_reading_req_test (void)
 {
 	SoupSession *session;
-	SoupRequester *requester;
 
 	debug_printf (1, "\nCancelling message while reading response (request api)\n");
 
 	debug_printf (1, "  Async session\n");
 	session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
-					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_REQUESTER,
 					 SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
 					 NULL);
-	requester = (SoupRequester *)soup_session_get_feature (session, SOUP_TYPE_REQUESTER);
-	do_cancel_while_reading_req_test_for_session (requester);
+	do_cancel_while_reading_req_test_for_session (session);
 	soup_test_session_abort_unref (session);
 
 	debug_printf (1, "  Sync session\n");
 	session = soup_test_session_new (SOUP_TYPE_SESSION_SYNC,
-					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_REQUESTER,
 					 NULL);
-	requester = (SoupRequester *)soup_session_get_feature (session, SOUP_TYPE_REQUESTER);
-	do_cancel_while_reading_req_test_for_session (requester);
+	do_cancel_while_reading_req_test_for_session (session);
 	soup_test_session_abort_unref (session);
 }
 
diff --git a/tests/proxy-test.c b/tests/proxy-test.c
index 94e548a..048acfa 100644
--- a/tests/proxy-test.c
+++ b/tests/proxy-test.c
@@ -132,7 +132,6 @@ test_url_new_api (const char *url, int proxy, guint expected,
 	SoupSession *session;
 	SoupURI *proxy_uri;
 	SoupMessage *msg;
-	SoupRequester *requester;
 	SoupRequest *request;
 	GInputStream *stream;
 	GError *error = NULL;
@@ -140,7 +139,7 @@ test_url_new_api (const char *url, int proxy, guint expected,
 	if (!tls_available && g_str_has_prefix (url, "https:"))
 		return;
 
-	debug_printf (1, "  GET (requester API) %s via %s%s\n", url, proxy_names[proxy],
+	debug_printf (1, "  GET (request API) %s via %s%s\n", url, proxy_names[proxy],
 		      close ? " (with Connection: close)" : "");
 	if (proxy == UNAUTH_PROXY && expected != SOUP_STATUS_FORBIDDEN)
 		expected = SOUP_STATUS_PROXY_UNAUTHORIZED;
@@ -150,7 +149,6 @@ test_url_new_api (const char *url, int proxy, guint expected,
 	 */
 	proxy_uri = soup_uri_new (proxies[proxy]);
 	session = soup_test_session_new (sync ? SOUP_TYPE_SESSION_SYNC : SOUP_TYPE_SESSION_ASYNC,
-					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_REQUESTER,
 					 SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
 					 SOUP_SESSION_PROXY_URI, proxy_uri,
 					 NULL);
@@ -163,8 +161,7 @@ test_url_new_api (const char *url, int proxy, guint expected,
 				  G_CALLBACK (set_close_on_connect), NULL);
 	}
 
-	requester = (SoupRequester *)soup_session_get_feature (session, SOUP_TYPE_REQUESTER);
-	request = soup_requester_request (requester, url, NULL);
+	request = soup_session_request (session, url, NULL);
 	msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (request));
 
 	stream = soup_test_request_send (request, NULL, &error);
diff --git a/tests/redirect-test.c b/tests/redirect-test.c
index 3708d86..9adf5d5 100644
--- a/tests/redirect-test.c
+++ b/tests/redirect-test.c
@@ -208,7 +208,6 @@ do_message_api_test (SoupSession *session, SoupURI *base_uri, int n)
 static void
 do_request_api_test (SoupSession *session, SoupURI *base_uri, int n)
 {
-	SoupRequester *requester = (SoupRequester *)soup_session_get_feature (session, SOUP_TYPE_REQUESTER);
 	SoupURI *uri;
 	SoupRequest *req;
 	SoupMessage *msg;
@@ -226,7 +225,7 @@ do_request_api_test (SoupSession *session, SoupURI *base_uri, int n)
 		final_status = tests[n].final_status;
 
 	uri = soup_uri_new_with_base (base_uri, tests[n].requests[0].path);
-	req = soup_requester_request_uri (requester, uri, &error);
+	req = soup_session_request_uri (session, uri, &error);
 	soup_uri_free (uri);
 	if (!req) {
 		debug_printf (1, "    could not create request: %s\n",
@@ -315,7 +314,6 @@ do_redirect_tests (SoupURI *base_uri)
 	int n;
 
 	session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
-					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_REQUESTER,
 					 SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
 					 NULL);
 	debug_printf (1, "Async session, SoupMessage\n");
@@ -326,9 +324,7 @@ do_redirect_tests (SoupURI *base_uri)
 		do_request_api_test (session, base_uri, n);
 	soup_test_session_abort_unref (session);
 
-	session = soup_test_session_new (SOUP_TYPE_SESSION_SYNC,
-					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_REQUESTER,
-					 NULL);
+	session = soup_test_session_new (SOUP_TYPE_SESSION_SYNC, NULL);
 	debug_printf (1, "\nSync session, SoupMessage\n");
 	for (n = 0; n < n_tests; n++)
 		do_message_api_test (session, base_uri, n);
diff --git a/tests/requester-test.c b/tests/requester-test.c
index a437937..660669a 100644
--- a/tests/requester-test.c
+++ b/tests/requester-test.c
@@ -252,11 +252,17 @@ do_async_test (SoupSession *session, SoupURI *uri,
 	SoupMessage *msg;
 	RequestData data;
 
-	requester = SOUP_REQUESTER (soup_session_get_feature (session, SOUP_TYPE_REQUESTER));
+	if (SOUP_IS_SESSION_ASYNC (session))
+		requester = SOUP_REQUESTER (soup_session_get_feature (session, SOUP_TYPE_REQUESTER));
+	else
+		requester = NULL;
 
 	data.body = g_string_new (NULL);
 	data.cancel = cancel;
-	request = soup_requester_request_uri (requester, uri, NULL);
+	if (requester)
+		request = soup_requester_request_uri (requester, uri, NULL);
+	else
+		request = soup_session_request_uri (session, uri, NULL);
 	msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (request));
 
 	if (cancel) {
@@ -326,9 +332,11 @@ do_test_for_thread_and_context (SoupSession *session, const char *base_uri)
 	SoupRequester *requester;
 	SoupURI *uri;
 
-	requester = soup_requester_new ();
-	soup_session_add_feature (session, SOUP_SESSION_FEATURE (requester));
-	g_object_unref (requester);
+	if (SOUP_IS_SESSION_ASYNC (session)) {
+		requester = soup_requester_new ();
+		soup_session_add_feature (session, SOUP_SESSION_FEATURE (requester));
+		g_object_unref (requester);
+	}
 	soup_session_add_feature_by_type (session, SOUP_TYPE_CONTENT_SNIFFER);
 
 	debug_printf (1, "  basic test\n");
@@ -572,14 +580,19 @@ do_sync_test (const char *uri_string, gboolean plain_session)
 		      plain_session ? "SoupSession" : "SoupSessionSync");
 
 	session = soup_test_session_new (plain_session ? SOUP_TYPE_SESSION : SOUP_TYPE_SESSION_SYNC, NULL);
-	requester = soup_requester_new ();
-	soup_session_add_feature (session, SOUP_SESSION_FEATURE (requester));
-	g_object_unref (requester);
+	if (!plain_session) {
+		requester = soup_requester_new ();
+		soup_session_add_feature (session, SOUP_SESSION_FEATURE (requester));
+		g_object_unref (requester);
+	}
 
 	uri = soup_uri_new (uri_string);
 
 	debug_printf (1, "  basic test\n");
-	request = soup_requester_request_uri (requester, uri, NULL);
+	if (plain_session)
+		request = soup_session_request_uri (session, uri, NULL);
+	else
+		request = soup_requester_request_uri (requester, uri, NULL);
 	do_sync_request (session, request,
 			 SOUP_STATUS_OK, response,
 			 TRUE, FALSE);
@@ -587,7 +600,10 @@ do_sync_test (const char *uri_string, gboolean plain_session)
 
 	debug_printf (1, "  chunked test\n");
 	soup_uri_set_path (uri, "/chunked");
-	request = soup_requester_request_uri (requester, uri, NULL);
+	if (plain_session)
+		request = soup_session_request_uri (session, uri, NULL);
+	else
+		request = soup_requester_request_uri (requester, uri, NULL);
 	do_sync_request (session, request,
 			 SOUP_STATUS_OK, response,
 			 TRUE, FALSE);
@@ -595,7 +611,10 @@ do_sync_test (const char *uri_string, gboolean plain_session)
 
 	debug_printf (1, "  auth test\n");
 	soup_uri_set_path (uri, "/auth");
-	request = soup_requester_request_uri (requester, uri, NULL);
+	if (plain_session)
+		request = soup_session_request_uri (session, uri, NULL);
+	else
+		request = soup_requester_request_uri (requester, uri, NULL);
 	do_sync_request (session, request,
 			 SOUP_STATUS_UNAUTHORIZED, auth_response,
 			 TRUE, FALSE);
@@ -603,7 +622,10 @@ do_sync_test (const char *uri_string, gboolean plain_session)
 
 	debug_printf (1, "  non-persistent test\n");
 	soup_uri_set_path (uri, "/non-persistent");
-	request = soup_requester_request_uri (requester, uri, NULL);
+	if (plain_session)
+		request = soup_session_request_uri (session, uri, NULL);
+	else
+		request = soup_requester_request_uri (requester, uri, NULL);
 	do_sync_request (session, request,
 			 SOUP_STATUS_OK, response,
 			 FALSE, FALSE);
@@ -611,7 +633,10 @@ do_sync_test (const char *uri_string, gboolean plain_session)
 
 	debug_printf (1, "  cancel test\n");
 	soup_uri_set_path (uri, "/");
-	request = soup_requester_request_uri (requester, uri, NULL);
+	if (plain_session)
+		request = soup_session_request_uri (session, uri, NULL);
+	else
+		request = soup_requester_request_uri (requester, uri, NULL);
 	do_sync_request (session, request,
 			 SOUP_STATUS_FORBIDDEN, NULL,
 			 TRUE, TRUE);
diff --git a/tests/timeout-test.c b/tests/timeout-test.c
index 9d9b2d1..e523f2d 100644
--- a/tests/timeout-test.c
+++ b/tests/timeout-test.c
@@ -112,7 +112,7 @@ do_msg_tests_for_session (SoupSession *timeout_session,
 }
 
 static void
-do_request_to_session (SoupRequester *requester, const char *uri,
+do_request_to_session (SoupSession *session, const char *uri,
 		       const char *comment, gboolean expect_timeout)
 {
 	SoupRequest *req;
@@ -122,7 +122,7 @@ do_request_to_session (SoupRequester *requester, const char *uri,
 	gboolean finished = FALSE;
 
 	debug_printf (1, "    req %s\n", comment);
-	req = soup_requester_request (requester, uri, NULL);
+	req = soup_session_request (session, uri, NULL);
 	msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (req));
 
 	g_signal_connect (msg, "finished",
@@ -179,46 +179,30 @@ do_req_tests_for_session (SoupSession *timeout_session,
 			  SoupSession *plain_session,
 			  char *fast_uri, char *slow_uri)
 {
-	SoupRequester *timeout_requester, *idle_requester, *plain_requester;
 	SoupSocket *ret, *idle_first, *idle_second;
 	SoupSocket *plain_first, *plain_second;
 
 	debug_printf (1, "\n");
 
 	if (idle_session) {
-		idle_requester = soup_requester_new ();
-		soup_session_add_feature (idle_session,
-					  SOUP_SESSION_FEATURE (idle_requester));
-		g_object_unref (idle_requester);
-
 		g_signal_connect (idle_session, "request-started",
 				  G_CALLBACK (request_started_cb), &ret);
-		do_request_to_session (idle_requester, fast_uri, "fast to idle", FALSE);
+		do_request_to_session (idle_session, fast_uri, "fast to idle", FALSE);
 		idle_first = ret;
 	}
 
 	if (plain_session) {
-		plain_requester = soup_requester_new ();
-		soup_session_add_feature (plain_session,
-					  SOUP_SESSION_FEATURE (plain_requester));
-		g_object_unref (plain_requester);
-
 		g_signal_connect (plain_session, "request-started",
 				  G_CALLBACK (request_started_cb), &ret);
-		do_request_to_session (plain_requester, fast_uri, "fast to plain", FALSE);
+		do_request_to_session (plain_session, fast_uri, "fast to plain", FALSE);
 		plain_first = ret;
 	}
 
-	timeout_requester = soup_requester_new ();
-	soup_session_add_feature (timeout_session,
-				  SOUP_SESSION_FEATURE (timeout_requester));
-	g_object_unref (timeout_requester);
-
-	do_request_to_session (timeout_requester, fast_uri, "fast to timeout", FALSE);
-	do_request_to_session (timeout_requester, slow_uri, "slow to timeout", TRUE);
+	do_request_to_session (timeout_session, fast_uri, "fast to timeout", FALSE);
+	do_request_to_session (timeout_session, slow_uri, "slow to timeout", TRUE);
 
 	if (idle_session) {
-		do_request_to_session (idle_requester, fast_uri, "fast to idle", FALSE);
+		do_request_to_session (idle_session, fast_uri, "fast to idle", FALSE);
 		idle_second = ret;
 		g_signal_handlers_disconnect_by_func (idle_session,
 						      (gpointer)request_started_cb,
@@ -231,7 +215,7 @@ do_req_tests_for_session (SoupSession *timeout_session,
 	}
 
 	if (plain_session) {
-		do_request_to_session (plain_requester, fast_uri, "fast to plain", FALSE);
+		do_request_to_session (plain_session, fast_uri, "fast to plain", FALSE);
 		plain_second = ret;
 		g_signal_handlers_disconnect_by_func (plain_session,
 						      (gpointer)request_started_cb,



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