From f5799f7d2cc44d1d8323265d95242fcaaf8604e3 Mon Sep 17 00:00:00 2001 From: Jamie Mansfield Date: Mon, 29 Apr 2024 20:57:34 +0100 Subject: [PATCH] LibWeb/Fetch: Append the Fetch metadata headers --- .../LibWeb/Fetch/Fetching/Fetching.cpp | 23 ++++++++++++++++++- .../LibWeb/Fetch/Fetching/Fetching.h | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.cpp b/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.cpp index 75ef7be284c..a580a1568b1 100644 --- a/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.cpp +++ b/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.cpp @@ -1355,7 +1355,8 @@ WebIDL::ExceptionOr> http_network_or_cache_fet // 12. Append a request `Origin` header for httpRequest. http_request->add_origin_header(); - // FIXME: 13. Append the Fetch metadata headers for httpRequest. + // 13. Append the Fetch metadata headers for httpRequest. + append_fetch_metadata_headers_for_request(*http_request); // 14. If httpRequest’s header list does not contain `User-Agent`, then user agents should append // (`User-Agent`, default `User-Agent` value) to httpRequest’s header list. @@ -2103,4 +2104,24 @@ void set_sec_fetch_user_header(Infrastructure::Request& request) request.header_list()->append(move(header)); } +// https://w3c.github.io/webappsec-fetch-metadata/#abstract-opdef-append-the-fetch-metadata-headers-for-a-request +void append_fetch_metadata_headers_for_request(Infrastructure::Request& request) +{ + // 1. If r’s url is not an potentially trustworthy URL, return. + if (SecureContexts::is_url_potentially_trustworthy(request.url()) != SecureContexts::Trustworthiness::PotentiallyTrustworthy) + return; + + // 2. Set the Sec-Fetch-Dest header for r. + set_sec_fetch_dest_header(request); + + // 3. Set the Sec-Fetch-Mode header for r. + set_sec_fetch_mode_header(request); + + // 4. Set the Sec-Fetch-Site header for r. + set_sec_fetch_site_header(request); + + // 5. Set the Sec-Fetch-User header for r. + set_sec_fetch_user_header(request); +} + } diff --git a/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.h b/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.h index 102f45a1336..5f46f0e3aad 100644 --- a/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.h +++ b/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.h @@ -43,4 +43,5 @@ void set_sec_fetch_dest_header(Infrastructure::Request&); void set_sec_fetch_mode_header(Infrastructure::Request&); void set_sec_fetch_site_header(Infrastructure::Request&); void set_sec_fetch_user_header(Infrastructure::Request&); +void append_fetch_metadata_headers_for_request(Infrastructure::Request&); }