Diff
Modified: trunk/Source/WebKit/ChangeLog (252350 => 252351)
--- trunk/Source/WebKit/ChangeLog 2019-11-12 01:47:50 UTC (rev 252350)
+++ trunk/Source/WebKit/ChangeLog 2019-11-12 01:49:26 UTC (rev 252351)
@@ -1,3 +1,28 @@
+2019-11-11 Sihui Liu <[email protected]>
+
+ Add size file for CacheStorage
+ https://bugs.webkit.org/show_bug.cgi?id=204027
+
+ Reviewed by Youenn Fablet.
+
+ Keep the CacheStorage size in a separate file so that we can get that value without waiting for Engine to
+ initialize and read caches from disk.
+
+ No behavior change as the file is not in use now.
+
+ * NetworkProcess/cache/CacheStorageEngine.cpp:
+ (WebKit::CacheStorage::Engine::writeSizeFile):
+ (WebKit::CacheStorage::Engine::readSizeFile):
+ * NetworkProcess/cache/CacheStorageEngine.h:
+ * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
+ (WebKit::CacheStorage::cachesSizeFilename):
+ (WebKit::CacheStorage::Caches::updateSizeFile):
+ (WebKit::CacheStorage::Caches::initializeSize):
+ (WebKit::CacheStorage::Caches::writeRecord):
+ (WebKit::CacheStorage::Caches::removeRecord):
+ (WebKit::CacheStorage::Caches::resetSpaceUsed):
+ * NetworkProcess/cache/CacheStorageEngineCaches.h:
+
2019-11-11 Youenn Fablet <[email protected]>
Fail cross-origin redirection loads in case of CORS with redirection URLs having credentials
Modified: trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp (252350 => 252351)
--- trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp 2019-11-12 01:47:50 UTC (rev 252350)
+++ trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp 2019-11-12 01:49:26 UTC (rev 252351)
@@ -35,6 +35,7 @@
#include <WebCore/SecurityOrigin.h>
#include <wtf/CallbackAggregator.h>
#include <wtf/NeverDestroyed.h>
+#include <wtf/Scope.h>
#include <wtf/text/StringBuilder.h>
#include <wtf/text/StringHash.h>
@@ -461,6 +462,55 @@
});
}
+void Engine::writeSizeFile(const String& path, uint64_t size)
+{
+ if (!shouldPersist())
+ return;
+
+ m_ioQueue->dispatch([path = path.isolatedCopy(), size]() {
+ auto fileHandle = FileSystem::openAndLockFile(path, FileSystem::FileOpenMode::Write, { FileSystem::FileLockMode::Exclusive });
+ auto closeFileHandle = makeScopeExit([&] {
+ FileSystem::unlockAndCloseFile(fileHandle);
+ });
+
+ if (!FileSystem::isHandleValid(fileHandle))
+ return;
+
+ FileSystem::truncateFile(fileHandle, 0);
+
+ FileSystem::writeToFile(fileHandle, String::number(size).utf8().data(), String::number(size).utf8().length());
+ });
+}
+
+Optional<uint64_t> Engine::readSizeFile(const String& path)
+{
+ ASSERT(!RunLoop::isMain());
+ ASSERT(FileSystem::fileExists(path));
+
+ auto fileHandle = FileSystem::openAndLockFile(path, FileSystem::FileOpenMode::Read, { FileSystem::FileLockMode::Exclusive });
+ auto closeFileHandle = makeScopeExit([&] {
+ FileSystem::unlockAndCloseFile(fileHandle);
+ });
+
+ if (!FileSystem::isHandleValid(fileHandle))
+ return WTF::nullopt;
+
+ long long fileSize = 0;
+ if (!FileSystem::getFileSize(path, fileSize) || !fileSize)
+ return WTF::nullopt;
+
+ size_t bytesToRead;
+ if (!WTF::convertSafely(fileSize, bytesToRead))
+ return WTF::nullopt;
+
+ Vector<char> buffer(bytesToRead);
+ size_t totalBytesRead = FileSystem::readFromFile(fileHandle, buffer.data(), buffer.size());
+ if (totalBytesRead != bytesToRead)
+ return WTF::nullopt;
+
+ return String::fromUTF8(buffer.data()).toUInt64Strict();
+}
+
class ReadOriginsTaskCounter : public RefCounted<ReadOriginsTaskCounter> {
public:
static Ref<ReadOriginsTaskCounter> create(CompletionHandler<void(Vector<WebsiteData::Entry>)>&& callback)
Modified: trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngine.h (252350 => 252351)
--- trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngine.h 2019-11-12 01:47:50 UTC (rev 252350)
+++ trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngine.h 2019-11-12 01:49:26 UTC (rev 252351)
@@ -84,6 +84,8 @@
void writeFile(const String& filename, NetworkCache::Data&&, WebCore::DOMCacheEngine::CompletionCallback&&);
void readFile(const String& filename, CompletionHandler<void(const NetworkCache::Data&, int error)>&&);
void removeFile(const String& filename);
+ void writeSizeFile(const String&, uint64_t size);
+ static Optional<uint64_t> readSizeFile(const String&);
const String& rootPath() const { return m_rootPath; }
const NetworkCache::Salt& salt() const { return m_salt.value(); }
Modified: trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp (252350 => 252351)
--- trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp 2019-11-12 01:47:50 UTC (rev 252350)
+++ trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp 2019-11-12 01:49:26 UTC (rev 252351)
@@ -51,6 +51,11 @@
return FileSystem::pathByAppendingComponent(cachesRootPath, "origin"_s);
}
+static inline String cachesSizeFilename(const String& cachesRootsPath)
+{
+ return FileSystem::pathByAppendingComponent(cachesRootsPath, "estimatedsize"_s);
+}
+
Ref<Caches> Caches::create(Engine& engine, WebCore::ClientOrigin&& origin, String&& rootPath, WebCore::StorageQuotaManager& quotaManager)
{
auto caches = adoptRef(*new Caches { engine, WTFMove(origin), WTFMove(rootPath), quotaManager });
@@ -203,6 +208,12 @@
});
}
+void Caches::updateSizeFile()
+{
+ if (m_engine)
+ m_engine->writeSizeFile(cachesSizeFilename(m_rootPath), m_size);
+}
+
void Caches::initializeSize()
{
if (!m_storage) {
@@ -221,6 +232,8 @@
return;
}
m_size = size;
+ updateSizeFile();
+
m_isInitialized = true;
auto pendingCallbacks = WTFMove(m_pendingInitializationCallbacks);
for (auto& callback : pendingCallbacks)
@@ -535,6 +548,7 @@
ASSERT(m_size >= previousRecordSize);
m_size += recordInformation.size;
m_size -= previousRecordSize;
+ updateSizeFile();
if (!shouldPersist()) {
m_volatileStorage.set(recordInformation.key, WTFMove(record));
@@ -591,6 +605,8 @@
ASSERT(m_size >= record.size);
m_size -= record.size;
+ updateSizeFile();
+
removeCacheEntry(record.key);
}
@@ -608,6 +624,8 @@
void Caches::resetSpaceUsed()
{
m_size = 0;
+ updateSizeFile();
+
if (m_quotaManager) {
m_quotaManager->removeUser(*this);
m_quotaManager->addUser(*this);
Modified: trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.h (252350 => 252351)
--- trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.h 2019-11-12 01:47:50 UTC (rev 252350)
+++ trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.h 2019-11-12 01:49:26 UTC (rev 252351)
@@ -105,6 +105,8 @@
bool hasActiveCache() const;
+ void updateSizeFile();
+
bool m_isInitialized { false };
Engine* m_engine { nullptr };
uint64_t m_updateCounter { 0 };