Changeset 54506 in webkit
- Timestamp:
- Feb 8, 2010 1:20:01 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r54505 r54506 1 2010-02-05 Dumitru Daniliuc <dumi@chromium.org> 2 3 Reviewed by Jeremy Orlow. 4 5 Adding a way to get the set of all open database handles pointing 6 to a given database. 7 https://bugs.webkit.org/show_bug.cgi?id=34619 8 9 Sometimes we need to be able to close all handles to a database as 10 soon as possible (to delete the DB file, for example). 11 12 * storage/DatabaseTracker.cpp: 13 (WebCore::DatabaseTracker::getOpenDatabases): 14 * storage/DatabaseTracker.h: 15 * storage/chromium/DatabaseTrackerChromium.cpp: 16 (WebCore::DatabaseTracker::addOpenDatabase): 17 (WebCore::DatabaseTracker::removeOpenDatabase): 18 (WebCore::DatabaseTracker::getOpenDatabases): 19 1 20 2010-02-08 Dirk Schulze <krit@webkit.org> 2 21 -
trunk/WebCore/storage/DatabaseTracker.cpp
r53595 r54506 479 479 } 480 480 481 void DatabaseTracker::getOpenDatabases(SecurityOrigin* origin, const String& name, HashSet<RefPtr<Database> >* databases) 482 { 483 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); 484 if (!m_openDatabaseMap) 485 return; 486 487 DatabaseNameMap* nameMap = m_openDatabaseMap->get(origin); 488 if (!nameMap) 489 return; 490 491 DatabaseSet* databaseSet = nameMap->get(name); 492 if (!databaseSet) 493 return; 494 495 for (DatabaseSet::iterator it = databaseSet->begin(); it != databaseSet->end(); ++it) 496 databases->add(*it); 497 } 498 481 499 unsigned long long DatabaseTracker::usageForOrigin(SecurityOrigin* origin) 482 500 { -
trunk/WebCore/storage/DatabaseTracker.h
r53595 r54506 33 33 34 34 #include "PlatformString.h" 35 #include "StringHash.h" 36 #include <wtf/HashMap.h> 37 #include <wtf/HashSet.h> 35 38 36 39 #if !PLATFORM(CHROMIUM) 37 40 #include "DatabaseDetails.h" 38 41 #include "SQLiteDatabase.h" 39 #include "StringHash.h"40 #include <wtf/HashMap.h>41 #include <wtf/HashSet.h>42 42 #include <wtf/OwnPtr.h> 43 43 #endif // !PLATFORM(CHROMIUM) … … 49 49 class SecurityOrigin; 50 50 51 struct SecurityOriginHash; 52 51 53 #if !PLATFORM(CHROMIUM) 52 54 class DatabaseTrackerClient; 53 55 class OriginQuotaManager; 54 56 55 struct SecurityOriginHash;56 57 struct SecurityOriginTraits; 57 58 #endif // !PLATFORM(CHROMIUM) … … 70 71 void addOpenDatabase(Database*); 71 72 void removeOpenDatabase(Database*); 73 void getOpenDatabases(SecurityOrigin* origin, const String& name, HashSet<RefPtr<Database> >* databases); 72 74 73 75 unsigned long long getMaxSizeForDatabase(const Database*); … … 75 77 private: 76 78 DatabaseTracker(); 79 80 typedef HashSet<Database*> DatabaseSet; 81 typedef HashMap<String, DatabaseSet*> DatabaseNameMap; 82 typedef HashMap<RefPtr<SecurityOrigin>, DatabaseNameMap*, SecurityOriginHash> DatabaseOriginMap; 83 84 Mutex m_openDatabaseMapGuard; 85 mutable OwnPtr<DatabaseOriginMap> m_openDatabaseMap; 77 86 78 87 #if !PLATFORM(CHROMIUM) … … 124 133 mutable OwnPtr<QuotaMap> m_quotaMap; 125 134 126 typedef HashSet<Database*> DatabaseSet;127 typedef HashMap<String, DatabaseSet*> DatabaseNameMap;128 typedef HashMap<RefPtr<SecurityOrigin>, DatabaseNameMap*, SecurityOriginHash> DatabaseOriginMap;129 130 Mutex m_openDatabaseMapGuard;131 mutable OwnPtr<DatabaseOriginMap> m_openDatabaseMap;132 133 135 OwnPtr<OriginQuotaManager> m_quotaManager; 134 136 -
trunk/WebCore/storage/chromium/DatabaseTrackerChromium.cpp
r53595 r54506 39 39 #include "ScriptExecutionContext.h" 40 40 #include "SecurityOrigin.h" 41 #include "SecurityOriginHash.h" 41 42 #include "SQLiteFileSystem.h" 42 43 #include <wtf/HashSet.h> … … 77 78 { 78 79 ASSERT(database->scriptExecutionContext()->isContextThread()); 80 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); 81 if (!m_openDatabaseMap) 82 m_openDatabaseMap.set(new DatabaseOriginMap()); 83 84 DatabaseNameMap* nameMap = m_openDatabaseMap->get(database->securityOrigin()); 85 if (!nameMap) { 86 nameMap = new DatabaseNameMap(); 87 m_openDatabaseMap->set(database->securityOrigin(), nameMap); 88 } 89 90 String name(database->stringIdentifier()); 91 DatabaseSet* databaseSet = nameMap->get(name); 92 if (!databaseSet) { 93 databaseSet = new DatabaseSet(); 94 nameMap->set(name, databaseSet); 95 } 96 97 databaseSet->add(database); 98 79 99 DatabaseObserver::databaseOpened(database); 80 100 } … … 108 128 } 109 129 130 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); 131 ASSERT(m_openDatabaseMap); 132 DatabaseNameMap* nameMap = m_openDatabaseMap->get(database->securityOrigin()); 133 ASSERT(nameMap); 134 String name(database->stringIdentifier()); 135 DatabaseSet* databaseSet = nameMap->get(name); 136 ASSERT(databaseSet); 137 databaseSet->remove(database); 138 139 if (databaseSet->isEmpty()) { 140 nameMap->remove(name); 141 delete databaseSet; 142 if (nameMap->isEmpty()) { 143 m_openDatabaseMap->remove(database->securityOrigin()); 144 delete nameMap; 145 } 146 } 147 110 148 DatabaseObserver::databaseClosed(database); 149 } 150 151 152 void DatabaseTracker::getOpenDatabases(SecurityOrigin* origin, const String& name, HashSet<RefPtr<Database> >* databases) 153 { 154 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); 155 if (!m_openDatabaseMap) 156 return; 157 158 DatabaseNameMap* nameMap = m_openDatabaseMap->get(origin); 159 if (!nameMap) 160 return; 161 162 DatabaseSet* databaseSet = nameMap->get(name); 163 if (!databaseSet) 164 return; 165 166 for (DatabaseSet::iterator it = databaseSet->begin(); it != databaseSet->end(); ++it) 167 databases->add(*it); 111 168 } 112 169 -
trunk/WebKit/chromium/ChangeLog
r54503 r54506 1 2010-02-05 Dumitru Daniliuc <dumi@chromium.org> 2 3 Reviewed by Jeremy Orlow. 4 5 Adding a way to close all database handles pointing to a certain 6 database as soon as possible. 7 https://bugs.webkit.org/show_bug.cgi?id=34619 8 9 * public/WebDatabase.h: 10 * src/WebDatabase.cpp: 11 (WebKit::WebDatabase::closeDatabaseImmediately): 12 1 13 2010-02-08 Dirk Schulze <krit@webkit.org> 2 14 -
trunk/WebKit/chromium/public/WebDatabase.h
r50680 r54506 73 73 const WebString& originIdentifier, const WebString& databaseName, 74 74 unsigned long long databaseSize, unsigned long long spaceAvailable); 75 WEBKIT_API static void closeDatabaseImmediately( 76 const WebString& originIdentifier, const WebString& databaseName); 75 77 76 78 #if WEBKIT_IMPLEMENTATION -
trunk/WebKit/chromium/src/WebDatabase.cpp
r50961 r54506 33 33 34 34 #include "Database.h" 35 #include "DatabaseTask.h" 35 36 #include "DatabaseThread.h" 37 #include "DatabaseTracker.h" 36 38 #include "Document.h" 37 39 #include "KURL.h" … … 107 109 } 108 110 111 void WebDatabase::closeDatabaseImmediately(const WebString& originIdentifier, const WebString& databaseName) 112 { 113 HashSet<RefPtr<Database> > databaseHandles; 114 PassRefPtr<SecurityOrigin> originPrp(*WebSecurityOrigin::createFromDatabaseIdentifier(originIdentifier)); 115 RefPtr<SecurityOrigin> origin = originPrp; 116 DatabaseTracker::tracker().getOpenDatabases(origin.get(), databaseName, &databaseHandles); 117 for (HashSet<RefPtr<Database> >::iterator it = databaseHandles.begin(); it != databaseHandles.end(); ++it) { 118 Database* database = it->get(); 119 DatabaseThread* databaseThread = database->scriptExecutionContext()->databaseThread(); 120 if (databaseThread && !databaseThread->terminationRequested()) { 121 database->stop(); 122 databaseThread->scheduleTask(DatabaseCloseTask::create(database, 0)); 123 } 124 } 125 } 126 109 127 WebDatabase::WebDatabase(const WTF::PassRefPtr<Database>& database) 110 128 : m_private(static_cast<WebDatabasePrivate*>(database.releaseRef()))
Note: See TracChangeset
for help on using the changeset viewer.