From a4938311cd8bc1c97eaefb65706c67193189de29 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Tue, 10 Sep 2024 00:59:19 +0200 Subject: [PATCH] test: add -pdf-ready-to-print event to WebContents for testing (#43647) --- BUILD.gn | 1 + .../browser/api/electron_api_web_contents.cc | 4 +++ shell/browser/api/electron_api_web_contents.h | 2 ++ .../electron_pdf_document_helper_client.cc | 28 +++++++++++++------ .../electron_pdf_document_helper_client.h | 6 ++-- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 47085deb52d9..1fd6a716ee1a 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -745,6 +745,7 @@ source_set("electron_lib") { "//components/pdf/common:util", "//components/pdf/renderer", "//pdf", + "//pdf:content_restriction", ] sources += [ "shell/browser/electron_pdf_document_helper_client.cc", diff --git a/shell/browser/api/electron_api_web_contents.cc b/shell/browser/api/electron_api_web_contents.cc index d284b4476717..1f17229b9f11 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -3744,6 +3744,10 @@ void WebContents::OnInputEvent(const blink::WebInputEvent& event) { Emit("input-event", event); } +void WebContents::PDFReadyToPrint() { + Emit("-pdf-ready-to-print"); +} + void WebContents::RunJavaScriptDialog(content::WebContents* web_contents, content::RenderFrameHost* rfh, content::JavaScriptDialogType dialog_type, diff --git a/shell/browser/api/electron_api_web_contents.h b/shell/browser/api/electron_api_web_contents.h index 3ec8c6fe58c8..52be8984bd02 100644 --- a/shell/browser/api/electron_api_web_contents.h +++ b/shell/browser/api/electron_api_web_contents.h @@ -478,6 +478,8 @@ class WebContents final : public ExclusiveAccessContext, void SetBackgroundColor(std::optional color); + void PDFReadyToPrint(); + SkRegion* draggable_region() { return force_non_draggable_ ? nullptr : draggable_region_.get(); } diff --git a/shell/browser/electron_pdf_document_helper_client.cc b/shell/browser/electron_pdf_document_helper_client.cc index 6250a32ed63e..6902f4c22f55 100644 --- a/shell/browser/electron_pdf_document_helper_client.cc +++ b/shell/browser/electron_pdf_document_helper_client.cc @@ -5,17 +5,29 @@ #include "shell/browser/electron_pdf_document_helper_client.h" #include "content/public/browser/web_contents.h" +#include "pdf/content_restriction.h" +#include "shell/browser/api/electron_api_web_contents.h" ElectronPDFDocumentHelperClient::ElectronPDFDocumentHelperClient() = default; ElectronPDFDocumentHelperClient::~ElectronPDFDocumentHelperClient() = default; void ElectronPDFDocumentHelperClient::UpdateContentRestrictions( content::RenderFrameHost* render_frame_host, - int content_restrictions) {} -void ElectronPDFDocumentHelperClient::OnPDFHasUnsupportedFeature( - content::WebContents* contents) {} -void ElectronPDFDocumentHelperClient::OnSaveURL( - content::WebContents* contents) {} -void ElectronPDFDocumentHelperClient::SetPluginCanSave( - content::RenderFrameHost* render_frame_host, - bool can_save) {} + int content_restrictions) { + // UpdateContentRestrictions potentially gets called twice from + // pdf/pdf_view_web_plugin.cc. The first time it is potentially called is + // when loading starts and it is called with a restriction on printing. The + // second time it is called is when loading is finished and if printing is + // allowed there won't be a printing restriction passed, so we can use this + // second call to notify that the pdf document is ready to print. + if (!(content_restrictions & chrome_pdf::kContentRestrictionPrint)) { + content::WebContents* web_contents = + content::WebContents::FromRenderFrameHost(render_frame_host); + electron::api::WebContents* api_web_contents = + electron::api::WebContents::From( + web_contents->GetOutermostWebContents()); + if (api_web_contents) { + api_web_contents->PDFReadyToPrint(); + } + } +} diff --git a/shell/browser/electron_pdf_document_helper_client.h b/shell/browser/electron_pdf_document_helper_client.h index bcc24a077487..55929e961a3c 100644 --- a/shell/browser/electron_pdf_document_helper_client.h +++ b/shell/browser/electron_pdf_document_helper_client.h @@ -19,10 +19,10 @@ class ElectronPDFDocumentHelperClient : public pdf::PDFDocumentHelperClient { // pdf::PDFDocumentHelperClient void UpdateContentRestrictions(content::RenderFrameHost* render_frame_host, int content_restrictions) override; - void OnPDFHasUnsupportedFeature(content::WebContents* contents) override; - void OnSaveURL(content::WebContents* contents) override; + void OnPDFHasUnsupportedFeature(content::WebContents* contents) override {} + void OnSaveURL(content::WebContents* contents) override {} void SetPluginCanSave(content::RenderFrameHost* render_frame_host, - bool can_save) override; + bool can_save) override {} }; #endif // ELECTRON_SHELL_BROWSER_ELECTRON_PDF_DOCUMENT_HELPER_CLIENT_H_