diff options
author | Szabolcs David <davidsz@inf.u-szeged.hu> | 2023-12-11 17:30:22 +0100 |
---|---|---|
committer | Szabolcs David <davidsz@inf.u-szeged.hu> | 2023-12-20 09:26:51 +0100 |
commit | e09cf6e7a1f582d06f86ff2c166b7c2269fd4b47 (patch) | |
tree | 8a4baa88a73fd620fb1d3e046ea869dde36daf06 /src/core/renderer | |
parent | 65d92f0f93b3f4e9bad05aa7a1bdf40545201c52 (diff) |
Fix printing from PDF plugin
Update the plugin finder logic everywhere to match with Chrome. This
comes with a small cleanup: collect PDF-related helper functions
scattered around WebEngine in one pdf_util_qt implementation.
Add auto test to catch this recurring issue earlier.
Pick-to: 6.5 6.6 6.7
Task-number: QTBUG-119878
Change-Id: I03b2bd62bebf5b38afc572e0629db106d024e89d
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'src/core/renderer')
-rw-r--r-- | src/core/renderer/print_web_view_helper_delegate_qt.cpp | 30 |
1 files changed, 6 insertions, 24 deletions
diff --git a/src/core/renderer/print_web_view_helper_delegate_qt.cpp b/src/core/renderer/print_web_view_helper_delegate_qt.cpp index f77b6fbbc..f01568e65 100644 --- a/src/core/renderer/print_web_view_helper_delegate_qt.cpp +++ b/src/core/renderer/print_web_view_helper_delegate_qt.cpp @@ -15,8 +15,10 @@ #include "chrome/common/webui_url_constants.h" #include "extensions/common/constants.h" #include "third_party/blink/public/web/web_document.h" +#include "extensions/renderer/guest_view/mime_handler_view/post_message_support.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) +#include "pdf_util_qt.h" #include "print_web_view_helper_delegate_qt.h" #include "web_engine_library_info.h" @@ -24,33 +26,13 @@ namespace QtWebEngineCore { PrintWebViewHelperDelegateQt::~PrintWebViewHelperDelegateQt() {} -bool IsPdfExtensionOrigin(const url::Origin& origin) -{ -#if BUILDFLAG(ENABLE_EXTENSIONS) - return origin.scheme() == extensions::kExtensionScheme - && origin.host() == extension_misc::kPdfExtensionId; -#else - Q_UNUSED(origin); - return false; -#endif -} - blink::WebElement PrintWebViewHelperDelegateQt::GetPdfElement(blink::WebLocalFrame *frame) { #if BUILDFLAG(ENABLE_EXTENSIONS) - const url::Origin origin = frame->GetDocument().GetSecurityOrigin(); - bool inside_print_preview = origin == url::Origin::Create(GURL(chrome::kChromeUIPrintURL)); - bool inside_pdf_extension = IsPdfExtensionOrigin(origin); - if (inside_print_preview || inside_pdf_extension) { - // <object> with id="plugin" is created in - // chrome/browser/resources/pdf/pdf_viewer_base.js. - auto viewer_element = frame->GetDocument().GetElementById("viewer"); - if (!viewer_element.IsNull() && !viewer_element.ShadowRoot().IsNull()) { - auto plugin_element = viewer_element.ShadowRoot().QuerySelector("#plugin"); - if (!plugin_element.IsNull()) - return plugin_element; - } - NOTREACHED(); + if (frame->Parent() && IsPdfInternalPluginAllowedOrigin(frame->Parent()->GetSecurityOrigin())) { + auto plugin_element = frame->GetDocument().QuerySelector("embed"); + DCHECK(!plugin_element.IsNull()); + return plugin_element; } #endif // BUILDFLAG(ENABLE_EXTENSIONS) return blink::WebElement(); |