DOMCSSPaintWorklet.cpp [plain text]
#include "config.h"
#include "DOMCSSPaintWorklet.h"
#if ENABLE(CSS_PAINTING_API)
#include "DOMCSSNamespace.h"
#include "Document.h"
#include "PaintWorkletGlobalScope.h"
#include "WorkletGlobalScopeProxy.h"
#include <wtf/text/WTFString.h>
namespace WebCore {
PaintWorklet& DOMCSSPaintWorklet::ensurePaintWorklet(Document& document)
{
return document.ensurePaintWorklet();
}
DOMCSSPaintWorklet* DOMCSSPaintWorklet::from(DOMCSSNamespace& css)
{
auto* supplement = static_cast<DOMCSSPaintWorklet*>(Supplement<DOMCSSNamespace>::from(&css, supplementName()));
if (!supplement) {
auto newSupplement = makeUnique<DOMCSSPaintWorklet>(css);
supplement = newSupplement.get();
provideTo(&css, supplementName(), WTFMove(newSupplement));
}
return supplement;
}
const char* DOMCSSPaintWorklet::supplementName()
{
return "DOMCSSPaintWorklet";
}
void PaintWorklet::addModule(const String& moduleURL, WorkletOptions&&, DOMPromiseDeferred<void>&& promise)
{
auto* document = this->document();
if (!document) {
promise.reject(Exception { InvalidStateError, "This frame is detached"_s });
return;
}
auto maybeContext = PaintWorkletGlobalScope::tryCreate(*document, ScriptSourceCode(moduleURL));
if (UNLIKELY(!maybeContext)) {
promise.reject(Exception { OutOfMemoryError });
return;
}
auto context = maybeContext.releaseNonNull();
context->evaluate();
auto locker = holdLock(context->paintDefinitionLock());
for (auto& name : context->paintDefinitionMap().keys())
document->setPaintWorkletGlobalScopeForName(name, makeRef(context.get()));
promise.resolve();
}
Vector<Ref<WorkletGlobalScopeProxy>> PaintWorklet::createGlobalScopes()
{
return { };
}
}
#endif