diff --git a/src/imports/localstorage/plugin.cpp b/src/imports/localstorage/plugin.cpp index 4f08e71fd02a0bbb951ae688166b6e27b866479b..ac007f2849980a2f7343e4a34fb094afd1ee5788 100644 --- a/src/imports/localstorage/plugin.cpp +++ b/src/imports/localstorage/plugin.cpp @@ -567,6 +567,9 @@ void QQuickLocalStorage::openDatabaseSync(QQmlV8Function *args) { #ifndef QT_NO_SETTINGS QV8Engine *engine = args->engine(); + if (engine->engine()->offlineStoragePath().isEmpty()) + V8THROW_SQL_VOID(SQLEXCEPTION_DATABASE_ERR, QQmlEngine::tr("SQL: can't create database, offline storage is disabled.")); + qmlsqldatabase_initDatabasesPath(engine); QSqlDatabase database; diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 82eeb917abfd745ccc0926006371cfbc5d368f40..aee9c5c1a1f45625b63c4fb867e8176f0f2113db 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -512,9 +512,10 @@ void QQmlEnginePrivate::init() } QString dataLocation = QStandardPaths::writableLocation(QStandardPaths::DataLocation); - offlineStoragePath = dataLocation.replace(QLatin1Char('/'), QDir::separator()) + - QDir::separator() + QLatin1String("QML") + - QDir::separator() + QLatin1String("OfflineStorage"); + if (!dataLocation.isEmpty()) + offlineStoragePath = dataLocation.replace(QLatin1Char('/'), QDir::separator()) + + QDir::separator() + QLatin1String("QML") + + QDir::separator() + QLatin1String("OfflineStorage"); } QQuickWorkerScriptEngine *QQmlEnginePrivate::getWorkerScriptEngine() diff --git a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp index 89fc8e05d9ab72bfb0a8ef8bddd8ab65ab0ec029..c039429f485323f87ec0448d6bf8afaa5a2fc0e0 100644 --- a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp +++ b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp @@ -177,7 +177,11 @@ void tst_qqmlengine::offlineStoragePath() QQmlEngine engine; - QDir dir(QStandardPaths::writableLocation(QStandardPaths::DataLocation)); + QString dataLocation = QStandardPaths::writableLocation(QStandardPaths::DataLocation); + + QCOMPARE(dataLocation.isEmpty(), engine.offlineStoragePath().isEmpty()); + + QDir dir(dataLocation); dir.mkpath("QML"); dir.cd("QML"); dir.mkpath("OfflineStorage"); diff --git a/tests/auto/qml/qqmlsqldatabase/tst_qqmlsqldatabase.cpp b/tests/auto/qml/qqmlsqldatabase/tst_qqmlsqldatabase.cpp index c1a8a63a4d48c0c5ed91aaac43b307dd8894faf7..04fc5e1c7c8030421254b304f6682a0636f565f1 100644 --- a/tests/auto/qml/qqmlsqldatabase/tst_qqmlsqldatabase.cpp +++ b/tests/auto/qml/qqmlsqldatabase/tst_qqmlsqldatabase.cpp @@ -104,6 +104,8 @@ void removeRecursive(const QString& dirname) void tst_qqmlsqldatabase::initTestCase() { + if (engine->offlineStoragePath().isEmpty()) + QSKIP("offlineStoragePath is empty, skip this test."); QQmlDataTest::initTestCase(); removeRecursive(dbDir()); QDir().mkpath(dbDir()); @@ -111,6 +113,8 @@ void tst_qqmlsqldatabase::initTestCase() void tst_qqmlsqldatabase::cleanupTestCase() { + if (engine->offlineStoragePath().isEmpty()) + QSKIP("offlineStoragePath is empty, skip this test."); removeRecursive(dbDir()); } @@ -123,6 +127,9 @@ QString tst_qqmlsqldatabase::dbDir() const void tst_qqmlsqldatabase::checkDatabasePath() { + if (engine->offlineStoragePath().isEmpty()) + QSKIP("offlineStoragePath is empty, skip this test."); + // Check default storage path (we can't use it since we don't want to mess with user's data) QVERIFY(engine->offlineStoragePath().contains("tst_qqmlsqldatabase")); QVERIFY(engine->offlineStoragePath().contains("OfflineStorage")); @@ -193,6 +200,9 @@ void tst_qqmlsqldatabase::validateAgainstWebkit() void tst_qqmlsqldatabase::testQml() { + if (engine->offlineStoragePath().isEmpty()) + QSKIP("offlineStoragePath is empty, skip this test."); + // Tests QML SQL Database support with tests // that have been validated against Webkit. // @@ -222,6 +232,9 @@ void tst_qqmlsqldatabase::testQml_cleanopen_data() void tst_qqmlsqldatabase::testQml_cleanopen() { + if (engine->offlineStoragePath().isEmpty()) + QSKIP("offlineStoragePath is empty, skip this test."); + // Same as testQml, but clean connections between tests, // making it more like the tests are running in new processes. testQml(); @@ -235,6 +248,9 @@ void tst_qqmlsqldatabase::testQml_cleanopen() void tst_qqmlsqldatabase::totalDatabases() { + if (engine->offlineStoragePath().isEmpty()) + QSKIP("offlineStoragePath is empty, skip this test."); + QCOMPARE(QDir(dbDir()+"/Databases").entryInfoList(QDir::Files|QDir::NoDotAndDotDot).count(), total_databases_created_by_tests*2); }