Name Description Size
BasicRenderingContext2D.h BasicRenderingContext2D 6587
CacheInvalidator.cpp 1295
CacheInvalidator.h 4549
CanvasGradient.cpp 506
CanvasGradient.h 1892
CanvasImageCache.cpp Used for images specific to this one canvas. Required due to CORS security. 10753
CanvasImageCache.h Notify that image element aImage was drawn to aCanvas element using the first frame of aRequest's image. The data for the surface is in aSurface, and the image size is in aSize. aIntrinsicSize is the size the surface is intended to be rendered at. 1914
CanvasPath.h CanvasPath_h 3116
CanvasPattern.cpp 870
CanvasPattern.h 1770
CanvasRenderingContext2D.cpp Memory reporter stuff 183317
CanvasRenderingContext2D.h CanvasRenderingContext2D 37761
CanvasRenderingContextHelper.cpp webgl2: 9499
CanvasRenderingContextHelper.h Povides common RenderingContext functionality used by both OffscreenCanvas and HTMLCanvasElement. 2606
CanvasUtils.cpp 10016
CanvasUtils.h Float validation stuff 5453
ClientWebGLContext.cpp 196948
ClientWebGLContext.h 76219
ClientWebGLExtensions.cpp 9547
ClientWebGLExtensions.h 12986
GeneratePlaceholderCanvasData.h When privacy.resistFingerprinting.randomDataOnCanvasExtract is true, tries to generate random data for placeholder canvas by sampling RANDOM_BYTES_TO_SAMPLE bytes and then returning it. If this fails or if privacy.resistFingerprinting.randomDataOnCanvasExtract is false, returns nullptr. @return uint8_t* output buffer 3506
HostWebGLContext.cpp static 6139
HostWebGLContext.h Host endpoint of a WebGLContext. HostWebGLContext owns a WebGLContext that it uses to execute commands sent from its ClientWebGLContext. A HostWebGLContext continuously issues a Task to the Compositor thread that causes it to drain its queue of commands. It also maintains a map of WebGL objects (e.g. ObjectIdMap<WebGLShader>) that it uses associate them with their cross-process IDs. This class is not an implementation of the nsICanvasRenderingContextInternal DOM class. That is the ClientWebGLContext. 26927
ImageBitmap.cpp This class observes shutdown notifications and sends that notification to the worker thread if the image bitmap is on a worker thread. 55088
ImageBitmap.h ImageBitmap is an opaque handler to several kinds of image-like objects from HTMLImageElement, HTMLVideoElement, HTMLCanvasElement, ImageData to CanvasRenderingContext2D and Image Blob. An ImageBitmap could be painted to a canvas element. Generally, an ImageBitmap only keeps a reference to its source object's buffer, but if the source object is an ImageData, an Blob or a HTMLCanvasElement with WebGL rendering context, the ImageBitmap copy the source object's buffer. 9001
ImageBitmapRenderingContext.cpp 8917
ImageBitmapRenderingContext.h The purpose of ImageBitmapRenderingContext is to provide a faster and efficient way to display ImageBitmap. Simply call TransferFromImageBitmap() then we'll transfer the surface of ImageBitmap to this context and then to use it to display. See more details in spec: https://wiki.whatwg.org/wiki/OffscreenCanvas 3514
ImageBitmapSource.h 850
ImageData.cpp 4181
ImageData.h 2421
ImageUtils.cpp 6746
ImageUtils.h ImageUtils is a wrapper around layers::Image. It provides three unified methods to all sub-classes of layers::Image, which are: (1) GetFormat() converts the image's format into ImageBitmapFormat enum. (2) GetBufferLength() returns the number of bytes that are used to store the image's underlying raw data. In theory, the functionalities of this class could be merged into the interface of layers::Image. However, this is designed as a isolated wrapper because we don't want to pollute the layers::Image's interface with methods that are only meaningful to the ImageBitmap. 1837
IpdlQueue.h Sends the message immediately. Does not wait for a response. 21714
MurmurHash3.cpp 8477
MurmurHash3.h 842
OffscreenCanvas.cpp static 10618
OffscreenCanvas.h 5203
PWebGL.ipdl Represents the connection between a WebGLChild actor that issues WebGL command from the content process, and a WebGLParent in the compositor process that runs the commands. 4873
ProducerConsumerQueue.h PcqActor is an actor base-class that is used as a static map that provides casting from an IProtocol to a PcqActor. PcqActors delegate all needed IProtocol operations and also support weak references. Actors used to construct a PCQ must implement this class. Example: class MyActorParent : public PMyActorParent, public PcqActor { MyActorParent() : PcqActor(this) {} // ... } Implementations of abstract methods will typically just forward to IProtocol. 35183
Queue.cpp 499
QueueParamTraits.h QueueParamTraits provide the user with a way to implement PCQ argument (de)serialization. It uses a PcqView, which permits the system to abandon all changes to the underlying PCQ if any operation fails. The transactional nature of PCQ operations make the ideal behavior a bit complex. Since the PCQ has a fixed amount of memory available to it, TryInsert operations operations are expected to sometimes fail and be re-issued later. We want these failures to be inexpensive. The same goes for TryRemove, which fails when there isn't enough data in the queue yet for them to complete. Their expected interface is: template<> struct QueueParamTraits<typename RemoveCVR<Arg>::Type> { // Write data from aArg into the PCQ. static QueueStatus Write(ProducerView& aProducerView, const Arg& aArg) {...}; // Read data from the PCQ into aArg, or just skip the data if aArg is null. static QueueStatus Read(ConsumerView& aConsumerView, Arg* aArg) {...} }; 26779
TexUnpackBlob.cpp 29096
TexUnpackBlob.h 4702
TextMetrics.h 3247
WebGL2Context.cpp virtual 5272
WebGL2Context.h Implemented in WebGLContext void VertexAttribDivisor(GLuint index, GLuint divisor); void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount); void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, WebGLintptr offset, GLsizei instanceCount); 6237
WebGL2ContextBuffers.cpp 5125
WebGL2ContextFramebuffers.cpp 7716
WebGL2ContextMRTs.cpp 4432
WebGL2ContextQueries.cpp We fake ANY_SAMPLES_PASSED and ANY_SAMPLES_PASSED_CONSERVATIVE with SAMPLES_PASSED on desktop. OpenGL ES 3.0 spec 4.1.6: If the target of the query is ANY_SAMPLES_PASSED_CONSERVATIVE, an implementation may choose to use a less precise version of the test which can additionally set the samples-boolean state to TRUE in some other implementation-dependent cases. 3295
WebGL2ContextRenderbuffers.cpp 2254
WebGL2ContextSamplers.cpp 2989
WebGL2ContextState.cpp GLboolean 3784
WebGL2ContextSync.cpp 1934
WebGL2ContextTransformFeedback.cpp 2792
WebGL2ContextUniforms.cpp 2454
WebGLBuffer.cpp 12084
WebGLBuffer.h 2408
WebGLChild.cpp 2293
WebGLChild.h 1940
WebGLCommandQueue.h A CommandSource is obtained from a CommandQueue. Use it by inserting a command (represented by type Command) using InsertCommand, which also needs all parameters to the command. They are then serialized and sent to the CommandSink, which must understand the Command+Args combination to execute it. 25752
WebGLContext.cpp 62292
WebGLContext.h 45593
WebGLContextBuffers.cpp 7724
WebGLContextDraw.cpp 34677
WebGLContextExtensions.cpp 19750
WebGLContextFramebufferOperations.cpp 5951
WebGLContextGL.cpp 44991
WebGLContextLossHandler.cpp 1335
WebGLContextLossHandler.h 904
WebGLContextState.cpp 12990
WebGLContextTextures.cpp virtual 7258
WebGLContextUtils.cpp static 17865
WebGLContextUtils.h Return the displayable name for the texture function that is the source for validation. 1835
WebGLContextValidate.cpp 21444
WebGLContextVertexArray.cpp 1132
WebGLContextVertices.cpp 8828
WebGLCrossProcessCommandQueue.cpp 631
WebGLCrossProcessCommandQueue.h The source for the WebGL Command Queue. 3063
WebGLExtensionColorBufferFloat.cpp 1660
WebGLExtensionColorBufferHalfFloat.cpp 1846
WebGLExtensionCompressedTextureASTC.cpp 2619
WebGLExtensionCompressedTextureBPTC.cpp 1334
WebGLExtensionCompressedTextureES3.cpp 2094
WebGLExtensionCompressedTextureETC1.cpp 988
WebGLExtensionCompressedTexturePVRTC.cpp 1135
WebGLExtensionCompressedTextureRGTC.cpp 1302
WebGLExtensionCompressedTextureS3TC.cpp 1649
WebGLExtensionCompressedTextureS3TC_SRGB.cpp 1702
WebGLExtensionDepthTexture.cpp 1898
WebGLExtensionDisjointTimerQuery.cpp 1238
WebGLExtensionDrawBuffers.cpp 1128
WebGLExtensionEXTColorBufferFloat.cpp static 1334
WebGLExtensionFragDepth.cpp 1013
WebGLExtensionInstancedArrays.cpp 942
WebGLExtensionSRGB.cpp 1954
WebGLExtensionShaderTextureLod.cpp 1070
WebGLExtensionTextureFloat.cpp 3639
WebGLExtensionTextureFloatLinear.cpp 1155
WebGLExtensionTextureHalfFloat.cpp 3821
WebGLExtensionTextureHalfFloatLinear.cpp 1003
WebGLExtensions.cpp 2796
WebGLExtensions.h 8015
WebGLFormats.cpp 59351
WebGLFormats.h 10080
WebGLFramebuffer.cpp 51897
WebGLFramebuffer.h 7619
WebGLInternalFormatsTable.h 4646
WebGLIpdl.h 15845
WebGLMemoryTracker.cpp 4863
WebGLMemoryTracker.h 644
WebGLMethodDispatcher.h 8471
WebGLObjectModel.h 1860
WebGLParent.cpp 9476
WebGLParent.h 4598
WebGLProgram.cpp 37641
WebGLProgram.h 5053
WebGLQuery.cpp 3778
WebGLQuery.h 1255
WebGLQueueParamTraits.h 7354
WebGLRenderbuffer.cpp 8463
WebGLRenderbuffer.h 1755
WebGLSampler.cpp 3932
WebGLSampler.h 963
WebGLShader.cpp 6125
WebGLShader.h 1924
WebGLShaderValidator.cpp 13852
WebGLShaderValidator.h 1977
WebGLStrongTypes.h Usage: =========== To create a new type from a set of GLenums do the following: STRONG_GLENUM_BEGIN(TypeName) STRONG_GLENUM_VALUE(ENUM1), STRONG_GLENUM_VALUE(ENUM2), ... STRONG_GLENUM_END() where TypeName is the name you want to give the type. Now simply use TypeName instead of GLenum. The enum values must be given without GL_ prefix. ~~~~~~~~~~~~~~~~ Important Notes: ~~~~~~~~~~~~~~~~ Boolean operators (==, !=) are provided in an effort to prevent some mistakes when using constants. For example we want to make sure that GL_ENUM_X is a valid value for the type in code like: if (myNewType == STRONG_GLENUM_VALUE(SOME_ENUM)) ... The operators will assert that STRONG_GLENUM_VALUE(SOME_ENUM) is a value that myNewType can have. ---- A get() method is provided to allow access to the underlying GLenum. This method should ideally only be called when passing parameters to the gl->fXXXX functions, and be used very minimally everywhere else. Definitely XXX - DO NOT DO - XXX: if (myNewType.get() == STRONG_GLENUM_VALUE(SOME_ENUM)) ... As that undermines the debug checks that were implemented in the ==, and != operators. If you see code like this it should be treated with suspicion. Background: =========== This macro is the first step in an effort to make the WebGL code safer. Many of the different functions take GLenum as their parameter which leads to bugs because of subtle differences in the enums purpose. For example there are two types of 'texture targets'. One is the texture binding locations: GL_TEXTURE_2D GL_TEXTURE_CUBE_MAP Yet, this is not the same as texture image targets: GL_TEXTURE_2D GL_TEXTURE_CUBE_MAP_POSITIVE_X GL_TEXTURE_CUBE_MAP_NEGATIVE_X GL_TEXTURE_CUBE_MAP_POSITIVE_Y ... This subtle distinction has already led to many bugs in the texture code because of invalid assumptions about what type goes where. The macro below is an attempt at fixing this by providing a small wrapper around GLenum that validates its values. Comparison between STRONG_GLENUM's vs. enum classes =================================================== The present STRONG_GLENUM's differ from ordinary enum classes in that they assert at runtime that their values are legal, and in that they allow implicit conversion from integers to STRONG_GLENUM's but disallow implicit conversion from STRONG_GLENUM's to integers (enum classes are the opposite). When to use GLenum's vs. STRONG_GLENUM's vs. enum classes ========================================================= Rule of thumb: * For unchecked GLenum constants, such as WebGL method parameters that haven't been validated yet, use GLenum. * For already-validated GLenum constants, use STRONG_GLENUM's. * For custom constants that aren't GL enum values, use enum classes. 16201
WebGLSync.cpp 940
WebGLSync.h 930
WebGLTexelConversions.cpp @class WebGLImageConverter This class is just a helper to implement WebGLContext::ConvertImage below. Design comments: WebGLContext::ConvertImage has to handle hundreds of format conversion paths. It is important to minimize executable code size here. Instead of passing around a large number of function parameters hundreds of times, we create a WebGLImageConverter object once, storing these parameters, and then we call the run() method on it. 17511
WebGLTexelConversions.h Copyright (C) 2010 Apple Inc. All rights reserved. Copyright (C) 2010 Google Inc. All rights reserved. Copyright (C) 2010 Mozilla Corporation. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 46368
WebGLTexture.cpp static 34487
WebGLTexture.h 10145
WebGLTextureUpload.cpp 58516
WebGLTransformFeedback.cpp 4620
WebGLTransformFeedback.h 1927
WebGLTypes.h Implementing WebGL (or OpenGL ES 2.0) on top of desktop OpenGL requires emulating the vertex attrib 0 array when it's not enabled. Indeed, OpenGL ES 2.0 allows drawing without vertex attrib 0 array enabled, but desktop OpenGL does not allow that. 24827
WebGLValidateStrings.cpp GLSL ES 3.00 p17: - Comments are delimited by / * and * /, or by // and a newline. - '//' style comments include the initial '//' marker and continue up to, but not including, the terminating newline. - '/ * ... * /' comments include both the start and end marker. - The begin comment delimiters (/ * or //) are not recognized as comment delimiters inside of a comment, hence comments cannot be nested. - Comments are treated syntactically as a single space. 4606
WebGLValidateStrings.h Copyright (C) 2011 Apple Inc. All rights reserved. Copyright (C) 2011 Mozilla Corporation. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1908
WebGLVertexArray.cpp 2139
WebGLVertexArray.h 3646
WebGLVertexArrayFake.cpp 1708
WebGLVertexArrayFake.h 690
WebGLVertexArrayGL.cpp 877
WebGLVertexArrayGL.h 693
XRWebGLLayer.cpp static 9368
XRWebGLLayer.h 2895
crashtests 62
moz.build 6298
nsICanvasRenderingContextInternal.cpp 1139
nsICanvasRenderingContextInternal.h 8194
test 174