| /* |
| 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() |
| { |
| } |
| |