diff options
author | Szabolcs David <davidsz@inf.u-szeged.hu> | 2022-05-18 15:37:53 +0200 |
---|---|---|
committer | Szabolcs David <davidsz@inf.u-szeged.hu> | 2022-05-30 15:48:02 +0200 |
commit | 4bfee3b26d9d698bc41947c7b574a370c92070d6 (patch) | |
tree | 35369917287e2cde869c2c45d326383edb8dc7a6 /src/core | |
parent | 90f43fd25ec4de4d18da40c214ddb366da5c798a (diff) |
Fix PluginServiceFilterQt::IsPluginAvailable()
Query PDF settings from view-level WebEngineSettings instead of profile.
Change-Id: I4ee7c99d6757d5341b1a4d47251228c1c46f99b7
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/extensions/pdf_iframe_navigation_throttle_qt.cpp | 14 | ||||
-rw-r--r-- | src/core/extensions/plugin_service_filter_qt.cpp | 27 | ||||
-rw-r--r-- | src/core/extensions/plugin_service_filter_qt.h | 1 |
3 files changed, 21 insertions, 21 deletions
diff --git a/src/core/extensions/pdf_iframe_navigation_throttle_qt.cpp b/src/core/extensions/pdf_iframe_navigation_throttle_qt.cpp index 5bfd3a316..bfc788d7d 100644 --- a/src/core/extensions/pdf_iframe_navigation_throttle_qt.cpp +++ b/src/core/extensions/pdf_iframe_navigation_throttle_qt.cpp @@ -61,8 +61,7 @@ #include "ui/base/webui/jstemplate_builder.h" #include "ui/base/webui/web_ui_util.h" -#include "web_contents_delegate_qt.h" -#include "web_engine_settings.h" +#include <QtGlobal> namespace extensions { @@ -105,17 +104,12 @@ bool IsPDFPluginEnabled(content::NavigationHandle *navigation_handle, bool *is_s if (web_contents->IsInnerWebContentsForGuest()) web_contents = web_contents->GetOuterWebContents(); - if (auto *delegate = static_cast<QtWebEngineCore::WebContentsDelegateQt *>(web_contents->GetDelegate())) { - const QtWebEngineCore::WebEngineSettings *settings = delegate->webEngineSettings(); - if (!settings->testAttribute(QWebEngineSettings::PdfViewerEnabled) - || !settings->testAttribute(QWebEngineSettings::PluginsEnabled)) - return false; - } - int process_id = web_contents->GetMainFrame()->GetProcess()->GetID(); + int routing_id = web_contents->GetMainFrame()->GetRoutingID(); content::WebPluginInfo plugin_info; + // Will check WebEngineSettings by PluginServiceFilterQt return content::PluginService::GetInstance()->GetPluginInfo( - process_id, navigation_handle->GetURL(), + process_id, routing_id, navigation_handle->GetURL(), kPDFMimeType, false /* allow_wildcard */, is_stale, &plugin_info, nullptr /* actual_mime_type */); diff --git a/src/core/extensions/plugin_service_filter_qt.cpp b/src/core/extensions/plugin_service_filter_qt.cpp index 51349ff68..de839cdb3 100644 --- a/src/core/extensions/plugin_service_filter_qt.cpp +++ b/src/core/extensions/plugin_service_filter_qt.cpp @@ -41,9 +41,7 @@ #include "content/public/browser/render_process_host.h" -#include "profile_adapter.h" -#include "profile_adapter_client.h" -#include "profile_qt.h" +#include "web_contents_delegate_qt.h" #include "web_engine_settings.h" using namespace QtWebEngineCore; @@ -57,18 +55,25 @@ PluginServiceFilterQt *PluginServiceFilterQt::GetInstance() } bool PluginServiceFilterQt::IsPluginAvailable(int render_process_id, + int render_frame_id, const content::WebPluginInfo &plugin) { Q_UNUSED(plugin); - content::RenderProcessHost *rph = content::RenderProcessHost::FromID(render_process_id); - if (!rph) - return false; + content::RenderFrameHost *frame_host = content::RenderFrameHost::FromID(render_process_id, render_frame_id); + content::WebContents *web_contents = content::WebContents::FromRenderFrameHost(frame_host); + if (!web_contents) { + // Availability checked somewhere before/during WebContents initialization. Let it load and enable + // all the plugins at this phase. This information will be queried again when receiving the response + // for the requested content. Postponing our decision and enabling/blocking there makes WebEngineSettings + // modifiable in runtime without reconstructing WebContents. + return true; + } - ProfileQt *profile = static_cast<ProfileQt *>(rph->GetBrowserContext()); - for (auto *client : profile->profileAdapter()->clients()) { - const WebEngineSettings *settings = client->coreSettings(); - if (!settings) - return false; + if (web_contents->IsInnerWebContentsForGuest()) + web_contents = web_contents->GetOuterWebContents(); + + if (auto *delegate = static_cast<WebContentsDelegateQt *>(web_contents->GetDelegate())) { + const WebEngineSettings *settings = delegate->webEngineSettings(); if (!settings->testAttribute(QWebEngineSettings::PdfViewerEnabled) || !settings->testAttribute(QWebEngineSettings::PluginsEnabled)) return false; diff --git a/src/core/extensions/plugin_service_filter_qt.h b/src/core/extensions/plugin_service_filter_qt.h index 3a550f9e7..562f0aaf6 100644 --- a/src/core/extensions/plugin_service_filter_qt.h +++ b/src/core/extensions/plugin_service_filter_qt.h @@ -51,6 +51,7 @@ public: static PluginServiceFilterQt* GetInstance(); bool IsPluginAvailable(int render_process_id, + int render_frame_id, const content::WebPluginInfo &plugin) override; bool CanLoadPlugin(int render_process_id, |