aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCharles Yin <charles.yin@nokia.com>2012-04-19 13:50:39 +1000
committerQt by Nokia <qt-info@nokia.com>2012-04-20 08:05:15 +0200
commit644f469cfffb2eb433128ef273fd6d15dbd15de1 (patch)
treee7103d7c77949af23febf0e3b005b8ac8f167553
parent04794c29cee0d97fb3b32e1c71a072e34ee37e9c (diff)
Disable local storage if the standard data location is empty
Change-Id: I05ea7fa9521c807099b39e610f965a331e538f6e Reviewed-by: Michael Brasser <michael.brasser@nokia.com> Reviewed-by: Martin Jones <martin.jones@nokia.com>
-rw-r--r--src/imports/localstorage/plugin.cpp3
-rw-r--r--src/qml/qml/qqmlengine.cpp7
-rw-r--r--tests/auto/qml/qqmlengine/tst_qqmlengine.cpp6
-rw-r--r--tests/auto/qml/qqmlsqldatabase/tst_qqmlsqldatabase.cpp16
4 files changed, 28 insertions, 4 deletions
diff --git a/src/imports/localstorage/plugin.cpp b/src/imports/localstorage/plugin.cpp
index 4f08e71fd0..ac007f2849 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 82eeb917ab..aee9c5c1a1 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 89fc8e05d9..c039429f48 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 c1a8a63a4d..04fc5e1c7c 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);
}