1231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/*
2231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2009 Jan Michael C. Alonzo
3231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
4231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * This library is free software; you can redistribute it and/or
5231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * modify it under the terms of the GNU Library General Public
6231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * License as published by the Free Software Foundation; either
7231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * version 2 of the License, or (at your option) any later version.
8231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
9231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * This library is distributed in the hope that it will be useful,
10231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * but WITHOUT ANY WARRANTY; without even the implied warranty of
11231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Library General Public License for more details.
13231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
14231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * You should have received a copy of the GNU Library General Public License
15231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * along with this library; see the file COPYING.LIB.  If not, write to
16231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Boston, MA 02110-1301, USA.
18231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block */
19231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
20231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "config.h"
21231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "webkitwebresource.h"
22231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
23231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "ArchiveResource.h"
24231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "KURL.h"
25231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "PlatformString.h"
26231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "SharedBuffer.h"
27231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "webkitenumtypes.h"
28cad810f21b803229eb11403f9209855525a25d57Steve Block#include "webkitglobalsprivate.h"
29231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "webkitmarshal.h"
30f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "webkitwebresourceprivate.h"
31231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <glib.h>
32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <glib/gi18n-lib.h>
33cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/Assertions.h>
34cad810f21b803229eb11403f9209855525a25d57Steve Block#include <wtf/text/CString.h>
35231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/**
37231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * SECTION:webkitwebresource
38231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @short_description: Represents a downloaded URI.
39231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @see_also: #WebKitWebDataSource
40231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
41231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * A web resource encapsulates the data of the download as well as the URI,
42231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * MIME type and frame name of the resource.
43231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block */
44231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
45231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockusing namespace WebCore;
46231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
47231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockenum {
48231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    PROP_0,
49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    PROP_URI,
51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    PROP_MIME_TYPE,
52231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    PROP_ENCODING,
53231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    PROP_FRAME_NAME
54231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block};
55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
56231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockG_DEFINE_TYPE(WebKitWebResource, webkit_web_resource, G_TYPE_OBJECT);
57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void webkit_web_resource_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec);
59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void webkit_web_resource_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec);
60231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
61231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void webkit_web_resource_cleanup(WebKitWebResource* webResource)
62231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
63231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResourcePrivate* priv = webResource->priv;
64231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
65231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_free(priv->uri);
66231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    priv->uri = NULL;
67231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
68231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_free(priv->mimeType);
69231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    priv->mimeType = NULL;
70231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_free(priv->textEncoding);
72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    priv->textEncoding = NULL;
73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
74231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_free(priv->frameName);
75231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    priv->frameName = NULL;
76231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
77231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (priv->data)
78231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        g_string_free(priv->data, TRUE);
79231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    priv->data = NULL;
80231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
81231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
82231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void webkit_web_resource_dispose(GObject* object)
83231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
84231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResource* webResource = WEBKIT_WEB_RESOURCE(object);
85231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResourcePrivate* priv = webResource->priv;
86231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
87231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (priv->resource) {
88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        priv->resource->deref();
89231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        priv->resource = 0;
90231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
91231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
92231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    G_OBJECT_CLASS(webkit_web_resource_parent_class)->dispose(object);
93231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
94231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
95231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void webkit_web_resource_finalize(GObject* object)
96231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
97231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResource* webResource = WEBKIT_WEB_RESOURCE(object);
98231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
99231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    webkit_web_resource_cleanup(webResource);
100231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
101231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    G_OBJECT_CLASS(webkit_web_resource_parent_class)->finalize(object);
102231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
103231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
104231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void webkit_web_resource_class_init(WebKitWebResourceClass* klass)
105231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
106231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    GObjectClass* gobject_class = G_OBJECT_CLASS(klass);
107231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
108231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    gobject_class->dispose = webkit_web_resource_dispose;
109231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    gobject_class->finalize = webkit_web_resource_finalize;
110231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    gobject_class->get_property = webkit_web_resource_get_property;
111231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    gobject_class->set_property = webkit_web_resource_set_property;
112231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
113231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    /**
114231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     * WebKitWebResource:uri:
115231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     *
116231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     * The URI of the web resource
117231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     *
118231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     * Since: 1.1.14
119231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     */
120231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_object_class_install_property(gobject_class,
121231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    PROP_URI,
122231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    g_param_spec_string(
123231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    "uri",
124231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    _("URI"),
125231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    _("The uri of the resource"),
126231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    NULL,
127231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    (GParamFlags)(WEBKIT_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY)));
128231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    /**
129231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     * WebKitWebResource:mime-type:
130231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     *
131231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     * The MIME type of the web resource.
132231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     *
133231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     * Since: 1.1.14
134231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     */
135231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_object_class_install_property(gobject_class,
136231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    PROP_MIME_TYPE,
137231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    g_param_spec_string(
138231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    "mime-type",
139231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    _("MIME Type"),
140231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    _("The MIME type of the resource"),
141231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    NULL,
142231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    WEBKIT_PARAM_READABLE));
143231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    /**
144231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     * WebKitWebResource:encoding:
145231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     *
146231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     * The encoding name to which the web resource was encoded in.
147231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     *
148231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     * Since: 1.1.14
149231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     */
150231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_object_class_install_property(gobject_class,
151231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    PROP_ENCODING,
152231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    g_param_spec_string(
153231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    "encoding",
154231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    _("Encoding"),
155231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    _("The text encoding name of the resource"),
156231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    NULL,
157231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    WEBKIT_PARAM_READABLE));
158231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
159231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    /**
160231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     * WebKitWebResource:frame-name:
161231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     *
162231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     * The frame name for the web resource.
163231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     *
164231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     * Since: 1.1.14
165231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block     */
166231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_object_class_install_property(gobject_class,
167231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    PROP_FRAME_NAME,
168231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    g_param_spec_string(
169231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    "frame-name",
170231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    _("Frame Name"),
171231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    _("The frame name of the resource"),
172231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    NULL,
173231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                    WEBKIT_PARAM_READABLE));
174231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
175231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_type_class_add_private(gobject_class, sizeof(WebKitWebResourcePrivate));
176231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
177231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
178231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void webkit_web_resource_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec)
179231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
180231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResource* webResource = WEBKIT_WEB_RESOURCE(object);
181231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
182231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    switch (prop_id) {
183231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    case PROP_URI:
184231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        g_value_set_string(value, webkit_web_resource_get_uri(webResource));
185231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        break;
186231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    case PROP_MIME_TYPE:
187231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        g_value_set_string(value, webkit_web_resource_get_mime_type(webResource));
188231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        break;
189231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    case PROP_ENCODING:
190231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        g_value_set_string(value, webkit_web_resource_get_encoding(webResource));
191231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        break;
192231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    case PROP_FRAME_NAME:
193231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        g_value_set_string(value, webkit_web_resource_get_frame_name(webResource));
194231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        break;
195231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    default:
196231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
197231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        break;
198231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
199231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
200231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
201231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void webkit_web_resource_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec)
202231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
203231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResource* webResource = WEBKIT_WEB_RESOURCE(object);
204231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
205231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    switch (prop_id) {
206231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    case PROP_URI:
207231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        g_free(webResource->priv->uri);
208231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        webResource->priv->uri = g_value_dup_string(value);
209231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        break;
210231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    default:
211231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
212231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        break;
213231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
214231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
215231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
216231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void webkit_web_resource_init(WebKitWebResource* webResource)
217231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
218f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    webResource->priv = G_TYPE_INSTANCE_GET_PRIVATE(webResource, WEBKIT_TYPE_WEB_RESOURCE, WebKitWebResourcePrivate);
219231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
220231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
221231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// internal use only
222231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockWebKitWebResource* webkit_web_resource_new_with_core_resource(PassRefPtr<ArchiveResource> resource)
223231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
224231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResource* webResource = WEBKIT_WEB_RESOURCE(g_object_new(WEBKIT_TYPE_WEB_RESOURCE, NULL));
225231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResourcePrivate* priv = webResource->priv;
226231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    priv->resource = resource.releaseRef();
227231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
228231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return webResource;
229231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
230231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
231231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid webkit_web_resource_init_with_core_resource(WebKitWebResource* webResource, PassRefPtr<ArchiveResource> resource)
232231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
233231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    ASSERT(resource);
234231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
235231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResourcePrivate* priv = webResource->priv;
236231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
237231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (priv->resource)
238231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        priv->resource->deref();
239231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
240231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    priv->resource = resource.releaseRef();
241231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
242231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
243231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/**
244231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * webkit_web_resource_new:
245231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @data: the data to initialize the #WebKitWebResource
246d0825bca7fe65beaee391d30da42e937db621564Steve Block * @size: the length of @data
247231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @uri: the uri of the #WebKitWebResource
248231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @mime_type: the MIME type of the #WebKitWebResource
249d0825bca7fe65beaee391d30da42e937db621564Steve Block * @encoding: the text encoding name of the #WebKitWebResource
250231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @frame_name: the frame name of the #WebKitWebResource
251231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
252d0825bca7fe65beaee391d30da42e937db621564Steve Block * Returns a new #WebKitWebResource. The @encoding can be %NULL. The
253231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @frame_name argument can be used if the resource represents contents of an
254231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * entire HTML frame, otherwise pass %NULL.
255231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
256231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Return value: a new #WebKitWebResource
257231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
258231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Since: 1.1.14
259231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block */
260231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockWebKitWebResource* webkit_web_resource_new(const gchar* data,
261231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                           gssize size,
262231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                           const gchar* uri,
263231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                           const gchar* mimeType,
264231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                           const gchar* encoding,
265231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                                           const gchar* frameName)
266231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
267231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_return_val_if_fail(data, NULL);
268231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_return_val_if_fail(uri, NULL);
269231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_return_val_if_fail(mimeType, NULL);
270231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
271231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (size < 0)
272231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        size = strlen(data);
273231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
274231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    RefPtr<SharedBuffer> buffer = SharedBuffer::create(data, size);
275231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResource* webResource = webkit_web_resource_new_with_core_resource(ArchiveResource::create(buffer, KURL(KURL(), String::fromUTF8(uri)), String::fromUTF8(mimeType), String::fromUTF8(encoding), String::fromUTF8(frameName)));
276231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
277231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return webResource;
278231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
279231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
280231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/**
281231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * webkit_web_resource_get_data:
282231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @web_resource: a #WebKitWebResource
283231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
284231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Returns the data of the @webResource.
285231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
286bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * Return value: (transfer none): a #GString containing the character
287bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * data of the @webResource.  The string is owned by WebKit and should
288bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * not be freed or destroyed.
289231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
290231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Since: 1.1.14
291231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block */
292231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockGString* webkit_web_resource_get_data(WebKitWebResource* webResource)
293231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
294231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_return_val_if_fail(WEBKIT_IS_WEB_RESOURCE(webResource), NULL);
295231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
296231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResourcePrivate* priv = webResource->priv;
297231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
298231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!priv->resource)
299231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return NULL;
300231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
301231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!priv->data)
302231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        priv->data = g_string_new_len(priv->resource->data()->data(), priv->resource->data()->size());
303231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
304231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return priv->data;
305231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
306231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
307231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/**
308231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * webkit_web_resource_get_uri:
309231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @web_resource: a #WebKitWebResource
310231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
311231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Return value: the URI of the resource
312231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
313231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Since: 1.1.14
314231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block */
315231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockG_CONST_RETURN gchar* webkit_web_resource_get_uri(WebKitWebResource* webResource)
316231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
317231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_return_val_if_fail(WEBKIT_IS_WEB_RESOURCE(webResource), NULL);
318231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
319231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResourcePrivate* priv = webResource->priv;
320231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
321231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
322231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    // We may have an URI without having a resource assigned to us (e.g., if the
323231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    // FrameLoaderClient only had a ResourceRequest when we got created
324231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (priv->uri)
325231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return priv->uri;
326231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
327231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!priv->resource)
328231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return NULL;
329231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
330231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    priv->uri = g_strdup(priv->resource->url().string().utf8().data());
331231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
332231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return priv->uri;
333231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
334231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
335231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/**
336231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * webkit_web_resource_get_mime_type:
337231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @web_resource: a #WebKitWebResource
338231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
339231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Return value: the MIME type of the resource
340231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
341231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Since: 1.1.14
342231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block */
343231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockG_CONST_RETURN gchar* webkit_web_resource_get_mime_type(WebKitWebResource* webResource)
344231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
345231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_return_val_if_fail(WEBKIT_IS_WEB_RESOURCE(webResource), NULL);
346231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
347231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResourcePrivate* priv = webResource->priv;
348231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!priv->resource)
349231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return NULL;
350231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
351231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!priv->mimeType)
352231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        priv->mimeType = g_strdup(priv->resource->mimeType().utf8().data());
353231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
354231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return priv->mimeType;
355231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
356231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
357231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/**
358231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * webkit_web_resource_get_encoding:
359231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @web_resource: a #WebKitWebResource
360231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
361231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Return value: the encoding name of the resource
362231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
363231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Since: 1.1.14
364231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block */
365231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockG_CONST_RETURN gchar* webkit_web_resource_get_encoding(WebKitWebResource* webResource)
366231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
367231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_return_val_if_fail(WEBKIT_IS_WEB_RESOURCE(webResource), NULL);
368231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
369231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResourcePrivate* priv = webResource->priv;
370231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!priv->resource)
371231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return NULL;
372231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
373231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!priv->textEncoding)
374231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        priv->textEncoding = g_strdup(priv->resource->textEncoding().utf8().data());
375231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
376231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return priv->textEncoding;
377231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
378231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
379231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/**
380231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * webkit_web_resource_get_frame_name:
381231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * @web_resource: a #WebKitWebResource
382231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
383231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Return value: the frame name of the resource.
384231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
385231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Since: 1.1.14
386231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block */
387231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockG_CONST_RETURN gchar* webkit_web_resource_get_frame_name(WebKitWebResource* webResource)
388231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
389231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_return_val_if_fail(WEBKIT_IS_WEB_RESOURCE(webResource), NULL);
390231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
391231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResourcePrivate* priv = webResource->priv;
392231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!priv->resource)
393231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return NULL;
394231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
395231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!priv->frameName)
396231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        priv->frameName = g_strdup(priv->resource->frameName().utf8().data());
397231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
398231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return priv->frameName;
399231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
400231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
401