| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 WebSecurityOrigin(origin))) + | 91 WebSecurityOrigin(origin))) + |
| 92 "/" + name + "#"; | 92 "/" + name + "#"; |
| 93 } | 93 } |
| 94 | 94 |
| 95 void DatabaseTracker::addOpenDatabase(Database* database) { | 95 void DatabaseTracker::addOpenDatabase(Database* database) { |
| 96 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); | 96 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); |
| 97 if (!m_openDatabaseMap) | 97 if (!m_openDatabaseMap) |
| 98 m_openDatabaseMap = WTF::wrapUnique(new DatabaseOriginMap); | 98 m_openDatabaseMap = WTF::wrapUnique(new DatabaseOriginMap); |
| 99 | 99 |
| 100 String originString = database->getSecurityOrigin()->toRawString(); | 100 String originString = database->getSecurityOrigin()->toRawString(); |
| 101 DatabaseNameMap* nameMap = m_openDatabaseMap->get(originString); | 101 DatabaseNameMap* nameMap = m_openDatabaseMap->at(originString); |
| 102 if (!nameMap) { | 102 if (!nameMap) { |
| 103 nameMap = new DatabaseNameMap(); | 103 nameMap = new DatabaseNameMap(); |
| 104 m_openDatabaseMap->set(originString, nameMap); | 104 m_openDatabaseMap->set(originString, nameMap); |
| 105 } | 105 } |
| 106 | 106 |
| 107 String name(database->stringIdentifier()); | 107 String name(database->stringIdentifier()); |
| 108 DatabaseSet* databaseSet = nameMap->get(name); | 108 DatabaseSet* databaseSet = nameMap->at(name); |
| 109 if (!databaseSet) { | 109 if (!databaseSet) { |
| 110 databaseSet = new DatabaseSet(); | 110 databaseSet = new DatabaseSet(); |
| 111 nameMap->set(name, databaseSet); | 111 nameMap->set(name, databaseSet); |
| 112 } | 112 } |
| 113 | 113 |
| 114 databaseSet->insert(database); | 114 databaseSet->insert(database); |
| 115 } | 115 } |
| 116 | 116 |
| 117 void DatabaseTracker::removeOpenDatabase(Database* database) { | 117 void DatabaseTracker::removeOpenDatabase(Database* database) { |
| 118 { | 118 { |
| 119 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); | 119 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); |
| 120 String originString = database->getSecurityOrigin()->toRawString(); | 120 String originString = database->getSecurityOrigin()->toRawString(); |
| 121 ASSERT(m_openDatabaseMap); | 121 ASSERT(m_openDatabaseMap); |
| 122 DatabaseNameMap* nameMap = m_openDatabaseMap->get(originString); | 122 DatabaseNameMap* nameMap = m_openDatabaseMap->at(originString); |
| 123 if (!nameMap) | 123 if (!nameMap) |
| 124 return; | 124 return; |
| 125 | 125 |
| 126 String name(database->stringIdentifier()); | 126 String name(database->stringIdentifier()); |
| 127 DatabaseSet* databaseSet = nameMap->get(name); | 127 DatabaseSet* databaseSet = nameMap->at(name); |
| 128 if (!databaseSet) | 128 if (!databaseSet) |
| 129 return; | 129 return; |
| 130 | 130 |
| 131 DatabaseSet::iterator found = databaseSet->find(database); | 131 DatabaseSet::iterator found = databaseSet->find(database); |
| 132 if (found == databaseSet->end()) | 132 if (found == databaseSet->end()) |
| 133 return; | 133 return; |
| 134 | 134 |
| 135 databaseSet->erase(found); | 135 databaseSet->erase(found); |
| 136 if (databaseSet->isEmpty()) { | 136 if (databaseSet->isEmpty()) { |
| 137 nameMap->erase(name); | 137 nameMap->erase(name); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 return databaseSize + spaceAvailable; | 170 return databaseSize + spaceAvailable; |
| 171 } | 171 } |
| 172 | 172 |
| 173 void DatabaseTracker::closeDatabasesImmediately(SecurityOrigin* origin, | 173 void DatabaseTracker::closeDatabasesImmediately(SecurityOrigin* origin, |
| 174 const String& name) { | 174 const String& name) { |
| 175 String originString = origin->toRawString(); | 175 String originString = origin->toRawString(); |
| 176 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); | 176 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); |
| 177 if (!m_openDatabaseMap) | 177 if (!m_openDatabaseMap) |
| 178 return; | 178 return; |
| 179 | 179 |
| 180 DatabaseNameMap* nameMap = m_openDatabaseMap->get(originString); | 180 DatabaseNameMap* nameMap = m_openDatabaseMap->at(originString); |
| 181 if (!nameMap) | 181 if (!nameMap) |
| 182 return; | 182 return; |
| 183 | 183 |
| 184 DatabaseSet* databaseSet = nameMap->get(name); | 184 DatabaseSet* databaseSet = nameMap->at(name); |
| 185 if (!databaseSet) | 185 if (!databaseSet) |
| 186 return; | 186 return; |
| 187 | 187 |
| 188 // We have to call closeImmediately() on the context thread. | 188 // We have to call closeImmediately() on the context thread. |
| 189 for (DatabaseSet::iterator it = databaseSet->begin(); | 189 for (DatabaseSet::iterator it = databaseSet->begin(); |
| 190 it != databaseSet->end(); ++it) | 190 it != databaseSet->end(); ++it) |
| 191 (*it)->getDatabaseContext()->getExecutionContext()->postTask( | 191 (*it)->getDatabaseContext()->getExecutionContext()->postTask( |
| 192 TaskType::DatabaseAccess, BLINK_FROM_HERE, | 192 TaskType::DatabaseAccess, BLINK_FROM_HERE, |
| 193 createCrossThreadTask(&DatabaseTracker::closeOneDatabaseImmediately, | 193 createCrossThreadTask(&DatabaseTracker::closeOneDatabaseImmediately, |
| 194 crossThreadUnretained(this), originString, name, | 194 crossThreadUnretained(this), originString, name, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 215 | 215 |
| 216 void DatabaseTracker::closeOneDatabaseImmediately(const String& originString, | 216 void DatabaseTracker::closeOneDatabaseImmediately(const String& originString, |
| 217 const String& name, | 217 const String& name, |
| 218 Database* database) { | 218 Database* database) { |
| 219 // First we have to confirm the 'database' is still in our collection. | 219 // First we have to confirm the 'database' is still in our collection. |
| 220 { | 220 { |
| 221 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); | 221 MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); |
| 222 if (!m_openDatabaseMap) | 222 if (!m_openDatabaseMap) |
| 223 return; | 223 return; |
| 224 | 224 |
| 225 DatabaseNameMap* nameMap = m_openDatabaseMap->get(originString); | 225 DatabaseNameMap* nameMap = m_openDatabaseMap->at(originString); |
| 226 if (!nameMap) | 226 if (!nameMap) |
| 227 return; | 227 return; |
| 228 | 228 |
| 229 DatabaseSet* databaseSet = nameMap->get(name); | 229 DatabaseSet* databaseSet = nameMap->at(name); |
| 230 if (!databaseSet) | 230 if (!databaseSet) |
| 231 return; | 231 return; |
| 232 | 232 |
| 233 DatabaseSet::iterator found = databaseSet->find(database); | 233 DatabaseSet::iterator found = databaseSet->find(database); |
| 234 if (found == databaseSet->end()) | 234 if (found == databaseSet->end()) |
| 235 return; | 235 return; |
| 236 } | 236 } |
| 237 | 237 |
| 238 // And we have to call closeImmediately() without our collection lock being | 238 // And we have to call closeImmediately() without our collection lock being |
| 239 // held. | 239 // held. |
| 240 database->closeImmediately(); | 240 database->closeImmediately(); |
| 241 } | 241 } |
| 242 | 242 |
| 243 } // namespace blink | 243 } // namespace blink |
| OLD | NEW |