summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
m---------src/3rdparty0
-rw-r--r--src/core/extensions/pdf_iframe_navigation_throttle_qt.cpp14
-rw-r--r--src/core/extensions/plugin_service_filter_qt.cpp27
-rw-r--r--src/core/extensions/plugin_service_filter_qt.h1
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,