2 * Copyright (C) 2012 Igalia S.L.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
21 #include "WebKitResponsePolicyDecision.h"
23 #include "WebKitPolicyDecisionPrivate.h"
24 #include "WebKitResponsePolicyDecisionPrivate.h"
25 #include "WebKitURIRequestPrivate.h"
26 #include "WebKitURIResponsePrivate.h"
27 #include <glib/gi18n-lib.h>
28 #include <wtf/glib/GRefPtr.h>
29 #include <wtf/glib/WTFGType.h>
30 #include <wtf/text/CString.h>
32 using namespace WebKit;
33 using namespace WebCore;
36 * SECTION: WebKitResponsePolicyDecision
37 * @Short_description: A policy decision for resource responses
38 * @Title: WebKitResponsePolicyDecision
39 * @See_also: #WebKitPolicyDecision, #WebKitWebView
41 * WebKitResponsePolicyDecision represents a policy decision for a
42 * resource response, whether from the network or the local system.
43 * A very common use case for these types of decision is deciding
44 * whether or not to download a particular resource or to load it
48 struct _WebKitResponsePolicyDecisionPrivate {
49 RefPtr<API::NavigationResponse> navigationResponse;
50 GRefPtr<WebKitURIRequest> request;
51 GRefPtr<WebKitURIResponse> response;
54 WEBKIT_DEFINE_TYPE(WebKitResponsePolicyDecision, webkit_response_policy_decision, WEBKIT_TYPE_POLICY_DECISION)
62 static void webkitResponsePolicyDecisionGetProperty(GObject* object, guint propId, GValue* value, GParamSpec* paramSpec)
64 WebKitResponsePolicyDecision* decision = WEBKIT_RESPONSE_POLICY_DECISION(object);
67 g_value_set_object(value, webkit_response_policy_decision_get_request(decision));
70 g_value_set_object(value, webkit_response_policy_decision_get_response(decision));
73 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
78 static void webkit_response_policy_decision_class_init(WebKitResponsePolicyDecisionClass* decisionClass)
80 GObjectClass* objectClass = G_OBJECT_CLASS(decisionClass);
81 objectClass->get_property = webkitResponsePolicyDecisionGetProperty;
84 * WebKitResponsePolicyDecision:request:
86 * This property contains the #WebKitURIRequest associated with this
89 g_object_class_install_property(objectClass,
91 g_param_spec_object("request",
92 _("Response URI request"),
93 _("The URI request that is associated with this policy decision"),
94 WEBKIT_TYPE_URI_REQUEST,
95 WEBKIT_PARAM_READABLE));
98 * WebKitResponsePolicyDecision:response:
100 * This property contains the #WebKitURIResponse associated with this
103 g_object_class_install_property(objectClass,
105 g_param_spec_object("response",
107 _("The URI response that is associated with this policy decision"),
108 WEBKIT_TYPE_URI_RESPONSE,
109 WEBKIT_PARAM_READABLE));
114 * webkit_response_policy_decision_get_request:
115 * @decision: a #WebKitResponsePolicyDecision
117 * Gets the value of the #WebKitResponsePolicyDecision:request property.
119 * Returns: (transfer none): The URI request that is associated with this policy decision.
121 WebKitURIRequest* webkit_response_policy_decision_get_request(WebKitResponsePolicyDecision* decision)
123 g_return_val_if_fail(WEBKIT_IS_RESPONSE_POLICY_DECISION(decision), nullptr);
124 if (!decision->priv->request)
125 decision->priv->request = adoptGRef(webkitURIRequestCreateForResourceRequest(decision->priv->navigationResponse->request()));
126 return decision->priv->request.get();
130 * webkit_response_policy_decision_get_response:
131 * @decision: a #WebKitResponsePolicyDecision
133 * Gets the value of the #WebKitResponsePolicyDecision:response property.
135 * Returns: (transfer none): The URI response that is associated with this policy decision.
137 WebKitURIResponse* webkit_response_policy_decision_get_response(WebKitResponsePolicyDecision* decision)
139 g_return_val_if_fail(WEBKIT_IS_RESPONSE_POLICY_DECISION(decision), nullptr);
140 if (!decision->priv->response)
141 decision->priv->response = adoptGRef(webkitURIResponseCreateForResourceResponse(decision->priv->navigationResponse->response()));
142 return decision->priv->response.get();
146 * webkit_response_policy_decision_is_mime_type_supported:
147 * @decision: a #WebKitResponsePolicyDecision
149 * Gets whether the MIME type of the response can be displayed in the #WebKitWebView
150 * that triggered this policy decision request. See also webkit_web_view_can_show_mime_type().
152 * Returns: %TRUE if the MIME type of the response is supported or %FALSE otherwise
156 gboolean webkit_response_policy_decision_is_mime_type_supported(WebKitResponsePolicyDecision* decision)
158 g_return_val_if_fail(WEBKIT_IS_RESPONSE_POLICY_DECISION(decision), FALSE);
159 return decision->priv->navigationResponse->canShowMIMEType();
162 WebKitPolicyDecision* webkitResponsePolicyDecisionCreate(Ref<API::NavigationResponse>&& response, Ref<WebKit::WebFramePolicyListenerProxy>&& listener)
164 WebKitResponsePolicyDecision* responseDecision = WEBKIT_RESPONSE_POLICY_DECISION(g_object_new(WEBKIT_TYPE_RESPONSE_POLICY_DECISION, nullptr));
165 responseDecision->priv->navigationResponse = WTFMove(response);
166 WebKitPolicyDecision* decision = WEBKIT_POLICY_DECISION(responseDecision);
167 webkitPolicyDecisionSetListener(decision, WTFMove(listener));