diff options
Diffstat (limited to 'WebKit/chromium/src/WebDatabase.cpp')
-rw-r--r-- | WebKit/chromium/src/WebDatabase.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/WebKit/chromium/src/WebDatabase.cpp b/WebKit/chromium/src/WebDatabase.cpp index 2cd36b6..50b9220 100644 --- a/WebKit/chromium/src/WebDatabase.cpp +++ b/WebKit/chromium/src/WebDatabase.cpp @@ -32,7 +32,9 @@ #include "WebDatabase.h" #include "Database.h" +#include "DatabaseTask.h" #include "DatabaseThread.h" +#include "DatabaseTracker.h" #include "Document.h" #include "KURL.h" #include "QuotaTracker.h" @@ -106,6 +108,22 @@ void WebDatabase::updateDatabaseSize( originIdentifier, databaseName, databaseSize, spaceAvailable); } +void WebDatabase::closeDatabaseImmediately(const WebString& originIdentifier, const WebString& databaseName) +{ + HashSet<RefPtr<Database> > databaseHandles; + PassRefPtr<SecurityOrigin> originPrp(*WebSecurityOrigin::createFromDatabaseIdentifier(originIdentifier)); + RefPtr<SecurityOrigin> origin = originPrp; + DatabaseTracker::tracker().getOpenDatabases(origin.get(), databaseName, &databaseHandles); + for (HashSet<RefPtr<Database> >::iterator it = databaseHandles.begin(); it != databaseHandles.end(); ++it) { + Database* database = it->get(); + DatabaseThread* databaseThread = database->scriptExecutionContext()->databaseThread(); + if (databaseThread && !databaseThread->terminationRequested()) { + database->stop(); + databaseThread->scheduleTask(DatabaseCloseTask::create(database, 0)); + } + } +} + WebDatabase::WebDatabase(const WTF::PassRefPtr<Database>& database) : m_private(static_cast<WebDatabasePrivate*>(database.releaseRef())) { |