Skip to content

Commit

Permalink
[GTK][WPE] Add API to check if a response policy decision is for the …
Browse files Browse the repository at this point in the history
…main resource

https://bugs.webkit.org/show_bug.cgi?id=247059

Reviewed by Adrian Perez de Castro and Michael Catanzaro.

Apps are currently checking if request uri is the same as web view main
resource uri which might not be accurate.

* Source/WebKit/UIProcess/API/glib/WebKitResponsePolicyDecision.cpp:
(webkit_response_policy_decision_is_main_frame_main_resource):
* Source/WebKit/UIProcess/API/glib/WebKitResponsePolicyDecision.h.in:
* Tools/MiniBrowser/gtk/BrowserTab.c:
(decidePolicy):
* Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp:
(testResponsePolicy):

Canonical link: https://commits.webkit.org/256058@main
  • Loading branch information
carlosgcampos committed Oct 27, 2022
1 parent becb6c4 commit e35d409
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 8 deletions.
20 changes: 20 additions & 0 deletions Source/WebKit/UIProcess/API/glib/WebKitResponsePolicyDecision.cpp
Expand Up @@ -167,6 +167,26 @@ gboolean webkit_response_policy_decision_is_mime_type_supported(WebKitResponsePo
return decision->priv->navigationResponse->canShowMIMEType();
}

/**
* webkit_response_policy_decision_is_main_frame_main_resource:
* @decision: a #WebKitResponsePolicyDecision
*
* Gets whether the request is the main frame main resource
*
* Returns: %TRUE if the request is the main frame main resouce or %FALSE otherwise
*
* Since: 2.40
*/
gboolean webkit_response_policy_decision_is_main_frame_main_resource(WebKitResponsePolicyDecision* decision)
{
g_return_val_if_fail(WEBKIT_IS_RESPONSE_POLICY_DECISION(decision), FALSE);

if (!decision->priv->navigationResponse->frame().isMainFrame())
return FALSE;

return decision->priv->navigationResponse->request().requester() == ResourceRequest::Requester::Main;
}

WebKitPolicyDecision* webkitResponsePolicyDecisionCreate(Ref<API::NavigationResponse>&& response, Ref<WebKit::WebFramePolicyListenerProxy>&& listener)
{
WebKitResponsePolicyDecision* responseDecision = WEBKIT_RESPONSE_POLICY_DECISION(g_object_new(WEBKIT_TYPE_RESPONSE_POLICY_DECISION, nullptr));
Expand Down
Expand Up @@ -59,16 +59,19 @@ struct _WebKitResponsePolicyDecisionClass {
};

WEBKIT_API GType
webkit_response_policy_decision_get_type (void);
webkit_response_policy_decision_get_type (void);

WEBKIT_API WebKitURIRequest *
webkit_response_policy_decision_get_request (WebKitResponsePolicyDecision *decision);
webkit_response_policy_decision_get_request (WebKitResponsePolicyDecision *decision);

WEBKIT_API WebKitURIResponse *
webkit_response_policy_decision_get_response (WebKitResponsePolicyDecision *decision);
webkit_response_policy_decision_get_response (WebKitResponsePolicyDecision *decision);

WEBKIT_API gboolean
webkit_response_policy_decision_is_mime_type_supported (WebKitResponsePolicyDecision *decision);
webkit_response_policy_decision_is_mime_type_supported (WebKitResponsePolicyDecision *decision);

WEBKIT_API gboolean
webkit_response_policy_decision_is_main_frame_main_resource (WebKitResponsePolicyDecision* decision);

G_END_DECLS

Expand Down
5 changes: 1 addition & 4 deletions Tools/MiniBrowser/gtk/BrowserTab.c
Expand Up @@ -125,10 +125,7 @@ static gboolean decidePolicy(WebKitWebView *webView, WebKitPolicyDecision *decis
if (webkit_response_policy_decision_is_mime_type_supported(responseDecision))
return FALSE;

WebKitWebResource *mainResource = webkit_web_view_get_main_resource(webView);
WebKitURIRequest *request = webkit_response_policy_decision_get_request(responseDecision);
const char *requestURI = webkit_uri_request_get_uri(request);
if (g_strcmp0(webkit_web_resource_get_uri(mainResource), requestURI))
if (!webkit_response_policy_decision_is_main_frame_main_resource(responseDecision))
return FALSE;

webkit_policy_decision_download(decision);
Expand Down
Expand Up @@ -222,6 +222,7 @@ static void testResponsePolicy(PolicyClientTest* test, gconstpointer)
ASSERT_CMP_CSTRING(webkit_uri_response_get_uri(response), ==, kServer->getURIForPath("/"));
g_assert_cmpint(webkit_web_view_can_show_mime_type(test->m_webView, webkit_uri_response_get_mime_type(response)), ==,
webkit_response_policy_decision_is_mime_type_supported(decision));
g_assert_true(webkit_response_policy_decision_is_main_frame_main_resource(decision));

test->m_respondToPolicyDecisionAsynchronously = true;
test->loadURI(kServer->getURIForPath("/").data());
Expand Down

0 comments on commit e35d409

Please sign in to comment.