0

Change pp::PDF::SetAccessibilityPageInfo() to use C++ structs.

Use C++ structs for the data structures instead of C structs. This way,
the caller can just pass in C++ data as is, and not worry about the C++
to C data conversion. PPAPI will do the conversion internally.

Bug: 981448
Change-Id: Ief9c97e4e50c9f70413da80db5a9131c1fdcc123
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1794247
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Raymes Khoury <raymes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#697125}
This commit is contained in:
Lei Zhang
2019-09-17 07:45:23 +00:00
committed by Commit Bot
parent 5fed4ebea6
commit 366ca01bbf
12 changed files with 104 additions and 58 deletions

@ -5,7 +5,6 @@
#include "pdf/accessibility.h"
#include "pdf/pdf_engine.h"
#include "ppapi/c/private/ppb_pdf.h"
namespace chrome_pdf {
@ -15,8 +14,8 @@ bool GetAccessibilityInfo(
PP_PrivateAccessibilityPageInfo* page_info,
std::vector<PP_PrivateAccessibilityTextRunInfo>* text_runs,
std::vector<PP_PrivateAccessibilityCharInfo>* chars,
std::vector<PP_PrivateAccessibilityLinkInfo>* links,
std::vector<PP_PrivateAccessibilityImageInfo>* images) {
std::vector<pp::PDF::PrivateAccessibilityLinkInfo>* links,
std::vector<pp::PDF::PrivateAccessibilityImageInfo>* images) {
int page_count = engine->GetNumberOfPages();
if (page_index < 0 || page_index >= page_count)
return false;

@ -9,11 +9,7 @@
#include <vector>
struct PP_PrivateAccessibilityCharInfo;
struct PP_PrivateAccessibilityImageInfo;
struct PP_PrivateAccessibilityLinkInfo;
struct PP_PrivateAccessibilityPageInfo;
struct PP_PrivateAccessibilityTextRunInfo;
#include "ppapi/cpp/private/pdf.h"
namespace chrome_pdf {
@ -29,8 +25,8 @@ bool GetAccessibilityInfo(
PP_PrivateAccessibilityPageInfo* page_info,
std::vector<PP_PrivateAccessibilityTextRunInfo>* text_runs,
std::vector<PP_PrivateAccessibilityCharInfo>* chars,
std::vector<PP_PrivateAccessibilityLinkInfo>* links,
std::vector<PP_PrivateAccessibilityImageInfo>* images);
std::vector<pp::PDF::PrivateAccessibilityLinkInfo>* links,
std::vector<pp::PDF::PrivateAccessibilityImageInfo>* images);
} // namespace chrome_pdf

@ -964,16 +964,15 @@ void OutOfProcessInstance::SendNextAccessibilityPage(int32_t page_index) {
PP_PrivateAccessibilityPageInfo page_info;
std::vector<PP_PrivateAccessibilityTextRunInfo> text_runs;
std::vector<PP_PrivateAccessibilityCharInfo> chars;
std::vector<PP_PrivateAccessibilityLinkInfo> links;
std::vector<PP_PrivateAccessibilityImageInfo> images;
std::vector<pp::PDF::PrivateAccessibilityLinkInfo> links;
std::vector<pp::PDF::PrivateAccessibilityImageInfo> images;
if (!GetAccessibilityInfo(engine_.get(), page_index, &page_info, &text_runs,
&chars, &links, &images)) {
return;
}
pp::PDF::SetAccessibilityPageInfo(GetPluginInstance(), &page_info,
text_runs.data(), chars.data(),
links.data(), images.data());
pp::PDF::SetAccessibilityPageInfo(GetPluginInstance(), &page_info, text_runs,
chars, links, images);
// Schedule loading the next page.
pp::CompletionCallback callback = callback_factory_.NewCallback(

@ -8,7 +8,6 @@
#include "pdf/pdfium/pdfium_test_base.h"
#include "pdf/test/test_client.h"
#include "pdf/test/test_utils.h"
#include "ppapi/c/private/ppb_pdf.h"
#include "ppapi/c/private/ppp_pdf.h"
#include "testing/gtest/include/gtest/gtest.h"
@ -73,8 +72,8 @@ TEST_F(AccessibilityTest, GetAccessibilityPage) {
PP_PrivateAccessibilityPageInfo page_info;
std::vector<PP_PrivateAccessibilityTextRunInfo> text_runs;
std::vector<PP_PrivateAccessibilityCharInfo> chars;
std::vector<PP_PrivateAccessibilityLinkInfo> links;
std::vector<PP_PrivateAccessibilityImageInfo> images;
std::vector<pp::PDF::PrivateAccessibilityLinkInfo> links;
std::vector<pp::PDF::PrivateAccessibilityImageInfo> images;
ASSERT_TRUE(GetAccessibilityInfo(engine.get(), 0, &page_info, &text_runs,
&chars, &links, &images));
EXPECT_EQ(0u, page_info.page_index);

@ -81,6 +81,7 @@ struct PP_PrivateAccessibilityCharInfo {
// This holds the link information provided by the PDF and will be used in
// accessibility to provide the link information.
// Needs to stay in sync with C++ version.
struct PP_PrivateAccessibilityLinkInfo {
// URL of the link.
const char* url;
@ -102,6 +103,7 @@ struct PP_PrivateAccessibilityLinkInfo {
// This holds the image information provided by the PDF and will be used in
// accessibility to provide the image information.
// Needs to stay in sync with C++ version.
struct PP_PrivateAccessibilityImageInfo {
// Alternate text for the image provided by PDF.
const char* alt_text;
@ -194,11 +196,11 @@ struct PPB_PDF {
// accessibility support.
void (*SetAccessibilityPageInfo)(
PP_Instance instance,
struct PP_PrivateAccessibilityPageInfo* page_info,
struct PP_PrivateAccessibilityTextRunInfo text_runs[],
struct PP_PrivateAccessibilityCharInfo chars[],
struct PP_PrivateAccessibilityLinkInfo links[],
struct PP_PrivateAccessibilityImageInfo images[]);
const struct PP_PrivateAccessibilityPageInfo* page_info,
const struct PP_PrivateAccessibilityTextRunInfo text_runs[],
const struct PP_PrivateAccessibilityCharInfo chars[],
const struct PP_PrivateAccessibilityLinkInfo links[],
const struct PP_PrivateAccessibilityImageInfo images[]);
// Sends information about the PDF's URL and the embedder's URL.
void (*SetCrashData)(PP_Instance instance,

@ -18,6 +18,26 @@ template <> const char* interface_name<PPB_PDF>() {
return PPB_PDF_INTERFACE;
}
void ConvertPrivateAccessibilityLinkInfo(
const PDF::PrivateAccessibilityLinkInfo& link,
PP_PrivateAccessibilityLinkInfo* info) {
info->url = link.url.c_str();
info->url_length = link.url.size();
info->index_in_page = link.index_in_page;
info->text_run_index = link.text_run_index;
info->text_run_count = link.text_run_count;
info->bounds = link.bounds;
}
void ConvertPrivateAccessibilityImageInfo(
const PDF::PrivateAccessibilityImageInfo& image,
PP_PrivateAccessibilityImageInfo* info) {
info->alt_text = image.alt_text.c_str();
info->alt_text_length = image.alt_text.size();
info->text_run_index = image.text_run_index;
info->bounds = image.bounds;
}
} // namespace
// static
@ -202,14 +222,23 @@ void PDF::SetAccessibilityDocInfo(const InstanceHandle& instance,
// static
void PDF::SetAccessibilityPageInfo(
const InstanceHandle& instance,
PP_PrivateAccessibilityPageInfo* page_info,
PP_PrivateAccessibilityTextRunInfo text_runs[],
PP_PrivateAccessibilityCharInfo chars[],
PP_PrivateAccessibilityLinkInfo links[],
PP_PrivateAccessibilityImageInfo images[]) {
const PP_PrivateAccessibilityPageInfo* page_info,
const std::vector<PP_PrivateAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<PrivateAccessibilityLinkInfo>& links,
const std::vector<PrivateAccessibilityImageInfo>& images) {
if (has_interface<PPB_PDF>()) {
std::vector<PP_PrivateAccessibilityLinkInfo> link_info(links.size());
for (size_t i = 0; i < links.size(); ++i)
ConvertPrivateAccessibilityLinkInfo(links[i], &link_info[i]);
std::vector<PP_PrivateAccessibilityImageInfo> image_info(images.size());
for (size_t i = 0; i < images.size(); ++i)
ConvertPrivateAccessibilityImageInfo(images[i], &image_info[i]);
get_interface<PPB_PDF>()->SetAccessibilityPageInfo(
instance.pp_instance(), page_info, text_runs, chars, links, images);
instance.pp_instance(), page_info, text_runs.data(), chars.data(),
link_info.data(), image_info.data());
}
}

@ -8,8 +8,10 @@
#include <stdint.h>
#include <string>
#include <vector>
#include "ppapi/c/private/ppb_pdf.h"
#include "ppapi/cpp/rect.h"
struct PP_BrowserFont_Trusted_Description;
@ -20,6 +22,24 @@ class Var;
class PDF {
public:
// C++ version of PP_PrivateAccessibilityLinkInfo.
// Needs to stay in sync with the C version.
struct PrivateAccessibilityLinkInfo {
std::string url;
uint32_t index_in_page;
uint32_t text_run_index;
uint32_t text_run_count;
FloatRect bounds;
};
// C++ version of PP_PrivateAccessibilityImageInfo.
// Needs to stay in sync with the C version.
struct PrivateAccessibilityImageInfo {
std::string alt_text;
uint32_t text_run_index;
FloatRect bounds;
};
// Returns true if the required interface is available.
static bool IsAvailable();
@ -72,11 +92,11 @@ class PDF {
PP_PrivateAccessibilityDocInfo* doc_info);
static void SetAccessibilityPageInfo(
const InstanceHandle& instance,
PP_PrivateAccessibilityPageInfo* page_info,
PP_PrivateAccessibilityTextRunInfo text_runs[],
PP_PrivateAccessibilityCharInfo chars[],
PP_PrivateAccessibilityLinkInfo links[],
PP_PrivateAccessibilityImageInfo images[]);
const PP_PrivateAccessibilityPageInfo* page_info,
const std::vector<PP_PrivateAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<PrivateAccessibilityLinkInfo>& links,
const std::vector<PrivateAccessibilityImageInfo>& images);
static void SetCrashData(const InstanceHandle& instance,
const char* pdf_url,
const char* top_level_url);

@ -211,11 +211,11 @@ void PDFResource::SetAccessibilityViewportInfo(
}
void PDFResource::SetAccessibilityPageInfo(
PP_PrivateAccessibilityPageInfo* page_info,
PP_PrivateAccessibilityTextRunInfo text_runs[],
PP_PrivateAccessibilityCharInfo chars[],
PP_PrivateAccessibilityLinkInfo links[],
PP_PrivateAccessibilityImageInfo images[]) {
const PP_PrivateAccessibilityPageInfo* page_info,
const PP_PrivateAccessibilityTextRunInfo text_runs[],
const PP_PrivateAccessibilityCharInfo chars[],
const PP_PrivateAccessibilityLinkInfo links[],
const PP_PrivateAccessibilityImageInfo images[]) {
std::vector<PP_PrivateAccessibilityTextRunInfo> text_run_vector(
text_runs, text_runs + page_info->text_run_count);
std::vector<PP_PrivateAccessibilityCharInfo> char_vector(

@ -61,11 +61,11 @@ class PPAPI_PROXY_EXPORT PDFResource
void SetAccessibilityDocInfo(
PP_PrivateAccessibilityDocInfo* doc_info) override;
void SetAccessibilityPageInfo(
PP_PrivateAccessibilityPageInfo* page_info,
PP_PrivateAccessibilityTextRunInfo text_runs[],
PP_PrivateAccessibilityCharInfo chars[],
PP_PrivateAccessibilityLinkInfo links[],
PP_PrivateAccessibilityImageInfo images[]) override;
const PP_PrivateAccessibilityPageInfo* page_info,
const PP_PrivateAccessibilityTextRunInfo text_runs[],
const PP_PrivateAccessibilityCharInfo chars[],
const PP_PrivateAccessibilityLinkInfo links[],
const PP_PrivateAccessibilityImageInfo images[]) override;
void SetCrashData(const char* pdf_url, const char* top_level_url) override;
void SelectionChanged(const PP_FloatPoint& left,
int32_t left_height,

@ -13,6 +13,7 @@
namespace ppapi {
// Needs to stay in sync with PP_PrivateAccessibilityLinkInfo.
struct PPAPI_SHARED_EXPORT PdfAccessibilityLinkInfo {
PdfAccessibilityLinkInfo();
PdfAccessibilityLinkInfo(const PdfAccessibilityLinkInfo& other);
@ -26,6 +27,7 @@ struct PPAPI_SHARED_EXPORT PdfAccessibilityLinkInfo {
PP_FloatRect bounds;
};
// Needs to stay in sync with PP_PrivateAccessibilityImageInfo.
struct PPAPI_SHARED_EXPORT PdfAccessibilityImageInfo {
PdfAccessibilityImageInfo();
PdfAccessibilityImageInfo(const PdfAccessibilityImageInfo& other);

@ -41,11 +41,11 @@ class PPB_PDF_API {
virtual void SetAccessibilityDocInfo(
PP_PrivateAccessibilityDocInfo* doc_info) = 0;
virtual void SetAccessibilityPageInfo(
PP_PrivateAccessibilityPageInfo* page_info,
PP_PrivateAccessibilityTextRunInfo text_runs[],
PP_PrivateAccessibilityCharInfo chars[],
PP_PrivateAccessibilityLinkInfo links[],
PP_PrivateAccessibilityImageInfo images[]) = 0;
const PP_PrivateAccessibilityPageInfo* page_info,
const PP_PrivateAccessibilityTextRunInfo text_runs[],
const PP_PrivateAccessibilityCharInfo chars[],
const PP_PrivateAccessibilityLinkInfo links[],
const PP_PrivateAccessibilityImageInfo images[]) = 0;
virtual void SetCrashData(const char* pdf_url, const char* top_level_url) = 0;
virtual void SelectionChanged(const PP_FloatPoint& left,
int32_t left_height,

@ -162,21 +162,21 @@ void SetAccessibilityViewportInfo(
enter.functions()->SetAccessibilityViewportInfo(viewport_info);
}
void SetAccessibilityDocInfo(
PP_Instance instance,
PP_PrivateAccessibilityDocInfo* doc_info) {
void SetAccessibilityDocInfo(PP_Instance instance,
PP_PrivateAccessibilityDocInfo* doc_info) {
EnterInstanceAPI<PPB_PDF_API> enter(instance);
if (enter.failed())
return;
enter.functions()->SetAccessibilityDocInfo(doc_info);
}
void SetAccessibilityPageInfo(PP_Instance instance,
PP_PrivateAccessibilityPageInfo* page_info,
PP_PrivateAccessibilityTextRunInfo text_runs[],
PP_PrivateAccessibilityCharInfo chars[],
PP_PrivateAccessibilityLinkInfo links[],
PP_PrivateAccessibilityImageInfo images[]) {
void SetAccessibilityPageInfo(
PP_Instance instance,
const PP_PrivateAccessibilityPageInfo* page_info,
const PP_PrivateAccessibilityTextRunInfo text_runs[],
const PP_PrivateAccessibilityCharInfo chars[],
const PP_PrivateAccessibilityLinkInfo links[],
const PP_PrivateAccessibilityImageInfo images[]) {
EnterInstanceAPI<PPB_PDF_API> enter(instance);
if (enter.failed())
return;