[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.21-584-g1e41756
dumi at chromium.org
dumi at chromium.org
Fri Feb 26 22:14:47 UTC 2010
The following commit has been merged in the webkit-1.1 branch:
commit 86882e960a36bc95d5fa6ba8cd677ed20fabae20
Author: dumi at chromium.org <dumi at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Mon Feb 8 21:20:01 2010 +0000
WebCore: Adding a way to get the set of all open database handles pointing
to a given database.
https://bugs.webkit.org/show_bug.cgi?id=34619
Reviewed by Jeremy Orlow.
Sometimes we need to be able to close all handles to a database as
soon as possible (to delete the DB file, for example).
* storage/DatabaseTracker.cpp:
(WebCore::DatabaseTracker::getOpenDatabases):
* storage/DatabaseTracker.h:
* storage/chromium/DatabaseTrackerChromium.cpp:
(WebCore::DatabaseTracker::addOpenDatabase):
(WebCore::DatabaseTracker::removeOpenDatabase):
(WebCore::DatabaseTracker::getOpenDatabases):
WebKit/chromium: Adding a way to close all database handles pointing to a certain
database as soon as possible.
https://bugs.webkit.org/show_bug.cgi?id=34619
Reviewed by Jeremy Orlow.
* public/WebDatabase.h:
* src/WebDatabase.cpp:
(WebKit::WebDatabase::closeDatabaseImmediately):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@54506 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index b9a57e8..3f8371e 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,22 @@
+2010-02-05 Dumitru Daniliuc <dumi at chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Adding a way to get the set of all open database handles pointing
+ to a given database.
+ https://bugs.webkit.org/show_bug.cgi?id=34619
+
+ Sometimes we need to be able to close all handles to a database as
+ soon as possible (to delete the DB file, for example).
+
+ * storage/DatabaseTracker.cpp:
+ (WebCore::DatabaseTracker::getOpenDatabases):
+ * storage/DatabaseTracker.h:
+ * storage/chromium/DatabaseTrackerChromium.cpp:
+ (WebCore::DatabaseTracker::addOpenDatabase):
+ (WebCore::DatabaseTracker::removeOpenDatabase):
+ (WebCore::DatabaseTracker::getOpenDatabases):
+
2010-02-08 Dirk Schulze <krit at webkit.org>
Unreviewed windows build-fix.
diff --git a/WebCore/storage/DatabaseTracker.cpp b/WebCore/storage/DatabaseTracker.cpp
index bed83a7..76492c9 100644
--- a/WebCore/storage/DatabaseTracker.cpp
+++ b/WebCore/storage/DatabaseTracker.cpp
@@ -478,6 +478,24 @@ void DatabaseTracker::removeOpenDatabase(Database* database)
delete nameMap;
}
+void DatabaseTracker::getOpenDatabases(SecurityOrigin* origin, const String& name, HashSet<RefPtr<Database> >* databases)
+{
+ MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
+ if (!m_openDatabaseMap)
+ return;
+
+ DatabaseNameMap* nameMap = m_openDatabaseMap->get(origin);
+ if (!nameMap)
+ return;
+
+ DatabaseSet* databaseSet = nameMap->get(name);
+ if (!databaseSet)
+ return;
+
+ for (DatabaseSet::iterator it = databaseSet->begin(); it != databaseSet->end(); ++it)
+ databases->add(*it);
+}
+
unsigned long long DatabaseTracker::usageForOrigin(SecurityOrigin* origin)
{
ASSERT(currentThread() == m_thread);
diff --git a/WebCore/storage/DatabaseTracker.h b/WebCore/storage/DatabaseTracker.h
index 38a3418..4640b18 100644
--- a/WebCore/storage/DatabaseTracker.h
+++ b/WebCore/storage/DatabaseTracker.h
@@ -32,13 +32,13 @@
#if ENABLE(DATABASE)
#include "PlatformString.h"
+#include "StringHash.h"
+#include <wtf/HashMap.h>
+#include <wtf/HashSet.h>
#if !PLATFORM(CHROMIUM)
#include "DatabaseDetails.h"
#include "SQLiteDatabase.h"
-#include "StringHash.h"
-#include <wtf/HashMap.h>
-#include <wtf/HashSet.h>
#include <wtf/OwnPtr.h>
#endif // !PLATFORM(CHROMIUM)
@@ -48,11 +48,12 @@ class Database;
class ScriptExecutionContext;
class SecurityOrigin;
+struct SecurityOriginHash;
+
#if !PLATFORM(CHROMIUM)
class DatabaseTrackerClient;
class OriginQuotaManager;
-struct SecurityOriginHash;
struct SecurityOriginTraits;
#endif // !PLATFORM(CHROMIUM)
@@ -69,12 +70,20 @@ public:
void addOpenDatabase(Database*);
void removeOpenDatabase(Database*);
+ void getOpenDatabases(SecurityOrigin* origin, const String& name, HashSet<RefPtr<Database> >* databases);
unsigned long long getMaxSizeForDatabase(const Database*);
private:
DatabaseTracker();
+ typedef HashSet<Database*> DatabaseSet;
+ typedef HashMap<String, DatabaseSet*> DatabaseNameMap;
+ typedef HashMap<RefPtr<SecurityOrigin>, DatabaseNameMap*, SecurityOriginHash> DatabaseOriginMap;
+
+ Mutex m_openDatabaseMapGuard;
+ mutable OwnPtr<DatabaseOriginMap> m_openDatabaseMap;
+
#if !PLATFORM(CHROMIUM)
public:
void setDatabaseDirectoryPath(const String&);
@@ -123,13 +132,6 @@ private:
Mutex m_quotaMapGuard;
mutable OwnPtr<QuotaMap> m_quotaMap;
- typedef HashSet<Database*> DatabaseSet;
- typedef HashMap<String, DatabaseSet*> DatabaseNameMap;
- typedef HashMap<RefPtr<SecurityOrigin>, DatabaseNameMap*, SecurityOriginHash> DatabaseOriginMap;
-
- Mutex m_openDatabaseMapGuard;
- mutable OwnPtr<DatabaseOriginMap> m_openDatabaseMap;
-
OwnPtr<OriginQuotaManager> m_quotaManager;
String m_databaseDirectoryPath;
diff --git a/WebCore/storage/chromium/DatabaseTrackerChromium.cpp b/WebCore/storage/chromium/DatabaseTrackerChromium.cpp
index e18706b..ac58e07 100644
--- a/WebCore/storage/chromium/DatabaseTrackerChromium.cpp
+++ b/WebCore/storage/chromium/DatabaseTrackerChromium.cpp
@@ -38,6 +38,7 @@
#include "QuotaTracker.h"
#include "ScriptExecutionContext.h"
#include "SecurityOrigin.h"
+#include "SecurityOriginHash.h"
#include "SQLiteFileSystem.h"
#include <wtf/HashSet.h>
#include <wtf/MainThread.h>
@@ -76,6 +77,25 @@ String DatabaseTracker::fullPathForDatabase(SecurityOrigin* origin, const String
void DatabaseTracker::addOpenDatabase(Database* database)
{
ASSERT(database->scriptExecutionContext()->isContextThread());
+ MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
+ if (!m_openDatabaseMap)
+ m_openDatabaseMap.set(new DatabaseOriginMap());
+
+ DatabaseNameMap* nameMap = m_openDatabaseMap->get(database->securityOrigin());
+ if (!nameMap) {
+ nameMap = new DatabaseNameMap();
+ m_openDatabaseMap->set(database->securityOrigin(), nameMap);
+ }
+
+ String name(database->stringIdentifier());
+ DatabaseSet* databaseSet = nameMap->get(name);
+ if (!databaseSet) {
+ databaseSet = new DatabaseSet();
+ nameMap->set(name, databaseSet);
+ }
+
+ databaseSet->add(database);
+
DatabaseObserver::databaseOpened(database);
}
@@ -107,9 +127,46 @@ void DatabaseTracker::removeOpenDatabase(Database* database)
return;
}
+ MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
+ ASSERT(m_openDatabaseMap);
+ DatabaseNameMap* nameMap = m_openDatabaseMap->get(database->securityOrigin());
+ ASSERT(nameMap);
+ String name(database->stringIdentifier());
+ DatabaseSet* databaseSet = nameMap->get(name);
+ ASSERT(databaseSet);
+ databaseSet->remove(database);
+
+ if (databaseSet->isEmpty()) {
+ nameMap->remove(name);
+ delete databaseSet;
+ if (nameMap->isEmpty()) {
+ m_openDatabaseMap->remove(database->securityOrigin());
+ delete nameMap;
+ }
+ }
+
DatabaseObserver::databaseClosed(database);
}
+
+void DatabaseTracker::getOpenDatabases(SecurityOrigin* origin, const String& name, HashSet<RefPtr<Database> >* databases)
+{
+ MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
+ if (!m_openDatabaseMap)
+ return;
+
+ DatabaseNameMap* nameMap = m_openDatabaseMap->get(origin);
+ if (!nameMap)
+ return;
+
+ DatabaseSet* databaseSet = nameMap->get(name);
+ if (!databaseSet)
+ return;
+
+ for (DatabaseSet::iterator it = databaseSet->begin(); it != databaseSet->end(); ++it)
+ databases->add(*it);
+}
+
unsigned long long DatabaseTracker::getMaxSizeForDatabase(const Database* database)
{
ASSERT(currentThread() == database->scriptExecutionContext()->databaseThread()->getThreadID());
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 92c3f41..9f43b8f 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,15 @@
+2010-02-05 Dumitru Daniliuc <dumi at chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Adding a way to close all database handles pointing to a certain
+ database as soon as possible.
+ https://bugs.webkit.org/show_bug.cgi?id=34619
+
+ * public/WebDatabase.h:
+ * src/WebDatabase.cpp:
+ (WebKit::WebDatabase::closeDatabaseImmediately):
+
2010-02-08 Dirk Schulze <krit at webkit.org>
Reviewed by Nikolas Zimmermann.
diff --git a/WebKit/chromium/public/WebDatabase.h b/WebKit/chromium/public/WebDatabase.h
index 179e828..108201d 100644
--- a/WebKit/chromium/public/WebDatabase.h
+++ b/WebKit/chromium/public/WebDatabase.h
@@ -72,6 +72,8 @@ public:
WEBKIT_API static void updateDatabaseSize(
const WebString& originIdentifier, const WebString& databaseName,
unsigned long long databaseSize, unsigned long long spaceAvailable);
+ WEBKIT_API static void closeDatabaseImmediately(
+ const WebString& originIdentifier, const WebString& databaseName);
#if WEBKIT_IMPLEMENTATION
WebDatabase(const WTF::PassRefPtr<WebCore::Database>&);
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()))
{
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list