forked from mirrors/gecko-dev
Bug 1896047 part 2: Introduce CssAltContent class to query alternative text specified in the CSS content property. r=eeejay
This allows us to check for alt text and also to output all of it to a string. For now, this only supports plain strings, but this will be extended in a subsequent patch. Differential Revision: https://phabricator.services.mozilla.com/D210014
This commit is contained in:
parent
a157ee3a80
commit
1b49a39c03
3 changed files with 83 additions and 0 deletions
45
accessible/base/CssAltContent.cpp
Normal file
45
accessible/base/CssAltContent.cpp
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
#include "CssAltContent.h"
|
||||||
|
#include "nsIContent.h"
|
||||||
|
#include "nsIFrame.h"
|
||||||
|
|
||||||
|
namespace mozilla::a11y {
|
||||||
|
|
||||||
|
CssAltContent::CssAltContent(nsIContent* aContent) {
|
||||||
|
nsIFrame* frame = aContent->GetPrimaryFrame();
|
||||||
|
if (!frame) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!frame->IsReplaced()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Check if this is for a pseudo-element.
|
||||||
|
if (aContent->IsInNativeAnonymousSubtree()) {
|
||||||
|
nsIContent* parent = aContent->GetParent();
|
||||||
|
if (parent && (parent->IsGeneratedContentContainerForBefore() ||
|
||||||
|
parent->IsGeneratedContentContainerForAfter() ||
|
||||||
|
parent->IsGeneratedContentContainerForMarker())) {
|
||||||
|
// We need the frame from the pseudo-element to get the content style.
|
||||||
|
frame = parent->GetPrimaryFrame();
|
||||||
|
if (!frame) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mItems = frame->StyleContent()->AltContentItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CssAltContent::AppendToString(nsAString& aOut) {
|
||||||
|
// There can be multiple alt text items.
|
||||||
|
for (const auto& item : mItems) {
|
||||||
|
if (item.IsString()) {
|
||||||
|
aOut.Append(NS_ConvertUTF8toUTF16(item.AsString().AsString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace mozilla::a11y
|
||||||
37
accessible/base/CssAltContent.h
Normal file
37
accessible/base/CssAltContent.h
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
#ifndef CssAltContent_h_
|
||||||
|
#define CssAltContent_h_
|
||||||
|
|
||||||
|
#include "nsStyleStruct.h"
|
||||||
|
|
||||||
|
namespace mozilla::a11y {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Queries alternative text specified in the CSS content property.
|
||||||
|
*/
|
||||||
|
class MOZ_STACK_CLASS CssAltContent {
|
||||||
|
public:
|
||||||
|
explicit CssAltContent(nsIContent* aContent);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether any CSS alt text has been specified. For example:
|
||||||
|
* if (CssAltContent(someContentNode)) ...
|
||||||
|
*/
|
||||||
|
explicit operator bool() const { return !mItems.IsEmpty(); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Append all CSS alt text to a string.
|
||||||
|
*/
|
||||||
|
void AppendToString(nsAString& aOut);
|
||||||
|
|
||||||
|
private:
|
||||||
|
mozilla::Span<const mozilla::StyleContentItem> mItems;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace mozilla::a11y
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -48,6 +48,7 @@ UNIFIED_SOURCES += [
|
||||||
"ARIAStateMap.cpp",
|
"ARIAStateMap.cpp",
|
||||||
"Asserts.cpp",
|
"Asserts.cpp",
|
||||||
"CachedTableAccessible.cpp",
|
"CachedTableAccessible.cpp",
|
||||||
|
"CssAltContent.cpp",
|
||||||
"DocManager.cpp",
|
"DocManager.cpp",
|
||||||
"EmbeddedObjCollector.cpp",
|
"EmbeddedObjCollector.cpp",
|
||||||
"EventQueue.cpp",
|
"EventQueue.cpp",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue