From bbf2c566d2804a8ff73c5896e7b2db31c958f1c4 Mon Sep 17 00:00:00 2001 From: Szabolcs David Date: Thu, 21 Jan 2021 02:25:43 +0100 Subject: Start supporting chrome.resourcesPrivate API - Register browser interface binders for PDF viewer. Copied back this logic from the guest view implementation (from dev) to enable usage of chrome.resourcesPrivate API in the PDF viewer of 5.15. - Implement template replacements for extensions. Replace i18n placeholders in the PDF viewer HTML to prevent syntax issues and support localization. Task-number: QTBUG-90035 Change-Id: Ief5fc536435e5c183dc987462d89311dfa429970 Reviewed-by: Allan Sandfeld Jensen --- src/core/content_browser_client_qt.cpp | 45 ++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'src/core/content_browser_client_qt.cpp') diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index b6b46af5d..6b4b79787 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -167,9 +167,12 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) #include "content/public/browser/file_url_loader.h" +#include "extensions/browser/api/mime_handler_private/mime_handler_private.h" #include "extensions/browser/extension_message_filter.h" #include "extensions/browser/extension_registry.h" +#include "extensions/browser/extension_registry.h" #include "extensions/browser/guest_view/extensions_guest_view_message_filter.h" +#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" #include "extensions/browser/url_loader_factory_manager.h" #include "extensions/common/constants.h" @@ -627,6 +630,32 @@ static void BindNetworkHintsHandler(content::RenderFrameHost *frame_host, network_hints::SimpleNetworkHintsHandlerImpl::Create(frame_host, std::move(receiver)); } +#if BUILDFLAG(ENABLE_EXTENSIONS) +static void BindMimeHandlerService(content::RenderFrameHost *frame_host, + mojo::PendingReceiver + receiver) { + auto *web_contents = content::WebContents::FromRenderFrameHost(frame_host); + if (!web_contents) + return; + auto *guest_view = extensions::MimeHandlerViewGuest::FromWebContents(web_contents); + if (!guest_view) + return; + extensions::MimeHandlerServiceImpl::Create(guest_view->GetStreamWeakPtr(), std::move(receiver)); +} + +static void BindBeforeUnloadControl(content::RenderFrameHost *frame_host, + mojo::PendingReceiver + receiver) { + auto *web_contents = content::WebContents::FromRenderFrameHost(frame_host); + if (!web_contents) + return; + auto *guest_view = extensions::MimeHandlerViewGuest::FromWebContents(web_contents); + if (!guest_view) + return; + guest_view->FuseBeforeUnloadControl(std::move(receiver)); +} +#endif + void ContentBrowserClientQt::RegisterBrowserInterfaceBindersForFrame( content::RenderFrameHost *render_frame_host, mojo::BinderMapWithContext *map) @@ -634,6 +663,22 @@ void ContentBrowserClientQt::RegisterBrowserInterfaceBindersForFrame( Q_UNUSED(render_frame_host); map->Add(base::BindRepeating(&ServiceDriver::BindInsecureInputService)); map->Add(base::BindRepeating(&BindNetworkHintsHandler)); +#if BUILDFLAG(ENABLE_EXTENSIONS) + map->Add(base::BindRepeating(&BindMimeHandlerService)); + map->Add(base::BindRepeating(&BindBeforeUnloadControl)); + const GURL &site = render_frame_host->GetSiteInstance()->GetSiteURL(); + if (!site.SchemeIs(extensions::kExtensionScheme)) + return; + content::BrowserContext *browser_context = render_frame_host->GetProcess()->GetBrowserContext(); + auto *extension = extensions::ExtensionRegistry::Get(browser_context) + ->enabled_extensions() + .GetByID(site.host()); + if (!extension) + return; + extensions::ExtensionsBrowserClient::Get()->RegisterBrowserInterfaceBindersForFrame(map, + render_frame_host, + extension); +#endif } void ContentBrowserClientQt::ExposeInterfacesToRenderer(service_manager::BinderRegistry *registry, -- cgit v1.2.3