summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-12-03 13:08:47 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-12-03 14:41:08 +0100
commit55ba42566069d271af75545bc7175cfe5dc95904 (patch)
treeb4c0b9f31376899f950be8116a3ee5dee5446f62
parente5d1ae64fd61d41cf8f26de81cf75e8050f8ecbb (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.cpp10
-rw-r--r--src/core/content_browser_client_qt.h2
-rw-r--r--src/core/extensions/extension_web_contents_observer_qt.cpp36
-rw-r--r--src/core/extensions/extension_web_contents_observer_qt.h3
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;