// Copyright (c) 2012 The Chromium 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 "chrome/common/pref_names_util.h" #include #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "chrome/common/pref_names.h" #include "components/prefs/pref_service.h" #include "ui/native_theme/native_theme.h" namespace { // Adds !important to all captions styles. They should always override any // styles added by the video author or by a user stylesheet. This is because in // Chrome, there is an option to turn off captions styles, so any time the // captions are on, the styles should take priority. std::string AddCSSImportant(std::string css_string) { return css_string.empty() ? "" : css_string + " !important"; } } // namespace namespace pref_names_util { const char kWebKitFontPrefPrefix[] = "webkit.webprefs.fonts."; bool ParseFontNamePrefPath(const std::string& pref_path, std::string* generic_family, std::string* script) { if (!base::StartsWith(pref_path, kWebKitFontPrefPrefix, base::CompareCase::SENSITIVE)) return false; size_t start = strlen(kWebKitFontPrefPrefix); size_t pos = pref_path.find('.', start); if (pos == std::string::npos || pos + 1 == pref_path.length()) return false; if (generic_family) *generic_family = pref_path.substr(start, pos - start); if (script) *script = pref_path.substr(pos + 1); return true; } base::Optional GetCaptionStyleFromPrefs(PrefService* prefs) { if (!prefs) { return base::nullopt; } ui::CaptionStyle style; style.text_size = AddCSSImportant(prefs->GetString(prefs::kAccessibilityCaptionsTextSize)); style.font_family = AddCSSImportant(prefs->GetString(prefs::kAccessibilityCaptionsTextFont)); if (!prefs->GetString(prefs::kAccessibilityCaptionsTextColor).empty()) { std::string text_color = base::StringPrintf( "rgba(%s,%s)", prefs->GetString(prefs::kAccessibilityCaptionsTextColor).c_str(), base::NumberToString( prefs->GetInteger(prefs::kAccessibilityCaptionsTextOpacity) / 100.0) .c_str()); style.text_color = AddCSSImportant(text_color); } if (!prefs->GetString(prefs::kAccessibilityCaptionsBackgroundColor).empty()) { std::string background_color = base::StringPrintf( "rgba(%s,%s)", prefs->GetString(prefs::kAccessibilityCaptionsBackgroundColor).c_str(), base::NumberToString( prefs->GetInteger(prefs::kAccessibilityCaptionsBackgroundOpacity) / 100.0) .c_str()); style.background_color = AddCSSImportant(background_color); } style.text_shadow = AddCSSImportant( prefs->GetString(prefs::kAccessibilityCaptionsTextShadow)); return style; } } // namespace pref_names_util