diff options
m--------- | src/3rdparty | 0 | ||||
-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 |
4 files changed, 21 insertions, 21 deletions
diff --git a/src/3rdparty b/src/3rdparty -Subproject 72d76568fe90b072c0199391b5b5b47c3052e79 +Subproject 6559e00a366dac58b3467bd8475cc936baa1e5b 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, |