summaryrefslogtreecommitdiffstats
path: root/src/core/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/renderer')
-rw-r--r--src/core/renderer/user_resource_controller.cpp9
-rw-r--r--src/core/renderer/web_channel_ipc_transport.cpp38
2 files changed, 30 insertions, 17 deletions
diff --git a/src/core/renderer/user_resource_controller.cpp b/src/core/renderer/user_resource_controller.cpp
index ebc88c403..50a3924c6 100644
--- a/src/core/renderer/user_resource_controller.cpp
+++ b/src/core/renderer/user_resource_controller.cpp
@@ -69,6 +69,11 @@ static content::RenderView * const globalScriptsIndex = 0;
// Scripts meant to run after the load event will be run 500ms after DOMContentLoaded if the load event doesn't come within that delay.
static const int afterLoadTimeout = 500;
+static int validUserScriptSchemes()
+{
+ return URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS | URLPattern::SCHEME_FILE;
+}
+
static bool regexMatchesURL(const std::string &pat, const GURL &url) {
QRegularExpression qre(QtWebEngineCore::toQt(pat));
qre.setPatternOptions(QRegularExpression::CaseInsensitiveOption);
@@ -97,8 +102,8 @@ static bool scriptMatchesURL(const UserScriptData &scriptData, const GURL &url)
if (!scriptData.urlPatterns.empty()) {
matchFound = false;
for (auto it = scriptData.urlPatterns.begin(), end = scriptData.urlPatterns.end(); it != end; ++it) {
- URLPattern urlPattern(QtWebEngineCore::UserScript::validUserScriptSchemes(), *it);
- if (urlPattern.MatchesURL(url))
+ URLPattern urlPattern(validUserScriptSchemes());
+ if (urlPattern.Parse(*it) == URLPattern::PARSE_SUCCESS && urlPattern.MatchesURL(url))
matchFound = true;
}
if (!matchFound)
diff --git a/src/core/renderer/web_channel_ipc_transport.cpp b/src/core/renderer/web_channel_ipc_transport.cpp
index bb544168f..ef00bcef3 100644
--- a/src/core/renderer/web_channel_ipc_transport.cpp
+++ b/src/core/renderer/web_channel_ipc_transport.cpp
@@ -64,7 +64,7 @@ public:
static void Uninstall(blink::WebLocalFrame *frame, uint worldId);
private:
WebChannelTransport() {}
- bool NativeQtSendMessage(gin::Arguments *args);
+ void NativeQtSendMessage(gin::Arguments *args);
// gin::WrappableBase
gin::ObjectTemplateBuilder GetObjectTemplateBuilder(v8::Isolate *isolate) override;
@@ -118,37 +118,45 @@ void WebChannelTransport::Uninstall(blink::WebLocalFrame *frame, uint worldId)
qtObject->Delete(gin::StringToV8(isolate, "webChannelTransport"));
}
-bool WebChannelTransport::NativeQtSendMessage(gin::Arguments *args)
+void WebChannelTransport::NativeQtSendMessage(gin::Arguments *args)
{
blink::WebLocalFrame *frame = blink::WebLocalFrame::FrameForCurrentContext();
if (!frame || !frame->View())
- return false;
+ return;
content::RenderFrame *renderFrame = content::RenderFrame::FromWebFrame(frame);
if (!renderFrame)
- return false;
+ return;
+
+ v8::Local<v8::Value> jsonValue;
+ if (!args->GetNext(&jsonValue)) {
+ args->ThrowTypeError("Missing argument");
+ return;
+ }
- std::string message;
- if (!args->GetNext(&message))
- return false;
+ if (!jsonValue->IsString()) {
+ args->ThrowTypeError("Expected string");
+ return;
+ }
+ v8::Local<v8::String> jsonString = v8::Local<v8::String>::Cast(jsonValue);
+
+ QByteArray json(jsonString->Utf8Length(), 0);
+ jsonString->WriteUtf8(json.data(), json.size(),
+ nullptr,
+ v8::String::REPLACE_INVALID_UTF8);
- QByteArray valueData(message.data(), message.size());
QJsonParseError error;
- QJsonDocument doc = QJsonDocument::fromJson(valueData, &error);
+ QJsonDocument doc = QJsonDocument::fromJson(json, &error);
if (error.error != QJsonParseError::NoError) {
- LOG(WARNING) << "Parsing error: " << qPrintable(error.errorString());
- return false;
+ args->ThrowTypeError("Invalid JSON");
+ return;
}
int size = 0;
const char *rawData = doc.rawData(&size);
- if (size == 0)
- return false;
-
renderFrame->Send(new WebChannelIPCTransportHost_SendMessage(
renderFrame->GetRoutingID(),
std::vector<char>(rawData, rawData + size)));
- return true;
}
gin::ObjectTemplateBuilder WebChannelTransport::GetObjectTemplateBuilder(v8::Isolate *isolate)