// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef WorkletScriptLoader_h
#define WorkletScriptLoader_h

#include "bindings/core/v8/ScriptPromiseResolver.h"
#include "core/fetch/ResourceClient.h"
#include "core/fetch/ResourceOwner.h"
#include "core/fetch/ScriptResource.h"

namespace blink {

class Worklet;

// Class that is responsible for processing {@code resource} that is associated with worklet's import promise.
class WorkletScriptLoader final : public GarbageCollectedFinalized<WorkletScriptLoader>, public ResourceOwner<ScriptResource, ScriptResourceClient> {
    USING_GARBAGE_COLLECTED_MIXIN(WorkletScriptLoader);
    WTF_MAKE_NONCOPYABLE(WorkletScriptLoader);
public:
    static WorkletScriptLoader* create(ScriptPromiseResolver* scriptPromiseResolver, Worklet* worklet, ScriptResource* resource)
    {
        return new WorkletScriptLoader(scriptPromiseResolver, worklet, resource);
    }

    ~WorkletScriptLoader() override = default;

    // Cancels loading of {@code m_resource}.
    //
    // Typically it gets called when WorkletScriptLoader's host is about to be disposed off.
    void cancel();

    DECLARE_TRACE();

private:
    // Default constructor.
    //
    // @param resolver Promise resolver that is used to reject/resolve the promise on ScriptResourceClient::notifyFinished event.
    // @param host Host that needs be notified when the resource is downloaded.
    // @param resource that needs to be downloaded.
    WorkletScriptLoader(ScriptPromiseResolver*, Worklet* host, ScriptResource*);

    // ResourceClient
    void notifyFinished(Resource*) final;
    String debugName() const final { return "WorkletLoader"; }

    Member<ScriptPromiseResolver> m_resolver;
    Member<Worklet> m_host;
};

} // namespace blink

#endif // WorkletScriptLoader_h
