WebKitURIResponse.cpp [plain text]
#include "config.h"
#include "WebKitURIResponse.h"
#include "WebKitPrivate.h"
#include "WebKitURIResponsePrivate.h"
#include <WebCore/GUniquePtrSoup.h>
#include <glib/gi18n-lib.h>
#include <wtf/text/CString.h>
using namespace WebKit;
using namespace WebCore;
enum {
PROP_0,
PROP_URI,
PROP_STATUS_CODE,
PROP_CONTENT_LENGTH,
PROP_MIME_TYPE,
PROP_SUGGESTED_FILENAME,
PROP_HTTP_HEADERS
};
struct _WebKitURIResponsePrivate {
ResourceResponse resourceResponse;
CString uri;
CString mimeType;
CString suggestedFilename;
GUniquePtr<SoupMessageHeaders> httpHeaders;
};
WEBKIT_DEFINE_TYPE(WebKitURIResponse, webkit_uri_response, G_TYPE_OBJECT)
static void webkitURIResponseGetProperty(GObject* object, guint propId, GValue* value, GParamSpec* paramSpec)
{
WebKitURIResponse* response = WEBKIT_URI_RESPONSE(object);
switch (propId) {
case PROP_URI:
g_value_set_string(value, webkit_uri_response_get_uri(response));
break;
case PROP_STATUS_CODE:
g_value_set_uint(value, webkit_uri_response_get_status_code(response));
break;
case PROP_CONTENT_LENGTH:
g_value_set_uint64(value, webkit_uri_response_get_content_length(response));
break;
case PROP_MIME_TYPE:
g_value_set_string(value, webkit_uri_response_get_mime_type(response));
break;
case PROP_SUGGESTED_FILENAME:
g_value_set_string(value, webkit_uri_response_get_suggested_filename(response));
break;
case PROP_HTTP_HEADERS:
g_value_set_boxed(value, webkit_uri_response_get_http_headers(response));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
}
}
static void webkit_uri_response_class_init(WebKitURIResponseClass* responseClass)
{
GObjectClass* objectClass = G_OBJECT_CLASS(responseClass);
objectClass->get_property = webkitURIResponseGetProperty;
g_object_class_install_property(objectClass,
PROP_URI,
g_param_spec_string("uri",
_("URI"),
_("The URI for which the response was made."),
0,
WEBKIT_PARAM_READABLE));
g_object_class_install_property(objectClass,
PROP_STATUS_CODE,
g_param_spec_uint("status-code",
_("Status Code"),
_("The status code of the response as returned by the server."),
0, G_MAXUINT, SOUP_STATUS_NONE,
WEBKIT_PARAM_READABLE));
g_object_class_install_property(objectClass,
PROP_CONTENT_LENGTH,
g_param_spec_uint64("content-length",
_("Content Length"),
_("The expected content length of the response."),
0, G_MAXUINT64, 0,
WEBKIT_PARAM_READABLE));
g_object_class_install_property(objectClass,
PROP_MIME_TYPE,
g_param_spec_string("mime-type",
_("MIME Type"),
_("The MIME type of the response"),
0,
WEBKIT_PARAM_READABLE));
g_object_class_install_property(objectClass,
PROP_SUGGESTED_FILENAME,
g_param_spec_string("suggested-filename",
_("Suggested Filename"),
_("The suggested filename for the URI response"),
0,
WEBKIT_PARAM_READABLE));
g_object_class_install_property(
objectClass,
PROP_HTTP_HEADERS,
g_param_spec_boxed(
"http-headers",
_("HTTP Headers"),
_("The The HTTP headers of the response"),
SOUP_TYPE_MESSAGE_HEADERS,
WEBKIT_PARAM_READABLE));
}
const gchar* webkit_uri_response_get_uri(WebKitURIResponse* response)
{
g_return_val_if_fail(WEBKIT_IS_URI_RESPONSE(response), 0);
response->priv->uri = response->priv->resourceResponse.url().string().utf8();
return response->priv->uri.data();
}
guint webkit_uri_response_get_status_code(WebKitURIResponse* response)
{
g_return_val_if_fail(WEBKIT_IS_URI_RESPONSE(response), SOUP_STATUS_NONE);
return response->priv->resourceResponse.httpStatusCode();
}
guint64 webkit_uri_response_get_content_length(WebKitURIResponse* response)
{
g_return_val_if_fail(WEBKIT_IS_URI_RESPONSE(response), 0);
return response->priv->resourceResponse.expectedContentLength();
}
const gchar* webkit_uri_response_get_mime_type(WebKitURIResponse* response)
{
g_return_val_if_fail(WEBKIT_IS_URI_RESPONSE(response), 0);
response->priv->mimeType = response->priv->resourceResponse.mimeType().utf8();
return response->priv->mimeType.data();
}
const gchar* webkit_uri_response_get_suggested_filename(WebKitURIResponse* response)
{
g_return_val_if_fail(WEBKIT_IS_URI_RESPONSE(response), 0);
if (response->priv->resourceResponse.suggestedFilename().isEmpty())
return 0;
response->priv->suggestedFilename = response->priv->resourceResponse.suggestedFilename().utf8();
return response->priv->suggestedFilename.data();
}
SoupMessageHeaders* webkit_uri_response_get_http_headers(WebKitURIResponse* response)
{
g_return_val_if_fail(WEBKIT_IS_URI_RESPONSE(response), nullptr);
if (response->priv->httpHeaders)
return response->priv->httpHeaders.get();
if (!response->priv->resourceResponse.url().protocolIsInHTTPFamily())
return nullptr;
response->priv->httpHeaders.reset(soup_message_headers_new(SOUP_MESSAGE_HEADERS_RESPONSE));
response->priv->resourceResponse.updateSoupMessageHeaders(response->priv->httpHeaders.get());
return response->priv->httpHeaders.get();
}
WebKitURIResponse* webkitURIResponseCreateForResourceResponse(const WebCore::ResourceResponse& resourceResponse)
{
WebKitURIResponse* uriResponse = WEBKIT_URI_RESPONSE(g_object_new(WEBKIT_TYPE_URI_RESPONSE, NULL));
uriResponse->priv->resourceResponse = resourceResponse;
return uriResponse;
}
const WebCore::ResourceResponse& webkitURIResponseGetResourceResponse(WebKitURIResponse* uriResponse)
{
return uriResponse->priv->resourceResponse;
}