Index: third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp |
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp |
index 92bb9b06880f739a6f47ea05b5396c20521d464e..801297a3c96535bb808422d390a7824389633e04 100644 |
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp |
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp |
@@ -358,16 +358,33 @@ void ImageDecoder::setTargetColorProfile(const WebVector<char>& profile) { |
BitmapImageMetrics::countGamma(gTargetColorSpace); |
} |
-void ImageDecoder::setColorSpaceAndComputeTransform(const char* iccData, |
- unsigned iccLength) { |
- setColorSpaceAndComputeTransform(SkColorSpace::NewICC(iccData, iccLength)); |
+sk_sp<SkColorSpace> ImageDecoder::colorSpace() const { |
+ // TODO(ccameron): This should always return a non-null SkColorSpace. This is |
+ // disabled for now because specifying a non-renderable color space results in |
+ // errors. |
+ // https://bugs.chromium.org/p/skia/issues/detail?id=5907 |
+ if (!RuntimeEnabledFeatures::colorCorrectRenderingEnabled()) |
+ return nullptr; |
+ |
+ if (m_embeddedColorSpace) |
+ return m_embeddedColorSpace; |
+ return SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); |
+} |
+ |
+void ImageDecoder::setColorProfileAndComputeTransform(const char* iccData, |
+ unsigned iccLength) { |
+ sk_sp<SkColorSpace> colorSpace = SkColorSpace::NewICC(iccData, iccLength); |
+ if (!colorSpace) |
+ DLOG(ERROR) << "Failed to parse image ICC profile"; |
+ setColorSpaceAndComputeTransform(colorSpace); |
} |
void ImageDecoder::setColorSpaceAndComputeTransform( |
- sk_sp<SkColorSpace> srcSpace) { |
+ sk_sp<SkColorSpace> colorSpace) { |
DCHECK(!m_ignoreColorSpace); |
- m_srcSpace = srcSpace; |
+ m_embeddedColorSpace = colorSpace; |
+ |
m_sourceToOutputDeviceColorTransform = nullptr; |
// With color correct rendering, we do not transform to the output color space |
@@ -376,7 +393,7 @@ void ImageDecoder::setColorSpaceAndComputeTransform( |
if (RuntimeEnabledFeatures::colorCorrectRenderingEnabled()) |
return; |
- if (!m_srcSpace) |
+ if (!m_embeddedColorSpace) |
return; |
// Take a lock around initializing and accessing the global device color |
@@ -390,12 +407,12 @@ void ImageDecoder::setColorSpaceAndComputeTransform( |
SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named).release(); |
} |
- if (SkColorSpace::Equals(srcSpace.get(), gTargetColorSpace)) { |
+ if (SkColorSpace::Equals(m_embeddedColorSpace.get(), gTargetColorSpace)) { |
return; |
} |
m_sourceToOutputDeviceColorTransform = |
- SkColorSpaceXform::New(srcSpace.get(), gTargetColorSpace); |
+ SkColorSpaceXform::New(m_embeddedColorSpace.get(), gTargetColorSpace); |
} |
} // namespace blink |