mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-05 15:49:11 +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: 2ca8fd1832
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/796
Reviewed-by: https://github.com/tcl3 ✅
9 changed files with 31 additions and 8 deletions
|
@ -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
|
// 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.
|
// (`Accept-Language, an appropriate header value) to request’s header list.
|
||||||
if (!request.header_list()->contains("Accept-Language"sv.bytes())) {
|
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));
|
request.header_list()->append(move(header));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2022, Andrew Kaster <akaster@serenityos.org>
|
* Copyright (c) 2022, Andrew Kaster <akaster@serenityos.org>
|
||||||
|
* Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -8,21 +9,17 @@
|
||||||
|
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/Vector.h>
|
#include <AK/Vector.h>
|
||||||
|
#include <LibWeb/Loader/ResourceLoader.h>
|
||||||
|
|
||||||
namespace Web::HTML {
|
namespace Web::HTML {
|
||||||
|
|
||||||
class NavigatorLanguageMixin {
|
class NavigatorLanguageMixin {
|
||||||
public:
|
public:
|
||||||
// https://html.spec.whatwg.org/multipage/system-state.html#dom-navigator-language
|
// 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
|
// 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
|
Vector<String> languages() const { return ResourceLoader::the().preferred_languages(); }
|
||||||
// different order.
|
|
||||||
Vector<String> languages() const { return m_current_preferred_languages; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
Vector<String> m_current_preferred_languages = { "en-US"_string };
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,7 @@ ResourceLoader::ResourceLoader(NonnullRefPtr<ResourceLoaderConnector> connector)
|
||||||
: m_connector(move(connector))
|
: m_connector(move(connector))
|
||||||
, m_user_agent(MUST(String::from_utf8(default_user_agent)))
|
, m_user_agent(MUST(String::from_utf8(default_user_agent)))
|
||||||
, m_platform(MUST(String::from_utf8(default_platform)))
|
, m_platform(MUST(String::from_utf8(default_platform)))
|
||||||
|
, m_preferred_languages({ "en-US"_string })
|
||||||
, m_navigator_compatibility_mode(default_navigator_compatibility_mode)
|
, m_navigator_compatibility_mode(default_navigator_compatibility_mode)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,6 +100,9 @@ public:
|
||||||
String const& platform() const { return m_platform; }
|
String const& platform() const { return m_platform; }
|
||||||
void set_platform(String platform) { m_platform = move(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; }
|
NavigatorCompatibilityMode navigator_compatibility_mode() { return m_navigator_compatibility_mode; }
|
||||||
void set_navigator_compatibility_mode(NavigatorCompatibilityMode mode) { m_navigator_compatibility_mode = mode; }
|
void set_navigator_compatibility_mode(NavigatorCompatibilityMode mode) { m_navigator_compatibility_mode = mode; }
|
||||||
|
|
||||||
|
@ -123,6 +126,7 @@ private:
|
||||||
NonnullRefPtr<ResourceLoaderConnector> m_connector;
|
NonnullRefPtr<ResourceLoaderConnector> m_connector;
|
||||||
String m_user_agent;
|
String m_user_agent;
|
||||||
String m_platform;
|
String m_platform;
|
||||||
|
Vector<String> m_preferred_languages;
|
||||||
NavigatorCompatibilityMode m_navigator_compatibility_mode;
|
NavigatorCompatibilityMode m_navigator_compatibility_mode;
|
||||||
bool m_enable_do_not_track { false };
|
bool m_enable_do_not_track { false };
|
||||||
Optional<JS::GCPtr<Page>> m_page {};
|
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);
|
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)
|
void ViewImplementation::set_enable_do_not_track(bool enable)
|
||||||
{
|
{
|
||||||
client().async_set_enable_do_not_track(page_id(), 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_contrast(Web::CSS::PreferredContrast);
|
||||||
void set_preferred_motion(Web::CSS::PreferredMotion);
|
void set_preferred_motion(Web::CSS::PreferredMotion);
|
||||||
|
|
||||||
|
void set_preferred_languages(Vector<String>);
|
||||||
|
|
||||||
void set_enable_do_not_track(bool);
|
void set_enable_do_not_track(bool);
|
||||||
|
|
||||||
ByteString selected_text();
|
ByteString selected_text();
|
||||||
|
|
|
@ -946,6 +946,15 @@ void ConnectionFromClient::set_preferred_motion(u64 page_id, Web::CSS::Preferred
|
||||||
page->set_preferred_motion(motion);
|
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)
|
void ConnectionFromClient::set_enable_do_not_track(u64, bool enable)
|
||||||
{
|
{
|
||||||
Web::ResourceLoader::the().set_enable_do_not_track(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_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_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_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_enable_do_not_track(u64 page_id, bool) override;
|
||||||
virtual void set_has_focus(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;
|
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_color_scheme(u64 page_id, Web::CSS::PreferredColorScheme color_scheme) =|
|
||||||
set_preferred_contrast(u64 page_id, Web::CSS::PreferredContrast contrast) =|
|
set_preferred_contrast(u64 page_id, Web::CSS::PreferredContrast contrast) =|
|
||||||
set_preferred_motion(u64 page_id, Web::CSS::PreferredMotion motion) =|
|
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_enable_do_not_track(u64 page_id, bool enable) =|
|
||||||
set_has_focus(u64 page_id, bool has_focus) =|
|
set_has_focus(u64 page_id, bool has_focus) =|
|
||||||
set_is_scripting_enabled(u64 page_id, bool is_scripting_enabled) =|
|
set_is_scripting_enabled(u64 page_id, bool is_scripting_enabled) =|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue