Changeset 178526 in webkit
- Timestamp:
- Jan 15, 2015 1:26:53 PM (9 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r178524 r178526 1 2015-01-15 Anders Carlsson <andersca@apple.com> 2 3 Clearing the website data store should clear local storage 4 https://bugs.webkit.org/show_bug.cgi?id=140507 5 6 Reviewed by Andreas Kling. 7 8 * Shared/WebsiteData/WebsiteDataTypes.h: 9 Add WebsiteDataTypeLocalStorage. 10 11 * UIProcess/API/Cocoa/_WKWebsiteDataStore.h: 12 Add WKWebsiteDataTypeLocalStorage 13 14 * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm: 15 (toWebsiteDataTypes): 16 Handle WKWebsiteDataTypeLocalStorage. 17 18 * UIProcess/Storage/LocalStorageDatabaseTracker.cpp: 19 (WebKit::fileModificationTime): 20 Use an early return. 21 22 (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince): 23 Change this to take an std::chrono::system_clock::time_point and don't 24 try to modifiy m_origins while iterating it. 25 26 * UIProcess/Storage/LocalStorageDatabaseTracker.h: 27 Update declarations. 28 29 * UIProcess/Storage/StorageManager.cpp: 30 (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince): 31 Change this to take an std::chrono::system_clock::time_point. 32 33 * UIProcess/Storage/StorageManager.h: 34 Update declarations. 35 36 * UIProcess/WebsiteData/WebsiteDataStore.cpp: 37 (WebKit::WebsiteDataStore::removeData): 38 Remove data from the storage manager as well. 39 1 40 2015-01-15 Anders Carlsson <andersca@apple.com> 2 41 -
trunk/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h
r177038 r178526 32 32 WebsiteDataTypeCookies = 1 << 0, 33 33 WebsiteDataTypeDiskCache = 1 << 1, 34 WebsiteDataTypeLocalStorage = 1 << 2, 34 35 }; 35 36 -
trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.h
r177747 r178526 34 34 WKWebsiteDataTypeDiskCache = 1 << 1, 35 35 36 WKWebsiteDataTypeLocalStorage = 1 << 2, 36 37 WKWebsiteDataTypeAll = NSUIntegerMax, 37 38 } WK_ENUM_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA); -
trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.mm
r177038 r178526 63 63 if (wkWebsiteDataTypes & WKWebsiteDataTypeDiskCache) 64 64 websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeDiskCache; 65 if (wkWebsiteDataTypes & WKWebsiteDataTypeLocalStorage) 66 websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeLocalStorage; 65 67 66 68 return static_cast<WebsiteDataTypes>(websiteDataTypes); -
trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp
r176802 r178526 135 135 { 136 136 time_t time; 137 return getFileModificationTime(filePath, time) ? time : Optional<time_t>(Nullopt); 138 } 139 140 Vector<RefPtr<SecurityOrigin>> LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(time_t time) 141 { 142 Vector<RefPtr<SecurityOrigin>> deletedDatabaseOrigins; 137 if (!getFileModificationTime(filePath, time)) 138 return Nullopt; 139 140 return time; 141 } 142 143 Vector<Ref<SecurityOrigin>> LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(std::chrono::system_clock::time_point time) 144 { 145 Vector<String> originIdentifiersToDelete; 143 146 144 147 for (const String& origin : m_origins) { … … 149 152 continue; 150 153 151 if (modificationTime.value() >= time) { 152 removeDatabaseWithOriginIdentifier(origin); 153 154 deletedDatabaseOrigins.append(SecurityOrigin::createFromDatabaseIdentifier(origin)); 155 } 154 if (modificationTime.value() >= std::chrono::system_clock::to_time_t(time)) 155 originIdentifiersToDelete.append(origin); 156 } 157 158 Vector<Ref<SecurityOrigin>> deletedDatabaseOrigins; 159 deletedDatabaseOrigins.reserveInitialCapacity(originIdentifiersToDelete.size()); 160 161 for (const auto& originIdentifier : originIdentifiersToDelete) { 162 removeDatabaseWithOriginIdentifier(originIdentifier); 163 164 deletedDatabaseOrigins.uncheckedAppend(SecurityOrigin::createFromDatabaseIdentifier(originIdentifier)); 156 165 } 157 166 -
trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h
r176794 r178526 57 57 58 58 // Returns a vector of the origins whose databases have been deleted. 59 Vector<Ref Ptr<WebCore::SecurityOrigin>> deleteDatabasesModifiedSince(time_t);59 Vector<Ref<WebCore::SecurityOrigin>> deleteDatabasesModifiedSince(std::chrono::system_clock::time_point); 60 60 61 61 Vector<RefPtr<WebCore::SecurityOrigin>> origins() const; -
trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp
r178511 r178526 93 93 void didDestroyStorageArea(StorageArea*); 94 94 95 void clearStorageAreasMatchingOrigin( SecurityOrigin*);95 void clearStorageAreasMatchingOrigin(const SecurityOrigin&); 96 96 void clearAllStorageAreas(); 97 97 … … 341 341 } 342 342 343 void StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin( SecurityOrigin*securityOrigin)344 { 345 for ( auto it = m_storageAreaMap.begin(), end = m_storageAreaMap.end(); it != end; ++it) {346 if ( it->key->equal(securityOrigin))347 it->value->clear();343 void StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin(const SecurityOrigin& securityOrigin) 344 { 345 for (const auto& originAndStorageArea : m_storageAreaMap) { 346 if (originAndStorageArea.key->equal(&securityOrigin)) 347 originAndStorageArea.value->clear(); 348 348 } 349 349 } … … 547 547 m_queue->dispatch([storageManager, copiedOrigin] { 548 548 for (auto& localStorageNamespace : storageManager->m_localStorageNamespaces.values()) 549 localStorageNamespace->clearStorageAreasMatchingOrigin( copiedOrigin.get());549 localStorageNamespace->clearStorageAreasMatchingOrigin(*copiedOrigin); 550 550 551 551 for (auto& transientLocalStorageNamespace : storageManager->m_transientLocalStorageNamespaces.values()) … … 571 571 } 572 572 573 void StorageManager::deleteLocalStorageOriginsModifiedSince( time_t time, std::function<void ()> completionHandler)573 void StorageManager::deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point time, std::function<void ()> completionHandler) 574 574 { 575 575 RefPtr<StorageManager> storageManager(this); -
trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h
r178511 r178526 65 65 void deleteAllEntries(); 66 66 67 void deleteLocalStorageOriginsModifiedSince( time_t, std::function<void ()> completionHandler);67 void deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point, std::function<void ()> completionHandler); 68 68 69 69 private: -
trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp
r178524 r178526 174 174 } 175 175 176 if (dataTypes & WebsiteDataTypeLocalStorage && m_storageManager) { 177 callbackAggregator->addPendingCallback(); 178 179 m_storageManager->deleteLocalStorageOriginsModifiedSince(modifiedSince, [callbackAggregator] { 180 callbackAggregator->removePendingCallback(); 181 }); 182 } 183 176 184 // There's a chance that we don't have any pending callbacks. If so, we want to dispatch the completion handler right away. 177 185 callbackAggregator->callIfNeeded();
Note: See TracChangeset
for help on using the changeset viewer.