tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

StencilObject.h (2013B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
      2 * vim: set ts=8 sts=2 et sw=2 tw=80:
      3 * This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef vm_StencilObject_h
      8 #define vm_StencilObject_h
      9 
     10 #include "mozilla/RefPtr.h"  // RefPtr
     11 
     12 #include <stddef.h>  // size_t
     13 #include <stdint.h>  // uint8_t
     14 
     15 #include "js/Class.h"                   // JSClassOps, JSClass
     16 #include "js/experimental/JSStencil.h"  // JS::Stencil
     17 #include "js/TypeDecls.h"
     18 #include "vm/NativeObject.h"  // NativeObject
     19 
     20 class JSObject;
     21 
     22 namespace js {
     23 
     24 // Object that holds JS::Stencil.
     25 //
     26 // This is a testing-only feature which can only be produced by testing
     27 // functions.
     28 class StencilObject : public NativeObject {
     29  static constexpr size_t StencilSlot = 0;
     30  static constexpr size_t ReservedSlots = 1;
     31 
     32 public:
     33  static const JSClassOps classOps_;
     34  static const JSClass class_;
     35 
     36  bool hasStencil() const;
     37  JS::Stencil* stencil() const;
     38 
     39  static StencilObject* create(JSContext* cx, RefPtr<JS::Stencil> stencil);
     40  static void finalize(JS::GCContext* gcx, JSObject* obj);
     41 };
     42 
     43 // Object that holds Stencil XDR buffer.
     44 //
     45 // This is a testing-only feature which can only be produced by testing
     46 // functions.
     47 class StencilXDRBufferObject : public NativeObject {
     48  static constexpr size_t BufferSlot = 0;
     49  static constexpr size_t LengthSlot = 1;
     50  static constexpr size_t ReservedSlots = 2;
     51 
     52 public:
     53  static const JSClassOps classOps_;
     54  static const JSClass class_;
     55 
     56  bool hasBuffer() const;
     57  const uint8_t* buffer() const;
     58  size_t bufferLength() const;
     59 
     60 private:
     61  uint8_t* writableBuffer();
     62 
     63 public:
     64  static StencilXDRBufferObject* create(JSContext* cx, uint8_t* buffer,
     65                                        size_t length);
     66  static void finalize(JS::GCContext* gcx, JSObject* obj);
     67 };
     68 
     69 } /* namespace js */
     70 
     71 #endif /* vm_StencilObject_h */