Changeset 247092 in webkit
- Timestamp:
- Jul 3, 2019 10:28:53 AM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r247090 r247092 1 2019-07-03 Youenn Fablet <youenn@apple.com> 2 3 Make sure to cross-thread copy in StorageManager when hopping back to the main thread 4 https://bugs.webkit.org/show_bug.cgi?id=199423 5 6 Reviewed by Chris Dumez. 7 8 Make sure to isolate copy some strings that may not be isolated in case of ephemeral sessions. 9 Small refactoring to use crossThreadCopy instead of doing vector copy ourselves. 10 11 * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h: 12 (WebKit::LocalStorageDatabaseTracker::OriginDetails::isolatedCopy const): 13 * NetworkProcess/WebStorage/StorageManager.cpp: 14 (WebKit::StorageManager::deleteSessionStorageEntriesForOrigins): 15 (WebKit::StorageManager::getLocalStorageOrigins): 16 (WebKit::StorageManager::getLocalStorageOriginDetails): 17 (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins): 18 1 19 2019-07-02 Joonghun Park <jh718.park@samsung.com> 2 20 -
trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h
r245540 r247092 59 59 template<class Encoder> void encode(Encoder&) const; 60 60 template<class Decoder> static Optional<OriginDetails> decode(Decoder&); 61 62 OriginDetails isolatedCopy() const { return { originIdentifier.isolatedCopy(), creationTime, modificationTime }; } 61 63 }; 62 64 Vector<OriginDetails> originDetails(); -
trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp
r247057 r247092 622 622 void StorageManager::deleteSessionStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>& origins, Function<void()>&& completionHandler) 623 623 { 624 Vector<WebCore::SecurityOriginData> copiedOrigins; 625 copiedOrigins.reserveInitialCapacity(origins.size()); 626 627 for (auto& origin : origins) 628 copiedOrigins.uncheckedAppend(origin.isolatedCopy()); 629 630 m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigins = WTFMove(copiedOrigins), completionHandler = WTFMove(completionHandler)]() mutable { 624 m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigins = crossThreadCopy(origins), completionHandler = WTFMove(completionHandler)]() mutable { 631 625 for (auto& origin : copiedOrigins) { 632 626 for (auto& sessionStorageNamespace : m_sessionStorageNamespaces.values()) … … 645 639 if (m_localStorageDatabaseTracker) { 646 640 for (auto& origin : m_localStorageDatabaseTracker->origins()) 647 origins.add(origin );641 origins.add(origin.isolatedCopy()); 648 642 } else { 649 643 for (const auto& localStorageNameSpace : m_localStorageNamespaces.values()) { 650 644 for (auto& origin : localStorageNameSpace->ephemeralOrigins()) 651 origins.add(origin );645 origins.add(origin.isolatedCopy()); 652 646 } 653 647 } … … 655 649 for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values()) { 656 650 for (auto& origin : transientLocalStorageNamespace->origins()) 657 origins.add(origin );651 origins.add(origin.isolatedCopy()); 658 652 } 659 653 … … 669 663 Vector<LocalStorageDatabaseTracker::OriginDetails> originDetails; 670 664 if (m_localStorageDatabaseTracker) 671 originDetails = m_localStorageDatabaseTracker->originDetails() ;665 originDetails = m_localStorageDatabaseTracker->originDetails().isolatedCopy(); 672 666 673 667 RunLoop::main().dispatch([originDetails = WTFMove(originDetails), completionHandler = WTFMove(completionHandler)]() mutable { … … 717 711 void StorageManager::deleteLocalStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>& origins, Function<void()>&& completionHandler) 718 712 { 719 Vector<SecurityOriginData> copiedOrigins; 720 copiedOrigins.reserveInitialCapacity(origins.size()); 721 722 for (auto& origin : origins) 723 copiedOrigins.uncheckedAppend(origin.isolatedCopy()); 724 725 m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigins = WTFMove(copiedOrigins), completionHandler = WTFMove(completionHandler)]() mutable { 713 m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigins = crossThreadCopy(origins), completionHandler = WTFMove(completionHandler)]() mutable { 726 714 for (auto& origin : copiedOrigins) { 727 715 for (auto& localStorageNamespace : m_localStorageNamespaces.values())
Note: See TracChangeset
for help on using the changeset viewer.