LibWeb: Stub CacheStorage interface

With this change we can again open login form https://discord.com/login
instead of failing in js because `caches.open()` is not defined.
This commit is contained in:
Aliaksandr Kalenik 2025-06-05 17:50:08 +02:00 committed by Alexander Kalenik
commit 7efdd1c1ec
Notes: github-actions[bot] 2025-06-05 21:03:31 +00:00
10 changed files with 102 additions and 0 deletions

View file

@ -40,6 +40,7 @@
#include <LibWeb/Platform/EventLoopPlugin.h>
#include <LibWeb/Platform/ImageCodecPlugin.h>
#include <LibWeb/ResourceTiming/PerformanceResourceTiming.h>
#include <LibWeb/ServiceWorker/CacheStorage.h>
#include <LibWeb/UserTiming/PerformanceMark.h>
#include <LibWeb/UserTiming/PerformanceMeasure.h>
#include <LibWeb/WebIDL/AbstractOperations.h>
@ -77,6 +78,7 @@ void WindowOrWorkerGlobalScopeMixin::visit_edges(JS::Cell::Visitor& visitor)
entry.value.visit_edges(visitor);
visitor.visit(m_registered_event_sources);
visitor.visit(m_crypto);
visitor.visit(m_cache_storage);
visitor.visit(m_resource_timing_secondary_buffer);
}
@ -1020,4 +1022,15 @@ GC::Ref<Crypto::Crypto> WindowOrWorkerGlobalScopeMixin::crypto()
return GC::Ref { *m_crypto };
}
// https://w3c.github.io/ServiceWorker/#cache-storage-interface
GC::Ref<ServiceWorker::CacheStorage> WindowOrWorkerGlobalScopeMixin::caches()
{
auto& platform_object = this_impl();
auto& realm = platform_object.realm();
if (!m_cache_storage)
m_cache_storage = realm.create<ServiceWorker::CacheStorage>(realm);
return GC::Ref { *m_cache_storage };
}
}

View file

@ -18,6 +18,7 @@
#include <LibWeb/HTML/ImageBitmap.h>
#include <LibWeb/PerformanceTimeline/PerformanceEntry.h>
#include <LibWeb/PerformanceTimeline/PerformanceEntryTuple.h>
#include <LibWeb/ServiceWorker/CacheStorage.h>
#include <LibWeb/WebSockets/WebSocket.h>
namespace Web::HTML {
@ -100,6 +101,8 @@ public:
[[nodiscard]] GC::Ref<Crypto::Crypto> crypto();
[[nodiscard]] GC::Ref<ServiceWorker::CacheStorage> caches();
protected:
void initialize(JS::Realm&);
void visit_edges(JS::Cell::Visitor&);
@ -146,6 +149,8 @@ private:
GC::Ptr<Crypto::Crypto> m_crypto;
GC::Ptr<ServiceWorker::CacheStorage> m_cache_storage;
bool m_error_reporting_mode { false };
WebSockets::WebSocket::List m_registered_web_sockets;

View file

@ -5,6 +5,7 @@
#import <HTML/ImageBitmap.idl>
#import <HTML/MessagePort.idl>
#import <IndexedDB/IDBFactory.idl>
#import <ServiceWorker/CacheStorage.idl>
// https://html.spec.whatwg.org/multipage/webappapis.html#timerhandler
typedef (DOMString or Function) TimerHandler;
@ -39,4 +40,7 @@ interface mixin WindowOrWorkerGlobalScope {
// https://w3c.github.io/webcrypto/#crypto-interface
[SameObject] readonly attribute Crypto crypto;
// https://w3c.github.io/ServiceWorker/#cache-storage-interface
[SecureContext, SameObject] readonly attribute CacheStorage caches;
};