// 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 THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_SCRIPT_MODULE_RESOLVER_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_SCRIPT_MODULE_RESOLVER_H_

#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"

namespace blink {

class ScriptModule;
class ModuleScript;

// The ScriptModuleResolver interface is used from V8 module bindings
// when it need the ScriptModule's descendants.
//
// When a module writes import 'x', the module is called the referrer, 'x' is
// the specifier, and the module identified by 'x' is the descendant.
// ScriptModuleResolver, given a referrer and specifier, can look up the
// descendant.
class CORE_EXPORT ScriptModuleResolver
    : public GarbageCollectedFinalized<ScriptModuleResolver> {
 public:
  virtual ~ScriptModuleResolver() = default;
  virtual void Trace(blink::Visitor* visitor) {}

  // Notifies the ScriptModuleResolver that a ModuleScript exists.
  // This hook gives a chance for the resolver impl to populate module record
  // identifier -> ModuleScript mapping entry.
  virtual void RegisterModuleScript(ModuleScript*) = 0;

  // Notifies the ScriptModuleResolver to clear its ModuleScript mapping.
  virtual void UnregisterModuleScript(ModuleScript*) = 0;

  // Corresponds to the spec concept "[[HostDefined]]".
  virtual ModuleScript* GetHostDefined(const ScriptModule&) const = 0;

  // Implements "Runtime Semantics: HostResolveImportedModule"
  // https://tc39.github.io/ecma262/#sec-hostresolveimportedmodule
  // This returns a null ScriptModule when an exception is thrown.
  virtual ScriptModule Resolve(const String& specifier,
                               const ScriptModule& referrer,
                               ExceptionState&) = 0;
};

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_SCRIPT_MODULE_RESOLVER_H_
