chrome: Set prefs for accept_language_list on Profile init (fixes #3579)

This commit is contained in:
Marshall Greenblatt 2023-10-05 16:35:02 -04:00
parent 29938f9cb0
commit a8a96235a8
5 changed files with 29 additions and 17 deletions

View File

@ -4,6 +4,7 @@
#include "libcef/browser/chrome/chrome_browser_context.h"
#include "libcef/browser/prefs/browser_prefs.h"
#include "libcef/browser/thread_util.h"
#include "base/threading/thread_restrictions.h"
@ -167,6 +168,8 @@ void ChromeBrowserContext::ProfileCreated(Profile::CreateStatus status,
: SessionStartupPref::kPrefValueNewTab);
}
browser_prefs::SetInitialProfilePrefs(profile_);
if (!init_callbacks_.empty()) {
for (auto& callback : init_callbacks_) {
std::move(callback).Run();

View File

@ -411,17 +411,6 @@ bool ChromeContentBrowserClientCef::ConfigureNetworkContextParams(
cef_context ? cef_context->GetCookieableSchemes()
: CefBrowserContext::GetGlobalCookieableSchemes();
// Prefer the CEF settings configuration, if specified, instead of the
// kAcceptLanguages preference which is controlled by the
// chrome://settings/languages configuration.
const std::string& accept_language_list =
browser_prefs::GetAcceptLanguageList(cef_context, /*browser=*/nullptr,
/*expand=*/true);
if (!accept_language_list.empty() &&
accept_language_list != network_context_params->accept_language) {
network_context_params->accept_language = accept_language_list;
}
return true;
}

View File

@ -275,7 +275,7 @@ class InterceptedRequestHandlerWrapper : public InterceptedRequestHandler {
// Default values for standard headers.
accept_language_ = browser_prefs::GetAcceptLanguageList(
cef_browser_context, browser.get(), /*expand=*/true);
cef_browser_context, browser.get());
DCHECK(!accept_language_.empty());
user_agent_ =
CefAppManager::Get()->GetContentClient()->browser()->GetUserAgent();

View File

@ -366,8 +366,7 @@ std::unique_ptr<PrefService> CreatePrefService(Profile* profile,
}
std::string GetAcceptLanguageList(CefBrowserContext* browser_context,
CefBrowserHostBase* browser,
bool expand) {
CefBrowserHostBase* browser) {
// Always prefer to the CEF settings configuration, if specified.
std::string accept_language_list =
GetAcceptLanguageListSetting(browser_context, browser);
@ -381,10 +380,29 @@ std::string GetAcceptLanguageList(CefBrowserContext* browser_context,
accept_language_list = prefs->GetString(language::prefs::kAcceptLanguages);
}
if (!accept_language_list.empty() && expand) {
if (!accept_language_list.empty()) {
return ComputeAcceptLanguageFromPref(accept_language_list);
}
return std::string();
}
void SetInitialProfilePrefs(Profile* profile) {
auto* prefs = profile->GetPrefs();
// Language preferences.
const std::string& accept_language_list = GetAcceptLanguageListSetting(
CefBrowserContext::FromProfile(profile), /*browser=*/nullptr);
if (!accept_language_list.empty()) {
// Used by ProfileNetworkContextService and InterceptedRequestHandlerWrapper
// (via GetAcceptLanguageList) for request headers, and
// renderer_preferences_util::UpdateFromSystemSettings() for
// `navigator.language`.
prefs->SetString(language::prefs::kAcceptLanguages, accept_language_list);
// Necessary to avoid a reset of the kAcceptLanguages value in
// LanguagePrefs::UpdateAcceptLanguagesPref().
prefs->SetString(language::prefs::kSelectedLanguages, accept_language_list);
}
}
} // namespace browser_prefs

View File

@ -37,8 +37,10 @@ std::unique_ptr<PrefService> CreatePrefService(Profile* profile,
// |browser_context| and/or |browser| may be nullptr. If |expand| is true then
// base languages and Q values may be added.
std::string GetAcceptLanguageList(CefBrowserContext* browser_context,
CefBrowserHostBase* browser,
bool expand);
CefBrowserHostBase* browser);
// Set preferences for a newly initialized Profile.
void SetInitialProfilePrefs(Profile* profile);
} // namespace browser_prefs