Changeset 247092 in webkit


Ignore:
Timestamp:
Jul 3, 2019 10:28:53 AM (5 years ago)
Author:
youenn@apple.com
Message:

Make sure to cross-thread copy in StorageManager when hopping back to the main thread
https://bugs.webkit.org/show_bug.cgi?id=199423

Reviewed by Chris Dumez.

Make sure to isolate copy some strings that may not be isolated in case of ephemeral sessions.
Small refactoring to use crossThreadCopy instead of doing vector copy ourselves.

  • NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h:

(WebKit::LocalStorageDatabaseTracker::OriginDetails::isolatedCopy const):

  • NetworkProcess/WebStorage/StorageManager.cpp:

(WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
(WebKit::StorageManager::getLocalStorageOrigins):
(WebKit::StorageManager::getLocalStorageOriginDetails):
(WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):

Location:
trunk/Source/WebKit
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r247090 r247092  
     12019-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
    1192019-07-02  Joonghun Park  <jh718.park@samsung.com>
    220
  • trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h

    r245540 r247092  
    5959        template<class Encoder> void encode(Encoder&) const;
    6060        template<class Decoder> static Optional<OriginDetails> decode(Decoder&);
     61
     62        OriginDetails isolatedCopy() const { return { originIdentifier.isolatedCopy(), creationTime, modificationTime }; }
    6163    };
    6264    Vector<OriginDetails> originDetails();
  • trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp

    r247057 r247092  
    622622void StorageManager::deleteSessionStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>& origins, Function<void()>&& completionHandler)
    623623{
    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 {
    631625        for (auto& origin : copiedOrigins) {
    632626            for (auto& sessionStorageNamespace : m_sessionStorageNamespaces.values())
     
    645639        if (m_localStorageDatabaseTracker) {
    646640            for (auto& origin : m_localStorageDatabaseTracker->origins())
    647                 origins.add(origin);
     641                origins.add(origin.isolatedCopy());
    648642        } else {
    649643            for (const auto& localStorageNameSpace : m_localStorageNamespaces.values()) {
    650644                for (auto& origin : localStorageNameSpace->ephemeralOrigins())
    651                     origins.add(origin);
     645                    origins.add(origin.isolatedCopy());
    652646            }
    653647        }
     
    655649        for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values()) {
    656650            for (auto& origin : transientLocalStorageNamespace->origins())
    657                 origins.add(origin);
     651                origins.add(origin.isolatedCopy());
    658652        }
    659653
     
    669663        Vector<LocalStorageDatabaseTracker::OriginDetails> originDetails;
    670664        if (m_localStorageDatabaseTracker)
    671             originDetails = m_localStorageDatabaseTracker->originDetails();
     665            originDetails = m_localStorageDatabaseTracker->originDetails().isolatedCopy();
    672666
    673667        RunLoop::main().dispatch([originDetails = WTFMove(originDetails), completionHandler = WTFMove(completionHandler)]() mutable {
     
    717711void StorageManager::deleteLocalStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>& origins, Function<void()>&& completionHandler)
    718712{
    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 {
    726714        for (auto& origin : copiedOrigins) {
    727715            for (auto& localStorageNamespace : m_localStorageNamespaces.values())
Note: See TracChangeset for help on using the changeset viewer.