// Copyright 2017 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 ModuleTreeLinkerRegistry_h
#define ModuleTreeLinkerRegistry_h

#include "core/CoreExport.h"
#include "core/dom/AncestorList.h"
#include "platform/bindings/ScriptWrappable.h"
#include "platform/bindings/TraceWrapperMember.h"
#include "platform/heap/Handle.h"

namespace blink {

class Modulator;
class ModuleScriptFetchRequest;
class ModuleTreeClient;
class ModuleTreeLinker;
enum class ModuleGraphLevel;
class ModuleScript;

// ModuleTreeLinkerRegistry keeps active ModuleTreeLinkers alive.
class CORE_EXPORT ModuleTreeLinkerRegistry
    : public GarbageCollected<ModuleTreeLinkerRegistry>,
      public TraceWrapperBase {
 public:
  static ModuleTreeLinkerRegistry* Create() {
    return new ModuleTreeLinkerRegistry;
  }
  DECLARE_TRACE();
  DECLARE_TRACE_WRAPPERS();

  ModuleTreeLinker* Fetch(const ModuleScriptFetchRequest&,
                          const AncestorList&,
                          ModuleGraphLevel,
                          Modulator*,
                          ModuleTreeClient*);
  ModuleTreeLinker* FetchDescendantsForInlineScript(ModuleScript*,
                                                    Modulator*,
                                                    ModuleTreeClient*);

 private:
  ModuleTreeLinkerRegistry() = default;

  friend class ModuleTreeLinker;
  void ReleaseFinishedFetcher(ModuleTreeLinker*);

  HeapHashSet<TraceWrapperMember<ModuleTreeLinker>> active_tree_linkers_;
};

}  // namespace blink

#endif
