summaryrefslogtreecommitdiffstats
path: root/src/core/renderer
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-10-28 14:40:59 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-10-28 14:40:59 +0100
commitde428e1a79708967f97aa8ffcbb2403d3b7d1e7f (patch)
tree91a18b790249ebc9db57f909dbe6f56c681023ef /src/core/renderer
parenta9fd0fbd8db36bd809c85d45d508b58107614653 (diff)
parent0de715dec80620482f051f7f29cf6844c0bbf008 (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Diffstat (limited to 'src/core/renderer')
-rw-r--r--src/core/renderer/content_renderer_client_qt.cpp18
-rw-r--r--src/core/renderer/extensions/extensions_renderer_client_qt.cpp24
-rw-r--r--src/core/renderer/extensions/extensions_renderer_client_qt.h2
-rw-r--r--src/core/renderer/render_frame_observer_qt.cpp12
-rw-r--r--src/core/renderer/render_frame_observer_qt.h9
-rw-r--r--src/core/renderer/render_view_observer_qt.cpp11
-rw-r--r--src/core/renderer/render_view_observer_qt.h10
-rw-r--r--src/core/renderer/user_resource_controller.cpp2
-rw-r--r--src/core/renderer/web_channel_ipc_transport.cpp43
9 files changed, 83 insertions, 48 deletions
diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp
index 092e6845d..b9b199087 100644
--- a/src/core/renderer/content_renderer_client_qt.cpp
+++ b/src/core/renderer/content_renderer_client_qt.cpp
@@ -153,14 +153,18 @@ void ContentRendererClientQt::RenderThreadStarted()
// Allow XMLHttpRequests from qrc to file.
blink::WebURL qrc(blink::KURL("qrc:"));
blink::WebString file(blink::WebString::FromASCII("file"));
- blink::WebSecurityPolicy::AddOriginAccessAllowListEntry(qrc, file, blink::WebString(), true,
+ blink::WebSecurityPolicy::AddOriginAccessAllowListEntry(qrc, file, blink::WebString(), 0,
+ network::mojom::CorsDomainMatchMode::kAllowSubdomains,
+ network::mojom::CorsPortMatchMode::kAllowAnyPort,
network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority);
#if BUILDFLAG(ENABLE_EXTENSIONS)
// Allow the pdf viewer extension to access chrome resources
blink::WebURL pdfViewerExtension(blink::KURL("chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai"));
blink::WebString chromeResources(blink::WebString::FromASCII("chrome"));
- blink::WebSecurityPolicy::AddOriginAccessAllowListEntry(pdfViewerExtension, chromeResources, blink::WebString(), true,
+ blink::WebSecurityPolicy::AddOriginAccessAllowListEntry(pdfViewerExtension, chromeResources, blink::WebString(), 0,
+ network::mojom::CorsDomainMatchMode::kAllowSubdomains,
+ network::mojom::CorsPortMatchMode::kAllowAnyPort,
network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority);
ExtensionsRendererClientQt::GetInstance()->RenderThreadStarted();
@@ -170,13 +174,14 @@ void ContentRendererClientQt::RenderThreadStarted()
void ContentRendererClientQt::RenderViewCreated(content::RenderView* render_view)
{
// RenderViewObservers destroy themselves with their RenderView.
- new RenderViewObserverQt(render_view, m_webCacheImpl.data());
+ new RenderViewObserverQt(render_view);
UserResourceController::instance()->renderViewCreated(render_view);
}
void ContentRendererClientQt::RenderFrameCreated(content::RenderFrame* render_frame)
{
- QtWebEngineCore::RenderFrameObserverQt *render_frame_observer = new QtWebEngineCore::RenderFrameObserverQt(render_frame);
+ QtWebEngineCore::RenderFrameObserverQt *render_frame_observer =
+ new QtWebEngineCore::RenderFrameObserverQt(render_frame, m_webCacheImpl.data());
#if QT_CONFIG(webengine_webchannel)
if (render_frame->IsMainFrame())
new WebChannelIPCTransport(render_frame);
@@ -293,7 +298,8 @@ void ContentRendererClientQt::GetNavigationErrorStringsInternal(content::RenderF
resourceId = IDR_NET_ERROR_HTML;
- const base::StringPiece template_html(ui::ResourceBundle::GetSharedInstance().GetRawDataResource(resourceId));
+ std::string extracted_string = ui::ResourceBundle::GetSharedInstance().DecompressDataResource(resourceId);
+ const base::StringPiece template_html(extracted_string.data(), extracted_string.size());
if (template_html.empty())
NOTREACHED() << "unable to load template. ID: " << resourceId;
else // "t" is the id of the templates root node.
@@ -518,7 +524,7 @@ static void AddWidevine(std::vector<std::unique_ptr<media::KeySystemProperties>>
}
// Session types.
- bool cdm_supports_temporary_session = base::ContainsValue(capability->session_types, media::CdmSessionType::kTemporary);
+ bool cdm_supports_temporary_session = base::Contains(capability->session_types, media::CdmSessionType::kTemporary);
if (!cdm_supports_temporary_session) {
DVLOG(1) << "Temporary session must be supported.";
return;
diff --git a/src/core/renderer/extensions/extensions_renderer_client_qt.cpp b/src/core/renderer/extensions/extensions_renderer_client_qt.cpp
index c25494590..7d4c9a83c 100644
--- a/src/core/renderer/extensions/extensions_renderer_client_qt.cpp
+++ b/src/core/renderer/extensions/extensions_renderer_client_qt.cpp
@@ -56,6 +56,8 @@
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_thread.h"
#include "extensions/common/constants.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/manifest_handlers/background_info.h"
#include "extensions/common/switches.h"
#include "extensions/renderer/dispatcher.h"
#include "extensions/renderer/extension_frame_helper.h"
@@ -120,6 +122,28 @@ void ExtensionsRendererClientQt::OnExtensionUnloaded(const extensions::Extension
resource_request_policy_->OnExtensionUnloaded(extension_id);
}
+bool ExtensionsRendererClientQt::ExtensionAPIEnabledForServiceWorkerScript(const GURL &scope, const GURL &script_url) const
+{
+ if (!script_url.SchemeIs(extensions::kExtensionScheme))
+ return false;
+
+ if (!extensions::ExtensionsClient::Get()->ExtensionAPIEnabledInExtensionServiceWorkers())
+ return false;
+
+ const extensions::Extension* extension =
+ extensions::RendererExtensionRegistry::Get()->GetExtensionOrAppByURL(script_url);
+
+ if (!extension || !extensions::BackgroundInfo::IsServiceWorkerBased(extension))
+ return false;
+
+ if (scope != extension->url())
+ return false;
+
+ const std::string& sw_script = extensions::BackgroundInfo::GetBackgroundServiceWorkerScript(extension);
+
+ return extension->GetResourceURL(sw_script) == script_url;
+}
+
void ExtensionsRendererClientQt::RenderThreadStarted()
{
content::RenderThread *thread = content::RenderThread::Get();
diff --git a/src/core/renderer/extensions/extensions_renderer_client_qt.h b/src/core/renderer/extensions/extensions_renderer_client_qt.h
index 2d45d255a..87e324213 100644
--- a/src/core/renderer/extensions/extensions_renderer_client_qt.h
+++ b/src/core/renderer/extensions/extensions_renderer_client_qt.h
@@ -113,6 +113,8 @@ public:
const std::string &mime_type,
const GURL &original_url);
+ bool ExtensionAPIEnabledForServiceWorkerScript(const GURL &scope, const GURL &script_url) const override;
+
void RunScriptsAtDocumentStart(content::RenderFrame *render_frame);
void RunScriptsAtDocumentEnd(content::RenderFrame *render_frame);
void RunScriptsAtDocumentIdle(content::RenderFrame *render_frame);
diff --git a/src/core/renderer/render_frame_observer_qt.cpp b/src/core/renderer/render_frame_observer_qt.cpp
index 5a630357c..c48ef3b5c 100644
--- a/src/core/renderer/render_frame_observer_qt.cpp
+++ b/src/core/renderer/render_frame_observer_qt.cpp
@@ -46,6 +46,8 @@
#include "base/memory/ptr_util.h"
#include "chrome/renderer/pepper/pepper_shared_memory_message_filter.h"
+#include "components/web_cache/renderer/web_cache_impl.h"
+#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/renderer_ppapi_host.h"
#include "ppapi/host/ppapi_host.h"
@@ -53,10 +55,12 @@
namespace QtWebEngineCore {
-RenderFrameObserverQt::RenderFrameObserverQt(content::RenderFrame* render_frame)
+RenderFrameObserverQt::RenderFrameObserverQt(content::RenderFrame* render_frame,
+ web_cache::WebCacheImpl* web_cache_impl)
: RenderFrameObserver(render_frame)
, RenderFrameObserverTracker<RenderFrameObserverQt>(render_frame)
, m_isFrameDetached(false)
+ , m_web_cache_impl(web_cache_impl)
{
}
@@ -88,4 +92,10 @@ bool RenderFrameObserverQt::isFrameDetached() const
return m_isFrameDetached;
}
+void RenderFrameObserverQt::ReadyToCommitNavigation(blink::WebDocumentLoader *)
+{
+ if (render_frame()->IsMainFrame() && m_web_cache_impl)
+ m_web_cache_impl->ExecutePendingClearCache();
+}
+
} // namespace QtWebEngineCore
diff --git a/src/core/renderer/render_frame_observer_qt.h b/src/core/renderer/render_frame_observer_qt.h
index 4c05422bb..3c54761f3 100644
--- a/src/core/renderer/render_frame_observer_qt.h
+++ b/src/core/renderer/render_frame_observer_qt.h
@@ -50,6 +50,9 @@
namespace content {
class RenderFrame;
}
+namespace web_cache {
+class WebCacheImpl;
+}
namespace QtWebEngineCore {
@@ -58,7 +61,8 @@ class RenderFrameObserverQt
, public content::RenderFrameObserverTracker<RenderFrameObserverQt>
{
public:
- explicit RenderFrameObserverQt(content::RenderFrame* render_frame);
+ explicit RenderFrameObserverQt(content::RenderFrame* render_frame,
+ web_cache::WebCacheImpl* web_cache_impl);
~RenderFrameObserverQt();
#if QT_CONFIG(webengine_pepper_plugins)
@@ -74,8 +78,11 @@ public:
private:
DISALLOW_COPY_AND_ASSIGN(RenderFrameObserverQt);
+ void ReadyToCommitNavigation(blink::WebDocumentLoader *);
+
bool m_isFrameDetached;
service_manager::BinderRegistry registry_;
+ web_cache::WebCacheImpl *m_web_cache_impl;
};
} // namespace QtWebEngineCore
diff --git a/src/core/renderer/render_view_observer_qt.cpp b/src/core/renderer/render_view_observer_qt.cpp
index 2795de4b9..7e7c7bdf8 100644
--- a/src/core/renderer/render_view_observer_qt.cpp
+++ b/src/core/renderer/render_view_observer_qt.cpp
@@ -41,7 +41,6 @@
#include "common/qt_messages.h"
-#include "components/web_cache/renderer/web_cache_impl.h"
#include "content/public/renderer/render_view.h"
#include "third_party/blink/public/web/web_document.h"
#include "third_party/blink/public/web/web_element.h"
@@ -52,10 +51,8 @@
#include "third_party/blink/public/web/web_view.h"
RenderViewObserverQt::RenderViewObserverQt(
- content::RenderView* render_view,
- web_cache::WebCacheImpl* web_cache_impl)
+ content::RenderView* render_view)
: content::RenderViewObserver(render_view)
- , m_web_cache_impl(web_cache_impl)
{
}
@@ -99,9 +96,3 @@ bool RenderViewObserverQt::OnMessageReceived(const IPC::Message& message)
IPC_END_MESSAGE_MAP()
return handled;
}
-
-void RenderViewObserverQt::Navigate(const GURL &)
-{
- if (m_web_cache_impl)
- m_web_cache_impl->ExecutePendingClearCache();
-}
diff --git a/src/core/renderer/render_view_observer_qt.h b/src/core/renderer/render_view_observer_qt.h
index abb472f02..a878eebe8 100644
--- a/src/core/renderer/render_view_observer_qt.h
+++ b/src/core/renderer/render_view_observer_qt.h
@@ -43,14 +43,9 @@
#include <QtGlobal>
-namespace web_cache {
-class WebCacheImpl;
-}
-
class RenderViewObserverQt : public content::RenderViewObserver {
public:
- RenderViewObserverQt(content::RenderView* render_view,
- web_cache::WebCacheImpl* web_cache_impl);
+ RenderViewObserverQt(content::RenderView* render_view);
private:
void onFetchDocumentMarkup(quint64 requestId);
@@ -60,9 +55,6 @@ private:
void OnDestruct() override;
bool OnMessageReceived(const IPC::Message& message) override;
- void Navigate(const GURL& url) override;
-
- web_cache::WebCacheImpl* m_web_cache_impl;
DISALLOW_COPY_AND_ASSIGN(RenderViewObserverQt);
};
diff --git a/src/core/renderer/user_resource_controller.cpp b/src/core/renderer/user_resource_controller.cpp
index 701614341..781c10840 100644
--- a/src/core/renderer/user_resource_controller.cpp
+++ b/src/core/renderer/user_resource_controller.cpp
@@ -71,7 +71,7 @@ static const int afterLoadTimeout = 500;
static int validUserScriptSchemes()
{
- return URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS | URLPattern::SCHEME_FILE;
+ return URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS | URLPattern::SCHEME_FILE | URLPattern::SCHEME_QRC;
}
static bool regexMatchesURL(const std::string &pat, const GURL &url) {
diff --git a/src/core/renderer/web_channel_ipc_transport.cpp b/src/core/renderer/web_channel_ipc_transport.cpp
index 745fe8b1e..108686068 100644
--- a/src/core/renderer/web_channel_ipc_transport.cpp
+++ b/src/core/renderer/web_channel_ipc_transport.cpp
@@ -92,15 +92,18 @@ void WebChannelTransport::Install(blink::WebLocalFrame *frame, uint worldId)
gin::Handle<WebChannelTransport> transport = gin::CreateHandle(isolate, new WebChannelTransport);
v8::Local<v8::Object> global = context->Global();
- v8::Local<v8::Value> qtObjectValue = global->Get(gin::StringToV8(isolate, "qt"));
+ v8::MaybeLocal<v8::Value> qtObjectValue = global->Get(context, gin::StringToV8(isolate, "qt"));
v8::Local<v8::Object> qtObject;
- if (qtObjectValue.IsEmpty() || !qtObjectValue->IsObject()) {
+ if (qtObjectValue.IsEmpty() || !qtObjectValue.ToLocalChecked()->IsObject()) {
qtObject = v8::Object::New(isolate);
- global->Set(gin::StringToV8(isolate, "qt"), qtObject);
+ auto whocares = global->Set(context, gin::StringToV8(isolate, "qt"), qtObject);
+ // FIXME: Perhaps error out, but the return value is V8 internal...
+ Q_UNUSED(whocares);
} else {
- qtObject = v8::Local<v8::Object>::Cast(qtObjectValue);
+ qtObject = v8::Local<v8::Object>::Cast(qtObjectValue.ToLocalChecked());
}
- qtObject->Set(gin::StringToV8(isolate, "webChannelTransport"), transport.ToV8());
+ auto whocares = qtObject->Set(context, gin::StringToV8(isolate, "webChannelTransport"), transport.ToV8());
+ Q_UNUSED(whocares);
}
void WebChannelTransport::Uninstall(blink::WebLocalFrame *frame, uint worldId)
@@ -115,11 +118,11 @@ void WebChannelTransport::Uninstall(blink::WebLocalFrame *frame, uint worldId)
v8::Context::Scope contextScope(context);
v8::Local<v8::Object> global(context->Global());
- v8::Local<v8::Value> qtObjectValue = global->Get(gin::StringToV8(isolate, "qt"));
- if (qtObjectValue.IsEmpty() || !qtObjectValue->IsObject())
+ v8::MaybeLocal<v8::Value> qtObjectValue = global->Get(context, gin::StringToV8(isolate, "qt"));
+ if (qtObjectValue.IsEmpty() || !qtObjectValue.ToLocalChecked()->IsObject())
return;
- v8::Local<v8::Object> qtObject = v8::Local<v8::Object>::Cast(qtObjectValue);
- // FIXME: ?
+ v8::Local<v8::Object> qtObject = v8::Local<v8::Object>::Cast(qtObjectValue.ToLocalChecked());
+ // FIXME: We can't do anything about a failure, so why the .. is it nodiscard?
auto whocares = qtObject->Delete(context, gin::StringToV8(isolate, "webChannelTransport"));
Q_UNUSED(whocares);
}
@@ -235,16 +238,16 @@ void WebChannelIPCTransport::DispatchWebChannelMessage(const std::vector<uint8_t
v8::Context::Scope contextScope(context);
v8::Local<v8::Object> global(context->Global());
- v8::Local<v8::Value> qtObjectValue(global->Get(gin::StringToV8(isolate, "qt")));
- if (qtObjectValue.IsEmpty() || !qtObjectValue->IsObject())
+ v8::MaybeLocal<v8::Value> qtObjectValue(global->Get(context, gin::StringToV8(isolate, "qt")));
+ if (qtObjectValue.IsEmpty() || !qtObjectValue.ToLocalChecked()->IsObject())
return;
- v8::Local<v8::Object> qtObject = v8::Local<v8::Object>::Cast(qtObjectValue);
- v8::Local<v8::Value> webChannelObjectValue(qtObject->Get(gin::StringToV8(isolate, "webChannelTransport")));
- if (webChannelObjectValue.IsEmpty() || !webChannelObjectValue->IsObject())
+ v8::Local<v8::Object> qtObject = v8::Local<v8::Object>::Cast(qtObjectValue.ToLocalChecked());
+ v8::MaybeLocal<v8::Value> webChannelObjectValue(qtObject->Get(context, gin::StringToV8(isolate, "webChannelTransport")));
+ if (webChannelObjectValue.IsEmpty() || !webChannelObjectValue.ToLocalChecked()->IsObject())
return;
- v8::Local<v8::Object> webChannelObject = v8::Local<v8::Object>::Cast(webChannelObjectValue);
- v8::Local<v8::Value> callbackValue(webChannelObject->Get(gin::StringToV8(isolate, "onmessage")));
- if (callbackValue.IsEmpty() || !callbackValue->IsFunction()) {
+ v8::Local<v8::Object> webChannelObject = v8::Local<v8::Object>::Cast(webChannelObjectValue.ToLocalChecked());
+ v8::MaybeLocal<v8::Value> callbackValue(webChannelObject->Get(context, gin::StringToV8(isolate, "onmessage")));
+ if (callbackValue.IsEmpty() || !callbackValue.ToLocalChecked()->IsFunction()) {
LOG(WARNING) << "onmessage is not a callable property of qt.webChannelTransport. Some things might not work as expected.";
return;
}
@@ -252,12 +255,12 @@ void WebChannelIPCTransport::DispatchWebChannelMessage(const std::vector<uint8_t
v8::Local<v8::Object> messageObject(v8::Object::New(isolate));
v8::Maybe<bool> wasSet = messageObject->DefineOwnProperty(
context,
- v8::String::NewFromUtf8(isolate, "data"),
- v8::String::NewFromUtf8(isolate, json.constData(), v8::String::kNormalString, json.size()),
+ v8::String::NewFromUtf8(isolate, "data").ToLocalChecked(),
+ v8::String::NewFromUtf8(isolate, json.constData(), v8::NewStringType::kNormal, json.size()).ToLocalChecked(),
v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete));
DCHECK(!wasSet.IsNothing() && wasSet.FromJust());
- v8::Local<v8::Function> callback = v8::Local<v8::Function>::Cast(callbackValue);
+ v8::Local<v8::Function> callback = v8::Local<v8::Function>::Cast(callbackValue.ToLocalChecked());
v8::Local<v8::Value> argv[] = { messageObject };
frame->CallFunctionEvenIfScriptDisabled(callback, webChannelObject, 1, argv);
}