Initialize PDF SDK with policy in chrome_pdf::RenderPDFPageToDC()
This CL adds a new method `SetUseSkiaRendererPolicy()` to mojom interface `PdfToEmfConverter` so that the enterprise policy regarding whether to use Skia as the PDF renderer is set immediately once the mojom remote is bound. This change also sets the enterprise policy from the last instance of caller of chrome_pdf::GetPDFDocInfo(), therefore remove the TODO comment for chrome_pdf::GetPDFDocInfo(). Bug: 1440430 Change-Id: I2ab78a76447d2566f596fd078e9f655e1006bbe4 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4540682 Reviewed-by: Chris Bookholt <bookholt@chromium.org> Code-Coverage: Findit <findit-for-me@appspot.gserviceaccount.com> Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Nigi <nigi@chromium.org> Cr-Commit-Position: refs/heads/main@{#1146679}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
7d5c5e1ab4
commit
b26aaad4a1
chrome
browser
printing
services
printing
pdf
@ -32,6 +32,7 @@
|
|||||||
#include "mojo/public/cpp/bindings/remote.h"
|
#include "mojo/public/cpp/bindings/remote.h"
|
||||||
#include "printing/emf_win.h"
|
#include "printing/emf_win.h"
|
||||||
#include "printing/pdf_render_settings.h"
|
#include "printing/pdf_render_settings.h"
|
||||||
|
#include "third_party/abseil-cpp/absl/types/optional.h"
|
||||||
|
|
||||||
using content::BrowserThread;
|
using content::BrowserThread;
|
||||||
|
|
||||||
@ -69,6 +70,7 @@ class PdfConverterImpl : public PdfConverter {
|
|||||||
public:
|
public:
|
||||||
PdfConverterImpl(scoped_refptr<base::RefCountedMemory> data,
|
PdfConverterImpl(scoped_refptr<base::RefCountedMemory> data,
|
||||||
const PdfRenderSettings& conversion_settings,
|
const PdfRenderSettings& conversion_settings,
|
||||||
|
const absl::optional<bool>& use_skia,
|
||||||
StartCallback start_callback);
|
StartCallback start_callback);
|
||||||
|
|
||||||
PdfConverterImpl(const PdfConverterImpl&) = delete;
|
PdfConverterImpl(const PdfConverterImpl&) = delete;
|
||||||
@ -135,6 +137,8 @@ class PdfConverterImpl : public PdfConverter {
|
|||||||
|
|
||||||
const PdfRenderSettings settings_;
|
const PdfRenderSettings settings_;
|
||||||
|
|
||||||
|
absl::optional<bool> use_skia_;
|
||||||
|
|
||||||
// Document loaded callback.
|
// Document loaded callback.
|
||||||
PdfConverter::StartCallback start_callback_;
|
PdfConverter::StartCallback start_callback_;
|
||||||
|
|
||||||
@ -197,8 +201,11 @@ bool PostScriptMetaFile::SafePlayback(HDC hdc) const {
|
|||||||
|
|
||||||
PdfConverterImpl::PdfConverterImpl(scoped_refptr<base::RefCountedMemory> data,
|
PdfConverterImpl::PdfConverterImpl(scoped_refptr<base::RefCountedMemory> data,
|
||||||
const PdfRenderSettings& settings,
|
const PdfRenderSettings& settings,
|
||||||
|
const absl::optional<bool>& use_skia,
|
||||||
StartCallback start_callback)
|
StartCallback start_callback)
|
||||||
: settings_(settings), start_callback_(std::move(start_callback)) {
|
: settings_(settings),
|
||||||
|
use_skia_(use_skia),
|
||||||
|
start_callback_(std::move(start_callback)) {
|
||||||
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
||||||
DCHECK(start_callback_);
|
DCHECK(start_callback_);
|
||||||
|
|
||||||
@ -248,6 +255,9 @@ void PdfConverterImpl::OnPageCount(
|
|||||||
pdf_to_emf_converter_.set_disconnect_handler(base::BindOnce(
|
pdf_to_emf_converter_.set_disconnect_handler(base::BindOnce(
|
||||||
&PdfConverterImpl::OnFailed, weak_ptr_factory_.GetWeakPtr(),
|
&PdfConverterImpl::OnFailed, weak_ptr_factory_.GetWeakPtr(),
|
||||||
std::string("Connection to PdfToEmfConverter error.")));
|
std::string("Connection to PdfToEmfConverter error.")));
|
||||||
|
if (use_skia_) {
|
||||||
|
pdf_to_emf_converter_->SetUseSkiaRendererPolicy(*use_skia_);
|
||||||
|
}
|
||||||
std::move(start_callback_).Run(page_count);
|
std::move(start_callback_).Run(page_count);
|
||||||
page_count_ = page_count;
|
page_count_ = page_count;
|
||||||
}
|
}
|
||||||
@ -376,8 +386,9 @@ PdfConverter::~PdfConverter() = default;
|
|||||||
std::unique_ptr<PdfConverter> PdfConverter::StartPdfConverter(
|
std::unique_ptr<PdfConverter> PdfConverter::StartPdfConverter(
|
||||||
scoped_refptr<base::RefCountedMemory> data,
|
scoped_refptr<base::RefCountedMemory> data,
|
||||||
const PdfRenderSettings& conversion_settings,
|
const PdfRenderSettings& conversion_settings,
|
||||||
|
const absl::optional<bool>& use_skia,
|
||||||
StartCallback start_callback) {
|
StartCallback start_callback) {
|
||||||
return std::make_unique<PdfConverterImpl>(data, conversion_settings,
|
return std::make_unique<PdfConverterImpl>(data, conversion_settings, use_skia,
|
||||||
std::move(start_callback));
|
std::move(start_callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include "base/functional/callback_forward.h"
|
#include "base/functional/callback_forward.h"
|
||||||
#include "base/memory/ref_counted_memory.h"
|
#include "base/memory/ref_counted_memory.h"
|
||||||
|
#include "third_party/abseil-cpp/absl/types/optional.h"
|
||||||
|
|
||||||
namespace printing {
|
namespace printing {
|
||||||
|
|
||||||
@ -29,6 +30,7 @@ class PdfConverter {
|
|||||||
static std::unique_ptr<PdfConverter> StartPdfConverter(
|
static std::unique_ptr<PdfConverter> StartPdfConverter(
|
||||||
scoped_refptr<base::RefCountedMemory> data,
|
scoped_refptr<base::RefCountedMemory> data,
|
||||||
const PdfRenderSettings& conversion_settings,
|
const PdfRenderSettings& conversion_settings,
|
||||||
|
const absl::optional<bool>& use_skia,
|
||||||
StartCallback start_callback);
|
StartCallback start_callback);
|
||||||
|
|
||||||
// Requests conversion of the page. `page_index` is 0-base page index for the
|
// Requests conversion of the page. `page_index` is 0-base page index for the
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
#include "printing/emf_win.h"
|
#include "printing/emf_win.h"
|
||||||
#include "printing/metafile.h"
|
#include "printing/metafile.h"
|
||||||
#include "printing/pdf_render_settings.h"
|
#include "printing/pdf_render_settings.h"
|
||||||
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
|
#include "third_party/abseil-cpp/absl/types/optional.h"
|
||||||
|
|
||||||
#ifndef NTDDI_WIN10_VB // Windows 10.0.19041
|
#ifndef NTDDI_WIN10_VB // Windows 10.0.19041
|
||||||
#error "Older Windows SDK unsupported"
|
#error "Older Windows SDK unsupported"
|
||||||
@ -41,6 +43,8 @@ constexpr size_t kHeaderSize = sizeof(ENHMETAHEADER);
|
|||||||
|
|
||||||
constexpr uint32_t kInvalidPageCount = std::numeric_limits<uint32_t>::max();
|
constexpr uint32_t kInvalidPageCount = std::numeric_limits<uint32_t>::max();
|
||||||
|
|
||||||
|
const absl::optional<bool> kUseSkiaOptions[]{absl::nullopt, true, false};
|
||||||
|
|
||||||
void StartCallbackImpl(base::OnceClosure quit_closure,
|
void StartCallbackImpl(base::OnceClosure quit_closure,
|
||||||
uint32_t* page_count_out,
|
uint32_t* page_count_out,
|
||||||
uint32_t page_count_in) {
|
uint32_t page_count_in) {
|
||||||
@ -105,7 +109,9 @@ std::string HashData(const char* data, size_t len) {
|
|||||||
return base::HexEncode(base::SHA1HashSpan(span));
|
return base::HexEncode(base::SHA1HashSpan(span));
|
||||||
}
|
}
|
||||||
|
|
||||||
class PdfToEmfConverterBrowserTest : public InProcessBrowserTest {
|
class PdfToEmfConverterBrowserTest
|
||||||
|
: public InProcessBrowserTest,
|
||||||
|
public ::testing::WithParamInterface<absl::optional<bool>> {
|
||||||
public:
|
public:
|
||||||
PdfToEmfConverterBrowserTest(const PdfToEmfConverterBrowserTest&) = delete;
|
PdfToEmfConverterBrowserTest(const PdfToEmfConverterBrowserTest&) = delete;
|
||||||
PdfToEmfConverterBrowserTest& operator=(const PdfToEmfConverterBrowserTest&) =
|
PdfToEmfConverterBrowserTest& operator=(const PdfToEmfConverterBrowserTest&) =
|
||||||
@ -152,7 +158,7 @@ class PdfToEmfConverterBrowserTest : public InProcessBrowserTest {
|
|||||||
base::RunLoop run_loop;
|
base::RunLoop run_loop;
|
||||||
uint32_t page_count = kInvalidPageCount;
|
uint32_t page_count = kInvalidPageCount;
|
||||||
pdf_converter_ = PdfConverter::StartPdfConverter(
|
pdf_converter_ = PdfConverter::StartPdfConverter(
|
||||||
test_input_, pdf_settings,
|
test_input_, pdf_settings, /*use_skia=*/GetParam(),
|
||||||
base::BindOnce(&StartCallbackImpl, run_loop.QuitClosure(),
|
base::BindOnce(&StartCallbackImpl, run_loop.QuitClosure(),
|
||||||
&page_count));
|
&page_count));
|
||||||
run_loop.Run();
|
run_loop.Run();
|
||||||
@ -236,32 +242,33 @@ class PdfToEmfConverterBrowserTest : public InProcessBrowserTest {
|
|||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, FailureNoTempFile) {
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest, FailureNoTempFile) {
|
||||||
ScopedSimulateFailureCreatingTempFileForTests fail_creating_temp_file;
|
ScopedSimulateFailureCreatingTempFileForTests fail_creating_temp_file;
|
||||||
|
|
||||||
base::RunLoop run_loop;
|
base::RunLoop run_loop;
|
||||||
uint32_t page_count = kInvalidPageCount;
|
uint32_t page_count = kInvalidPageCount;
|
||||||
std::unique_ptr<PdfConverter> pdf_converter = PdfConverter::StartPdfConverter(
|
std::unique_ptr<PdfConverter> pdf_converter = PdfConverter::StartPdfConverter(
|
||||||
base::MakeRefCounted<base::RefCountedStaticMemory>(), PdfRenderSettings(),
|
base::MakeRefCounted<base::RefCountedStaticMemory>(), PdfRenderSettings(),
|
||||||
|
/*use_skia=*/GetParam(),
|
||||||
base::BindOnce(&StartCallbackImpl, run_loop.QuitClosure(), &page_count));
|
base::BindOnce(&StartCallbackImpl, run_loop.QuitClosure(), &page_count));
|
||||||
run_loop.Run();
|
run_loop.Run();
|
||||||
EXPECT_EQ(0u, page_count);
|
EXPECT_EQ(0u, page_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, FailureBadPdf) {
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest, FailureBadPdf) {
|
||||||
scoped_refptr<base::RefCountedStaticMemory> bad_pdf_data =
|
scoped_refptr<base::RefCountedStaticMemory> bad_pdf_data =
|
||||||
base::MakeRefCounted<base::RefCountedStaticMemory>("0123456789", 10);
|
base::MakeRefCounted<base::RefCountedStaticMemory>("0123456789", 10);
|
||||||
|
|
||||||
base::RunLoop run_loop;
|
base::RunLoop run_loop;
|
||||||
uint32_t page_count = kInvalidPageCount;
|
uint32_t page_count = kInvalidPageCount;
|
||||||
std::unique_ptr<PdfConverter> pdf_converter = PdfConverter::StartPdfConverter(
|
std::unique_ptr<PdfConverter> pdf_converter = PdfConverter::StartPdfConverter(
|
||||||
bad_pdf_data, PdfRenderSettings(),
|
bad_pdf_data, PdfRenderSettings(), /*use_skia=*/GetParam(),
|
||||||
base::BindOnce(&StartCallbackImpl, run_loop.QuitClosure(), &page_count));
|
base::BindOnce(&StartCallbackImpl, run_loop.QuitClosure(), &page_count));
|
||||||
run_loop.Run();
|
run_loop.Run();
|
||||||
EXPECT_EQ(0u, page_count);
|
EXPECT_EQ(0u, page_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, EmfBasic) {
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest, EmfBasic) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
/*autorotate=*/false,
|
/*autorotate=*/false,
|
||||||
@ -279,7 +286,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, EmfBasic) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest,
|
||||||
EmfWithReducedRasterizationBasic) {
|
EmfWithReducedRasterizationBasic) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
@ -299,7 +306,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel2Basic) {
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest, PostScriptLevel2Basic) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
/*autorotate=*/false, /*use_color=*/true,
|
/*autorotate=*/false, /*use_color=*/true,
|
||||||
@ -318,7 +325,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel2Basic) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel3Basic) {
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest, PostScriptLevel3Basic) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
/*autorotate=*/false, /*use_color=*/true,
|
/*autorotate=*/false, /*use_color=*/true,
|
||||||
@ -337,7 +344,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel3Basic) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest,
|
||||||
PostScriptLevel3WithType42FontsBasic) {
|
PostScriptLevel3WithType42FontsBasic) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
@ -357,7 +364,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel2Mono) {
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest, PostScriptLevel2Mono) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
/*autorotate=*/false, /*use_color=*/false,
|
/*autorotate=*/false, /*use_color=*/false,
|
||||||
@ -366,7 +373,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel2Mono) {
|
|||||||
"bug_767343_mono.emf");
|
"bug_767343_mono.emf");
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel3Mono) {
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest, PostScriptLevel3Mono) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
/*autorotate=*/false, /*use_color=*/false,
|
/*autorotate=*/false, /*use_color=*/false,
|
||||||
@ -375,7 +382,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel3Mono) {
|
|||||||
"bug_767343_mono.emf");
|
"bug_767343_mono.emf");
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest,
|
||||||
PostScriptLevel2WithZeroSizedText) {
|
PostScriptLevel2WithZeroSizedText) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
@ -385,7 +392,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
|||||||
"bug_767343.emf");
|
"bug_767343.emf");
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest,
|
||||||
PostScriptLevel3WithZeroSizedText) {
|
PostScriptLevel3WithZeroSizedText) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
@ -395,7 +402,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
|||||||
"bug_767343.emf");
|
"bug_767343.emf");
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest,
|
||||||
PostScriptLevel2WithNegativeSizedText) {
|
PostScriptLevel2WithNegativeSizedText) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
@ -405,7 +412,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
|||||||
"bug_806746.emf");
|
"bug_806746.emf");
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest,
|
||||||
PostScriptLevel3WithNegativeSizedText) {
|
PostScriptLevel3WithNegativeSizedText) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
@ -415,7 +422,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
|||||||
"bug_806746.emf");
|
"bug_806746.emf");
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest,
|
||||||
PostScriptLevel2WithLineCapLineJoin) {
|
PostScriptLevel2WithLineCapLineJoin) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
@ -425,7 +432,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
|||||||
"bug_1030689.emf");
|
"bug_1030689.emf");
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest,
|
||||||
PostScriptLevel3WithLineCapLineJoin) {
|
PostScriptLevel3WithLineCapLineJoin) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
@ -435,7 +442,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
|||||||
"bug_1030689.emf");
|
"bug_1030689.emf");
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel2Bezier) {
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest, PostScriptLevel2Bezier) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
/*autorotate=*/false, /*use_color=*/true,
|
/*autorotate=*/false, /*use_color=*/true,
|
||||||
@ -444,7 +451,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel2Bezier) {
|
|||||||
"bezier.emf");
|
"bezier.emf");
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel3Bezier) {
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest, PostScriptLevel3Bezier) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
/*autorotate=*/false, /*use_color=*/true,
|
/*autorotate=*/false, /*use_color=*/true,
|
||||||
@ -453,7 +460,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel3Bezier) {
|
|||||||
"bezier.emf");
|
"bezier.emf");
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel2Image) {
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest, PostScriptLevel2Image) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
/*autorotate=*/false, /*use_color=*/true,
|
/*autorotate=*/false, /*use_color=*/true,
|
||||||
@ -462,7 +469,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel2Image) {
|
|||||||
"embedded_images_ps_level2.emf");
|
"embedded_images_ps_level2.emf");
|
||||||
}
|
}
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel3Image) {
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest, PostScriptLevel3Image) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
/*autorotate=*/false, /*use_color=*/true,
|
/*autorotate=*/false, /*use_color=*/true,
|
||||||
@ -472,7 +479,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel3Image) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Regression test for crbug.com/1399155.
|
// Regression test for crbug.com/1399155.
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest,
|
||||||
PostScriptLevel2FaxCompress) {
|
PostScriptLevel2FaxCompress) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
@ -483,7 +490,7 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Regression test for crbug.com/1399155.
|
// Regression test for crbug.com/1399155.
|
||||||
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
IN_PROC_BROWSER_TEST_P(PdfToEmfConverterBrowserTest,
|
||||||
PostScriptLevel3FaxCompress) {
|
PostScriptLevel3FaxCompress) {
|
||||||
const PdfRenderSettings pdf_settings(
|
const PdfRenderSettings pdf_settings(
|
||||||
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
|
||||||
@ -493,4 +500,8 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
|
|||||||
"bug_1399155.emf");
|
"bug_1399155.emf");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INSTANTIATE_TEST_SUITE_P(All,
|
||||||
|
PdfToEmfConverterBrowserTest,
|
||||||
|
testing::ValuesIn(kUseSkiaOptions));
|
||||||
|
|
||||||
} // namespace printing
|
} // namespace printing
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
#if BUILDFLAG(IS_WIN)
|
#if BUILDFLAG(IS_WIN)
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
|
#include "chrome/browser/pdf/pdf_pref_names.h"
|
||||||
#include "chrome/browser/printing/pdf_to_emf_converter.h"
|
#include "chrome/browser/printing/pdf_to_emf_converter.h"
|
||||||
#include "chrome/browser/profiles/profile.h"
|
#include "chrome/browser/profiles/profile.h"
|
||||||
#include "chrome/common/chrome_features.h"
|
#include "chrome/common/chrome_features.h"
|
||||||
@ -38,6 +39,7 @@
|
|||||||
#include "printing/pdf_render_settings.h"
|
#include "printing/pdf_render_settings.h"
|
||||||
#include "printing/printed_page_win.h"
|
#include "printing/printed_page_win.h"
|
||||||
#include "printing/printing_features.h"
|
#include "printing/printing_features.h"
|
||||||
|
#include "third_party/abseil-cpp/absl/types/optional.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -145,6 +147,10 @@ void PrintJob::Initialize(std::unique_ptr<PrinterQuery> query,
|
|||||||
|
|
||||||
#if BUILDFLAG(IS_WIN)
|
#if BUILDFLAG(IS_WIN)
|
||||||
pdf_page_mapping_ = PageNumber::GetPages(settings->ranges(), page_count);
|
pdf_page_mapping_ = PageNumber::GetPages(settings->ranges(), page_count);
|
||||||
|
PrefService* prefs = GetPrefsForWebContents(GetWebContents(rfh_id_));
|
||||||
|
if (prefs && prefs->IsManagedPreference(prefs::kPdfUseSkiaRendererEnabled)) {
|
||||||
|
use_skia_ = prefs->GetBoolean(prefs::kPdfUseSkiaRendererEnabled);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
auto new_doc = base::MakeRefCounted<PrintedDocument>(std::move(settings),
|
auto new_doc = base::MakeRefCounted<PrintedDocument>(std::move(settings),
|
||||||
@ -312,14 +318,18 @@ const std::string& PrintJob::source_id() const {
|
|||||||
#if BUILDFLAG(IS_WIN)
|
#if BUILDFLAG(IS_WIN)
|
||||||
class PrintJob::PdfConversionState {
|
class PrintJob::PdfConversionState {
|
||||||
public:
|
public:
|
||||||
PdfConversionState(const gfx::Size& page_size, const gfx::Rect& content_area)
|
PdfConversionState(const gfx::Size& page_size,
|
||||||
: page_size_(page_size), content_area_(content_area) {}
|
const gfx::Rect& content_area,
|
||||||
|
const absl::optional<bool>& use_skia)
|
||||||
|
: page_size_(page_size),
|
||||||
|
content_area_(content_area),
|
||||||
|
use_skia_(use_skia) {}
|
||||||
|
|
||||||
void Start(scoped_refptr<base::RefCountedMemory> data,
|
void Start(scoped_refptr<base::RefCountedMemory> data,
|
||||||
const PdfRenderSettings& conversion_settings,
|
const PdfRenderSettings& conversion_settings,
|
||||||
PdfConverter::StartCallback start_callback) {
|
PdfConverter::StartCallback start_callback) {
|
||||||
converter_ = PdfConverter::StartPdfConverter(data, conversion_settings,
|
converter_ = PdfConverter::StartPdfConverter(
|
||||||
std::move(start_callback));
|
data, conversion_settings, use_skia_, std::move(start_callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
void GetMorePages(PdfConverter::GetPageCallback get_page_callback) {
|
void GetMorePages(PdfConverter::GetPageCallback get_page_callback) {
|
||||||
@ -349,6 +359,7 @@ class PrintJob::PdfConversionState {
|
|||||||
int pages_in_progress_ = 0;
|
int pages_in_progress_ = 0;
|
||||||
const gfx::Size page_size_;
|
const gfx::Size page_size_;
|
||||||
const gfx::Rect content_area_;
|
const gfx::Rect content_area_;
|
||||||
|
absl::optional<bool> use_skia_;
|
||||||
std::unique_ptr<PdfConverter> converter_;
|
std::unique_ptr<PdfConverter> converter_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -359,7 +370,7 @@ void PrintJob::StartPdfToEmfConversion(
|
|||||||
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
||||||
DCHECK(!pdf_conversion_state_);
|
DCHECK(!pdf_conversion_state_);
|
||||||
pdf_conversion_state_ =
|
pdf_conversion_state_ =
|
||||||
std::make_unique<PdfConversionState>(page_size, content_area);
|
std::make_unique<PdfConversionState>(page_size, content_area, use_skia_);
|
||||||
|
|
||||||
const PrintSettings& settings = document()->settings();
|
const PrintSettings& settings = document()->settings();
|
||||||
|
|
||||||
@ -427,7 +438,7 @@ void PrintJob::StartPdfToTextConversion(
|
|||||||
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
||||||
DCHECK(!pdf_conversion_state_);
|
DCHECK(!pdf_conversion_state_);
|
||||||
pdf_conversion_state_ =
|
pdf_conversion_state_ =
|
||||||
std::make_unique<PdfConversionState>(gfx::Size(), gfx::Rect());
|
std::make_unique<PdfConversionState>(gfx::Size(), gfx::Rect(), use_skia_);
|
||||||
gfx::Rect page_area = gfx::Rect(0, 0, page_size.width(), page_size.height());
|
gfx::Rect page_area = gfx::Rect(0, 0, page_size.width(), page_size.height());
|
||||||
const PrintSettings& settings = document()->settings();
|
const PrintSettings& settings = document()->settings();
|
||||||
PdfRenderSettings render_settings(
|
PdfRenderSettings render_settings(
|
||||||
@ -446,8 +457,8 @@ void PrintJob::StartPdfToPostScriptConversion(
|
|||||||
bool ps_level2) {
|
bool ps_level2) {
|
||||||
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
||||||
DCHECK(!pdf_conversion_state_);
|
DCHECK(!pdf_conversion_state_);
|
||||||
pdf_conversion_state_ = std::make_unique<PdfConversionState>(
|
pdf_conversion_state_ =
|
||||||
gfx::Size(), gfx::Rect());
|
std::make_unique<PdfConversionState>(gfx::Size(), gfx::Rect(), use_skia_);
|
||||||
const PrintSettings& settings = document()->settings();
|
const PrintSettings& settings = document()->settings();
|
||||||
|
|
||||||
PdfRenderSettings::Mode mode;
|
PdfRenderSettings::Mode mode;
|
||||||
|
@ -22,6 +22,10 @@
|
|||||||
#include "chromeos/crosapi/mojom/local_printer.mojom.h"
|
#include "chromeos/crosapi/mojom/local_printer.mojom.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if BUILDFLAG(IS_WIN)
|
||||||
|
#include "third_party/abseil-cpp/absl/types/optional.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace base {
|
namespace base {
|
||||||
class Location;
|
class Location;
|
||||||
class RefCountedMemory;
|
class RefCountedMemory;
|
||||||
@ -255,6 +259,7 @@ class PrintJob : public base::RefCountedThreadSafe<PrintJob> {
|
|||||||
class PdfConversionState;
|
class PdfConversionState;
|
||||||
std::unique_ptr<PdfConversionState> pdf_conversion_state_;
|
std::unique_ptr<PdfConversionState> pdf_conversion_state_;
|
||||||
std::vector<uint32_t> pdf_page_mapping_;
|
std::vector<uint32_t> pdf_page_mapping_;
|
||||||
|
absl::optional<bool> use_skia_;
|
||||||
#endif // BUILDFLAG(IS_WIN)
|
#endif // BUILDFLAG(IS_WIN)
|
||||||
|
|
||||||
#if BUILDFLAG(IS_CHROMEOS)
|
#if BUILDFLAG(IS_CHROMEOS)
|
||||||
|
@ -152,4 +152,8 @@ void PdfToEmfConverter::ConvertPage(uint32_t page_index,
|
|||||||
std::move(callback).Run(std::move(emf_region), scale_factor);
|
std::move(callback).Run(std::move(emf_region), scale_factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PdfToEmfConverter::SetUseSkiaRendererPolicy(bool use_skia) {
|
||||||
|
chrome_pdf::SetUseSkiaRendererPolicy(use_skia);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace printing
|
} // namespace printing
|
||||||
|
@ -26,6 +26,7 @@ class PdfToEmfConverter : public mojom::PdfToEmfConverter {
|
|||||||
private:
|
private:
|
||||||
// mojom::PdfToEmfConverter implementation.
|
// mojom::PdfToEmfConverter implementation.
|
||||||
void ConvertPage(uint32_t page_index, ConvertPageCallback callback) override;
|
void ConvertPage(uint32_t page_index, ConvertPageCallback callback) override;
|
||||||
|
void SetUseSkiaRendererPolicy(bool use_skia) override;
|
||||||
|
|
||||||
void SetPrintMode();
|
void SetPrintMode();
|
||||||
void LoadPdf(base::ReadOnlySharedMemoryRegion pdf_region);
|
void LoadPdf(base::ReadOnlySharedMemoryRegion pdf_region);
|
||||||
|
@ -16,6 +16,11 @@ interface PdfToEmfConverter {
|
|||||||
ConvertPage(uint32 page_index) =>
|
ConvertPage(uint32 page_index) =>
|
||||||
(mojo_base.mojom.ReadOnlySharedMemoryRegion? emf_region,
|
(mojo_base.mojom.ReadOnlySharedMemoryRegion? emf_region,
|
||||||
float scale_factor);
|
float scale_factor);
|
||||||
|
|
||||||
|
// Sets the status for enterprise policy `kPdfUseSkiaRendererEnabled`. It
|
||||||
|
// should be called immediately once `mojom::NupPageConvert` remote is
|
||||||
|
// created and only when the enterprise policy is managed.
|
||||||
|
SetUseSkiaRendererPolicy(bool use_skia);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Generates a PdfToEmfConverter, for converting a PDF to EMF.
|
// Generates a PdfToEmfConverter, for converting a PDF to EMF.
|
||||||
|
@ -59,8 +59,6 @@ std::vector<uint8_t> CreateFlattenedPdf(
|
|||||||
#endif // BUILDFLAG(IS_CHROMEOS)
|
#endif // BUILDFLAG(IS_CHROMEOS)
|
||||||
|
|
||||||
#if BUILDFLAG(IS_WIN)
|
#if BUILDFLAG(IS_WIN)
|
||||||
// TODO(crbug.com/1440430): Make sure its callers set
|
|
||||||
// `g_use_skia_renderer_enabled_by_policy` before calling this function.
|
|
||||||
bool RenderPDFPageToDC(base::span<const uint8_t> pdf_buffer,
|
bool RenderPDFPageToDC(base::span<const uint8_t> pdf_buffer,
|
||||||
int page_index,
|
int page_index,
|
||||||
HDC dc,
|
HDC dc,
|
||||||
@ -92,8 +90,6 @@ void SetPDFUsePrintMode(int mode) {
|
|||||||
}
|
}
|
||||||
#endif // BUILDFLAG(IS_WIN)
|
#endif // BUILDFLAG(IS_WIN)
|
||||||
|
|
||||||
// TODO(crbug.com/1440430): Make sure its callers set
|
|
||||||
// `g_use_skia_renderer_enabled_by_policy` before calling this function.
|
|
||||||
bool GetPDFDocInfo(base::span<const uint8_t> pdf_buffer,
|
bool GetPDFDocInfo(base::span<const uint8_t> pdf_buffer,
|
||||||
int* page_count,
|
int* page_count,
|
||||||
float* max_page_width) {
|
float* max_page_width) {
|
||||||
|
Reference in New Issue
Block a user