0

Initialize PDF SDK with policy in chrome_pdf::CreateFlattenedPdf()

This CL adds a new method `SetUseSkiaRendererPolicy()` to mojom
interface `PdfFlattener` so that the enterprise policy regarding
whether to use Skia as the PDF renderer is set immediately once the
mojom remote is bound to the printing service.

Bug: 1440430
Change-Id: Icb836c7c8ede92fa219b7df881ae3b97f32b0dad
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4539684
Code-Coverage: Findit <findit-for-me@appspot.gserviceaccount.com>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Nigi <nigi@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1146604}
This commit is contained in:
Hui Yingst
2023-05-19 18:23:27 +00:00
committed by Chromium LUCI CQ
parent 9b3b092931
commit c14288d3c1
7 changed files with 31 additions and 2 deletions
chrome
browser
ash
arc
extensions
services
pdf

@ -22,10 +22,13 @@
#include "base/task/thread_pool.h"
#include "base/time/time.h"
#include "chrome/browser/ash/arc/print_spooler/arc_print_spooler_util.h"
#include "chrome/browser/pdf/pdf_pref_names.h"
#include "chrome/browser/printing/print_view_manager_common.h"
#include "chrome/browser/printing/printing_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/services/printing/public/mojom/printing_service.mojom.h"
#include "components/arc/intent_helper/custom_tab.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/web_contents.h"
#include "mojo/public/c/system/types.h"
#include "net/base/filename_util.h"
@ -325,6 +328,13 @@ void PrintSessionImpl::OnPreviewDocumentRead(
pdf_flattener_.set_disconnect_handler(
base::BindOnce(&PrintSessionImpl::OnPdfFlattenerDisconnected,
weak_ptr_factory_.GetWeakPtr()));
const PrefService* prefs =
Profile::FromBrowserContext(web_contents_->GetBrowserContext())
->GetPrefs();
if (prefs->IsManagedPreference(prefs::kPdfUseSkiaRendererEnabled)) {
pdf_flattener_->SetUseSkiaRendererPolicy(
prefs->GetBoolean(prefs::kPdfUseSkiaRendererEnabled));
}
}
bool inserted = callbacks_.emplace(request_id, std::move(callback)).second;

@ -1054,6 +1054,7 @@ static_library("extensions") {
deps += [
# TODO(crbug.com/1340540): Find an appropriate spot for printing_metrics.
"//chrome/browser/chromeos/extensions/printing_metrics",
"//chrome/browser/pdf:pdf_pref_names",
"//chromeos/printing",
"//printing/backend",
]

@ -16,6 +16,7 @@
#include "base/values.h"
#include "chrome/browser/extensions/api/printing/print_job_controller.h"
#include "chrome/browser/extensions/api/printing/printing_api_utils.h"
#include "chrome/browser/pdf/pdf_pref_names.h"
#include "chrome/browser/printing/printing_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/extensions/extensions_dialogs.h"
@ -215,6 +216,14 @@ void PrintJobSubmitter::OnDocumentDataRead(std::unique_ptr<std::string> data,
pdf_flattener_->set_disconnect_handler(
base::BindOnce(&PrintJobSubmitter::OnPdfFlattenerDisconnected,
weak_ptr_factory_.GetWeakPtr()));
const PrefService* prefs =
Profile::FromBrowserContext(browser_context_)->GetPrefs();
if (prefs &&
prefs->IsManagedPreference(prefs::kPdfUseSkiaRendererEnabled)) {
(*pdf_flattener_)
->SetUseSkiaRendererPolicy(
prefs->GetBoolean(prefs::kPdfUseSkiaRendererEnabled));
}
}
(*pdf_flattener_)
->FlattenPdf(std::move(memory.region),

@ -44,4 +44,8 @@ void PdfFlattener::FlattenPdf(base::ReadOnlySharedMemoryRegion src_pdf_region,
std::move(callback).Run(std::move(region_mapping.region));
}
void PdfFlattener::SetUseSkiaRendererPolicy(bool use_skia) {
chrome_pdf::SetUseSkiaRendererPolicy(use_skia);
}
} // namespace printing

@ -22,6 +22,7 @@ class PdfFlattener : public printing::mojom::PdfFlattener {
// printing::mojom::PdfFlattener:
void FlattenPdf(base::ReadOnlySharedMemoryRegion src_pdf_region,
FlattenPdfCallback callback) override;
void SetUseSkiaRendererPolicy(bool use_skia) override;
};
} // namespace printing

@ -15,4 +15,10 @@ interface PdfFlattener {
// `flattened_pdf_region` contains the flattened PDF.
FlattenPdf(mojo_base.mojom.ReadOnlySharedMemoryRegion src_pdf_region)
=> (mojo_base.mojom.ReadOnlySharedMemoryRegion? flattened_pdf_region);
// Sets the status for enterprise policy `kPdfUseSkiaRendererEnabled`. It
// should be called immediately once `mojom::PdfFlattener` remote is
// bound to the printing service and only when the enterprise policy is
// managed.
SetUseSkiaRendererPolicy(bool use_skia);
};

@ -51,8 +51,6 @@ void SetUseSkiaRendererPolicy(bool use_skia) {
}
#if BUILDFLAG(IS_CHROMEOS)
// TODO(crbug.com/1440430): Make sure its callers set
// `g_use_skia_renderer_enabled_by_policy` before calling this function.
std::vector<uint8_t> CreateFlattenedPdf(
base::span<const uint8_t> input_buffer) {
ScopedSdkInitializer scoped_sdk_initializer(/*enable_v8=*/false);