92 lines
3.3 KiB
C++
92 lines
3.3 KiB
C++
// Copyright (c) 2013 The Chromium Embedded Framework Authors. All rights
|
|
// reserved. Use of this source code is governed by a BSD-style license that can
|
|
// be found in the LICENSE file.
|
|
|
|
#include "cef/libcef/browser/prefs/browser_prefs.h"
|
|
|
|
#include "cef/libcef/browser/browser_context.h"
|
|
#include "cef/libcef/browser/context.h"
|
|
#include "cef/libcef/browser/prefs/pref_registrar.h"
|
|
#include "chrome/browser/profiles/profile.h"
|
|
#include "components/language/core/browser/pref_names.h"
|
|
#include "components/prefs/pref_registry_simple.h"
|
|
#include "components/prefs/pref_service.h"
|
|
|
|
namespace browser_prefs {
|
|
|
|
namespace {
|
|
|
|
// Match the logic in chrome/browser/net/profile_network_context_service.cc.
|
|
std::string ComputeAcceptLanguageFromPref(const std::string& language_pref) {
|
|
std::string accept_languages_str =
|
|
net::HttpUtil::ExpandLanguageList(language_pref);
|
|
return net::HttpUtil::GenerateAcceptLanguageHeader(accept_languages_str);
|
|
}
|
|
|
|
// Return the most relevant setting based on |profile|.
|
|
std::string GetAcceptLanguageListSetting(Profile* profile) {
|
|
if (auto* browser_context = CefBrowserContext::FromProfile(profile)) {
|
|
const auto& settings = browser_context->settings();
|
|
if (settings.accept_language_list.length > 0) {
|
|
return CefString(&settings.accept_language_list);
|
|
}
|
|
}
|
|
|
|
const auto& settings = CefContext::Get()->settings();
|
|
if (settings.accept_language_list.length > 0) {
|
|
return CefString(&settings.accept_language_list);
|
|
}
|
|
|
|
return std::string();
|
|
}
|
|
|
|
} // namespace
|
|
|
|
void RegisterLocalStatePrefs(PrefRegistrySimple* registry) {
|
|
pref_registrar::RegisterCustomPrefs(CEF_PREFERENCES_TYPE_GLOBAL, registry);
|
|
}
|
|
|
|
void RegisterProfilePrefs(PrefRegistrySimple* registry) {
|
|
pref_registrar::RegisterCustomPrefs(CEF_PREFERENCES_TYPE_REQUEST_CONTEXT,
|
|
registry);
|
|
}
|
|
|
|
std::string GetAcceptLanguageList(Profile* profile) {
|
|
// Always prefer to the CEF settings configuration, if specified.
|
|
std::string accept_language_list = GetAcceptLanguageListSetting(profile);
|
|
if (accept_language_list.empty() && profile) {
|
|
// Fall back to the preference value. The default value comes from the
|
|
// configured locale (IDS_ACCEPT_LANGUAGES) which is then overridden by the
|
|
// user preference in chrome://settings/languages, all managed by
|
|
// language::LanguagePrefs.
|
|
accept_language_list =
|
|
profile->GetPrefs()->GetString(language::prefs::kAcceptLanguages);
|
|
}
|
|
|
|
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(profile);
|
|
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
|