diff options
author | Michael BrĂ¼ning <michael.bruning@theqtcompany.com> | 2016-03-01 10:55:34 +0100 |
---|---|---|
committer | Michael BrĂ¼ning <michael.bruning@theqtcompany.com> | 2016-04-05 12:15:27 +0000 |
commit | 29f9a2fb68568208a70ba9efef0e455b50a4d3e3 (patch) | |
tree | 9429b1ee58fc3cd555ca447c9f0956bd6ce9163f | |
parent | a5c0578ba9de0032c80be52106884f81e18ab06b (diff) |
Register qrc as local after blink initialization.
It is needed to let local content access the qrc resources by making them
part of the same security origin. This is stated in the docs as the default
behavior.
This also backports change f7d343000d77c80f34a115fe9c78f101929292b1
from 5.7, which fixed some race condition with the qrc registration.
Task-number: QTBUG-52085
Change-Id: Ia704fa6dbce8529f82695ab543244020cb9f8b8a
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
-rw-r--r-- | src/core/renderer/content_renderer_client_qt.cpp | 18 | ||||
-rw-r--r-- | src/core/renderer/content_renderer_client_qt.h | 5 |
2 files changed, 20 insertions, 3 deletions
diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp index 261b9c581..e53076525 100644 --- a/src/core/renderer/content_renderer_client_qt.cpp +++ b/src/core/renderer/content_renderer_client_qt.cpp @@ -65,6 +65,19 @@ namespace QtWebEngineCore { static const char kHttpErrorDomain[] = "http"; static const char kQrcSchemeQt[] = "qrc"; +class RenderProcessObserverQt : public content::RenderProcessObserver { +public: + void WebKitInitialized() override + { + // Can only be done after blink is initialized. + blink::WebString qrcScheme(base::ASCIIToUTF16(kQrcSchemeQt)); + // mark qrc as a secure scheme (avoids deprecation warnings) + blink::WebSecurityPolicy::registerURLSchemeAsSecure(qrcScheme); + // mark qrc as a local scheme (allows local access to qrc) + blink::WebSecurityPolicy::registerURLSchemeAsLocal(qrcScheme); + } +}; + ContentRendererClientQt::ContentRendererClientQt() { } @@ -79,12 +92,11 @@ void ContentRendererClientQt::RenderThreadStarted() renderThread->RegisterExtension(WebChannelIPCTransport::getV8Extension()); m_visitedLinkSlave.reset(new visitedlink::VisitedLinkSlave); m_webCacheObserver.reset(new web_cache::WebCacheRenderProcessObserver()); + m_renderProcessObserver.reset(new RenderProcessObserverQt()); renderThread->AddObserver(m_visitedLinkSlave.data()); renderThread->AddObserver(m_webCacheObserver.data()); renderThread->AddObserver(UserScriptController::instance()); - - // mark qrc as a secure scheme (avoids deprecation warnings) - blink::WebSecurityPolicy::registerURLSchemeAsSecure(blink::WebString::fromLatin1(kQrcSchemeQt)); + renderThread->AddObserver(m_renderProcessObserver.data()); } void ContentRendererClientQt::RenderViewCreated(content::RenderView* render_view) diff --git a/src/core/renderer/content_renderer_client_qt.h b/src/core/renderer/content_renderer_client_qt.h index eb55156ad..7df824e3e 100644 --- a/src/core/renderer/content_renderer_client_qt.h +++ b/src/core/renderer/content_renderer_client_qt.h @@ -41,6 +41,10 @@ #include <QtGlobal> #include <QScopedPointer> +namespace content { +class RenderProcessObserver; +} + namespace visitedlink { class VisitedLinkSlave; } @@ -69,6 +73,7 @@ public: private: QScopedPointer<visitedlink::VisitedLinkSlave> m_visitedLinkSlave; QScopedPointer<web_cache::WebCacheRenderProcessObserver> m_webCacheObserver; + QScopedPointer<content::RenderProcessObserver> m_renderProcessObserver; }; } // namespace |