Commit 592442ac authored by sudo45's avatar sudo45 Committed by Commit Bot

SVG 'systemLanguage' conditional processing reflects user's preferred

content languages.

Now Chrome reflects the user's preferred languages for content
to display in an SVG element during the conditional processing
(which are set in chrome://settings/languages).

The previous behavior was:
Chrome reflected the user interface language.

R=fs@opera.com, schenney@chromium.org

Bug: 490140
Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_slimming_paint_v2;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I37971ed24294273c9100abc4b668b693bb496659
Reviewed-on: https://chromium-review.googlesource.com/1216343Reviewed-by: default avatarFredrik Söderquist <fs@opera.com>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#590032}
parent 24038bb6
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<script> <script>
test(() => { test(() => {
internals.setUserPreferredLanguages(["en"]); testRunner.setAcceptLanguages("en");
var text1 = document.createElementNS('http://www.w3.org/2000/svg', 'text'); var text1 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
text1.setAttribute('systemLanguage', 'en'); text1.setAttribute('systemLanguage', 'en');
text1.textContent = 'English-US'; text1.textContent = 'English-US';
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<script> <script>
test(() => { test(() => {
internals.setUserPreferredLanguages(["en"]); testRunner.setAcceptLanguages("en");
var text1 = document.createElementNS('http://www.w3.org/2000/svg', 'text'); var text1 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
text1.setAttribute('systemLanguage', 'en-US'); text1.setAttribute('systemLanguage', 'en-US');
...@@ -19,7 +19,7 @@ test(() => { ...@@ -19,7 +19,7 @@ test(() => {
assert_greater_than(text1.getBoundingClientRect().width, 0); assert_greater_than(text1.getBoundingClientRect().width, 0);
internals.setUserPreferredLanguages(["it"]); testRunner.setAcceptLanguages("it");
mysvg.removeChild(text1); mysvg.removeChild(text1);
......
<!DOCTYPE HTML>
<title>The "systemLanguage" attribute match user preferred languages</title>
<link rel="help" href="https://www.w3.org/TR/SVG2/struct.html#ConditionalProcessingSystemLanguageAttribute">
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<svg>
<switch id="myswitch">
</switch>
</svg>
<script>
test(() => {
internals.setUserPreferredLanguages(["es"]);
testRunner.setAcceptLanguages("en-US,en");
var text1 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
text1.setAttribute('systemLanguage', 'es, de');
text1.textContent = 'Español';
var text2 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
text2.setAttribute('systemLanguage', 'de, it, en-GB');
text2.textContent = 'English';
var myswitch = document.getElementById("myswitch");
myswitch.appendChild(text1);
myswitch.appendChild(text2);
assert_greater_than(text2.getBoundingClientRect().width, 0);
assert_equals(text1.getBoundingClientRect().width, 0);
myswitch.removeChild(text1);
myswitch.removeChild(text2);
testRunner.setAcceptLanguages("it, en-AU");
myswitch.appendChild(text1);
myswitch.appendChild(text2);
assert_greater_than(text2.getBoundingClientRect().width, 0);
assert_equals(text1.getBoundingClientRect().width, 0);
});
</script>
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
#include "third_party/blink/renderer/core/svg/svg_tests.h" #include "third_party/blink/renderer/core/svg/svg_tests.h"
#include "third_party/blink/renderer/core/page/chrome_client.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/svg/svg_element.h" #include "third_party/blink/renderer/core/svg/svg_element.h"
#include "third_party/blink/renderer/core/svg/svg_static_string_list.h" #include "third_party/blink/renderer/core/svg/svg_static_string_list.h"
#include "third_party/blink/renderer/core/svg_names.h" #include "third_party/blink/renderer/core/svg_names.h"
...@@ -60,11 +62,27 @@ static bool IsLangTagPrefix(const String& lang_tag, const String& language) { ...@@ -60,11 +62,27 @@ static bool IsLangTagPrefix(const String& lang_tag, const String& language) {
lang_tag[language.length()] == '-'; lang_tag[language.length()] == '-';
} }
static bool MatchLanguageList(const String& lang_tag,
const Vector<String>& languages) {
for (const auto& value : languages) {
if (IsLangTagPrefix(lang_tag, value))
return true;
}
return false;
}
bool SVGTests::IsValid() const { bool SVGTests::IsValid() const {
if (system_language_->IsSpecified()) { if (system_language_->IsSpecified()) {
bool match_found = false; bool match_found = false;
Vector<String> languages;
system_language_->ContextElement()
->GetDocument()
.GetPage()
->GetChromeClient()
.AcceptLanguages()
.Split(',', languages);
for (const auto& lang_tag : system_language_->Value()->Values()) { for (const auto& lang_tag : system_language_->Value()->Values()) {
if (IsLangTagPrefix(lang_tag, DefaultLanguage())) { if (MatchLanguageList(lang_tag, languages)) {
match_found = true; match_found = true;
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment