diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-02-04 12:01:00 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-02-05 15:52:20 +0100 |
commit | e6a8c12e0a94fa12066cf0a91a337bb63f7cadc3 (patch) | |
tree | c811fa8757b297431093ba0e9ecbf10d05ff6359 /src/core | |
parent | c43c3c3ae46735e3d23e0ed70c31143d2556a579 (diff) |
Match Chrome behavior closer with extensions
Set most of the exceptions chrome does, and register the performance
manager earlier where chrome does.
Needed for future extensions.
Change-Id: I0d16882d87096bedb24abe1341a008d1fdacf6db
Reviewed-by: Szabolcs David <davidsz@inf.u-szeged.hu>
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/content_browser_client_qt.cpp | 38 | ||||
-rw-r--r-- | src/core/content_browser_client_qt.h | 5 | ||||
-rw-r--r-- | src/core/content_client_qt.cpp | 12 | ||||
-rw-r--r-- | src/core/web_contents_view_qt.cpp | 5 |
4 files changed, 54 insertions, 6 deletions
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index f41d612b3..ec2d1156a 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -43,6 +43,7 @@ #include "base/task/post_task.h" #include "chrome/browser/custom_handlers/protocol_handler_registry.h" #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" +#include "chrome/browser/tab_contents/form_interaction_tab_helper.h" #include "components/navigation_interception/intercept_navigation_throttle.h" #include "components/navigation_interception/navigation_params.h" #include "components/network_hints/browser/simple_network_hints_handler_impl.h" @@ -1051,6 +1052,16 @@ bool ContentBrowserClientQt::ShouldTreatURLSchemeAsFirstPartyWhenTopLevel(base:: #endif } +bool ContentBrowserClientQt::DoesSchemeAllowCrossOriginSharedWorker(const std::string &scheme) +{ +#if BUILDFLAG(ENABLE_EXTENSIONS) + // Extensions are allowed to start cross-origin shared workers. + return scheme == extensions::kExtensionScheme; +#else + return false; +#endif +} + void ContentBrowserClientQt::OverrideURLLoaderFactoryParams(content::BrowserContext *browser_context, const url::Origin &origin, bool is_for_isolated_world, @@ -1148,6 +1159,24 @@ void ContentBrowserClientQt::RegisterNonNetworkWorkerMainResourceURLLoaderFactor for (const QByteArray &scheme : profileAdapter->customUrlSchemes()) factories->emplace(scheme.toStdString(), CreateCustomURLLoaderFactory(profileAdapter)); + +#if BUILDFLAG(ENABLE_EXTENSIONS) + factories->emplace( + extensions::kExtensionScheme, + extensions::CreateExtensionWorkerMainResourceURLLoaderFactory(browser_context)); +#endif // BUILDFLAG(ENABLE_EXTENSIONS) +} + +void ContentBrowserClientQt::RegisterNonNetworkServiceWorkerUpdateURLLoaderFactories(content::BrowserContext* browser_context, + NonNetworkURLLoaderFactoryMap* factories) +{ + DCHECK(browser_context); + DCHECK(factories); +#if BUILDFLAG(ENABLE_EXTENSIONS) + factories->emplace( + extensions::kExtensionScheme, + extensions::CreateExtensionServiceWorkerScriptURLLoaderFactory(browser_context)); +#endif // BUILDFLAG(ENABLE_EXTENSIONS) } void ContentBrowserClientQt::RegisterNonNetworkSubresourceURLLoaderFactories(int render_process_id, int render_frame_id, @@ -1301,4 +1330,13 @@ void ContentBrowserClientQt::SiteInstanceDeleting(content::SiteInstance *site_in #endif } +content::WebContentsViewDelegate *ContentBrowserClientQt::GetWebContentsViewDelegate(content::WebContents *web_contents) +{ + FormInteractionTabHelper::CreateForWebContents(web_contents); + if (auto *registry = performance_manager::PerformanceManagerRegistry::GetInstance()) + registry->MaybeCreatePageNodeForWebContents(web_contents); + + return nullptr; +} + } // namespace QtWebEngineCore diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h index ffbfed430..eb1bb5fd0 100644 --- a/src/core/content_browser_client_qt.h +++ b/src/core/content_browser_client_qt.h @@ -177,6 +177,7 @@ public: bool ShouldUseSpareRenderProcessHost(content::BrowserContext *browser_context, const GURL& site_url) override; bool ShouldTreatURLSchemeAsFirstPartyWhenTopLevel(base::StringPiece scheme, bool is_embedded_origin_secure) override; + bool DoesSchemeAllowCrossOriginSharedWorker(const std::string &scheme) override; void OverrideURLLoaderFactoryParams(content::BrowserContext *browser_context, const url::Origin &origin, bool is_for_isolated_world, @@ -250,9 +251,13 @@ public: NonNetworkURLLoaderFactoryMap *factories) override; void RegisterNonNetworkWorkerMainResourceURLLoaderFactories(content::BrowserContext* browser_context, NonNetworkURLLoaderFactoryMap* factories) override; + void RegisterNonNetworkServiceWorkerUpdateURLLoaderFactories(content::BrowserContext* browser_context, + NonNetworkURLLoaderFactoryMap* factories) override; void SiteInstanceGotProcess(content::SiteInstance *site_instance) override; void SiteInstanceDeleting(content::SiteInstance *site_instance) override; + content::WebContentsViewDelegate* GetWebContentsViewDelegate(content::WebContents* web_contents) override; + static std::string getUserAgent(); std::string GetUserAgent() override { return getUserAgent(); } diff --git a/src/core/content_client_qt.cpp b/src/core/content_client_qt.cpp index d74e7eb76..83c367de0 100644 --- a/src/core/content_client_qt.cpp +++ b/src/core/content_client_qt.cpp @@ -48,6 +48,8 @@ #include "base/version.h" #include "content/public/common/cdm_info.h" #include "content/public/common/content_constants.h" +#include "extensions/buildflags/buildflags.h" +#include "extensions/common/constants.h" #include "media/base/media_switches.h" #include "media/base/video_codecs.h" #include "media/media_buildflags.h" @@ -445,7 +447,15 @@ void ContentClientQt::AddContentDecryptionModules(std::vector<content::CdmInfo> void ContentClientQt::AddAdditionalSchemes(Schemes* schemes) { - schemes->standard_schemes.push_back("chrome-extension"); + // Matching ChromeContentClient::AddAdditionalSchemes + schemes->standard_schemes.push_back(extensions::kExtensionScheme); + schemes->secure_schemes.push_back(extensions::kExtensionScheme); + +#if BUILDFLAG(ENABLE_EXTENSIONS) + schemes->service_worker_schemes.push_back(extensions::kExtensionScheme); + schemes->cors_enabled_schemes.push_back(extensions::kExtensionScheme); + schemes->csp_bypassing_schemes.push_back(extensions::kExtensionScheme); +#endif } base::StringPiece ContentClientQt::GetDataResource(int resource_id, ui::ScaleFactor scale_factor) diff --git a/src/core/web_contents_view_qt.cpp b/src/core/web_contents_view_qt.cpp index 1db641205..6c5e76742 100644 --- a/src/core/web_contents_view_qt.cpp +++ b/src/core/web_contents_view_qt.cpp @@ -51,8 +51,6 @@ #include "web_engine_context.h" #include "web_contents_delegate_qt.h" -#include "chrome/browser/tab_contents/form_interaction_tab_helper.h" -#include "components/performance_manager/embedder/performance_manager_registry.h" #include "components/spellcheck/spellcheck_buildflags.h" #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h" @@ -72,9 +70,6 @@ WebContentsViewQt::WebContentsViewQt(content::WebContents *webContents) , m_client(nullptr) , m_factoryClient(nullptr) { - FormInteractionTabHelper::CreateForWebContents(webContents); - if (auto *performance_manager_registry = performance_manager::PerformanceManagerRegistry::GetInstance()) - performance_manager_registry->CreatePageNodeForWebContents(webContents); } void WebContentsViewQt::setFactoryClient(WebContentsAdapterClient* client) |