⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 184086 in webkit


Ignore:
Timestamp:
May 11, 2015, 6:04:15 AM (11 years ago)
Author:
Carlos Garcia Campos
Message:

Merge r182943 - [SOUP] Redirect to non HTTP destination is broken
https://bugs.webkit.org/show_bug.cgi?id=143866

Reviewed by Sergio Villar Senin.

Source/WebCore:

This is because we are passing true unconditionally as
isHTTPFamilyRequest parameter of
createSoupRequestAndMessageForHandle in continueAfterWillSendRequest.
We don't actually need to pass isHTTPFamilyRequest parameter to
createSoupRequestAndMessageForHandle, since it can simply check
that from the given request.

Covered by unit tets and also cache/disk-cache/disk-cache-redirect-to-data.html.

  • platform/network/soup/ResourceHandleSoup.cpp:

(WebCore::continueAfterWillSendRequest):
(WebCore::createSoupRequestAndMessageForHandle):
(WebCore::ResourceHandle::start):

Tools:

Add a unit test to check that redirect to a data URI works.

  • TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp:

(testRedirectToDataURI):
(serverCallback):
(beforeAll):

Location:
releases/WebKitGTK/webkit-2.8
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog

    r184085 r184086  
     12015-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [SOUP] Redirect to non HTTP destination is broken
     4        https://bugs.webkit.org/show_bug.cgi?id=143866
     5
     6        Reviewed by Sergio Villar Senin.
     7
     8        This is because we are passing true unconditionally as
     9        isHTTPFamilyRequest parameter of
     10        createSoupRequestAndMessageForHandle in continueAfterWillSendRequest.
     11        We don't actually need to pass isHTTPFamilyRequest parameter to
     12        createSoupRequestAndMessageForHandle, since it can simply check
     13        that from the given request.
     14
     15        Covered by unit tets and also cache/disk-cache/disk-cache-redirect-to-data.html.
     16
     17        * platform/network/soup/ResourceHandleSoup.cpp:
     18        (WebCore::continueAfterWillSendRequest):
     19        (WebCore::createSoupRequestAndMessageForHandle):
     20        (WebCore::ResourceHandle::start):
     21
    1222015-04-16  Brady Eidson  <beidson@apple.com>
    223
  • releases/WebKitGTK/webkit-2.8/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp

    r181234 r184086  
    228228};
    229229
    230 static bool createSoupRequestAndMessageForHandle(ResourceHandle*, const ResourceRequest&, bool isHTTPFamilyRequest);
     230static bool createSoupRequestAndMessageForHandle(ResourceHandle*, const ResourceRequest&);
    231231static void cleanupSoupRequestOperation(ResourceHandle*, bool isDestroying = false);
    232232static void sendRequestCallback(GObject*, GAsyncResult*, gpointer);
     
    469469        applyAuthenticationToRequest(handle, newRequest, true);
    470470
    471     if (!createSoupRequestAndMessageForHandle(handle, newRequest, true)) {
     471    if (!createSoupRequestAndMessageForHandle(handle, newRequest)) {
    472472        d->client()->cannotShowURL(handle);
    473473        return;
     
    968968}
    969969
    970 static bool createSoupRequestAndMessageForHandle(ResourceHandle* handle, const ResourceRequest& request, bool isHTTPFamilyRequest)
     970static bool createSoupRequestAndMessageForHandle(ResourceHandle* handle, const ResourceRequest& request)
    971971{
    972972    ResourceHandleInternal* d = handle->getInternal();
     
    984984
    985985    // SoupMessages are only applicable to HTTP-family requests.
    986     if (isHTTPFamilyRequest && !createSoupMessageForHandleAndRequest(handle, request)) {
     986    if (request.url().protocolIsInHTTPFamily() && !createSoupMessageForHandleAndRequest(handle, request)) {
    987987        d->m_soupRequest.clear();
    988988        return false;
     
    10081008    // Only allow the POST and GET methods for non-HTTP requests.
    10091009    const ResourceRequest& request = firstRequest();
    1010     bool isHTTPFamilyRequest = request.url().protocolIsInHTTPFamily();
    1011     if (!isHTTPFamilyRequest && request.httpMethod() != "GET" && request.httpMethod() != "POST") {
     1010    if (!request.url().protocolIsInHTTPFamily() && request.httpMethod() != "GET" && request.httpMethod() != "POST") {
    10121011        this->scheduleFailure(InvalidURLFailure); // Error must not be reported immediately
    10131012        return true;
     
    10161015    applyAuthenticationToRequest(this, firstRequest(), false);
    10171016
    1018     if (!createSoupRequestAndMessageForHandle(this, request, isHTTPFamilyRequest)) {
     1017    if (!createSoupRequestAndMessageForHandle(this, request)) {
    10191018        this->scheduleFailure(InvalidURLFailure); // Error must not be reported immediately
    10201019        return true;
  • releases/WebKitGTK/webkit-2.8/Tools/ChangeLog

    r182716 r184086  
     12015-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [SOUP] Redirect to non HTTP destination is broken
     4        https://bugs.webkit.org/show_bug.cgi?id=143866
     5
     6        Reviewed by Sergio Villar Senin.
     7
     8        Add a unit test to check that redirect to a data URI works.
     9
     10        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp:
     11        (testRedirectToDataURI):
     12        (serverCallback):
     13        (beforeAll):
     14
    1152015-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>
    216
  • releases/WebKitGTK/webkit-2.8/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp

    r180826 r184086  
    424424    g_assert(headers);
    425425    g_assert_cmpstr(soup_message_headers_get_one(headers, "Foo"), ==, "bar");
     426}
     427
     428static void testRedirectToDataURI(WebViewTest* test, gconstpointer)
     429{
     430    test->loadURI(kServer->getURIForPath("/redirect-to-data").data());
     431    test->waitUntilLoadFinished();
     432
     433    static const char* expectedData = "data-uri";
     434    size_t mainResourceDataSize = 0;
     435    const char* mainResourceData = test->mainResourceData(mainResourceDataSize);
     436    g_assert_cmpint(mainResourceDataSize, ==, strlen(expectedData));
     437    g_assert(!strncmp(mainResourceData, expectedData, mainResourceDataSize));
    426438}
    427439
     
    466478        soup_message_headers_append(message->response_headers, "Foo", "bar");
    467479        soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, responseString, strlen(responseString));
     480    } else if (g_str_equal(path, "/redirect-to-data")) {
     481        soup_message_set_status(message, SOUP_STATUS_MOVED_PERMANENTLY);
     482        soup_message_headers_append(message->response_headers, "Location", "data:text/plain;charset=utf-8,data-uri");
    468483    } else
    469484        soup_message_set_status(message, SOUP_STATUS_NOT_FOUND);
     
    503518    WebViewTest::add("WebKitURIRequest", "http-headers", testURIRequestHTTPHeaders);
    504519    WebViewTest::add("WebKitURIResponse", "http-headers", testURIResponseHTTPHeaders);
     520    WebViewTest::add("WebKitWebPage", "redirect-to-data-uri", testRedirectToDataURI);
    505521}
    506522
Note: See TracChangeset for help on using the changeset viewer.