Commit 28791ed1 authored by Dominic Mazzoni's avatar Dominic Mazzoni Committed by Commit Bot

Use a vector for PDF structure element node children.

As requested by this comment:
https://chromium-review.googlesource.com/c/chromium/src/+/1970742/7/printing/common/metafile_utils.cc#125

A change to Skia (https://skia-review.googlesource.com/c/skia/+/271816)
now lets us use a std::vector for children of a StructureElementNode,
rather than a raw array. Now we no longer need custom code to recursively
destroy the tree after we write a PDF.

Bug: 607777
Change-Id: Iaffa00e4a27d27866cfa57e8f9da51fbdb8f2939
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2077277Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Commit-Queue: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#745296}
parent eede381b
...@@ -100,14 +100,13 @@ bool RecursiveBuildStructureTree(const ui::AXNode* ax_node, ...@@ -100,14 +100,13 @@ bool RecursiveBuildStructureTree(const ui::AXNode* ax_node,
tag->fType = SkPDF::DocumentStructureType::kNonStruct; tag->fType = SkPDF::DocumentStructureType::kNonStruct;
} }
tag->fChildCount = ax_node->GetUnignoredChildCount(); size_t children_count = ax_node->GetUnignoredChildCount();
// Allocated here, cleaned up in DestroyStructureElementNodeTree(). tag->fChildVector.resize(children_count);
SkPDF::StructureElementNode* children = for (size_t i = 0; i < children_count; i++) {
new SkPDF::StructureElementNode[tag->fChildCount]; tag->fChildVector[i] = std::make_unique<SkPDF::StructureElementNode>();
tag->fChildren = children;
for (size_t i = 0; i < tag->fChildCount; i++) {
bool success = RecursiveBuildStructureTree( bool success = RecursiveBuildStructureTree(
ax_node->GetUnignoredChildAtIndex(i), &children[i]); ax_node->GetUnignoredChildAtIndex(i), tag->fChildVector[i].get());
if (success) if (success)
valid = true; valid = true;
} }
...@@ -115,14 +114,6 @@ bool RecursiveBuildStructureTree(const ui::AXNode* ax_node, ...@@ -115,14 +114,6 @@ bool RecursiveBuildStructureTree(const ui::AXNode* ax_node,
return valid; return valid;
} }
void DestroyStructureElementNodeTree(SkPDF::StructureElementNode* node) {
for (size_t i = 0; i < node->fChildCount; i++) {
DestroyStructureElementNodeTree(
const_cast<SkPDF::StructureElementNode*>(&node->fChildren[i]));
}
delete[] node->fChildren;
}
} // namespace } // namespace
namespace printing { namespace printing {
...@@ -146,9 +137,7 @@ sk_sp<SkDocument> MakePdfDocument(const std::string& creator, ...@@ -146,9 +137,7 @@ sk_sp<SkDocument> MakePdfDocument(const std::string& creator,
metadata.fStructureElementTreeRoot = &tag_root; metadata.fStructureElementTreeRoot = &tag_root;
} }
sk_sp<SkDocument> document = SkPDF::MakeDocument(stream, metadata); return SkPDF::MakeDocument(stream, metadata);
DestroyStructureElementNodeTree(&tag_root);
return document;
} }
sk_sp<SkData> SerializeOopPicture(SkPicture* pic, void* ctx) { sk_sp<SkData> SerializeOopPicture(SkPicture* pic, void* ctx) {
......
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