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

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef FXJS_CJS_RUNTIMESTUB_H_
#define FXJS_CJS_RUNTIMESTUB_H_

#include <memory>

#include "core/fxcrt/unowned_ptr.h"
#include "core/fxcrt/widestring.h"
#include "fxjs/ijs_runtime.h"

class CPDFSDK_FormFillEnvironment;
class IJS_EventContext;

class CJS_RuntimeStub final : public IJS_Runtime {
 public:
  explicit CJS_RuntimeStub(CPDFSDK_FormFillEnvironment* pFormFillEnv);
  ~CJS_RuntimeStub() override;

  // IJS_Runtime:
  CJS_Runtime* AsCJSRuntime() override;
  IJS_EventContext* NewEventContext() override;
  void ReleaseEventContext(IJS_EventContext* pContext) override;
  CPDFSDK_FormFillEnvironment* GetFormFillEnv() const override;

  absl::optional<IJS_Runtime::JS_Error> ExecuteScript(
      const WideString& script) override;

 private:
  UnownedPtr<CPDFSDK_FormFillEnvironment> const m_pFormFillEnv;
  std::unique_ptr<IJS_EventContext> m_pContext;
};

#endif  // FXJS_CJS_RUNTIMESTUB_H_
