Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: third_party/WebKit/Source/platform/graphics/gpu/WebGLImageConversion.h

Issue 1566283003: Upgrade blink side ReadPixels size validation to consider ES3 pack parameters. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef WebGLImageConversion_h 5 #ifndef WebGLImageConversion_h
6 #define WebGLImageConversion_h 6 #define WebGLImageConversion_h
7 7
8 #include "platform/PlatformExport.h" 8 #include "platform/PlatformExport.h"
9 #include "platform/graphics/Image.h" 9 #include "platform/graphics/Image.h"
10 #include "platform/graphics/skia/ImagePixelLocker.h" 10 #include "platform/graphics/skia/ImagePixelLocker.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 AlphaDoUnmultiply = 2 108 AlphaDoUnmultiply = 2
109 }; 109 };
110 110
111 enum ImageHtmlDomSource { 111 enum ImageHtmlDomSource {
112 HtmlDomImage = 0, 112 HtmlDomImage = 0,
113 HtmlDomCanvas = 1, 113 HtmlDomCanvas = 1,
114 HtmlDomVideo = 2, 114 HtmlDomVideo = 2,
115 HtmlDomNone = 3 115 HtmlDomNone = 3
116 }; 116 };
117 117
118 struct PLATFORM_EXPORT PixelStoreParams final {
119 PixelStoreParams();
120
121 GLint alignment;
122 GLint rowLength;
123 GLint imageHeight;
124 GLint skipPixels;
125 GLint skipRows;
126 GLint skipImages;
127 };
128
118 class PLATFORM_EXPORT ImageExtractor final { 129 class PLATFORM_EXPORT ImageExtractor final {
119 STACK_ALLOCATED(); 130 STACK_ALLOCATED();
120 public: 131 public:
121 ImageExtractor(Image*, ImageHtmlDomSource, bool premultiplyAlpha, bool i gnoreGammaAndColorProfile); 132 ImageExtractor(Image*, ImageHtmlDomSource, bool premultiplyAlpha, bool i gnoreGammaAndColorProfile);
122 133
123 const void* imagePixelData() { return m_imagePixelLocker ? m_imagePixelL ocker->pixels() : nullptr; } 134 const void* imagePixelData() { return m_imagePixelLocker ? m_imagePixelL ocker->pixels() : nullptr; }
124 unsigned imageWidth() { return m_imageWidth; } 135 unsigned imageWidth() { return m_imageWidth; }
125 unsigned imageHeight() { return m_imageHeight; } 136 unsigned imageHeight() { return m_imageHeight; }
126 DataFormat imageSourceFormat() { return m_imageSourceFormat; } 137 DataFormat imageSourceFormat() { return m_imageSourceFormat; }
127 AlphaOp imageAlphaOp() { return m_alphaOp; } 138 AlphaOp imageAlphaOp() { return m_alphaOp; }
(...skipping 17 matching lines...) Expand all
145 // Computes the components per pixel and bytes per component 156 // Computes the components per pixel and bytes per component
146 // for the given format and type combination. Returns false if 157 // for the given format and type combination. Returns false if
147 // either was an invalid enum. 158 // either was an invalid enum.
148 static bool computeFormatAndTypeParameters(GLenum format, GLenum type, unsig ned* componentsPerPixel, unsigned* bytesPerComponent); 159 static bool computeFormatAndTypeParameters(GLenum format, GLenum type, unsig ned* componentsPerPixel, unsigned* bytesPerComponent);
149 160
150 // Computes the image size in bytes. If paddingInBytes is not null, padding 161 // Computes the image size in bytes. If paddingInBytes is not null, padding
151 // is also calculated in return. Returns NO_ERROR if succeed, otherwise 162 // is also calculated in return. Returns NO_ERROR if succeed, otherwise
152 // return the suggested GL error indicating the cause of the failure: 163 // return the suggested GL error indicating the cause of the failure:
153 // INVALID_VALUE if width/height/depth is negative or overflow happens. 164 // INVALID_VALUE if width/height/depth is negative or overflow happens.
154 // INVALID_ENUM if format/type is illegal. 165 // INVALID_ENUM if format/type is illegal.
155 static GLenum computeImageSizeInBytes(GLenum format, GLenum type, GLsizei wi dth, GLsizei height, GLsizei depth, GLint alignment, unsigned* imageSizeInBytes, unsigned* paddingInBytes); 166 // Note that imageSizeBytes does not include skipSizeInBytes, but it is
167 // guaranteed if NO_ERROR is returned, adding the two sizes won't cause
168 // overflow.
169 // |paddingInBytes| and |skipSizeInBytes| are optional and can be null, but
170 // the overflow validation is still performed.
171 static GLenum computeImageSizeInBytes(GLenum format, GLenum type, GLsizei wi dth, GLsizei height, GLsizei depth, const PixelStoreParams&, unsigned* imageSize InBytes, unsigned* paddingInBytes, unsigned* skipSizeInBytes);
156 172
157 // Check if the format is one of the formats from the ImageData or DOM eleme nts. 173 // Check if the format is one of the formats from the ImageData or DOM eleme nts.
158 // The formats from ImageData is always RGBA8. 174 // The formats from ImageData is always RGBA8.
159 // The formats from DOM elements vary with Graphics ports. It can only be RG BA8 or BGRA8. 175 // The formats from DOM elements vary with Graphics ports. It can only be RG BA8 or BGRA8.
160 static ALWAYS_INLINE bool srcFormatComeFromDOMElementOrImageData(DataFormat SrcFormat) 176 static ALWAYS_INLINE bool srcFormatComeFromDOMElementOrImageData(DataFormat SrcFormat)
161 { 177 {
162 return SrcFormat == DataFormatBGRA8 || SrcFormat == DataFormatRGBA8; 178 return SrcFormat == DataFormatBGRA8 || SrcFormat == DataFormatRGBA8;
163 } 179 }
164 180
165 // The input can be either format or internalformat. 181 // The input can be either format or internalformat.
(...skipping 27 matching lines...) Expand all
193 // A sourceUnpackAlignment of zero indicates that the source 209 // A sourceUnpackAlignment of zero indicates that the source
194 // data is tightly packed. Non-zero values may take a slow path. 210 // data is tightly packed. Non-zero values may take a slow path.
195 // Destination data will have no gaps between rows. 211 // Destination data will have no gaps between rows.
196 // Implemented in GraphicsContext3DImagePacking.cpp 212 // Implemented in GraphicsContext3DImagePacking.cpp
197 static bool packPixels(const uint8_t* sourceData, DataFormat sourceDataForma t, unsigned width, unsigned height, unsigned sourceUnpackAlignment, unsigned des tinationFormat, unsigned destinationType, AlphaOp, void* destinationData, bool f lipY); 213 static bool packPixels(const uint8_t* sourceData, DataFormat sourceDataForma t, unsigned width, unsigned height, unsigned sourceUnpackAlignment, unsigned des tinationFormat, unsigned destinationType, AlphaOp, void* destinationData, bool f lipY);
198 }; 214 };
199 215
200 } // namespace blink 216 } // namespace blink
201 217
202 #endif // WebGLImageConversion_h 218 #endif // WebGLImageConversion_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698