/* | |
Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | |
This library is free software; you can redistribute it and/or | |
modify it under the terms of the GNU Library General Public | |
License as published by the Free Software Foundation; either | |
version 2 of the License, or (at your option) any later version. | |
This library is distributed in the hope that it will be useful, | |
but WITHOUT ANY WARRANTY; without even the implied warranty of | |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
Library General Public License for more details. | |
You should have received a copy of the GNU Library General Public License | |
along with this library; see the file COPYING.LIB. If not, write to | |
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | |
Boston, MA 02110-1301, USA. | |
*/ | |
#include "config.h" | |
#include "qwebdatabase.h" | |
#include "qwebdatabase_p.h" | |
#include "qwebsecurityorigin.h" | |
#include "qwebsecurityorigin_p.h" | |
#include "DatabaseDetails.h" | |
#include "DatabaseTracker.h" | |
using namespace WebCore; | |
/*! | |
\class QWebDatabase | |
\since 4.5 | |
\brief The QWebDatabase class provides access to HTML 5 databases created with JavaScript. | |
\inmodule QtWebKit | |
The upcoming HTML 5 standard includes support for SQL databases that web sites can create and | |
access on a local computer through JavaScript. QWebDatabase is the C++ interface to these | |
databases. | |
Databases are grouped together in security origins. To get access to all databases defined by | |
a security origin, use QWebSecurityOrigin::databases(). Each database has an internal name(), | |
as well as a user-friendly name, provided by displayName(). These names are specified when | |
creating the database in the JavaScript code. | |
WebKit uses SQLite to create and access the local SQL databases. The location of the database | |
file in the local file system is returned by fileName(). You can access the database directly | |
through the QtSql database module. | |
For each database the web site can define an expectedSize(). The current size of the database | |
in bytes is returned by size(). | |
For more information refer to the \l{http://dev.w3.org/html5/webdatabase/}{HTML5 Web SQL Database Draft Standard}. | |
\sa QWebSecurityOrigin | |
*/ | |
/*! | |
Constructs a web database from \a other. | |
*/ | |
QWebDatabase::QWebDatabase(const QWebDatabase& other) | |
: d(other.d) | |
{ | |
} | |
/*! | |
Assigns the \a other web database to this. | |
*/ | |
QWebDatabase& QWebDatabase::operator=(const QWebDatabase& other) | |
{ | |
d = other.d; | |
return *this; | |
} | |
/*! | |
Returns the name of the database. | |
*/ | |
QString QWebDatabase::name() const | |
{ | |
return d->name; | |
} | |
/*! | |
Returns the name of the database in a format that is suitable for display to the user. | |
*/ | |
QString QWebDatabase::displayName() const | |
{ | |
#if ENABLE(DATABASE) | |
DatabaseDetails details = DatabaseTracker::tracker().detailsForNameAndOrigin(d->name, d->origin.get()); | |
return details.displayName(); | |
#else | |
return QString(); | |
#endif | |
} | |
/*! | |
Returns the expected size of the database in bytes as defined by the web author. | |
*/ | |
qint64 QWebDatabase::expectedSize() const | |
{ | |
#if ENABLE(DATABASE) | |
DatabaseDetails details = DatabaseTracker::tracker().detailsForNameAndOrigin(d->name, d->origin.get()); | |
return details.expectedUsage(); | |
#else | |
return 0; | |
#endif | |
} | |
/*! | |
Returns the current size of the database in bytes. | |
*/ | |
qint64 QWebDatabase::size() const | |
{ | |
#if ENABLE(DATABASE) | |
DatabaseDetails details = DatabaseTracker::tracker().detailsForNameAndOrigin(d->name, d->origin.get()); | |
return details.currentUsage(); | |
#else | |
return 0; | |
#endif | |
} | |
/*! | |
\internal | |
*/ | |
QWebDatabase::QWebDatabase(QWebDatabasePrivate* priv) | |
{ | |
d = priv; | |
} | |
/*! | |
Returns the file name of the web database. | |
The name can be used to access the database through the QtSql database module, for example: | |
\code | |
QWebDatabase webdb = ... | |
QSqlDatabase sqldb = QSqlDatabase::addDatabase("QSQLITE", "myconnection"); | |
sqldb.setDatabaseName(webdb.fileName()); | |
if (sqldb.open()) { | |
QStringList tables = sqldb.tables(); | |
... | |
} | |
\endcode | |
\note Concurrent access to a database from multiple threads or processes | |
is not very efficient because SQLite is used as WebKit's database backend. | |
*/ | |
QString QWebDatabase::fileName() const | |
{ | |
#if ENABLE(DATABASE) | |
return DatabaseTracker::tracker().fullPathForDatabase(d->origin.get(), d->name, false); | |
#else | |
return QString(); | |
#endif | |
} | |
/*! | |
Returns the databases's security origin. | |
*/ | |
QWebSecurityOrigin QWebDatabase::origin() const | |
{ | |
QWebSecurityOriginPrivate* priv = new QWebSecurityOriginPrivate(d->origin.get()); | |
QWebSecurityOrigin origin(priv); | |
return origin; | |
} | |
/*! | |
Removes the database \a db from its security origin. All data stored in the | |
database \a db will be destroyed. | |
*/ | |
void QWebDatabase::removeDatabase(const QWebDatabase& db) | |
{ | |
#if ENABLE(DATABASE) | |
DatabaseTracker::tracker().deleteDatabase(db.d->origin.get(), db.d->name); | |
#endif | |
} | |
/*! | |
\since 4.6 | |
Deletes all web databases in the configured offline storage path. | |
\sa QWebSettings::setOfflineStoragePath() | |
*/ | |
void QWebDatabase::removeAllDatabases() | |
{ | |
#if ENABLE(DATABASE) | |
DatabaseTracker::tracker().deleteAllDatabases(); | |
#endif | |
} | |
/*! | |
Destroys the web database object. The data within this database is \b not destroyed. | |
*/ | |
QWebDatabase::~QWebDatabase() | |
{ | |
} | |