Commit 61b8f7f8 authored by Dominic Mazzoni's avatar Dominic Mazzoni Committed by Commit Bot

Fix exporting of language code in tagged PDFs and add test coverage.

Bug: 1109787
AX-Relnotes: exported PDFs are correctly tagged with language codes
Change-Id: Ife54fe6a2782ffa24ccf76f222371d630fe5d210
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2320074Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Reviewed-by: default avatarSami Kyöstilä <skyostil@chromium.org>
Commit-Queue: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#792573}
parent bdaf4b48
......@@ -627,6 +627,14 @@ void BlinkAXTreeSource::SerializeNode(WebAXObject src,
src.HeadingLevel());
}
WebAXObject parent = ParentObjectUnignored(src);
if (src.Language().length()) {
if (parent.IsNull() || parent.Language() != src.Language()) {
TruncateAndAddStringAttribute(
dst, ax::mojom::StringAttribute::kLanguage, src.Language().Utf8());
}
}
SerializeListAttributes(src, dst);
SerializeTableAttributes(src, dst);
}
......@@ -1129,13 +1137,6 @@ void BlinkAXTreeSource::SerializeOtherScreenReaderAttributes(
display_style.Utf8());
}
WebAXObject parent = ParentObjectUnignored(src);
if (src.Language().length()) {
if (parent.IsNull() || parent.Language() != src.Language())
TruncateAndAddStringAttribute(dst, ax::mojom::StringAttribute::kLanguage,
src.Language().Utf8());
}
if (src.KeyboardShortcut().length() &&
!dst->HasStringAttribute(ax::mojom::StringAttribute::kKeyShortcuts)) {
TruncateAndAddStringAttribute(dst,
......
......@@ -520,6 +520,7 @@ class HeadlessWebContentsPDFPageSizeRoundingTest
HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessWebContentsPDFPageSizeRoundingTest);
const char kExpectedStructTreeJSON[] = R"({
"lang": "en",
"type": "Document",
"~children": [ {
"type": "H1",
......@@ -592,6 +593,12 @@ const char kExpectedStructTreeJSON[] = R"({
"alt": "Car at the beach",
"type": "Figure"
} ]
}, {
"lang": "fr",
"type": "P",
"~children": [ {
"type": "NonStruct"
} ]
} ]
}
)";
......
<!DOCTYPE html>
<html lang="en">
<body>
<h1>Title</h1>
<p>Para</p>
......@@ -23,4 +24,8 @@
<div>
<img src="svg_example_image.png" alt="Car at the beach">
</div>
<p lang="fr">
Ceci n'est pas une pipe
</p>
</body>
</html>
......@@ -7,8 +7,10 @@
#include <algorithm>
#include <utility>
#include "base/bind.h"
#include "base/no_destructor.h"
#include "base/numerics/safe_conversions.h"
#include "pdf/pdfium/pdfium_api_string_buffer_adapter.h"
#include "pdf/pdfium/pdfium_mem_buffer_file_write.h"
#include "pdf/pdfium/pdfium_print.h"
#include "printing/nup_parameters.h"
......@@ -131,22 +133,27 @@ bool IsValidPrintableArea(const gfx::Size& page_size,
}
base::Value RecursiveGetStructTree(FPDF_STRUCTELEMENT struct_elem) {
constexpr int kBufLen = 64;
base::char16 str_buffer[kBufLen];
if (!FPDF_StructElement_GetType(struct_elem, str_buffer,
sizeof(str_buffer))) {
base::Optional<base::string16> opt_type =
CallPDFiumWideStringBufferApiAndReturnOptional(
base::BindRepeating(FPDF_StructElement_GetType, struct_elem), true);
if (!opt_type)
return base::Value(base::Value::Type::NONE);
}
base::Value result(base::Value::Type::DICTIONARY);
base::string16 elem_type(str_buffer);
result.SetStringKey("type", elem_type);
if (FPDF_StructElement_GetAltText(struct_elem, str_buffer,
sizeof(str_buffer))) {
base::string16 alt_text(str_buffer);
result.SetStringKey("alt", alt_text);
}
result.SetStringKey("type", *opt_type);
base::Optional<base::string16> opt_alt =
CallPDFiumWideStringBufferApiAndReturnOptional(
base::BindRepeating(FPDF_StructElement_GetAltText, struct_elem),
true);
if (opt_alt)
result.SetStringKey("alt", *opt_alt);
base::Optional<base::string16> opt_lang =
CallPDFiumWideStringBufferApiAndReturnOptional(
base::BindRepeating(FPDF_StructElement_GetLang, struct_elem), true);
if (opt_lang)
result.SetStringKey("lang", *opt_lang);
int children_count = FPDF_StructElement_CountChildren(struct_elem);
if (children_count == 0)
......
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