Changeset 214807 in webkit


Ignore:
Timestamp:
Apr 3, 2017 10:08:12 AM (7 years ago)
Author:
Carlos Garcia Campos
Message:

[SOUP] URI Fragment is lost after redirect
https://bugs.webkit.org/show_bug.cgi?id=170058

Reviewed by Michael Catanzaro.

Source/WebKit2:

In case of redirection check if the current request has a fragment identifier and apply it to the redirection
only when it doesn't have a fragment identifier yet.

  • NetworkProcess/soup/NetworkDataTaskSoup.cpp:

(WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
(WebKit::NetworkDataTaskSoup::createRequest):
(WebKit::NetworkDataTaskSoup::continueHTTPRedirection):

  • NetworkProcess/soup/NetworkDataTaskSoup.h:

LayoutTests:

Add tests to check we correctly handle fragment identifiers on server redirections.

  • http/tests/navigation/redirect-preserves-fragment-expected.txt: Added.
  • http/tests/navigation/redirect-preserves-fragment.html: Added.
  • http/tests/navigation/redirect-to-fragment-expected.txt: Added.
  • http/tests/navigation/redirect-to-fragment.html: Added.
  • http/tests/navigation/redirect-to-fragment2-expected.txt: Added.
  • http/tests/navigation/redirect-to-fragment2.html: Added.
  • http/tests/navigation/resources/redirect-preserves-fragment.php: Added.
  • http/tests/navigation/resources/redirect-to-fragment.php: Added.
  • http/tests/navigation/resources/redirect-to-fragment2.php: Added.
  • platform/ios/TestExpectations:
  • platform/mac/TestExpectations:
Location:
trunk
Files:
9 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r214806 r214807  
     12017-04-03  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [SOUP] URI Fragment is lost after redirect
     4        https://bugs.webkit.org/show_bug.cgi?id=170058
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        Add tests to check we correctly handle fragment identifiers on server redirections.
     9
     10        * http/tests/navigation/redirect-preserves-fragment-expected.txt: Added.
     11        * http/tests/navigation/redirect-preserves-fragment.html: Added.
     12        * http/tests/navigation/redirect-to-fragment-expected.txt: Added.
     13        * http/tests/navigation/redirect-to-fragment.html: Added.
     14        * http/tests/navigation/redirect-to-fragment2-expected.txt: Added.
     15        * http/tests/navigation/redirect-to-fragment2.html: Added.
     16        * http/tests/navigation/resources/redirect-preserves-fragment.php: Added.
     17        * http/tests/navigation/resources/redirect-to-fragment.php: Added.
     18        * http/tests/navigation/resources/redirect-to-fragment2.php: Added.
     19        * platform/ios/TestExpectations:
     20        * platform/mac/TestExpectations:
     21
    1222017-04-03  Youenn Fablet  <youenn@apple.com>
    223
  • trunk/LayoutTests/platform/ios/TestExpectations

    r214728 r214807  
    29322932fast/css-generated-content/initial-letter-pagination-raised-rl.html [ Skip ]
    29332933fast/css-generated-content/initial-letter-pagination-sunken-rl.html [ Skip ]
     2934
     2935webkit.org/b/158420 http/tests/navigation/redirect-to-fragment2.html [ Failure ]
  • trunk/LayoutTests/platform/mac/TestExpectations

    r214706 r214807  
    15691569
    15701570webkit.org/b/169838 [ Release ] fast/workers/worker-close-more.html [ Pass Timeout ]
     1571
     1572webkit.org/b/158420 http/tests/navigation/redirect-to-fragment2.html [ Failure ]
  • trunk/Source/WebKit2/ChangeLog

    r214786 r214807  
     12017-04-03  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [SOUP] URI Fragment is lost after redirect
     4        https://bugs.webkit.org/show_bug.cgi?id=170058
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        In case of redirection check if the current request has a fragment identifier and apply it to the redirection
     9        only when it doesn't have a fragment identifier yet.
     10
     11        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
     12        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
     13        (WebKit::NetworkDataTaskSoup::createRequest):
     14        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
     15        * NetworkProcess/soup/NetworkDataTaskSoup.h:
     16
    1172017-04-03  Antti Koivisto  <antti@apple.com>
    218
  • trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp

    r214246 r214807  
    7676        applyAuthenticationToRequest(request);
    7777    }
    78     createRequest(request);
     78    createRequest(WTFMove(request));
    7979}
    8080
     
    103103}
    104104
    105 void NetworkDataTaskSoup::createRequest(const ResourceRequest& request)
    106 {
    107     GUniquePtr<SoupURI> soupURI = request.createSoupURI();
     105void NetworkDataTaskSoup::createRequest(ResourceRequest&& request)
     106{
     107    m_currentRequest = WTFMove(request);
     108
     109    GUniquePtr<SoupURI> soupURI = m_currentRequest.createSoupURI();
    108110    if (!soupURI) {
    109111        scheduleFailure(InvalidURLFailure);
     
    117119    }
    118120
    119     request.updateSoupRequest(soupRequest.get());
    120 
    121     if (!request.url().protocolIsInHTTPFamily()) {
     121    m_currentRequest.updateSoupRequest(soupRequest.get());
     122
     123    if (!m_currentRequest.url().protocolIsInHTTPFamily()) {
    122124        m_soupRequest = WTFMove(soupRequest);
    123125        return;
     
    133135    unsigned messageFlags = SOUP_MESSAGE_NO_REDIRECT;
    134136
    135     request.updateSoupMessage(soupMessage.get());
     137    m_currentRequest.updateSoupMessage(soupMessage.get());
    136138    if (m_shouldContentSniff == DoNotSniffContent)
    137139        soup_message_disable_feature(soupMessage.get(), SOUP_TYPE_CONTENT_SNIFFER);
     
    159161
    160162#if SOUP_CHECK_VERSION(2, 43, 1)
    161     soup_message_set_priority(soupMessage.get(), toSoupMessagePriority(request.priority()));
     163    soup_message_set_priority(soupMessage.get(), toSoupMessagePriority(m_currentRequest.priority()));
    162164#endif
    163165
     
    637639    }
    638640
    639     ResourceRequest request = m_firstRequest;
    640     request.setURL(URL(m_response.url(), m_response.httpHeaderField(HTTPHeaderName::Location)));
     641    ResourceRequest request = m_currentRequest;
     642    URL redirectedURL = URL(m_response.url(), m_response.httpHeaderField(HTTPHeaderName::Location));
     643    if (!redirectedURL.hasFragmentIdentifier() && request.url().hasFragmentIdentifier())
     644        redirectedURL.setFragmentIdentifier(request.url().fragmentIdentifier());
     645    request.setURL(redirectedURL);
    641646
    642647    // Should not set Referer after a redirect from a secure resource to non-secure one.
     
    644649        request.clearHTTPReferrer();
    645650
    646     bool isCrossOrigin = !protocolHostAndPortAreEqual(m_firstRequest.url(), request.url());
     651    bool isCrossOrigin = !protocolHostAndPortAreEqual(m_currentRequest.url(), request.url());
    647652    if (!equalLettersIgnoringASCIICase(request.httpMethod(), "get")) {
    648653        // Change newRequest method to GET if change was made during a previous redirection or if current redirection says so.
     
    690695            applyAuthenticationToRequest(request);
    691696        }
    692         createRequest(request);
     697        createRequest(WTFMove(request));
    693698        if (m_soupRequest && m_state != State::Suspended) {
    694699            m_state = State::Suspended;
  • trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.h

    r212993 r214807  
    6060    void stopTimeout();
    6161
    62     void createRequest(const WebCore::ResourceRequest&);
     62    void createRequest(WebCore::ResourceRequest&&);
    6363    void clearRequest();
    6464    static void sendRequestCallback(SoupRequest*, GAsyncResult*, NetworkDataTaskSoup*);
     
    130130    WebCore::ProtectionSpace m_protectionSpaceForPersistentStorage;
    131131    WebCore::Credential m_credentialForPersistentStorage;
     132    WebCore::ResourceRequest m_currentRequest;
    132133    WebCore::ResourceResponse m_response;
    133134    Vector<char> m_readBuffer;
Note: See TracChangeset for help on using the changeset viewer.