mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-29 08:11:13 +00:00
LibWeb: Make preferred languages configurable
This also changes fetch to use the preferred languages for the Accept-Language header.
This commit is contained in:
parent
2cfc1873c0
commit
2ca8fd1832
Notes:
github-actions[bot]
2024-07-25 10:39:58 +00:00
Author: https://github.com/jamierocks Commit: https://github.com/LadybirdBrowser/ladybird/commit/2ca8fd18324 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/796 Reviewed-by: https://github.com/tcl3 ✅
|
@ -235,7 +235,10 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Infrastructure::FetchController>> fetch(JS:
|
|||
// 14. If request’s header list does not contain `Accept-Language`, then user agents should append
|
||||
// (`Accept-Language, an appropriate header value) to request’s header list.
|
||||
if (!request.header_list()->contains("Accept-Language"sv.bytes())) {
|
||||
auto header = Infrastructure::Header::from_string_pair("Accept-Language"sv, "*"sv);
|
||||
StringBuilder accept_language;
|
||||
accept_language.join(","sv, ResourceLoader::the().preferred_languages());
|
||||
|
||||
auto header = Infrastructure::Header::from_string_pair("Accept-Language"sv, accept_language.string_view());
|
||||
request.header_list()->append(move(header));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2022, Andrew Kaster <akaster@serenityos.org>
|
||||
* Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -8,21 +9,17 @@
|
|||
|
||||
#include <AK/String.h>
|
||||
#include <AK/Vector.h>
|
||||
#include <LibWeb/Loader/ResourceLoader.h>
|
||||
|
||||
namespace Web::HTML {
|
||||
|
||||
class NavigatorLanguageMixin {
|
||||
public:
|
||||
// https://html.spec.whatwg.org/multipage/system-state.html#dom-navigator-language
|
||||
String language() const { return m_current_preferred_languages[0]; }
|
||||
String language() const { return ResourceLoader::the().preferred_languages()[0]; }
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/system-state.html#dom-navigator-languages
|
||||
// FIXME: The same object must be returned until the user agent needs to return different values, or values in a
|
||||
// different order.
|
||||
Vector<String> languages() const { return m_current_preferred_languages; }
|
||||
|
||||
protected:
|
||||
Vector<String> m_current_preferred_languages = { "en-US"_string };
|
||||
Vector<String> languages() const { return ResourceLoader::the().preferred_languages(); }
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -59,6 +59,7 @@ ResourceLoader::ResourceLoader(NonnullRefPtr<ResourceLoaderConnector> connector)
|
|||
: m_connector(move(connector))
|
||||
, m_user_agent(MUST(String::from_utf8(default_user_agent)))
|
||||
, m_platform(MUST(String::from_utf8(default_platform)))
|
||||
, m_preferred_languages({ "en-US"_string })
|
||||
, m_navigator_compatibility_mode(default_navigator_compatibility_mode)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -100,6 +100,9 @@ public:
|
|||
String const& platform() const { return m_platform; }
|
||||
void set_platform(String platform) { m_platform = move(platform); }
|
||||
|
||||
Vector<String> preferred_languages() const { return m_preferred_languages; }
|
||||
void set_preferred_languages(Vector<String> preferred_languages) { m_preferred_languages = move(preferred_languages); }
|
||||
|
||||
NavigatorCompatibilityMode navigator_compatibility_mode() { return m_navigator_compatibility_mode; }
|
||||
void set_navigator_compatibility_mode(NavigatorCompatibilityMode mode) { m_navigator_compatibility_mode = mode; }
|
||||
|
||||
|
@ -123,6 +126,7 @@ private:
|
|||
NonnullRefPtr<ResourceLoaderConnector> m_connector;
|
||||
String m_user_agent;
|
||||
String m_platform;
|
||||
Vector<String> m_preferred_languages;
|
||||
NavigatorCompatibilityMode m_navigator_compatibility_mode;
|
||||
bool m_enable_do_not_track { false };
|
||||
Optional<JS::GCPtr<Page>> m_page {};
|
||||
|
|
|
@ -169,6 +169,11 @@ void ViewImplementation::set_preferred_motion(Web::CSS::PreferredMotion motion)
|
|||
client().async_set_preferred_motion(page_id(), motion);
|
||||
}
|
||||
|
||||
void ViewImplementation::set_preferred_languages(Vector<String> preferred_languages)
|
||||
{
|
||||
client().async_set_preferred_languages(page_id(), move(preferred_languages));
|
||||
}
|
||||
|
||||
void ViewImplementation::set_enable_do_not_track(bool enable)
|
||||
{
|
||||
client().async_set_enable_do_not_track(page_id(), enable);
|
||||
|
|
|
@ -66,6 +66,8 @@ public:
|
|||
void set_preferred_contrast(Web::CSS::PreferredContrast);
|
||||
void set_preferred_motion(Web::CSS::PreferredMotion);
|
||||
|
||||
void set_preferred_languages(Vector<String>);
|
||||
|
||||
void set_enable_do_not_track(bool);
|
||||
|
||||
ByteString selected_text();
|
||||
|
|
|
@ -946,6 +946,15 @@ void ConnectionFromClient::set_preferred_motion(u64 page_id, Web::CSS::Preferred
|
|||
page->set_preferred_motion(motion);
|
||||
}
|
||||
|
||||
void ConnectionFromClient::set_preferred_languages(u64, Vector<String> const& preferred_languages)
|
||||
{
|
||||
// FIXME: Whenever the user agent needs to make the navigator.languages attribute of a Window or WorkerGlobalScope
|
||||
// object global return a new set of language tags, the user agent must queue a global task on the DOM manipulation
|
||||
// task source given global to fire an event named languagechange at global, and wait until that task begins to be
|
||||
// executed before actually returning a new value.
|
||||
Web::ResourceLoader::the().set_preferred_languages(preferred_languages);
|
||||
}
|
||||
|
||||
void ConnectionFromClient::set_enable_do_not_track(u64, bool enable)
|
||||
{
|
||||
Web::ResourceLoader::the().set_enable_do_not_track(enable);
|
||||
|
|
|
@ -95,6 +95,7 @@ private:
|
|||
virtual void set_preferred_color_scheme(u64 page_id, Web::CSS::PreferredColorScheme const&) override;
|
||||
virtual void set_preferred_contrast(u64 page_id, Web::CSS::PreferredContrast const&) override;
|
||||
virtual void set_preferred_motion(u64 page_id, Web::CSS::PreferredMotion const&) override;
|
||||
virtual void set_preferred_languages(u64 page_id, Vector<String> const&) override;
|
||||
virtual void set_enable_do_not_track(u64 page_id, bool) override;
|
||||
virtual void set_has_focus(u64 page_id, bool) override;
|
||||
virtual void set_is_scripting_enabled(u64 page_id, bool) override;
|
||||
|
|
|
@ -81,6 +81,7 @@ endpoint WebContentServer
|
|||
set_preferred_color_scheme(u64 page_id, Web::CSS::PreferredColorScheme color_scheme) =|
|
||||
set_preferred_contrast(u64 page_id, Web::CSS::PreferredContrast contrast) =|
|
||||
set_preferred_motion(u64 page_id, Web::CSS::PreferredMotion motion) =|
|
||||
set_preferred_languages(u64 page_id, Vector<String> preferred_languages) =|
|
||||
set_enable_do_not_track(u64 page_id, bool enable) =|
|
||||
set_has_focus(u64 page_id, bool has_focus) =|
|
||||
set_is_scripting_enabled(u64 page_id, bool is_scripting_enabled) =|
|
||||
|
|
Loading…
Reference in a new issue