diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-12-03 13:08:47 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-12-03 14:41:08 +0100 |
commit | 55ba42566069d271af75545bc7175cfe5dc95904 (patch) | |
tree | b4c0b9f31376899f950be8116a3ee5dee5446f62 | |
parent | e5d1ae64fd61d41cf8f26de81cf75e8050f8ecbb (diff) |
Fix extensions after IsHandledURL() was implemented
With IsHandledURL() implemented extensions were blocked from loading
resources, becauset their rights were not correctly granted by the
extension webcontents observer, which failed beause we were using
process-per-site instead of site-per-process.
Change-Id: Iee9b97fda39b4307a9cb4f63f11cbdef0bcc2660
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
-rw-r--r-- | src/core/content_browser_client_qt.cpp | 10 | ||||
-rw-r--r-- | src/core/content_browser_client_qt.h | 2 | ||||
-rw-r--r-- | src/core/extensions/extension_web_contents_observer_qt.cpp | 36 | ||||
-rw-r--r-- | src/core/extensions/extension_web_contents_observer_qt.h | 3 |
4 files changed, 12 insertions, 39 deletions
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index 2c9967fec..f39e757fd 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -949,6 +949,16 @@ bool ContentBrowserClientQt::ShouldUseProcessPerSite(content::BrowserContext* br return ContentBrowserClient::ShouldUseProcessPerSite(browser_context, effective_url); } +bool ContentBrowserClientQt::DoesSiteRequireDedicatedProcess(content::BrowserOrResourceContext browser_or_resource_context, + const GURL &effective_site_url) +{ +#if BUILDFLAG(ENABLE_EXTENSIONS) + if (effective_site_url.SchemeIs(extensions::kExtensionScheme)) + return true; +#endif + return ContentBrowserClient::DoesSiteRequireDedicatedProcess(browser_or_resource_context, effective_site_url); +} + std::string ContentBrowserClientQt::getUserAgent() { // Mention the Chromium version we're based on to get passed stupid UA-string-based feature detection (several WebRTC demos need this) diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h index 5d8a1519c..55514afac 100644 --- a/src/core/content_browser_client_qt.h +++ b/src/core/content_browser_client_qt.h @@ -177,6 +177,8 @@ public: #endif bool ShouldIsolateErrorPage(bool in_main_frame) override; bool ShouldUseProcessPerSite(content::BrowserContext* browser_context, const GURL& effective_url) override; + bool DoesSiteRequireDedicatedProcess(content::BrowserOrResourceContext browser_or_resource_contexts, + const GURL &effective_site_url) override; #if defined(Q_OS_LINUX) void GetAdditionalMappedFilesForChildProcess(const base::CommandLine& command_line, int child_process_id, content::PosixFileDescriptorInfo* mappings) override; diff --git a/src/core/extensions/extension_web_contents_observer_qt.cpp b/src/core/extensions/extension_web_contents_observer_qt.cpp index 365f04e46..5b1514bb4 100644 --- a/src/core/extensions/extension_web_contents_observer_qt.cpp +++ b/src/core/extensions/extension_web_contents_observer_qt.cpp @@ -70,42 +70,6 @@ void ExtensionWebContentsObserverQt::CreateForWebContents(content::WebContents * FromWebContents(web_contents)->Initialize(); } -std::string ExtensionWebContentsObserverQt::GetExtensionIdFromFrame(content::RenderFrameHost *render_frame_host) const -{ - const GURL &site = render_frame_host->GetSiteInstance()->GetSiteURL(); - if (!site.SchemeIs(kExtensionScheme)) - return std::string(); - - return site.host(); -} - -const Extension *ExtensionWebContentsObserverQt::GetExtensionFromFrame(content::RenderFrameHost *render_frame_host, bool verify_url) const -{ - std::string extension_id = GetExtensionIdFromFrame(render_frame_host); - if (extension_id.empty()) - return nullptr; - - content::BrowserContext *browser_context = - render_frame_host->GetProcess()->GetBrowserContext(); - const Extension *extension = ExtensionRegistry::Get(browser_context) - ->enabled_extensions() - .GetByID(extension_id); - if (!extension) - return nullptr; - - if (verify_url) { - const url::Origin &origin(render_frame_host->GetLastCommittedOrigin()); - // Without site isolation, this check is needed to eliminate non-extension - // schemes. With site isolation, this is still needed to exclude sandboxed - // extension frames with a unique origin. - const GURL site_url(render_frame_host->GetSiteInstance()->GetSiteURL()); - if (origin.opaque() || site_url != content::SiteInstance::GetSiteForURL(browser_context, origin.GetURL())) - return nullptr; - } - - return extension; -} - void ExtensionWebContentsObserverQt::RenderFrameCreated(content::RenderFrameHost *render_frame_host) { ExtensionWebContentsObserver::RenderFrameCreated(render_frame_host); diff --git a/src/core/extensions/extension_web_contents_observer_qt.h b/src/core/extensions/extension_web_contents_observer_qt.h index a528b3856..658966b31 100644 --- a/src/core/extensions/extension_web_contents_observer_qt.h +++ b/src/core/extensions/extension_web_contents_observer_qt.h @@ -59,9 +59,6 @@ public: static void CreateForWebContents(content::WebContents *web_contents); - std::string GetExtensionIdFromFrame(content::RenderFrameHost *) const; - const Extension *GetExtensionFromFrame(content::RenderFrameHost *, bool) const; - // content::WebContentsObserver overrides. void RenderFrameCreated(content::RenderFrameHost *render_frame_host) override; |