⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 243806 in webkit


Ignore:
Timestamp:
Apr 3, 2019, 10:00:36 AM (7 years ago)
Author:
youenn@apple.com
Message:

Resetting quota should take into account third party origins
https://bugs.webkit.org/show_bug.cgi?id=196462

Reviewed by Geoffrey Garen.

Source/WebKit:

When clearing the storage quota, we were resetting it to the default value
without taking care of whether third party or not.
Updated the code to ensure that the default quota is computed based on the origin.

Updated existing test to cover this case.

  • NetworkProcess/NetworkProcess.cpp:

(WebKit::NetworkProcess::clearStorageQuota):
(WebKit::NetworkProcess::setCacheStorageParameters):
(WebKit::NetworkProcess::updateQuotaBasedOnSpaceUsageForTesting):
(WebKit::NetworkProcess::storageQuotaManager):

  • NetworkProcess/NetworkProcess.h:

(WebKit::NetworkProcess::StorageQuotaManagers::defaultQuota const):
(WebKit::NetworkProcess::StorageQuotaManagers::setDefaultQuotas):
(WebKit::NetworkProcess::StorageQuotaManagers::managersPerOrigin):

LayoutTests:

  • http/wpt/cache-storage/quota-third-party.https-expected.txt:
  • http/wpt/cache-storage/quota-third-party.https.html:
  • platform/mac-wk2/TestExpectations:
Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r243805 r243806  
     12019-04-03  Youenn Fablet  <youenn@apple.com>
     2
     3        Resetting quota should take into account third party origins
     4        https://bugs.webkit.org/show_bug.cgi?id=196462
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        * http/wpt/cache-storage/quota-third-party.https-expected.txt:
     9        * http/wpt/cache-storage/quota-third-party.https.html:
     10        * platform/mac-wk2/TestExpectations:
     11
    1122019-04-03  Diego Pino Garcia  <dpino@igalia.com>
    213
  • trunk/LayoutTests/http/wpt/cache-storage/quota-third-party.https-expected.txt

    r243247 r243806  
     1CONSOLE MESSAGE: Cache API operation failed: Quota exceeded
    12CONSOLE MESSAGE: Cache API operation failed: Quota exceeded
    23 
     
    45PASS same origin iframe has regular quota
    56PASS cross origin iframe has reduced quota
     7PASS cross origin iframe has reduced quota after resetting quota
    68
  • trunk/LayoutTests/http/wpt/cache-storage/quota-third-party.https.html

    r243247 r243806  
    2525}, "cross origin iframe has reduced quota");
    2626
     27promise_test(async () => {
     28    // Clear DOMCaches to reset quotas.
     29    if (window.testRunner)
     30        testRunner.clearDOMCaches();
     31
     32    assert_equals(await load_iframe("https://127.0.0.1:9443/WebKit/cache-storage/resources/quota-third-party-iframe.html"), "FAIL");
     33}, "cross origin iframe has reduced quota after resetting quota");
     34
    2735    </script>
    2836</body>
  • trunk/LayoutTests/platform/mac-wk2/TestExpectations

    r243745 r243806  
    932932webkit.org/b/196307 http/tests/resourceLoadStatistics/website-data-removal-for-site-navigated-to-with-link-decoration.html [ Pass Failure ]
    933933
    934 webkit.org/b/196358 http/wpt/cache-storage/quota-third-party.https.html [ Pass Failure ]
    935 
    936934webkit.org/b/196376 storage/domstorage/localstorage/private-browsing-affects-storage.html [ Pass Failure ]
    937935
  • trunk/Source/WebKit/ChangeLog

    r243804 r243806  
     12019-04-03  Youenn Fablet  <youenn@apple.com>
     2
     3        Resetting quota should take into account third party origins
     4        https://bugs.webkit.org/show_bug.cgi?id=196462
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        When clearing the storage quota, we were resetting it to the default value
     9        without taking care of whether third party or not.
     10        Updated the code to ensure that the default quota is computed based on the origin.
     11
     12        Updated existing test to cover this case.
     13
     14        * NetworkProcess/NetworkProcess.cpp:
     15        (WebKit::NetworkProcess::clearStorageQuota):
     16        (WebKit::NetworkProcess::setCacheStorageParameters):
     17        (WebKit::NetworkProcess::updateQuotaBasedOnSpaceUsageForTesting):
     18        (WebKit::NetworkProcess::storageQuotaManager):
     19        * NetworkProcess/NetworkProcess.h:
     20        (WebKit::NetworkProcess::StorageQuotaManagers::defaultQuota const):
     21        (WebKit::NetworkProcess::StorageQuotaManagers::setDefaultQuotas):
     22        (WebKit::NetworkProcess::StorageQuotaManagers::managersPerOrigin):
     23
    1242019-04-03  Michael Catanzaro  <mcatanzaro@igalia.com>
    225
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp

    r243632 r243806  
    14861486        return;
    14871487
    1488     for (auto& manager : iterator->value.managersPerOrigin.values())
    1489         manager->resetQuota(iterator->value.defaultQuota);
     1488    auto& managers = iterator->value;
     1489    for (auto& manager : managers.managersPerOrigin())
     1490        manager.value->resetQuota(managers.defaultQuota(manager.key));
    14901491}
    14911492
     
    20342035        return StorageQuotaManagers { };
    20352036    }).iterator->value;
    2036     managers.defaultQuota = quota;
    2037     // FIXME: Pass default third party quota as a parameter.
    2038     managers.defaultThirdPartyQuota = quota / 10;
     2037    managers.setDefaultQuotas(quota, quota / 10);
    20392038
    20402039    auto iterator = m_cacheStorageParametersCallbacks.find(sessionID);
     
    22332232{
    22342233    auto& manager = storageQuotaManager(sessionID, origin);
    2235     manager.resetQuota(m_storageQuotaManagers.find(sessionID)->value.defaultQuota);
     2234    manager.resetQuota(m_storageQuotaManagers.find(sessionID)->value.defaultQuota(origin));
    22362235    manager.updateQuotaBasedOnSpaceUsage();
    22372236}
     
    24442443        return StorageQuotaManagers { };
    24452444    }).iterator->value;
    2446     return *storageQuotaManagers.managersPerOrigin.ensure(origin, [this, &storageQuotaManagers, sessionID, &origin] {
    2447         auto quota = origin.topOrigin == origin.clientOrigin ? storageQuotaManagers.defaultQuota : storageQuotaManagers.defaultThirdPartyQuota;
    2448         auto manager = std::make_unique<StorageQuotaManager>(quota, [this, sessionID, origin](uint64_t quota, uint64_t currentSpace, uint64_t spaceIncrease, auto callback) {
     2445    return *storageQuotaManagers.managersPerOrigin().ensure(origin, [this, &storageQuotaManagers, sessionID, &origin] {
     2446        auto manager = std::make_unique<StorageQuotaManager>(storageQuotaManagers.defaultQuota(origin), [this, sessionID, origin](uint64_t quota, uint64_t currentSpace, uint64_t spaceIncrease, auto callback) {
    24492447            this->requestStorageSpace(sessionID, origin, quota, currentSpace, spaceIncrease, WTFMove(callback));
    24502448        });
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.h

    r243632 r243806  
    533533#endif
    534534
    535     struct StorageQuotaManagers {
    536         uint64_t defaultQuota { WebCore::StorageQuotaManager::defaultQuota() };
    537         uint64_t defaultThirdPartyQuota { WebCore::StorageQuotaManager::defaultThirdPartyQuota() };
    538         HashMap<WebCore::ClientOrigin, std::unique_ptr<WebCore::StorageQuotaManager>> managersPerOrigin;
     535    class StorageQuotaManagers {
     536    public:
     537        uint64_t defaultQuota(const WebCore::ClientOrigin& origin) const { return origin.topOrigin == origin.clientOrigin ? m_defaultQuota : m_defaultThirdPartyQuota; }
     538        void setDefaultQuotas(uint64_t defaultQuota, uint64_t defaultThirdPartyQuota)
     539        {
     540            m_defaultQuota = defaultQuota;
     541            m_defaultThirdPartyQuota = defaultThirdPartyQuota;
     542        }
     543
     544        HashMap<WebCore::ClientOrigin, std::unique_ptr<WebCore::StorageQuotaManager>>& managersPerOrigin() { return m_managersPerOrigin; }
     545
     546    private:
     547        uint64_t m_defaultQuota { WebCore::StorageQuotaManager::defaultQuota() };
     548        uint64_t m_defaultThirdPartyQuota { WebCore::StorageQuotaManager::defaultThirdPartyQuota() };
     549        HashMap<WebCore::ClientOrigin, std::unique_ptr<WebCore::StorageQuotaManager>> m_managersPerOrigin;
    539550    };
    540551    HashMap<PAL::SessionID, StorageQuotaManagers> m_storageQuotaManagers;
Note: See TracChangeset for help on using the changeset viewer.