diff options
author | Szabolcs David <davidsz@inf.u-szeged.hu> | 2021-01-21 02:25:43 +0100 |
---|---|---|
committer | Szabolcs David <davidsz@inf.u-szeged.hu> | 2021-01-26 15:37:06 +0100 |
commit | bbf2c566d2804a8ff73c5896e7b2db31c958f1c4 (patch) | |
tree | 0ccfadfc846f18f4c848a32f3a80d0754a5f479d | |
parent | 7a9b2483f6e1476ad373df6733d96f17bbf103a6 (diff) |
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 <allan.jensen@qt.io>
m--------- | src/3rdparty | 0 | ||||
-rw-r--r-- | src/core/content_browser_client_qt.cpp | 45 | ||||
-rw-r--r-- | src/core/extensions/component_extension_resource_manager_qt.cpp | 25 | ||||
-rw-r--r-- | src/core/extensions/component_extension_resource_manager_qt.h | 3 |
4 files changed, 70 insertions, 3 deletions
diff --git a/src/3rdparty b/src/3rdparty -Subproject 3b1e8320c3e93dc41211ccd66cfd26fa7eec18c +Subproject b069c30f6b9563696391be3739cc3859099f7dc 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<extensions::mime_handler::MimeHandlerService> + 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<extensions::mime_handler::BeforeUnloadControl> + 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<content::RenderFrameHost *> *map) @@ -634,6 +663,22 @@ void ContentBrowserClientQt::RegisterBrowserInterfaceBindersForFrame( Q_UNUSED(render_frame_host); map->Add<blink::mojom::InsecureInputService>(base::BindRepeating(&ServiceDriver::BindInsecureInputService)); map->Add<network_hints::mojom::NetworkHintsHandler>(base::BindRepeating(&BindNetworkHintsHandler)); +#if BUILDFLAG(ENABLE_EXTENSIONS) + map->Add<extensions::mime_handler::MimeHandlerService>(base::BindRepeating(&BindMimeHandlerService)); + map->Add<extensions::mime_handler::BeforeUnloadControl>(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, diff --git a/src/core/extensions/component_extension_resource_manager_qt.cpp b/src/core/extensions/component_extension_resource_manager_qt.cpp index 1f58de151..fb6bb5950 100644 --- a/src/core/extensions/component_extension_resource_manager_qt.cpp +++ b/src/core/extensions/component_extension_resource_manager_qt.cpp @@ -44,12 +44,19 @@ #include "component_extension_resource_manager_qt.h" +#include "base/check.h" #include "base/logging.h" #include "base/path_service.h" #include "base/stl_util.h" #include "base/values.h" - #include "chrome/grit/component_extension_resources_map.h" +#include "content/public/browser/browser_thread.h" +#include "extensions/common/constants.h" +#include "pdf/buildflags.h" + +#if BUILDFLAG(ENABLE_PDF) +#include "qtwebengine/browser/pdf/pdf_extension_util.h" +#endif // BUILDFLAG(ENABLE_PDF) namespace extensions { @@ -57,6 +64,16 @@ ComponentExtensionResourceManagerQt::ComponentExtensionResourceManagerQt() { AddComponentResourceEntries(kComponentExtensionResources, kComponentExtensionResourcesSize); + +#if BUILDFLAG(ENABLE_PDF) + base::Value dict(base::Value::Type::DICTIONARY); + pdf_extension_util::AddStrings(pdf_extension_util::PdfViewerContext::kPdfViewer, &dict); + pdf_extension_util::AddAdditionalData(&dict); + + ui::TemplateReplacements pdf_viewer_replacements; + ui::TemplateReplacementsFromDictionaryValue(base::Value::AsDictionaryValue(dict), &pdf_viewer_replacements); + template_replacements_[extension_misc::kPdfExtensionId] = std::move(pdf_viewer_replacements); +#endif } ComponentExtensionResourceManagerQt::~ComponentExtensionResourceManagerQt() {} @@ -85,9 +102,11 @@ bool ComponentExtensionResourceManagerQt::IsComponentExtensionResource(const bas return false; } -const ui::TemplateReplacements *ComponentExtensionResourceManagerQt::GetTemplateReplacementsForExtension(const std::string &) const +const ui::TemplateReplacements *ComponentExtensionResourceManagerQt::GetTemplateReplacementsForExtension(const std::string &extension_id) const { - return nullptr; + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + auto it = template_replacements_.find(extension_id); + return it != template_replacements_.end() ? &it->second : nullptr; } void ComponentExtensionResourceManagerQt::AddComponentResourceEntries(const GritResourceMap *entries, size_t size) diff --git a/src/core/extensions/component_extension_resource_manager_qt.h b/src/core/extensions/component_extension_resource_manager_qt.h index 992e9f87c..6131e91aa 100644 --- a/src/core/extensions/component_extension_resource_manager_qt.h +++ b/src/core/extensions/component_extension_resource_manager_qt.h @@ -73,6 +73,9 @@ private: // IsComponentExtensionResource. std::map<base::FilePath, int> path_to_resource_id_; + // A map from an extension ID to its i18n template replacements. + std::map<std::string, ui::TemplateReplacements> template_replacements_; + DISALLOW_COPY_AND_ASSIGN(ComponentExtensionResourceManagerQt); }; |