- Revision
- 87419
- Author
- [email protected]
- Date
- 2011-05-26 12:43:47 -0700 (Thu, 26 May 2011)
Log Message
2011-05-26 Michael Nordman <[email protected]>
Reviewed by Darin Fisher.
[Chromium] Use SecurityOrigin produced databaseIdentifier strings, instead of
SecurityOrigin RefPtrs, as the top level key into the DatabaseTracker's
collection of open databases. Otherwise we can fail to lookup databases when
trying to forceably close them via WebDatabase::closeDatabaseImmediately.
https://bugs.webkit.org/show_bug.cgi?id=61417
* src/WebDatabase.cpp:
(WebKit::WebDatabase::closeDatabaseImmediately):
2011-05-26 Michael Nordman <[email protected]>
Reviewed by Darin Fisher.
[Chromium] Use SecurityOrigin produced databaseIdentifier strings, instead of
SecurityOrigin RefPtrs, as the top level key into the DatabaseTracker's
collection of open databases. Otherwise we can fail to lookup databases when
trying to forceably close them via WebDatabase::closeDatabaseImmediately.
https://bugs.webkit.org/show_bug.cgi?id=61417
New new functionality, no tests.
* storage/DatabaseTracker.h:
* storage/chromium/DatabaseTrackerChromium.cpp:
(WebCore::DatabaseTracker::addOpenDatabase):
(WebCore::DatabaseTracker::removeOpenDatabase):
(WebCore::DatabaseTracker::getOpenDatabases):
(WebCore::DatabaseTracker::interruptAllDatabasesForContext):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (87418 => 87419)
--- trunk/Source/WebCore/ChangeLog 2011-05-26 19:42:08 UTC (rev 87418)
+++ trunk/Source/WebCore/ChangeLog 2011-05-26 19:43:47 UTC (rev 87419)
@@ -1,3 +1,22 @@
+2011-05-26 Michael Nordman <[email protected]>
+
+ Reviewed by Darin Fisher.
+
+ [Chromium] Use SecurityOrigin produced databaseIdentifier strings, instead of
+ SecurityOrigin RefPtrs, as the top level key into the DatabaseTracker's
+ collection of open databases. Otherwise we can fail to lookup databases when
+ trying to forceably close them via WebDatabase::closeDatabaseImmediately.
+ https://bugs.webkit.org/show_bug.cgi?id=61417
+
+ New new functionality, no tests.
+
+ * storage/DatabaseTracker.h:
+ * storage/chromium/DatabaseTrackerChromium.cpp:
+ (WebCore::DatabaseTracker::addOpenDatabase):
+ (WebCore::DatabaseTracker::removeOpenDatabase):
+ (WebCore::DatabaseTracker::getOpenDatabases):
+ (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
+
2011-05-25 Jer Noble <[email protected]>
Reviewed by Maciej Stachowiak.
Modified: trunk/Source/WebCore/storage/DatabaseTracker.h (87418 => 87419)
--- trunk/Source/WebCore/storage/DatabaseTracker.h 2011-05-26 19:42:08 UTC (rev 87418)
+++ trunk/Source/WebCore/storage/DatabaseTracker.h 2011-05-26 19:43:47 UTC (rev 87419)
@@ -84,13 +84,6 @@
private:
DatabaseTracker(const String& databasePath);
- typedef HashSet<AbstractDatabase*> 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&);
@@ -136,6 +129,13 @@
bool deleteDatabaseFile(SecurityOrigin*, const String& name);
+ typedef HashSet<AbstractDatabase*> DatabaseSet;
+ typedef HashMap<String, DatabaseSet*> DatabaseNameMap;
+ typedef HashMap<RefPtr<SecurityOrigin>, DatabaseNameMap*, SecurityOriginHash> DatabaseOriginMap;
+
+ Mutex m_openDatabaseMapGuard;
+ mutable OwnPtr<DatabaseOriginMap> m_openDatabaseMap;
+
// This lock protects m_database, m_quotaMap, m_proposedDatabases, m_databaseDirectoryPath, m_originsBeingDeleted, m_beingCreated, and m_beingDeleted.
Mutex m_databaseGuard;
SQLiteDatabase m_database;
@@ -171,6 +171,17 @@
static void scheduleForNotification();
static void notifyDatabasesChanged(void*);
+#else
+public:
+ void getOpenDatabases(String originIdentifier, const String& name, HashSet<RefPtr<AbstractDatabase> >* databases);
+
+private:
+ typedef HashSet<AbstractDatabase*> DatabaseSet;
+ typedef HashMap<String, DatabaseSet*> DatabaseNameMap;
+ typedef HashMap<String, DatabaseNameMap*> DatabaseOriginMap;
+
+ Mutex m_openDatabaseMapGuard;
+ mutable OwnPtr<DatabaseOriginMap> m_openDatabaseMap;
#endif // !PLATFORM(CHROMIUM)
};
Modified: trunk/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp (87418 => 87419)
--- trunk/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp 2011-05-26 19:42:08 UTC (rev 87418)
+++ trunk/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp 2011-05-26 19:43:47 UTC (rev 87419)
@@ -76,12 +76,13 @@
ASSERT(database->scriptExecutionContext()->isContextThread());
MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
if (!m_openDatabaseMap)
- m_openDatabaseMap = adoptPtr(new DatabaseOriginMap());
+ m_openDatabaseMap = adoptPtr(new DatabaseOriginMap);
- DatabaseNameMap* nameMap = m_openDatabaseMap->get(database->securityOrigin());
+ String originIdentifier = database->securityOrigin()->databaseIdentifier();
+ DatabaseNameMap* nameMap = m_openDatabaseMap->get(originIdentifier);
if (!nameMap) {
nameMap = new DatabaseNameMap();
- m_openDatabaseMap->set(database->securityOrigin(), nameMap);
+ m_openDatabaseMap->set(originIdentifier, nameMap);
}
String name(database->stringIdentifier());
@@ -124,9 +125,10 @@
return;
}
+ String originIdentifier = database->securityOrigin()->databaseIdentifier();
MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
ASSERT(m_openDatabaseMap);
- DatabaseNameMap* nameMap = m_openDatabaseMap->get(database->securityOrigin());
+ DatabaseNameMap* nameMap = m_openDatabaseMap->get(originIdentifier);
ASSERT(nameMap);
String name(database->stringIdentifier());
DatabaseSet* databaseSet = nameMap->get(name);
@@ -137,7 +139,7 @@
nameMap->remove(name);
delete databaseSet;
if (nameMap->isEmpty()) {
- m_openDatabaseMap->remove(database->securityOrigin());
+ m_openDatabaseMap->remove(originIdentifier);
delete nameMap;
}
}
@@ -145,14 +147,18 @@
DatabaseObserver::databaseClosed(database);
}
-
void DatabaseTracker::getOpenDatabases(SecurityOrigin* origin, const String& name, HashSet<RefPtr<AbstractDatabase> >* databases)
{
+ getOpenDatabases(origin->databaseIdentifier(), name, databases);
+}
+
+void DatabaseTracker::getOpenDatabases(String originIdentifier, const String& name, HashSet<RefPtr<AbstractDatabase> >* databases)
+{
MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
if (!m_openDatabaseMap)
return;
- DatabaseNameMap* nameMap = m_openDatabaseMap->get(origin);
+ DatabaseNameMap* nameMap = m_openDatabaseMap->get(originIdentifier);
if (!nameMap)
return;
@@ -183,7 +189,7 @@
if (!m_openDatabaseMap)
return;
- DatabaseNameMap* nameMap = m_openDatabaseMap->get(context->securityOrigin());
+ DatabaseNameMap* nameMap = m_openDatabaseMap->get(context->securityOrigin()->databaseIdentifier());
if (!nameMap)
return;
Modified: trunk/Source/WebKit/chromium/ChangeLog (87418 => 87419)
--- trunk/Source/WebKit/chromium/ChangeLog 2011-05-26 19:42:08 UTC (rev 87418)
+++ trunk/Source/WebKit/chromium/ChangeLog 2011-05-26 19:43:47 UTC (rev 87419)
@@ -1,3 +1,16 @@
+2011-05-26 Michael Nordman <[email protected]>
+
+ Reviewed by Darin Fisher.
+
+ [Chromium] Use SecurityOrigin produced databaseIdentifier strings, instead of
+ SecurityOrigin RefPtrs, as the top level key into the DatabaseTracker's
+ collection of open databases. Otherwise we can fail to lookup databases when
+ trying to forceably close them via WebDatabase::closeDatabaseImmediately.
+ https://bugs.webkit.org/show_bug.cgi?id=61417
+
+ * src/WebDatabase.cpp:
+ (WebKit::WebDatabase::closeDatabaseImmediately):
+
2011-05-26 Sailesh Agrawal <[email protected]>
Reviewed by Tony Chang.
Modified: trunk/Source/WebKit/chromium/src/WebDatabase.cpp (87418 => 87419)
--- trunk/Source/WebKit/chromium/src/WebDatabase.cpp 2011-05-26 19:42:08 UTC (rev 87418)
+++ trunk/Source/WebKit/chromium/src/WebDatabase.cpp 2011-05-26 19:43:47 UTC (rev 87419)
@@ -96,21 +96,21 @@
{
#if ENABLE(DATABASE)
QuotaTracker::instance().updateDatabaseSize(originIdentifier, name, size);
-#endif // ENABLE(DATABASE)
+#endif
}
void WebDatabase::updateSpaceAvailable(const WebString& originIdentifier, long long spaceAvailable)
{
#if ENABLE(DATABASE)
QuotaTracker::instance().updateSpaceAvailableToOrigin(originIdentifier, spaceAvailable);
-#endif // ENABLE(DATABASE)
+#endif
}
void WebDatabase::resetSpaceAvailable(const WebString& originIdentifier)
{
#if ENABLE(DATABASE)
QuotaTracker::instance().resetSpaceAvailableToOrigin(originIdentifier);
-#endif // ENABLE(DATABASE)
+#endif
}
// FIXME: This is deprecated, delete after rolling DEPs and chrome is using the new methods.
@@ -121,18 +121,17 @@
#if ENABLE(DATABASE)
updateDatabaseSize(originIdentifier, databaseName, databaseSize);
updateSpaceAvailable(originIdentifier, spaceAvailable);
-#endif // ENABLE(DATABASE)
+#endif
}
void WebDatabase::closeDatabaseImmediately(const WebString& originIdentifier, const WebString& databaseName)
{
#if ENABLE(DATABASE)
HashSet<RefPtr<AbstractDatabase> > databaseHandles;
- RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromDatabaseIdentifier(originIdentifier);
- DatabaseTracker::tracker().getOpenDatabases(origin.get(), databaseName, &databaseHandles);
+ DatabaseTracker::tracker().getOpenDatabases(originIdentifier, databaseName, &databaseHandles);
for (HashSet<RefPtr<AbstractDatabase> >::iterator it = databaseHandles.begin(); it != databaseHandles.end(); ++it)
it->get()->closeImmediately();
-#endif // ENABLE(DATABASE)
+#endif
}
WebDatabase::WebDatabase(const AbstractDatabase* database)