// 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
