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 };