Changeset 61023 in webkit
- Timestamp:
- Jun 11, 2010 9:17:05 AM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r61022 r61023 1 2010-06-11 Hans Wennborg <hans@chromium.org> 2 3 Reviewed by Jeremy Orlow. 4 5 DOM storage should only create databases when needed 6 https://bugs.webkit.org/show_bug.cgi?id=40301 7 8 As soon as a page attempts to use localstorage, StorageAreaSync will 9 create an empty database if one doesn't already exist. This can lead to 10 lots of unnecessary database files. In particular, they are created 11 even when the privacy settings or private browsing mode disallow 12 localstorage data, which may seem odd to the user. 13 14 Database creation should be put off in StorageAreaSync until it is time 15 to actually write something to the database. 16 17 Tests: 18 manual-tests/localstorage-empty-database.html 19 20 * manual-tests/localstorage-empty-database.html: Added. 21 * storage/StorageAreaSync.cpp: 22 (WebCore::StorageAreaSync::StorageAreaSync): 23 (WebCore::StorageAreaSync::openDatabase): 24 (WebCore::StorageAreaSync::performImport): 25 (WebCore::StorageAreaSync::sync): 26 * storage/StorageAreaSync.h: 27 (WebCore::StorageAreaSync::): 28 1 29 2010-06-11 Ilya Tikhonovsky <loislo@chromium.org> 2 30 -
trunk/WebCore/storage/StorageAreaSync.cpp
r56825 r61023 30 30 31 31 #include "EventNames.h" 32 #include "FileSystem.h" 32 33 #include "HTMLElement.h" 33 34 #include "SecurityOrigin.h" … … 63 64 , m_syncScheduled(false) 64 65 , m_syncInProgress(false) 66 , m_databaseOpenFailed(false) 65 67 , m_importComplete(false) 66 68 { … … 199 201 } 200 202 201 void StorageAreaSync:: performImport()203 void StorageAreaSync::openDatabase(OpenDatabaseParamType openingStrategy) 202 204 { 203 205 ASSERT(!isMainThread()); 204 206 ASSERT(!m_database.isOpen()); 207 ASSERT(!m_databaseOpenFailed); 205 208 206 209 String databaseFilename = m_syncManager->fullDatabaseFilename(m_databaseIdentifier); 210 211 if (!fileExists(databaseFilename) && openingStrategy == SkipIfNonExistent) 212 return; 207 213 208 214 if (databaseFilename.isEmpty()) { 209 215 LOG_ERROR("Filename for local storage database is empty - cannot open for persistent storage"); 210 216 markImported(); 217 m_databaseOpenFailed = true; 211 218 return; 212 219 } … … 215 222 LOG_ERROR("Failed to open database file %s for local storage", databaseFilename.utf8().data()); 216 223 markImported(); 224 m_databaseOpenFailed = true; 217 225 return; 218 226 } … … 220 228 if (!m_database.executeCommand("CREATE TABLE IF NOT EXISTS ItemTable (key TEXT UNIQUE ON CONFLICT REPLACE, value TEXT NOT NULL ON CONFLICT FAIL)")) { 221 229 LOG_ERROR("Failed to create table ItemTable for local storage"); 230 markImported(); 231 m_databaseOpenFailed = true; 232 return; 233 } 234 } 235 236 void StorageAreaSync::performImport() 237 { 238 ASSERT(!isMainThread()); 239 ASSERT(!m_database.isOpen()); 240 241 openDatabase(SkipIfNonExistent); 242 if (!m_database.isOpen()) { 222 243 markImported(); 223 244 return; … … 286 307 ASSERT(!isMainThread()); 287 308 309 if (m_databaseOpenFailed) 310 return; 311 if (!m_database.isOpen()) 312 openDatabase(CreateIfNonExistent); 288 313 if (!m_database.isOpen()) 289 314 return; -
trunk/WebCore/storage/StorageAreaSync.h
r55523 r61023 76 76 77 77 private: 78 enum OpenDatabaseParamType { 79 CreateIfNonExistent, 80 SkipIfNonExistent 81 }; 82 78 83 void syncTimerFired(Timer<StorageAreaSync>*); 84 void openDatabase(OpenDatabaseParamType openingStrategy); 79 85 void sync(bool clearItems, const HashMap<String, String>& items); 80 86 … … 86 92 bool m_syncScheduled; 87 93 bool m_syncInProgress; 94 bool m_databaseOpenFailed; 88 95 89 96 mutable Mutex m_importLock;
Note: See TracChangeset
for help on using the changeset viewer.