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:
pdf
ppapi
c
private
cpp
proxy
shared_impl
thunk
@ -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;
|
||||
|
Reference in New Issue
Block a user