blob: 2ca1b74cc7f925d1f6de1933250a3dd4755f339a [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "pdf/accessibility.h"
#include <algorithm>
#include <utility>
#include <vector>
#include "base/check_op.h"
#include "base/numerics/safe_math.h"
#include "pdf/accessibility_helper.h"
#include "pdf/accessibility_structs.h"
#include "pdf/pdfium/pdfium_engine.h"
#include "ui/gfx/geometry/rect_f.h"
namespace chrome_pdf {
namespace {
AccessibilityFormFieldInfo GetAccessibilityFormFieldInfo(
PDFiumPage* page,
uint32_t text_run_count) {
AccessibilityFormFieldInfo form_field_info;
form_field_info.text_fields = page->GetTextFieldInfo(text_run_count);
return form_field_info;
}
} // namespace
void GetAccessibilityInfo(PDFiumEngine* engine,
int32_t page_index,
AccessibilityPageInfo& page_info,
std::vector<AccessibilityTextRunInfo>& text_runs,
std::vector<AccessibilityCharInfo>& chars,
AccessibilityPageObjects& page_objects) {
PDFiumPage* page = engine->GetPage(page_index);
CHECK(page);
page->GetTextAndCharInfo(text_runs, chars);
page_info.page_index = page_index;
page_info.bounds = page->rect();
page_info.char_count = chars.size();
#if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
page_info.is_searchified = page->IsPageSearchified();
#else
page_info.is_searchified = false;
#endif
page->PopulateTextRunTypeAndImageAltText(text_runs);
page_objects.images = page->GetImageInfo(text_runs.size());
page_info.text_run_count = text_runs.size();
page_objects.links = page->GetLinkInfo(text_runs);
page_objects.highlights = page->GetHighlightInfo(text_runs);
page_objects.form_fields =
GetAccessibilityFormFieldInfo(page, page_info.text_run_count);
}
} // namespace chrome_pdf