// Copyright 2014 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 FXJSE_RUNTIME_H_
#define FXJSE_RUNTIME_H_
class CFXJSE_RuntimeList;
class CFXJSE_RuntimeData {
 protected:
  CFXJSE_RuntimeData(v8::Isolate* pIsolate) : m_pIsolate(pIsolate){};

 public:
  static CFXJSE_RuntimeData* Create(v8::Isolate* pIsolate);
  static CFXJSE_RuntimeData* Get(v8::Isolate* pIsolate);

 public:
  v8::Isolate* m_pIsolate;
  v8::Global<v8::FunctionTemplate> m_hRootContextGlobalTemplate;
  v8::Global<v8::Context> m_hRootContext;

 public:
  static CFXJSE_RuntimeList* g_RuntimeList;

 protected:
  CFXJSE_RuntimeData();
  CFXJSE_RuntimeData(const CFXJSE_RuntimeData&);
  CFXJSE_RuntimeData& operator=(const CFXJSE_RuntimeData&);
};
class CFXJSE_RuntimeList {
 public:
  typedef void (*RuntimeDisposeCallback)(v8::Isolate*);

 public:
  void AppendRuntime(v8::Isolate* pIsolate);
  void RemoveRuntime(v8::Isolate* pIsolate,
                     RuntimeDisposeCallback lpfnDisposeCallback);
  void RemoveAllRuntimes(RuntimeDisposeCallback lpfnDisposeCallback);

 protected:
  CFX_ArrayTemplate<v8::Isolate*> m_RuntimeList;
};
#endif
