author Alex Gaynor <>
Mon, 27 Nov 2017 14:37:34 -0600
changeset 403385 bcc0a91dd43feae18d4bf04d7db3d146035aa416
parent 305373 fba169c6ead923420d03932778ef5d88cbf2f0d7
child 441574 59befcc4a2d6886d0d642710dd4b0ebc25a62082
permissions -rw-r--r--
Bug 1407693 - Part 2 - when a child process crashes, write extra annotation data to a pre-opened file descriptor instead of creating a new file; r=gsvelto,rbarker This removes the need for the content process to have permissions to create new files on macOS, allowing more aggressive sandboxing. MozReview-Commit-ID: 8agL5jwxDSL

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at */


#include "GLDefs.h"
#include "mozilla/Attributes.h"
#include "nsCycleCollectionParticipant.h" // NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS
#include "nsString.h"
#include "nsWrapperCache.h"

namespace mozilla {

class WebGLContext;

class WebGLActiveInfo final
    : public nsWrapperCache

    virtual JSObject* WrapObject(JSContext* js, JS::Handle<JSObject*> givenProto) override;

    WebGLContext* GetParentObject() const {
        return mWebGL;

    WebGLContext* const mWebGL;

    // ActiveInfo state:
    const uint32_t mElemCount; // `size`
    const GLenum mElemType; // `type`
    const nsCString mBaseUserName; // `name`, but ASCII, and without any final "[0]".

    // Not actually part of ActiveInfo:
    const bool mIsArray;
    const uint8_t mElemSize;
    const nsCString mBaseMappedName; // Without any final "[0]".

    bool IsSampler() const;

    WebGLActiveInfo(WebGLContext* webgl, GLint elemCount, GLenum elemType, bool isArray,
                    const nsACString& baseUserName, const nsACString& baseMappedName);

    /* GLES 2.0.25, p33:
     *   This command will return as much information about active
     *   attributes as possible. If no information is available, length will
     *   be set to zero and name will be an empty string. This situation
     *   could arise if GetActiveAttrib is issued after a failed link.
     * It's the same for GetActiveUniform.
    static WebGLActiveInfo* CreateInvalid(WebGLContext* webgl) {
        return new WebGLActiveInfo(webgl);

    // WebIDL attributes
    GLint Size() const {
        return mElemCount;

    GLenum Type() const {
        return mElemType;

    void GetName(nsString& retval) const {
        CopyASCIItoUTF16(mBaseUserName, retval);
        if (mIsArray)

    explicit WebGLActiveInfo(WebGLContext* webgl)
        : mWebGL(webgl)
        , mElemCount(0)
        , mElemType(0)
        , mBaseUserName("")
        , mIsArray(false)
        , mElemSize(0)
        , mBaseMappedName("")
    { }

    // Private destructor, to discourage deletion outside of Release():
    ~WebGLActiveInfo() { }


bool IsElemTypeSampler(GLenum elemType);

} // namespace mozilla