#include "content/renderer/accessibility/annotations/ax_image_annotator.h"
#include <string>
#include <string_view>
#include <utility>
#include <vector>
#include "base/base64.h"
#include "base/command_line.h"
#include "base/containers/contains.h"
#include "base/containers/fixed_flat_map.h"
#include "base/i18n/char_iterator.h"
#include "base/metrics/histogram_functions.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "content/public/common/content_client.h"
#include "content/public/renderer/render_frame.h"
#include "content/renderer/accessibility/annotations/ax_image_annotator.h"
#include "content/renderer/accessibility/annotations/ax_image_stopwords.h"
#include "content/renderer/accessibility/render_accessibility_impl.h"
#include "content/renderer/render_frame_impl.h"
#include "crypto/sha2.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/image_annotation/public/mojom/image_annotation.mojom-forward.h"
#include "services/metrics/public/cpp/mojo_ukm_recorder.h"
#include "services/metrics/public/cpp/ukm_builders.h"
#include "third_party/blink/public/web/web_ax_object.h"
#include "third_party/blink/public/web/web_document.h"
#include "third_party/blink/public/web/web_element.h"
#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/public/web/web_node.h"
#include "ui/accessibility/accessibility_features.h"
#include "ui/accessibility/accessibility_switches.h"
#include "ui/accessibility/ax_enum_util.h"
#include "ui/accessibility/ax_role_properties.h"
#include "ui/base/models/image_model.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/geometry/transform.h"
#include "ui/strings/grit/auto_image_annotation_strings.h"
#include "url/gurl.h"
WebAXObject;
WebDocument;
WebElement;
WebNode;
WebString;
WebVector;
namespace content {
namespace {
int GetMessageIdForIconEnum(const std::string& icon_type) { … }
bool SearchForExactlyOneInnerImage(WebAXObject obj,
WebAXObject* inner_image,
int max_depth) { … }
bool FindExactlyOneInnerImageInMaxDepthThree(WebAXObject obj,
WebAXObject* inner_image) { … }
}
AXImageAnnotator::AXImageAnnotator(
RenderAccessibilityImpl* const render_accessibility)
: … { … }
AXImageAnnotator::~AXImageAnnotator() { … }
void AXImageAnnotator::EnableAnnotations() { … }
void AXImageAnnotator::BindAnnotatorForTesting(
mojo::PendingRemote<image_annotation::mojom::Annotator> annotator) { … }
void AXImageAnnotator::CancelAnnotations() { … }
uint32_t AXImageAnnotator::GetAXModeToEnableAnnotations() { … }
bool AXImageAnnotator::HasAXActionToEnableAnnotations() { … }
ax::mojom::Action AXImageAnnotator::GetAXActionToEnableAnnotations() { … }
void AXImageAnnotator::Annotate(const WebDocument& document,
ui::AXTreeUpdate* update,
bool load_complete) { … }
bool g_ignore_protocol_checks_for_testing;
void AXImageAnnotator::IgnoreProtocolChecksForTesting() { … }
void AXImageAnnotator::AddImageAnnotationsForNode(WebAXObject& src,
ui::AXNodeData* dst) { … }
void AXImageAnnotator::AddDebuggingAttributes(
const std::vector<ui::AXTreeUpdate>& updates) { … }
std::string AXImageAnnotator::GetImageAnnotation(
blink::WebAXObject& image) const { … }
ax::mojom::ImageAnnotationStatus AXImageAnnotator::GetImageAnnotationStatus(
blink::WebAXObject& image) const { … }
bool AXImageAnnotator::HasAnnotationInCache(blink::WebAXObject& image) const { … }
bool AXImageAnnotator::HasImageInCache(const blink::WebAXObject& image) const { … }
void AXImageAnnotator::OnImageAdded(blink::WebAXObject& image) { … }
void AXImageAnnotator::OnImageUpdated(blink::WebAXObject& image) { … }
void AXImageAnnotator::OnImageRemoved(blink::WebAXObject& image) { … }
int AXImageAnnotator::GetLengthAfterRemovingStopwords(
const std::string& image_name) { … }
bool AXImageAnnotator::ImageNameHasMostlyStopwords(
const std::string& image_name) { … }
#if defined(CONTENT_IMPLEMENTATION)
ContentClient* AXImageAnnotator::GetContentClient() const { … }
#else
ContentClient* AXImageAnnotator::GetContentClient() const {
return nullptr;
}
#endif
std::string AXImageAnnotator::GenerateImageSourceId(
const blink::WebAXObject& image) const { … }
void AXImageAnnotator::MarkDirty(const blink::WebAXObject& image) const { … }
AXImageAnnotator::ImageInfo::ImageInfo(const blink::WebAXObject& image)
: … { … }
AXImageAnnotator::ImageInfo::~ImageInfo() = default;
mojo::PendingRemote<image_annotation::mojom::ImageProcessor>
AXImageAnnotator::ImageInfo::GetImageProcessor() { … }
bool AXImageAnnotator::ImageInfo::HasAnnotation() const { … }
SkBitmap AXImageAnnotator::GetImageData(const blink::WebAXObject& image) { … }
void AXImageAnnotator::OnImageAnnotated(
const blink::WebAXObject& image,
image_annotation::mojom::AnnotateImageResultPtr result) { … }
std::string AXImageAnnotator::GetDocumentUrl() const { … }
}