Changeset 232470 in webkit


Ignore:
Timestamp:
Jun 4, 2018 10:21:17 AM (6 years ago)
Author:
youenn@apple.com
Message:

NetworkCORSPreflightChecker should set the preflight request User-Agent header
https://bugs.webkit.org/show_bug.cgi?id=186254
<rdar://problem/40293504>

Reviewed by Chris Dumez.

LayoutTests/imported/w3c:

  • web-platform-tests/fetch/api/cors/cors-preflight.any-expected.txt:
  • web-platform-tests/fetch/api/cors/cors-preflight.any.js:

(corsPreflight):

  • web-platform-tests/fetch/api/cors/cors-preflight.any.worker-expected.txt:
  • web-platform-tests/fetch/api/resources/preflight.py:

(main):

Source/WebKit:

Some servers misbehave if the User-Agent header is not set properly on preflight requests.
Set it to the same value as the request triggering the preflight.

  • NetworkProcess/NetworkCORSPreflightChecker.cpp:

(WebKit::NetworkCORSPreflightChecker::startPreflight):

  • NetworkProcess/NetworkCORSPreflightChecker.h:
  • NetworkProcess/NetworkLoadChecker.cpp:

(WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r232371 r232470  
     12018-06-04  Youenn Fablet  <youenn@apple.com>
     2
     3        NetworkCORSPreflightChecker should set the preflight request User-Agent header
     4        https://bugs.webkit.org/show_bug.cgi?id=186254
     5        <rdar://problem/40293504>
     6
     7        Reviewed by Chris Dumez.
     8
     9        * web-platform-tests/fetch/api/cors/cors-preflight.any-expected.txt:
     10        * web-platform-tests/fetch/api/cors/cors-preflight.any.js:
     11        (corsPreflight):
     12        * web-platform-tests/fetch/api/cors/cors-preflight.any.worker-expected.txt:
     13        * web-platform-tests/fetch/api/resources/preflight.py:
     14        (main):
     15
    1162018-05-31  Manuel Rego Casasnovas  <rego@igalia.com>
    217
  • trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight.any-expected.txt

    r215515 r232470  
    33PASS CORS [DELETE], server refuses
    44PASS CORS [PUT], server allows
     5PASS CORS [PUT], server allows, check preflight has user agent
    56PASS CORS [PUT], server refuses
    67PASS CORS [PATCH], server allows
  • trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight.any.js

    r215164 r232470  
    2020    var uuid_token = token();
    2121    return fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token).then(function(response) {
    22       var url = corsUrl;
    23       var urlParameters = "?token=" + uuid_token + "&max_age=0";
     22      var url = corsUrl + (corsUrl.indexOf("?") === -1 ? "?" : "&");
     23      var urlParameters = "token=" + uuid_token + "&max_age=0";
    2424      var requestInit = {"mode": "cors", "method": method};
    2525      var requestHeaders = [];
     
    6767corsPreflight("CORS [DELETE], server refuses", corsUrl, "DELETE", false);
    6868corsPreflight("CORS [PUT], server allows", corsUrl, "PUT", true);
     69corsPreflight("CORS [PUT], server allows, check preflight has user agent", corsUrl + "?checkUserAgentHeaderInPreflight", "PUT", true);
    6970corsPreflight("CORS [PUT], server refuses", corsUrl, "PUT", false);
    7071corsPreflight("CORS [PATCH], server allows", corsUrl, "PATCH", true);
  • trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight.any.worker-expected.txt

    r231000 r232470  
    1010PASS CORS [DELETE], server refuses
    1111PASS CORS [PUT], server allows
     12PASS CORS [PUT], server allows, check preflight has user agent
    1213PASS CORS [PUT], server refuses
    1314PASS CORS [PATCH], server allows
  • trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/resources/preflight.py

    r222307 r232470  
    4545        stashed_data['preflight'] = "1"
    4646        stashed_data['preflight_referrer'] = request.headers.get("Referer", "")
     47        stashed_data['preflight_user_agent'] = request.headers.get("User-Agent", "")
    4748        if token:
    4849            request.server.stash.put(token, stashed_data)
     
    5556        if data:
    5657            stashed_data = data
     58
     59    if "checkUserAgentHeaderInPreflight" in request.GET and request.headers.get("User-Agent") != stashed_data['preflight_user_agent']:
     60        return 400, headers, "ERROR: No user-agent header in preflight"
    5761
    5862    #use x-* headers for returning value to bodyless responses
  • trunk/Source/WebKit/ChangeLog

    r232460 r232470  
     12018-06-04  Youenn Fablet  <youenn@apple.com>
     2
     3        NetworkCORSPreflightChecker should set the preflight request User-Agent header
     4        https://bugs.webkit.org/show_bug.cgi?id=186254
     5        <rdar://problem/40293504>
     6
     7        Reviewed by Chris Dumez.
     8
     9        Some servers misbehave if the User-Agent header is not set properly on preflight requests.
     10        Set it to the same value as the request triggering the preflight.
     11
     12        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
     13        (WebKit::NetworkCORSPreflightChecker::startPreflight):
     14        * NetworkProcess/NetworkCORSPreflightChecker.h:
     15        * NetworkProcess/NetworkLoadChecker.cpp:
     16        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
     17
    1182018-06-03  Andy Estes  <aestes@apple.com>
    219
  • trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp

    r231694 r232470  
    6565    loadParameters.request = createAccessControlPreflightRequest(m_parameters.originalRequest, m_parameters.sourceOrigin, m_parameters.referrer);
    6666    loadParameters.shouldFollowRedirects = false;
     67    if (!m_parameters.userAgent.isNull())
     68        loadParameters.request.setHTTPHeaderField(HTTPHeaderName::UserAgent, m_parameters.userAgent);
     69
    6770    if (auto* networkSession = SessionTracker::networkSession(loadParameters.sessionID)) {
    6871        m_task = NetworkDataTask::create(*networkSession, *this, WTFMove(loadParameters));
  • trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h

    r230681 r232470  
    4747        Ref<WebCore::SecurityOrigin> sourceOrigin;
    4848        String referrer;
     49        String userAgent;
    4950        PAL::SessionID sessionID;
    5051        WebCore::StoredCredentialsPolicy storedCredentialsPolicy;
  • trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp

    r232309 r232470  
    355355        *m_origin,
    356356        request.httpReferrer(),
     357        request.httpUserAgent(),
    357358        m_sessionID,
    358359        m_storedCredentialsPolicy
Note: See TracChangeset for help on using the changeset viewer.