Title: [243806] trunk
Revision
243806
Author
[email protected]
Date
2019-04-03 10:00:36 -0700 (Wed, 03 Apr 2019)

Log 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:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (243805 => 243806)


--- trunk/LayoutTests/ChangeLog	2019-04-03 16:53:21 UTC (rev 243805)
+++ trunk/LayoutTests/ChangeLog	2019-04-03 17:00:36 UTC (rev 243806)
@@ -1,3 +1,14 @@
+2019-04-03  Youenn Fablet  <[email protected]>
+
+        Resetting quota should take into account third party origins
+        https://bugs.webkit.org/show_bug.cgi?id=196462
+
+        Reviewed by Geoffrey Garen.
+
+        * http/wpt/cache-storage/quota-third-party.https-expected.txt:
+        * http/wpt/cache-storage/quota-third-party.https.html:
+        * platform/mac-wk2/TestExpectations:
+
 2019-04-03  Diego Pino Garcia  <[email protected]>
 
         [GTK] Unreviewed gardening, update test expectations

Modified: trunk/LayoutTests/http/wpt/cache-storage/quota-third-party.https-expected.txt (243805 => 243806)


--- trunk/LayoutTests/http/wpt/cache-storage/quota-third-party.https-expected.txt	2019-04-03 16:53:21 UTC (rev 243805)
+++ trunk/LayoutTests/http/wpt/cache-storage/quota-third-party.https-expected.txt	2019-04-03 17:00:36 UTC (rev 243806)
@@ -1,6 +1,8 @@
 CONSOLE MESSAGE: Cache API operation failed: Quota exceeded
+CONSOLE MESSAGE: Cache API operation failed: Quota exceeded
   
 
 PASS same origin iframe has regular quota 
 PASS cross origin iframe has reduced quota 
+PASS cross origin iframe has reduced quota after resetting quota 
 

Modified: trunk/LayoutTests/http/wpt/cache-storage/quota-third-party.https.html (243805 => 243806)


--- trunk/LayoutTests/http/wpt/cache-storage/quota-third-party.https.html	2019-04-03 16:53:21 UTC (rev 243805)
+++ trunk/LayoutTests/http/wpt/cache-storage/quota-third-party.https.html	2019-04-03 17:00:36 UTC (rev 243806)
@@ -24,6 +24,14 @@
     assert_equals(await load_iframe("https://127.0.0.1:9443/WebKit/cache-storage/resources/quota-third-party-iframe.html"), "FAIL");
 }, "cross origin iframe has reduced quota");
 
+promise_test(async () => {
+    // Clear DOMCaches to reset quotas.
+    if (window.testRunner)
+        testRunner.clearDOMCaches();
+
+    assert_equals(await load_iframe("https://127.0.0.1:9443/WebKit/cache-storage/resources/quota-third-party-iframe.html"), "FAIL");
+}, "cross origin iframe has reduced quota after resetting quota");
+
     </script>
 </body>
 </html>

Modified: trunk/LayoutTests/platform/mac-wk2/TestExpectations (243805 => 243806)


--- trunk/LayoutTests/platform/mac-wk2/TestExpectations	2019-04-03 16:53:21 UTC (rev 243805)
+++ trunk/LayoutTests/platform/mac-wk2/TestExpectations	2019-04-03 17:00:36 UTC (rev 243806)
@@ -931,8 +931,6 @@
 
 webkit.org/b/196307 http/tests/resourceLoadStatistics/website-data-removal-for-site-navigated-to-with-link-decoration.html [ Pass Failure ]
 
-webkit.org/b/196358 http/wpt/cache-storage/quota-third-party.https.html [ Pass Failure ]
-
 webkit.org/b/196376 storage/domstorage/localstorage/private-browsing-affects-storage.html [ Pass Failure ]
 
 webkit.org/b/194780 http/wpt/webauthn/public-key-credential-create-success-hid.https.html [ Pass Failure ]

Modified: trunk/Source/WebKit/ChangeLog (243805 => 243806)


--- trunk/Source/WebKit/ChangeLog	2019-04-03 16:53:21 UTC (rev 243805)
+++ trunk/Source/WebKit/ChangeLog	2019-04-03 17:00:36 UTC (rev 243806)
@@ -1,3 +1,26 @@
+2019-04-03  Youenn Fablet  <[email protected]>
+
+        Resetting quota should take into account third party origins
+        https://bugs.webkit.org/show_bug.cgi?id=196462
+
+        Reviewed by Geoffrey Garen.
+
+        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):
+
 2019-04-03  Michael Catanzaro  <[email protected]>
 
         Get rid of HTMLInputElement::setEditingValue

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (243805 => 243806)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2019-04-03 16:53:21 UTC (rev 243805)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2019-04-03 17:00:36 UTC (rev 243806)
@@ -1485,8 +1485,9 @@
     if (iterator == m_storageQuotaManagers.end())
         return;
 
-    for (auto& manager : iterator->value.managersPerOrigin.values())
-        manager->resetQuota(iterator->value.defaultQuota);
+    auto& managers = iterator->value;
+    for (auto& manager : managers.managersPerOrigin())
+        manager.value->resetQuota(managers.defaultQuota(manager.key));
 }
 
 #if ENABLE(RESOURCE_LOAD_STATISTICS)
@@ -2033,9 +2034,7 @@
     auto& managers =  m_storageQuotaManagers.ensure(sessionID, [] {
         return StorageQuotaManagers { };
     }).iterator->value;
-    managers.defaultQuota = quota;
-    // FIXME: Pass default third party quota as a parameter.
-    managers.defaultThirdPartyQuota = quota / 10;
+    managers.setDefaultQuotas(quota, quota / 10);
 
     auto iterator = m_cacheStorageParametersCallbacks.find(sessionID);
     if (iterator == m_cacheStorageParametersCallbacks.end())
@@ -2232,7 +2231,7 @@
 void NetworkProcess::updateQuotaBasedOnSpaceUsageForTesting(PAL::SessionID sessionID, const ClientOrigin& origin)
 {
     auto& manager = storageQuotaManager(sessionID, origin);
-    manager.resetQuota(m_storageQuotaManagers.find(sessionID)->value.defaultQuota);
+    manager.resetQuota(m_storageQuotaManagers.find(sessionID)->value.defaultQuota(origin));
     manager.updateQuotaBasedOnSpaceUsage();
 }
 
@@ -2443,9 +2442,8 @@
     auto& storageQuotaManagers = m_storageQuotaManagers.ensure(sessionID, [] {
         return StorageQuotaManagers { };
     }).iterator->value;
-    return *storageQuotaManagers.managersPerOrigin.ensure(origin, [this, &storageQuotaManagers, sessionID, &origin] {
-        auto quota = origin.topOrigin == origin.clientOrigin ? storageQuotaManagers.defaultQuota : storageQuotaManagers.defaultThirdPartyQuota;
-        auto manager = std::make_unique<StorageQuotaManager>(quota, [this, sessionID, origin](uint64_t quota, uint64_t currentSpace, uint64_t spaceIncrease, auto callback) {
+    return *storageQuotaManagers.managersPerOrigin().ensure(origin, [this, &storageQuotaManagers, sessionID, &origin] {
+        auto manager = std::make_unique<StorageQuotaManager>(storageQuotaManagers.defaultQuota(origin), [this, sessionID, origin](uint64_t quota, uint64_t currentSpace, uint64_t spaceIncrease, auto callback) {
             this->requestStorageSpace(sessionID, origin, quota, currentSpace, spaceIncrease, WTFMove(callback));
         });
         initializeQuotaUsers(*manager, sessionID, origin);

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (243805 => 243806)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2019-04-03 16:53:21 UTC (rev 243805)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2019-04-03 17:00:36 UTC (rev 243806)
@@ -532,10 +532,21 @@
     NetworkHTTPSUpgradeChecker m_networkHTTPSUpgradeChecker;
 #endif
 
-    struct StorageQuotaManagers {
-        uint64_t defaultQuota { WebCore::StorageQuotaManager::defaultQuota() };
-        uint64_t defaultThirdPartyQuota { WebCore::StorageQuotaManager::defaultThirdPartyQuota() };
-        HashMap<WebCore::ClientOrigin, std::unique_ptr<WebCore::StorageQuotaManager>> managersPerOrigin;
+    class StorageQuotaManagers {
+    public:
+        uint64_t defaultQuota(const WebCore::ClientOrigin& origin) const { return origin.topOrigin == origin.clientOrigin ? m_defaultQuota : m_defaultThirdPartyQuota; }
+        void setDefaultQuotas(uint64_t defaultQuota, uint64_t defaultThirdPartyQuota)
+        {
+            m_defaultQuota = defaultQuota;
+            m_defaultThirdPartyQuota = defaultThirdPartyQuota;
+        }
+
+        HashMap<WebCore::ClientOrigin, std::unique_ptr<WebCore::StorageQuotaManager>>& managersPerOrigin() { return m_managersPerOrigin; }
+
+    private:
+        uint64_t m_defaultQuota { WebCore::StorageQuotaManager::defaultQuota() };
+        uint64_t m_defaultThirdPartyQuota { WebCore::StorageQuotaManager::defaultThirdPartyQuota() };
+        HashMap<WebCore::ClientOrigin, std::unique_ptr<WebCore::StorageQuotaManager>> m_managersPerOrigin;
     };
     HashMap<PAL::SessionID, StorageQuotaManagers> m_storageQuotaManagers;
     uint32_t m_downloadMonitorSpeedMultiplier { 1 };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to