Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006 Apple Computer, Inc. | 2 * Copyright (C) 2006 Apple Computer, Inc. |
| 3 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. | 3 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. |
| 4 * | 4 * |
| 5 * Portions are Copyright (C) 2001 mozilla.org | 5 * Portions are Copyright (C) 2001 mozilla.org |
| 6 * | 6 * |
| 7 * Other contributors: | 7 * Other contributors: |
| 8 * Stuart Parmenter <stuart@mozilla.com> | 8 * Stuart Parmenter <stuart@mozilla.com> |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 31 * licenses (the MPL or the GPL) and not to allow others to use your | 31 * licenses (the MPL or the GPL) and not to allow others to use your |
| 32 * version of this file under the LGPL, indicate your decision by | 32 * version of this file under the LGPL, indicate your decision by |
| 33 * deletingthe provisions above and replace them with the notice and | 33 * deletingthe provisions above and replace them with the notice and |
| 34 * other provisions required by the MPL or the GPL, as the case may be. | 34 * other provisions required by the MPL or the GPL, as the case may be. |
| 35 * If you do not delete the provisions above, a recipient may use your | 35 * If you do not delete the provisions above, a recipient may use your |
| 36 * version of this file under any of the LGPL, the MPL or the GPL. | 36 * version of this file under any of the LGPL, the MPL or the GPL. |
| 37 */ | 37 */ |
| 38 | 38 |
| 39 #include "platform/image-decoders/png/PNGImageDecoder.h" | 39 #include "platform/image-decoders/png/PNGImageDecoder.h" |
| 40 | 40 |
| 41 #include "platform/Histogram.h" | |
| 42 #include "png.h" | 41 #include "png.h" |
| 43 #include "wtf/Threading.h" | 42 #include "wtf/Threading.h" |
|
RyanSturm
2016/06/03 21:55:31
You shouldn't need wtf/threading.h since you remov
msarett
2016/06/06 14:18:16
Thanks! Done.
| |
| 44 | 43 |
| 45 #if !defined(PNG_LIBPNG_VER_MAJOR) || !defined(PNG_LIBPNG_VER_MINOR) | 44 #if !defined(PNG_LIBPNG_VER_MAJOR) || !defined(PNG_LIBPNG_VER_MINOR) |
| 46 #error version error: compile against a versioned libpng. | 45 #error version error: compile against a versioned libpng. |
| 47 #endif | 46 #endif |
| 48 #if USE(QCMSLIB) | 47 #if USE(QCMSLIB) |
| 49 #include "qcms.h" | 48 #include "qcms.h" |
| 50 #endif | 49 #endif |
| 51 | 50 |
| 52 #if PNG_LIBPNG_VER_MAJOR > 1 || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MIN OR >= 4) | 51 #if PNG_LIBPNG_VER_MAJOR > 1 || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MIN OR >= 4) |
| 53 #define JMPBUF(png_ptr) png_jmpbuf(png_ptr) | 52 #define JMPBUF(png_ptr) png_jmpbuf(png_ptr) |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 174 { | 173 { |
| 175 } | 174 } |
| 176 | 175 |
| 177 void PNGImageDecoder::headerAvailable() | 176 void PNGImageDecoder::headerAvailable() |
| 178 { | 177 { |
| 179 png_structp png = m_reader->pngPtr(); | 178 png_structp png = m_reader->pngPtr(); |
| 180 png_infop info = m_reader->infoPtr(); | 179 png_infop info = m_reader->infoPtr(); |
| 181 png_uint_32 width = png_get_image_width(png, info); | 180 png_uint_32 width = png_get_image_width(png, info); |
| 182 png_uint_32 height = png_get_image_height(png, info); | 181 png_uint_32 height = png_get_image_height(png, info); |
| 183 | 182 |
| 184 DEFINE_THREAD_SAFE_STATIC_LOCAL(blink::CustomCountHistogram, | |
| 185 dimensionsLocationHistogram, | |
| 186 new blink::CustomCountHistogram("Blink.DecodedImage.EffectiveDimensionsL ocation.PNG", 0, 50000, 50)); | |
| 187 dimensionsLocationHistogram.count(m_reader->getReadOffset() - png->current_b uffer_size - 1); | |
| 188 | |
| 189 // Protect against large PNGs. See http://bugzil.la/251381 for more details. | 183 // Protect against large PNGs. See http://bugzil.la/251381 for more details. |
| 190 const unsigned long maxPNGSize = 1000000UL; | 184 const unsigned long maxPNGSize = 1000000UL; |
| 191 if (width > maxPNGSize || height > maxPNGSize) { | 185 if (width > maxPNGSize || height > maxPNGSize) { |
| 192 longjmp(JMPBUF(png), 1); | 186 longjmp(JMPBUF(png), 1); |
| 193 return; | 187 return; |
| 194 } | 188 } |
| 195 | 189 |
| 196 // Set the image size now that the image header is available. | 190 // Set the image size now that the image header is available. |
| 197 if (!setSize(width, height)) { | 191 if (!setSize(width, height)) { |
| 198 longjmp(JMPBUF(png), 1); | 192 longjmp(JMPBUF(png), 1); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 236 } else { | 230 } else { |
| 237 char* profileName = nullptr; | 231 char* profileName = nullptr; |
| 238 int compressionType = 0; | 232 int compressionType = 0; |
| 239 #if (PNG_LIBPNG_VER < 10500) | 233 #if (PNG_LIBPNG_VER < 10500) |
| 240 png_charp profile = nullptr; | 234 png_charp profile = nullptr; |
| 241 #else | 235 #else |
| 242 png_bytep profile = nullptr; | 236 png_bytep profile = nullptr; |
| 243 #endif | 237 #endif |
| 244 png_uint_32 profileLength = 0; | 238 png_uint_32 profileLength = 0; |
| 245 if (png_get_iCCP(png, info, &profileName, &compressionType, &profile , &profileLength)) { | 239 if (png_get_iCCP(png, info, &profileName, &compressionType, &profile , &profileLength)) { |
| 246 setColorProfileAndTransform(profile, profileLength, imageHasAlph a, false /* useSRGB */); | 240 setColorProfileAndTransform((char*) profile, profileLength, imag eHasAlpha, false /* useSRGB */); |
| 247 } | 241 } |
| 248 } | 242 } |
| 249 #endif // PNG_iCCP_SUPPORTED | 243 #endif // PNG_iCCP_SUPPORTED |
| 250 } | 244 } |
| 251 #endif // USE(QCMSLIB) | 245 #endif // USE(QCMSLIB) |
| 252 | 246 |
| 253 if (!hasColorProfile()) { | 247 if (!hasColorProfile()) { |
| 254 // Deal with gamma and keep it under our control. | 248 // Deal with gamma and keep it under our control. |
| 255 const double inverseGamma = 0.45455; | 249 const double inverseGamma = 0.45455; |
| 256 const double defaultGamma = 2.2; | 250 const double defaultGamma = 2.2; |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 441 // has failed. | 435 // has failed. |
| 442 if (!m_reader->decode(*m_data, onlySize) && isAllDataReceived()) | 436 if (!m_reader->decode(*m_data, onlySize) && isAllDataReceived()) |
| 443 setFailed(); | 437 setFailed(); |
| 444 | 438 |
| 445 // If decoding is done or failed, we don't need the PNGImageReader anymore. | 439 // If decoding is done or failed, we don't need the PNGImageReader anymore. |
| 446 if (isComplete(this) || failed()) | 440 if (isComplete(this) || failed()) |
| 447 m_reader.reset(); | 441 m_reader.reset(); |
| 448 } | 442 } |
| 449 | 443 |
| 450 } // namespace blink | 444 } // namespace blink |
| OLD | NEW |