/ runtime / JSScriptFetchParameters.h
JSScriptFetchParameters.h
 1  /*
 2   * Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com>
 3   * Copyright (C) 2018-2019 Apple Inc. All rights reserved.
 4   *
 5   * Redistribution and use in source and binary forms, with or without
 6   * modification, are permitted provided that the following conditions
 7   * are met:
 8   * 1. Redistributions of source code must retain the above copyright
 9   *    notice, this list of conditions and the following disclaimer.
10   * 2. Redistributions in binary form must reproduce the above copyright
11   *    notice, this list of conditions and the following disclaimer in the
12   *    documentation and/or other materials provided with the distribution.
13   *
14   * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15   * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
18   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21   * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22   * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25   */
26  
27  #pragma once
28  
29  #include "JSGlobalObject.h"
30  #include "JSObject.h"
31  #include "ScriptFetchParameters.h"
32  #include <wtf/Ref.h>
33  
34  namespace JSC {
35  
36  class JSScriptFetchParameters final : public JSCell {
37  public:
38      using Base = JSCell;
39  
40      static constexpr unsigned StructureFlags = Base::StructureFlags | StructureIsImmortal;
41      static constexpr bool needsDestruction = true;
42  
43      DECLARE_EXPORT_INFO;
44  
45      template<typename CellType, SubspaceAccess mode>
46      static IsoSubspace* subspaceFor(VM& vm)
47      {
48          return vm.scriptFetchParametersSpace<mode>();
49      }
50  
51      static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
52      {
53          return Structure::create(vm, globalObject, prototype, TypeInfo(JSScriptFetchParametersType, StructureFlags), info());
54      }
55  
56      static JSScriptFetchParameters* create(VM& vm, Structure* structure, Ref<ScriptFetchParameters>&& parameters)
57      {
58          auto* result = new (NotNull, allocateCell<JSScriptFetchParameters>(vm.heap)) JSScriptFetchParameters(vm, structure, WTFMove(parameters));
59          result->finishCreation(vm);
60          return result;
61      }
62  
63      static JSScriptFetchParameters* create(VM& vm, Ref<ScriptFetchParameters>&& parameters)
64      {
65          return create(vm, vm.scriptFetchParametersStructure.get(), WTFMove(parameters));
66      }
67  
68      ScriptFetchParameters& parameters() const
69      {
70          return m_parameters.get();
71      }
72  
73      static void destroy(JSCell*);
74  
75  private:
76      JSScriptFetchParameters(VM& vm, Structure* structure, Ref<ScriptFetchParameters>&& parameters)
77          : Base(vm, structure)
78          , m_parameters(WTFMove(parameters))
79      {
80      }
81  
82      Ref<ScriptFetchParameters> m_parameters;
83  };
84  
85  } // namespace JSC