18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2007, 2008 Holger Hans Peter Freyther
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Gustavo Noronha Silva
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "webkitnetworkrequest.h"
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
24cad810f21b803229eb11403f9209855525a25d57Steve Block#include "GRefPtr.h"
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "ResourceRequest.h"
26cad810f21b803229eb11403f9209855525a25d57Steve Block#include "webkitglobalsprivate.h"
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <glib/gi18n-lib.h>
28cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/text/CString.h>
290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SECTION:webkitnetworkrequest
32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * @short_description: The target of a navigation request
33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @see_also: #WebKitWebView::navigation-policy-decision-requested
34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This class represents the network related aspects of a navigation
36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * request. It is used whenever WebKit wants to provide information
37231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * about a request that will be sent, or has been sent. Inside it you
38231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * can find the URI of the request, and, for valid URIs, a
39231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * #SoupMessage object, which provides access to further information
40231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * such as headers.
41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectG_DEFINE_TYPE(WebKitNetworkRequest, webkit_network_request, G_TYPE_OBJECT);
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct _WebKitNetworkRequestPrivate {
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    gchar* uri;
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    SoupMessage* message;
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochenum {
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    PROP_0,
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    PROP_URI,
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    PROP_MESSAGE,
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void webkit_network_request_dispose(GObject* object)
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebKitNetworkRequest* request = WEBKIT_NETWORK_REQUEST(object);
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebKitNetworkRequestPrivate* priv = request->priv;
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (priv->message) {
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        g_object_unref(priv->message);
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        priv->message = NULL;
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
68231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    G_OBJECT_CLASS(webkit_network_request_parent_class)->dispose(object);
69231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
70231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void webkit_network_request_finalize(GObject* object)
72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitNetworkRequest* request = WEBKIT_NETWORK_REQUEST(object);
74231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitNetworkRequestPrivate* priv = request->priv;
75231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
76231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_free(priv->uri);
77231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    G_OBJECT_CLASS(webkit_network_request_parent_class)->finalize(object);
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic void webkit_network_request_get_property(GObject* object, guint propertyID, GValue* value, GParamSpec* pspec)
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebKitNetworkRequest* request = WEBKIT_NETWORK_REQUEST(object);
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    switch(propertyID) {
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case PROP_URI:
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        g_value_set_string(value, webkit_network_request_get_uri(request));
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        break;
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case PROP_MESSAGE:
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        g_value_set_object(value, webkit_network_request_get_message(request));
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        break;
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    default:
930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyID, pspec);
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic void webkit_network_request_set_property(GObject* object, guint propertyID, const GValue* value, GParamSpec* pspec)
980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebKitNetworkRequest* request = WEBKIT_NETWORK_REQUEST(object);
1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebKitNetworkRequestPrivate* priv = request->priv;
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    switch(propertyID) {
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case PROP_URI:
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        webkit_network_request_set_uri(request, g_value_get_string(value));
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        break;
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case PROP_MESSAGE:
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        priv->message = SOUP_MESSAGE(g_value_dup_object(value));
1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        break;
1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    default:
1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyID, pspec);
1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void webkit_network_request_class_init(WebKitNetworkRequestClass* requestClass)
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    GObjectClass* objectClass = G_OBJECT_CLASS(requestClass);
1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
118231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    objectClass->dispose = webkit_network_request_dispose;
1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    objectClass->finalize = webkit_network_request_finalize;
1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    objectClass->get_property = webkit_network_request_get_property;
1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    objectClass->set_property = webkit_network_request_set_property;
1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
123cad810f21b803229eb11403f9209855525a25d57Steve Block    webkitInit();
1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /**
1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     * WebKitNetworkRequest:uri:
1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     *
1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     * The URI to which the request will be made.
1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     *
1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     * Since: 1.1.10
1310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     */
1320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_object_class_install_property(objectClass, PROP_URI,
1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                    g_param_spec_string("uri",
1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                                        _("URI"),
1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                                        _("The URI to which the request will be made."),
1360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                                        NULL,
1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                                        (GParamFlags)(WEBKIT_PARAM_READWRITE)));
1380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /**
1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     * WebKitNetworkRequest:message:
1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     *
1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     * The #SoupMessage that backs the request.
1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     *
1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     * Since: 1.1.10
1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch     */
1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_object_class_install_property(objectClass, PROP_MESSAGE,
1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                    g_param_spec_object("message",
1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                                        _("Message"),
1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                                        _("The SoupMessage that backs the request."),
1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                                        SOUP_TYPE_MESSAGE,
1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                                        (GParamFlags)(WEBKIT_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY)));
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    g_type_class_add_private(requestClass, sizeof(WebKitNetworkRequestPrivate));
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void webkit_network_request_init(WebKitNetworkRequest* request)
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
158f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebKitNetworkRequestPrivate* priv = G_TYPE_INSTANCE_GET_PRIVATE(request, WEBKIT_TYPE_NETWORK_REQUEST, WebKitNetworkRequestPrivate);
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    request->priv = priv;
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/**
1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * webkit_network_request_new:
1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * @uri: an URI
1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Creates a new #WebKitNetworkRequest initialized with an URI.
1670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Returns: a new #WebKitNetworkRequest, or %NULL if the URI is
1690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * invalid.
1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
1710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochWebKitNetworkRequest* webkit_network_request_new(const gchar* uri)
1720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_return_val_if_fail(uri, NULL);
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return WEBKIT_NETWORK_REQUEST(g_object_new(WEBKIT_TYPE_NETWORK_REQUEST, "uri", uri, NULL));
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/**
1790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * webkit_network_request_set_uri:
1800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * @request: a #WebKitNetworkRequest
1810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * @uri: an URI
1820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
1830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Sets the URI held and used by the given request. When the request
1840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * has an associated #SoupMessage, its URI will also be set by this
1850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * call.
1860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
1870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid webkit_network_request_set_uri(WebKitNetworkRequest* request, const gchar* uri)
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    g_return_if_fail(WEBKIT_IS_NETWORK_REQUEST(request));
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    g_return_if_fail(uri);
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebKitNetworkRequestPrivate* priv = request->priv;
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (priv->uri)
1960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        g_free(priv->uri);
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    priv->uri = g_strdup(uri);
1980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!priv->message)
2000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return;
2010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    SoupURI* soupURI = soup_uri_new(uri);
203231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_return_if_fail(soupURI);
2040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    soup_message_set_uri(priv->message, soupURI);
2060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    soup_uri_free(soupURI);
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
209635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
210635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * webkit_network_request_get_uri:
211635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * @request: a #WebKitNetworkRequest
212635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
213635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Returns: the uri of the #WebKitNetworkRequest
214635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
215635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Since: 1.0.0
216635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectG_CONST_RETURN gchar* webkit_network_request_get_uri(WebKitNetworkRequest* request)
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    g_return_val_if_fail(WEBKIT_IS_NETWORK_REQUEST(request), NULL);
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebKitNetworkRequestPrivate* priv = request->priv;
2220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (priv->uri)
2240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return priv->uri;
2250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    SoupURI* soupURI = soup_message_get_uri(priv->message);
2270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    priv->uri = soup_uri_to_string(soupURI, FALSE);
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return priv->uri;
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/**
232bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * webkit_network_request_get_message:
2330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * @request: a #WebKitNetworkRequest
2340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
2350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Obtains the #SoupMessage held and used by the given request. Notice
2360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * that modification of the SoupMessage of a request by signal
2370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * handlers is only supported (as in, will only affect what is
2380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * actually sent to the server) where explicitly documented.
2390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
240bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * Returns: (transfer none): the #SoupMessage
2410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Since: 1.1.9
2420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
2430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochSoupMessage* webkit_network_request_get_message(WebKitNetworkRequest* request)
2440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_return_val_if_fail(WEBKIT_IS_NETWORK_REQUEST(request), NULL);
2460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebKitNetworkRequestPrivate* priv = request->priv;
2480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return priv->message;
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
251f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
252f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochnamespace WebKit {
253f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
254f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochWebKitNetworkRequest* kitNew(const WebCore::ResourceRequest& resourceRequest)
255f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
256cad810f21b803229eb11403f9209855525a25d57Steve Block    GRefPtr<SoupMessage> soupMessage(adoptGRef(resourceRequest.toSoupMessage()));
257f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (soupMessage)
258f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        return WEBKIT_NETWORK_REQUEST(g_object_new(WEBKIT_TYPE_NETWORK_REQUEST, "message", soupMessage.get(), NULL));
259f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
260f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return WEBKIT_NETWORK_REQUEST(g_object_new(WEBKIT_TYPE_NETWORK_REQUEST, "uri", resourceRequest.url().string().utf8().data(), NULL));
261f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
262f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
263f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochWebCore::ResourceRequest core(WebKitNetworkRequest* request)
264f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
265f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    SoupMessage* soupMessage = webkit_network_request_get_message(request);
266f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (soupMessage)
267f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        return WebCore::ResourceRequest(soupMessage);
268f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
269f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebCore::KURL url = WebCore::KURL(WebCore::KURL(), String::fromUTF8(webkit_network_request_get_uri(request)));
270f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return WebCore::ResourceRequest(url);
271f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
272f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
273f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
274