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