Commit 492eddf8 authored by Dominic Mazzoni's avatar Dominic Mazzoni Committed by Commit Bot

Fix language computation for root of accessibility tree.

I discovered that AXObject::Language() was not always returning the
correct thing for the root element. The rest of the tree had the
right value, but not the root.

I updated an existing test to cover the case where the document's
language is something other than English.

AX-Relnotes: Fixes the computed language for some web pages.
Bug: none
Change-Id: I3e3bec73e9bded0df3c37bb3c8ba634d3d5018b6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2226338
Commit-Queue: Dominic Mazzoni <dmazzoni@chromium.org>
Reviewed-by: default avatarChris Hall <chrishall@chromium.org>
Auto-Submit: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#774704}
parent 3e53c8a0
rootWebArea language='en-US'
rootWebArea language='fr-FR'
++genericContainer ignored language='fr-FR'
++++genericContainer ignored language='fr-FR'
++++++genericContainer language='fr-FR'
......
AXWebArea AXLanguage='en-US'
AXWebArea AXLanguage='fr-FR'
++AXGroup AXLanguage='fr-FR'
++++AXStaticText AXLanguage='de' AXValue='Ein Bild ist nicht zu verwechseln mit einer Sache, die man berühren kann. Können Sie meine Pfeife stopfen? Natürlich nicht! Sie ist nur eine Darstellung. Hätte ich auf mein Bild geschrieben, dies ist eine Pfeife, so hätte ich gelogen. Das Abbild einer Marmeladenschnitte ist ganz gewiss nichts Essbares.'
rootWebArea language='en-US'
rootWebArea language='fr-FR'
++genericContainer ignored language='fr-FR'
++++genericContainer ignored language='fr-FR'
++++++genericContainer language='fr-FR'
......
AXWebArea AXLanguage='en-US'
AXWebArea AXLanguage='fr-FR'
++AXGroup AXLanguage='fr-FR'
++++AXGroup AXLanguage='fr-FR'
++++++AXStaticText AXLanguage='en' AXValue='This is text created using Google Translate, it is unlikely to be idiomatic in the given target language. This text is only used to test language detection'
......
rootWebArea language='en-US'
rootWebArea language='fr-FR'
++genericContainer ignored language='fr-FR'
++++genericContainer ignored language='fr-FR'
++++++list language='fr-FR'
......
AXWebArea AXLanguage='en-US'
AXWebArea AXLanguage='fr-FR'
++AXList AXLanguage='fr-FR'
++AXList AXLanguage='fr-FR'
++++AXGroup AXLanguage='fr-FR'
......
rootWebArea language='en-US'
++genericContainer ignored language='en'
++++genericContainer language='en'
rootWebArea language='es-ES'
++genericContainer ignored language='es-ES'
++++genericContainer language='es-ES'
++++++staticText language='es-ES' name='Este documento es excelente. '
++++++++inlineTextBox language='es-ES' name='Este documento es excelente. '
++++++staticText language='fr' name='Ce document est excellent. '
......
AXWebArea AXLanguage='en-US'
++AXGroup AXLanguage='en'
AXWebArea AXLanguage='es-ES'
++AXGroup AXLanguage='es-ES'
++++AXStaticText AXLanguage='es-ES' AXValue='Este documento es excelente. '
++++AXStaticText AXLanguage='fr' AXValue='Ce document est excellent. '
++++AXStaticText AXLanguage='en' AXValue='This document is excellent.'
ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE language:en
ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE language:es-ES
++IA2_ROLE_SECTION language:es-ES language:fr language:en
++++ROLE_SYSTEM_STATICTEXT name='Este documento es excelente. ' language:es-ES
++++ROLE_SYSTEM_STATICTEXT name='Ce document est excellent. ' language:fr
......
rootWebArea language='en-US'
rootWebArea language='en'
++genericContainer ignored language='en'
++++genericContainer ignored language='en'
++++++genericContainer ignored language='es-ES'
......
AXWebArea AXLanguage='en-US'
AXWebArea AXLanguage='en'
++AXGroup AXLanguage='en'
++++AXStaticText AXLanguage='en' AXValue='This document is excellent.'
++AXStaticText AXLanguage='es-ES' AXValue='Este documento es excelente.'
......
rootWebArea language='en-US'
rootWebArea language='en'
++genericContainer ignored language='en'
++++genericContainer ignored language='en'
++++++paragraph language='en'
......
AXWebArea AXLanguage='en-US'
AXWebArea AXLanguage='en'
++AXGroup AXLanguage='en'
++++AXStaticText AXLanguage='en' AXValue='In the morning, I sometimes eat breakfast.'
++AXGroup AXLanguage='fr'
......
......@@ -4,9 +4,9 @@
@MAC-ALLOW:AXLanguage*
-->
<!DOCTYPE html>
<html lang="en">
<html lang="es-ES">
<body>
<span lang="es-ES">
<span>
Este documento es excelente.
</span>
......@@ -14,7 +14,7 @@
Ce document est excellent.
</span>
<span>
<span lang="en">
This document is excellent.
</span>
......
rootWebArea language='en-US'
rootWebArea language='en-GB'
++genericContainer ignored language='en-GB'
++++genericContainer ignored language='en-GB'
++++++genericContainer language='fr'
......
AXWebArea AXLanguage='en-US'
AXWebArea AXLanguage='en-GB'
++AXGroup AXLanguage='fr'
++++AXStaticText AXLanguage='en' AXValue='“The famous pipe. How people reproached me for it! And yet, could you stuff my pipe? No, it’s just a representation, is it not? So if I had written on my picture ‘This is a pipe,’ I’d have been lying!"'
++AXGroup AXLanguage='en'
......
......@@ -2194,15 +2194,26 @@ Element* AXLayoutObject::AnchorElement() const {
}
AtomicString AXLayoutObject::Language() const {
if (!GetLayoutObject())
return AXNodeObject::Language();
// If it's the root, get the computed language for the document element,
// because the root LayoutObject doesn't have the right value.
if (RoleValue() == ax::mojom::blink::Role::kRootWebArea) {
Element* document_element = GetDocument()->documentElement();
if (!document_element)
return g_empty_atom;
AtomicString lang = document_element->ComputeInheritedLanguage();
if (!lang.IsEmpty())
return lang;
}
// Uses the style engine to figure out the object's language.
// The style engine relies on, for example, the "lang" attribute of the
// current node and its ancestors, and the document's "content-language"
// header. See the Language of a Node Spec at
// https://html.spec.whatwg.org/C/#language
if (!GetLayoutObject())
return AXNodeObject::Language();
const ComputedStyle* style = GetLayoutObject()->Style();
if (!style || !style->Locale())
return AXNodeObject::Language();
......
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