summaryrefslogtreecommitdiffstats
path: root/src/core/renderer
diff options
context:
space:
mode:
authorSzabolcs David <davidsz@inf.u-szeged.hu>2023-12-11 17:30:22 +0100
committerSzabolcs David <davidsz@inf.u-szeged.hu>2023-12-20 09:26:51 +0100
commite09cf6e7a1f582d06f86ff2c166b7c2269fd4b47 (patch)
tree8a4baa88a73fd620fb1d3e046ea869dde36daf06 /src/core/renderer
parent65d92f0f93b3f4e9bad05aa7a1bdf40545201c52 (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.cpp30
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();