aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/jsruntime/qv4include.cpp2
-rw-r--r--tests/auto/qml/qqmlengine/data/interception/includes/Intercepted.qml5
-rw-r--r--tests/auto/qml/qqmlengine/data/interception/includes/intercepted.js3
-rw-r--r--tests/auto/qml/qqmlengine/data/interception/includes/intercepted/included.js3
-rw-r--r--tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted.js3
-rw-r--r--tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted/included.js3
-rw-r--r--tests/auto/qml/qqmlengine/data/interception/includes/urlInterceptor.qml11
-rw-r--r--tests/auto/qml/qqmlengine/tst_qqmlengine.cpp9
8 files changed, 39 insertions, 0 deletions
diff --git a/src/qml/jsruntime/qv4include.cpp b/src/qml/jsruntime/qv4include.cpp
index 90c6738c46..93badb3ed8 100644
--- a/src/qml/jsruntime/qv4include.cpp
+++ b/src/qml/jsruntime/qv4include.cpp
@@ -183,6 +183,8 @@ QV4::ReturnedValue QV4Include::method_include(QV4::CallContext *ctx)
V4THROW_ERROR("Qt.include(): Can only be called from JavaScript files");
QUrl url(scope.engine->resolvedUrl(ctx->args()[0].toQStringNoThrow()));
+ if (scope.engine->qmlEngine() && scope.engine->qmlEngine()->urlInterceptor())
+ url = scope.engine->qmlEngine()->urlInterceptor()->intercept(url, QQmlAbstractUrlInterceptor::JavaScriptFile);
QV4::ScopedValue callbackFunction(scope, QV4::Primitive::undefinedValue());
if (ctx->argc() >= 2 && ctx->args()[1].as<QV4::FunctionObject>())
diff --git a/tests/auto/qml/qqmlengine/data/interception/includes/Intercepted.qml b/tests/auto/qml/qqmlengine/data/interception/includes/Intercepted.qml
new file mode 100644
index 0000000000..449207e0e3
--- /dev/null
+++ b/tests/auto/qml/qqmlengine/data/interception/includes/Intercepted.qml
@@ -0,0 +1,5 @@
+import QtQml 2.0
+
+QtObject {
+ property string myStr: "base file"
+}
diff --git a/tests/auto/qml/qqmlengine/data/interception/includes/intercepted.js b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted.js
new file mode 100644
index 0000000000..fef9f3cd44
--- /dev/null
+++ b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted.js
@@ -0,0 +1,3 @@
+Qt.include("intercepted/included.js")
+
+var myStr = myString()
diff --git a/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/included.js b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/included.js
new file mode 100644
index 0000000000..b6e141dfaa
--- /dev/null
+++ b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/included.js
@@ -0,0 +1,3 @@
+function myString() {
+ return "base include file";
+}
diff --git a/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted.js b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted.js
new file mode 100644
index 0000000000..fef9f3cd44
--- /dev/null
+++ b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted.js
@@ -0,0 +1,3 @@
+Qt.include("intercepted/included.js")
+
+var myStr = myString()
diff --git a/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted/included.js b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted/included.js
new file mode 100644
index 0000000000..c0215ebbe5
--- /dev/null
+++ b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted/included.js
@@ -0,0 +1,3 @@
+function myString() {
+ return "intercepted include file";
+}
diff --git a/tests/auto/qml/qqmlengine/data/interception/includes/urlInterceptor.qml b/tests/auto/qml/qqmlengine/data/interception/includes/urlInterceptor.qml
new file mode 100644
index 0000000000..be86195bd8
--- /dev/null
+++ b/tests/auto/qml/qqmlengine/data/interception/includes/urlInterceptor.qml
@@ -0,0 +1,11 @@
+import QtQml 2.0
+import "intercepted.js" as Script
+
+QtObject {
+ property url filePath: "doesNotExist.file"
+ property url resolvedUrl: Qt.resolvedUrl("doesNotExist.file");
+ property url absoluteUrl: Qt.resolvedUrl("file:///doesNotExist.file");
+ property string childString: child.myStr
+ property string scriptString: Script.myStr
+ property Intercepted child: Intercepted {}
+}
diff --git a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
index 486a0b4e87..eb432f3cfa 100644
--- a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
+++ b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
@@ -746,6 +746,15 @@ void tst_qqmlengine::urlInterceptor_data()
<< QStringLiteral("base file")
<< testFileUrl("interception/strings/intercepted/doesNotExist.file").toString()
<< QStringLiteral("file:///intercepted/doesNotExist.file");
+
+ QTest::newRow("InterceptIncludes")
+ << testFileUrl("interception/includes/urlInterceptor.qml")
+ << (QList<QQmlAbstractUrlInterceptor::DataType>() << QQmlAbstractUrlInterceptor::JavaScriptFile)
+ << testFileUrl("interception/includes/doesNotExist.file").toString()
+ << QStringLiteral("base file")
+ << QStringLiteral("intercepted include file")
+ << testFileUrl("interception/includes/doesNotExist.file").toString()
+ << QStringLiteral("file:///doesNotExist.file");
}
void tst_qqmlengine::urlInterceptor()