WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-229022-20210917174003.patch (text/plain), 145.52 KB, created by
Cameron McCormack (:heycam)
on 2021-09-17 00:40:04 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Cameron McCormack (:heycam)
Created:
2021-09-17 00:40:04 PDT
Size:
145.52 KB
patch
obsolete
>Subversion Revision: 282638 >diff --git a/Source/WTF/ChangeLog b/Source/WTF/ChangeLog >index 06d9e7bca9b5f8fec4f4165c8b0901dccfad502c..99e727b9f5ece14d1b5b5191c576866393a1706b 100644 >--- a/Source/WTF/ChangeLog >+++ b/Source/WTF/ChangeLog >@@ -1,3 +1,13 @@ >+2021-09-14 Cameron McCormack <heycam@apple.com> >+ >+ Preserve color space when creating ImageBuffers for ImageBitmaps >+ https://bugs.webkit.org/show_bug.cgi?id=229022 >+ <rdar://problem/81828459> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * wtf/PlatformHave.h: >+ > 2021-09-16 David Kilzer <ddkilzer@apple.com> > > WebKit::WebProcessPool should use a weak observer with CFNotificationCenter >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 103be6419ae8ae689e18510c67cf774fefe03ad8..8d2c42273b9c52816156a8ebd75900feea905fe7 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,69 @@ >+2021-09-13 Cameron McCormack <heycam@apple.com> >+ >+ Preserve color space when creating ImageBuffers for ImageBitmaps >+ https://bugs.webkit.org/show_bug.cgi?id=229022 >+ <rdar://problem/81828459> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ ImageBitmaps can be created with various sources of image data. >+ Currently, they always create an sRGB ImageBuffer to copy the >+ image data into. This patch tries to preserve the color space >+ of the source image data. Because ImageBuffer only works with 8 bit >+ RGBA data, other color space models (such as CMYK) get converted >+ to Display P3 if available, or sRGB otherwise. The rationale for >+ this is that ImageBitmaps are designed to be drawn into canvases, >+ and we currently only support sRGB and Display P3 for canvas backing >+ stores. >+ >+ It's not ideal that we do the color space conversion, since it would >+ be better to delay the conversion until it's needed when drawing onto >+ the canvas. It's also not ideal that we can't preserve the pixel >+ format of the image data, which might be 16 bit color or floats. We >+ could support these only if ImageBuffer were extended to support them. >+ A different design for ImageBitmap where it can hold on to the image >+ data source directly (and support for structured cloning and worker >+ thread transferrance added) could also work. For now, we don't worry, >+ and accept the loss of color fidelity when downsampling or converting >+ from non-RGB color space models. >+ >+ Support for structured cloning of ImageBitmaps with non-sRGB data >+ isn't added, but a test for this is. (This will need a way to >+ serialize the DestinationColorSpace.) >+ >+ Tests: imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob.html >+ imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap.html >+ imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData.html >+ imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas.html >+ imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned.html >+ imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image.html >+ >+ * bindings/js/SerializedScriptValue.cpp: >+ (WebCore::CloneSerializer::dumpImageBitmap): >+ (WebCore::CloneDeserializer::readImageBitmap): >+ * html/ImageBitmap.cpp: >+ (WebCore::ImageBitmap::create): >+ (WebCore::ImageBitmap::createImageBuffer): >+ (WebCore::ImageBitmap::resolveWithBlankImageBuffer): >+ (WebCore::ImageBitmap::createPromise): >+ (WebCore::ImageBitmap::createFromBuffer): >+ * html/ImageBitmap.h: >+ * html/OffscreenCanvas.cpp: >+ (WebCore::OffscreenCanvas::transferToImageBitmap): >+ (WebCore::OffscreenCanvas::createImageBuffer const): >+ * platform/graphics/BitmapImage.cpp: >+ (WebCore::BitmapImage::colorSpace): >+ * platform/graphics/BitmapImage.h: >+ * platform/graphics/DestinationColorSpace.cpp: >+ (WebCore::DestinationColorSpace::asRGB const): New function that >+ abstracts out the behavior "tell me whether the color space is >+ appropriate for use with an 8 bit RGB buffer", which is common >+ to ImageBitmap and ShareableBitmapCG. >+ * platform/graphics/DestinationColorSpace.h: >+ * platform/graphics/Image.cpp: >+ (WebCore::Image::colorSpace): >+ * platform/graphics/Image.h: >+ > 2021-09-17 Youenn Fablet <youenn@apple.com> > > Make sure to use event queue when settling RTCPeerConnection.addIceCandidate promise >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index b4fe6bf982bf6bbc7caee23acca9bffe054eccd2..06b100631d5e432b20e9d7af5536bbb6dde6c5fd 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,15 @@ >+2021-09-13 Cameron McCormack <heycam@apple.com> >+ >+ Preserve color space when creating ImageBuffers for ImageBitmaps >+ https://bugs.webkit.org/show_bug.cgi?id=229022 >+ <rdar://problem/81828459> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * Shared/cg/ShareableBitmapCG.cpp: >+ (WebKit::ShareableBitmap::validateConfiguration): Factor out some >+ loging into DestinationColorSpace::asRGB. >+ > 2021-09-16 Youenn Fablet <youenn@apple.com> > > Make WebProcess use a RefPtr of LibWebRTCNetwork >diff --git a/Source/WTF/wtf/PlatformHave.h b/Source/WTF/wtf/PlatformHave.h >index 853f030c49bda9577b58619c40ee4a8ab24c428d..1d7ebaf93f217072298624140dd833a7df39bcfc 100644 >--- a/Source/WTF/wtf/PlatformHave.h >+++ b/Source/WTF/wtf/PlatformHave.h >@@ -1118,3 +1118,9 @@ > || (PLATFORM(APPLETV) && !PLATFORM(IOS_FAMILY_SIMULATOR) && __TV_OS_VERSION_MIN_REQUIRED >= 150000) > #define HAVE_CORE_ANIMATION_FIX_FOR_RADAR_78402035 1 > #endif >+ >+#if PLATFORM(COCOA) >+#if !defined(HAVE_CG_COLOR_SPACE_USES_EXTENDED_RANGE) >+#define HAVE_CG_COLOR_SPACE_USES_EXTENDED_RANGE 1 >+#endif >+#endif >diff --git a/Source/WebCore/bindings/js/SerializedScriptValue.cpp b/Source/WebCore/bindings/js/SerializedScriptValue.cpp >index b54dac5fd0fe81e7a59fa682bee7d2f6a94327a6..87cb0ab8aad9aaa9740e20ea6721c2e5ca7a337c 100644 >--- a/Source/WebCore/bindings/js/SerializedScriptValue.cpp >+++ b/Source/WebCore/bindings/js/SerializedScriptValue.cpp >@@ -1082,6 +1082,7 @@ private: > return; > } > >+ // FIXME: Cloned ImageBitmaps should preserve their color space. > PixelBufferFormat format { AlphaPremultiplication::Premultiplied, PixelFormat::RGBA8, DestinationColorSpace::SRGB() }; > const IntSize& logicalSize = buffer->logicalSize(); > auto pixelBuffer = buffer->getPixelBuffer(format, { IntPoint::zero(), logicalSize }); >@@ -3173,7 +3174,7 @@ private: > auto imageDataSize = logicalSize; > imageDataSize.scale(resolutionScale); > >- auto buffer = ImageBitmap::createImageBuffer(*scriptExecutionContextFromExecState(m_lexicalGlobalObject), logicalSize, RenderingMode::Unaccelerated, resolutionScale); >+ auto buffer = ImageBitmap::createImageBuffer(*scriptExecutionContextFromExecState(m_lexicalGlobalObject), logicalSize, RenderingMode::Unaccelerated, DestinationColorSpace::SRGB(), resolutionScale); > if (!buffer) { > fail(); > return JSValue(); >diff --git a/Source/WebCore/html/ImageBitmap.cpp b/Source/WebCore/html/ImageBitmap.cpp >index 75696a849b04430bd803974f5f0653226e3690bf..349d86d63280b8aa739be82eddd94d21d2aa5619 100644 >--- a/Source/WebCore/html/ImageBitmap.cpp >+++ b/Source/WebCore/html/ImageBitmap.cpp >@@ -67,9 +67,9 @@ static RenderingMode bufferRenderingMode = RenderingMode::Accelerated; > static RenderingMode bufferRenderingMode = RenderingMode::Unaccelerated; > #endif > >-Ref<ImageBitmap> ImageBitmap::create(ScriptExecutionContext& scriptExecutionContext, const IntSize& size) >+Ref<ImageBitmap> ImageBitmap::create(ScriptExecutionContext& scriptExecutionContext, const IntSize& size, DestinationColorSpace colorSpace) > { >- return create({ createImageBuffer(scriptExecutionContext, size, bufferRenderingMode) }); >+ return create({ createImageBuffer(scriptExecutionContext, size, bufferRenderingMode, colorSpace) }); > } > > Ref<ImageBitmap> ImageBitmap::create(std::optional<ImageBitmapBacking>&& backingStore) >@@ -77,18 +77,28 @@ Ref<ImageBitmap> ImageBitmap::create(std::optional<ImageBitmapBacking>&& backing > return adoptRef(*new ImageBitmap(WTFMove(backingStore))); > } > >-RefPtr<ImageBuffer> ImageBitmap::createImageBuffer(ScriptExecutionContext& scriptExecutionContext, const FloatSize& size, RenderingMode renderingMode, float resolutionScale) >+RefPtr<ImageBuffer> ImageBitmap::createImageBuffer(ScriptExecutionContext& scriptExecutionContext, const FloatSize& size, RenderingMode renderingMode, DestinationColorSpace colorSpace, float resolutionScale) > { >+ // FIXME: Should avoid converting color space and pixel format of image sources. >+ auto imageBufferColorSpace = colorSpace.asRGB(); >+ if (!imageBufferColorSpace) { >+#if ENABLE(DESTINATION_COLOR_SPACE_DISPLAY_P3) >+ imageBufferColorSpace = DestinationColorSpace::DisplayP3(); >+#else >+ imageBufferColorSpace = DestinationColorSpace::SRGB(); >+#endif >+ } >+ > if (scriptExecutionContext.isDocument()) { > auto& document = downcast<Document>(scriptExecutionContext); > if (document.view() && document.view()->root()) { > auto hostWindow = document.view()->root()->hostWindow(); >- return ImageBuffer::create(size, renderingMode, ShouldUseDisplayList::No, RenderingPurpose::Canvas, resolutionScale, DestinationColorSpace::SRGB(), PixelFormat::BGRA8, hostWindow); >+ return ImageBuffer::create(size, renderingMode, ShouldUseDisplayList::No, RenderingPurpose::Canvas, resolutionScale, *imageBufferColorSpace, PixelFormat::BGRA8, hostWindow); > } > } > > // FIXME <https://webkit.org/b/218482> Enable worker based ImageBitmap and OffscreenCanvas drawing to use GPU Process rendering >- return ImageBuffer::create(size, renderingMode, resolutionScale, DestinationColorSpace::SRGB(), PixelFormat::BGRA8); >+ return ImageBuffer::create(size, renderingMode, resolutionScale, *imageBufferColorSpace, PixelFormat::BGRA8); > } > > void ImageBitmap::createPromise(ScriptExecutionContext& scriptExecutionContext, ImageBitmap::Source&& source, ImageBitmapOptions&& options, ImageBitmap::Promise&& promise) >@@ -245,7 +255,7 @@ void ImageBitmap::resolveWithBlankImageBuffer(ScriptExecutionContext& scriptExec > // Source rectangle likely doesn't intersect the source image. > // Behavior isn't well specified, but WPT tests expect no Promise rejection (and of course no crashes). > // Resolve Promise with a blank 1x1 ImageBitmap. >- auto bitmapData = createImageBuffer(scriptExecutionContext, FloatSize(1, 1), bufferRenderingMode); >+ auto bitmapData = createImageBuffer(scriptExecutionContext, FloatSize(1, 1), bufferRenderingMode, DestinationColorSpace::SRGB()); > > // 9. If the origin of image's image is not the same origin as the origin specified by the > // entry settings object, then set the origin-clean flag of the ImageBitmap object's >@@ -363,14 +373,14 @@ void ImageBitmap::createPromise(ScriptExecutionContext& scriptExecutionContext, > return; > } > >- auto outputSize = outputSizeForSourceRectangle(sourceRectangle.returnValue(), options); >- auto bitmapData = createImageBuffer(scriptExecutionContext, outputSize, bufferRenderingMode); > auto imageForRender = cachedImage->imageForRenderer(imageElement->renderer()); > if (!imageForRender) { > promise.reject(InvalidStateError, "Cannot create ImageBitmap from image that can't be rendered"); > return; > } > >+ auto outputSize = outputSizeForSourceRectangle(sourceRectangle.returnValue(), options); >+ auto bitmapData = createImageBuffer(scriptExecutionContext, outputSize, bufferRenderingMode, imageForRender->colorSpace()); > if (!bitmapData) { > resolveWithBlankImageBuffer(scriptExecutionContext, !taintsOrigin(*cachedImage), WTFMove(promise)); > return; >@@ -430,15 +440,15 @@ void ImageBitmap::createPromise(ScriptExecutionContext& scriptExecutionContext, > return; > } > >- auto outputSize = outputSizeForSourceRectangle(sourceRectangle.returnValue(), options); >- auto bitmapData = createImageBuffer(scriptExecutionContext, outputSize, bufferRenderingMode); >- > auto imageForRender = canvas.copiedImage(); > if (!imageForRender) { > promise.reject(InvalidStateError, "Cannot create ImageBitmap from canvas that can't be rendered"); > return; > } > >+ auto outputSize = outputSizeForSourceRectangle(sourceRectangle.returnValue(), options); >+ auto bitmapData = createImageBuffer(scriptExecutionContext, outputSize, bufferRenderingMode, imageForRender->colorSpace()); >+ > if (!bitmapData) { > resolveWithBlankImageBuffer(scriptExecutionContext, canvas.originClean(), WTFMove(promise)); > return; >@@ -568,7 +578,7 @@ void ImageBitmap::createPromise(ScriptExecutionContext& scriptExecutionContext, > } > > auto outputSize = outputSizeForSourceRectangle(sourceRectangle.returnValue(), options); >- auto bitmapData = createImageBuffer(scriptExecutionContext, outputSize, bufferRenderingMode); >+ auto bitmapData = createImageBuffer(scriptExecutionContext, outputSize, bufferRenderingMode, existingImageBitmap->buffer()->colorSpace()); > > if (!bitmapData) { > resolveWithBlankImageBuffer(scriptExecutionContext, existingImageBitmap->originClean(), WTFMove(promise)); >@@ -751,7 +761,7 @@ void ImageBitmap::createFromBuffer(ScriptExecutionContext& scriptExecutionContex > } > > auto outputSize = outputSizeForSourceRectangle(sourceRectangle.returnValue(), options); >- auto bitmapData = createImageBuffer(scriptExecutionContext, outputSize, bufferRenderingMode); >+ auto bitmapData = createImageBuffer(scriptExecutionContext, outputSize, bufferRenderingMode, image->colorSpace()); > if (!bitmapData) { > promise.reject(InvalidStateError, "Cannot create an image buffer from the argument to createImageBitmap"); > return; >@@ -795,7 +805,7 @@ void ImageBitmap::createPromise(ScriptExecutionContext& scriptExecutionContext, > } > > auto outputSize = outputSizeForSourceRectangle(sourceRectangle.returnValue(), options); >- auto bitmapData = createImageBuffer(scriptExecutionContext, outputSize, bufferRenderingMode); >+ auto bitmapData = createImageBuffer(scriptExecutionContext, outputSize, bufferRenderingMode, toDestinationColorSpace(imageData->colorSpace())); > > if (!bitmapData) { > resolveWithBlankImageBuffer(scriptExecutionContext, true, WTFMove(promise)); >@@ -816,7 +826,7 @@ void ImageBitmap::createPromise(ScriptExecutionContext& scriptExecutionContext, > > // 6.3. Set imageBitmap's bitmap data to image's image data, cropped to the > // source rectangle with formatting. >- auto tempBitmapData = createImageBuffer(scriptExecutionContext, imageData->size(), bufferRenderingMode); >+ auto tempBitmapData = createImageBuffer(scriptExecutionContext, imageData->size(), bufferRenderingMode, toDestinationColorSpace(imageData->colorSpace())); > if (!tempBitmapData) { > resolveWithBlankImageBuffer(scriptExecutionContext, true, WTFMove(promise)); > return; >diff --git a/Source/WebCore/html/ImageBitmap.h b/Source/WebCore/html/ImageBitmap.h >index 02b7f15ced9c74fc62fdf5ea16e916b6f6337a9f..8d78186c0aa84575c71b92fa18a1c0f9a2580b49 100644 >--- a/Source/WebCore/html/ImageBitmap.h >+++ b/Source/WebCore/html/ImageBitmap.h >@@ -82,9 +82,9 @@ public: > static void createPromise(ScriptExecutionContext&, Source&&, ImageBitmapOptions&&, Promise&&); > static void createPromise(ScriptExecutionContext&, Source&&, ImageBitmapOptions&&, int sx, int sy, int sw, int sh, Promise&&); > >- static RefPtr<ImageBuffer> createImageBuffer(ScriptExecutionContext&, const FloatSize&, RenderingMode, float resolutionScale = 1); >+ static RefPtr<ImageBuffer> createImageBuffer(ScriptExecutionContext&, const FloatSize&, RenderingMode, DestinationColorSpace, float resolutionScale = 1); > >- static Ref<ImageBitmap> create(ScriptExecutionContext&, const IntSize&); >+ static Ref<ImageBitmap> create(ScriptExecutionContext&, const IntSize&, DestinationColorSpace); > static Ref<ImageBitmap> create(std::optional<ImageBitmapBacking>&&); > > ~ImageBitmap(); >diff --git a/Source/WebCore/html/OffscreenCanvas.cpp b/Source/WebCore/html/OffscreenCanvas.cpp >index f4b329ef0c8a358fc3d315e167becabd45d3fe08..cb612a0b530d15dd2818cde70343a25ca8c190b0 100644 >--- a/Source/WebCore/html/OffscreenCanvas.cpp >+++ b/Source/WebCore/html/OffscreenCanvas.cpp >@@ -276,7 +276,7 @@ ExceptionOr<RefPtr<ImageBitmap>> OffscreenCanvas::transferToImageBitmap() > return { RefPtr<ImageBitmap> { nullptr } }; > > if (!m_hasCreatedImageBuffer) { >- auto buffer = ImageBitmap::createImageBuffer(*canvasBaseScriptExecutionContext(), size(), RenderingMode::Unaccelerated); >+ auto buffer = ImageBitmap::createImageBuffer(*canvasBaseScriptExecutionContext(), size(), RenderingMode::Unaccelerated, m_context->colorSpace()); > return { ImageBitmap::create(ImageBitmapBacking(WTFMove(buffer))) }; > } > >@@ -298,7 +298,7 @@ ExceptionOr<RefPtr<ImageBitmap>> OffscreenCanvas::transferToImageBitmap() > // store from this canvas (or its context), but for now we'll just > // create a new bitmap and paint into it. > >- auto imageBitmap = ImageBitmap::create(*canvasBaseScriptExecutionContext(), size()); >+ auto imageBitmap = ImageBitmap::create(*canvasBaseScriptExecutionContext(), size(), DestinationColorSpace::SRGB()); > if (!imageBitmap->buffer()) > return { RefPtr<ImageBitmap> { nullptr } }; > >@@ -492,7 +492,8 @@ void OffscreenCanvas::createImageBuffer() const > if (!width() || !height()) > return; > >- setImageBuffer(ImageBitmap::createImageBuffer(*canvasBaseScriptExecutionContext(), size(), RenderingMode::Unaccelerated)); >+ auto colorSpace = m_context ? m_context->colorSpace() : DestinationColorSpace::SRGB(); >+ setImageBuffer(ImageBitmap::createImageBuffer(*canvasBaseScriptExecutionContext(), size(), RenderingMode::Unaccelerated, colorSpace)); > } > > RefPtr<ImageBuffer> OffscreenCanvas::takeImageBuffer() const >diff --git a/Source/WebCore/platform/graphics/BitmapImage.cpp b/Source/WebCore/platform/graphics/BitmapImage.cpp >index 40cfde53bf68c885edc0bc2f2ce583a8620ca305..cb96def59b768a7049b9219235383c96e67e18a6 100644 >--- a/Source/WebCore/platform/graphics/BitmapImage.cpp >+++ b/Source/WebCore/platform/graphics/BitmapImage.cpp >@@ -657,6 +657,11 @@ void BitmapImage::imageFrameAvailableAtIndex(size_t index) > imageObserver()->imageFrameAvailable(*this, ImageAnimatingState::No, nullptr, decodingStatus); > } > >+DestinationColorSpace BitmapImage::colorSpace() >+{ >+ return nativeImage()->colorSpace(); >+} >+ > unsigned BitmapImage::decodeCountForTesting() const > { > return m_decodeCountForTesting; >diff --git a/Source/WebCore/platform/graphics/BitmapImage.h b/Source/WebCore/platform/graphics/BitmapImage.h >index 2ee87d414d215c1a35ec85637d7ee0e0f63359d4..4b631fd094381bcc79b245b7730d9ad9eb57f6f8 100644 >--- a/Source/WebCore/platform/graphics/BitmapImage.h >+++ b/Source/WebCore/platform/graphics/BitmapImage.h >@@ -116,6 +116,8 @@ public: > bool isLargeImageAsyncDecodingEnabledForTesting() const { return m_largeImageAsyncDecodingEnabledForTesting; } > void stopAsyncDecodingQueue() { m_source->stopAsyncDecodingQueue(); } > >+ DestinationColorSpace colorSpace() final; >+ > WEBCORE_EXPORT unsigned decodeCountForTesting() const; > > // Accessors for native image formats. >diff --git a/Source/WebCore/platform/graphics/DestinationColorSpace.cpp b/Source/WebCore/platform/graphics/DestinationColorSpace.cpp >index 4cecc246f31d394ba5d00634b11bf076301c40f6..036aee20f1faab368a4704d4bc875473ba1dd21c 100644 >--- a/Source/WebCore/platform/graphics/DestinationColorSpace.cpp >+++ b/Source/WebCore/platform/graphics/DestinationColorSpace.cpp >@@ -108,6 +108,27 @@ bool operator!=(const DestinationColorSpace& a, const DestinationColorSpace& b) > return !(a == b); > } > >+std::optional<DestinationColorSpace> DestinationColorSpace::asRGB() const >+{ >+#if USE(CG) >+ CGColorSpaceRef colorSpace = platformColorSpace(); >+ if (CGColorSpaceGetModel(colorSpace) == kCGColorSpaceModelIndexed) >+ colorSpace = CGColorSpaceGetBaseColorSpace(colorSpace); >+ >+ if (CGColorSpaceGetModel(colorSpace) != kCGColorSpaceModelRGB) >+ return std::nullopt; >+ >+#if HAVE(CG_COLOR_SPACE_USES_EXTENDED_RANGE) >+ if (CGColorSpaceUsesExtendedRange(colorSpace)) >+ return std::nullopt; >+#endif >+ >+ return DestinationColorSpace(colorSpace); >+#else >+ return *this; >+#endif >+} >+ > TextStream& operator<<(TextStream& ts, const DestinationColorSpace& colorSpace) > { > if (colorSpace == DestinationColorSpace::SRGB()) >diff --git a/Source/WebCore/platform/graphics/DestinationColorSpace.h b/Source/WebCore/platform/graphics/DestinationColorSpace.h >index 72269f7c94b68597a3e62ec23ae017b98e4dc9e3..3be908f75c545c94b27a188ba61bb95c6bb711e6 100644 >--- a/Source/WebCore/platform/graphics/DestinationColorSpace.h >+++ b/Source/WebCore/platform/graphics/DestinationColorSpace.h >@@ -44,6 +44,8 @@ public: > WEBCORE_EXPORT explicit DestinationColorSpace(PlatformColorSpace); > PlatformColorSpaceValue platformColorSpace() const { return m_platformColorSpace.get(); } > >+ WEBCORE_EXPORT std::optional<DestinationColorSpace> asRGB() const; >+ > template<class Encoder> void encode(Encoder&) const; > template<class Decoder> static std::optional<DestinationColorSpace> decode(Decoder&); > >diff --git a/Source/WebCore/platform/graphics/Image.cpp b/Source/WebCore/platform/graphics/Image.cpp >index 72fa485b4f887a4323b24e72e6654f41b41859c4..868fc9b73b398d0cbc37c5f360069402f9ed37ed 100644 >--- a/Source/WebCore/platform/graphics/Image.cpp >+++ b/Source/WebCore/platform/graphics/Image.cpp >@@ -352,6 +352,11 @@ void Image::startAnimationAsynchronously() > m_animationStartTimer->startOneShot(0_s); > } > >+DestinationColorSpace Image::colorSpace() >+{ >+ return DestinationColorSpace::SRGB(); >+} >+ > void Image::dump(TextStream& ts) const > { > if (isAnimated()) >diff --git a/Source/WebCore/platform/graphics/Image.h b/Source/WebCore/platform/graphics/Image.h >index aaefa67cf32b69bf32339da6a63f1189287d11a8..50454990507bf0d89a23960ec1bb9f7d985e65cb 100644 >--- a/Source/WebCore/platform/graphics/Image.h >+++ b/Source/WebCore/platform/graphics/Image.h >@@ -136,6 +136,8 @@ public: > SharedBuffer* data() { return m_encodedImageData.get(); } > const SharedBuffer* data() const { return m_encodedImageData.get(); } > >+ virtual DestinationColorSpace colorSpace(); >+ > // Animation begins whenever someone draws the image, so startAnimation() is not normally called. > // It will automatically pause once all observers no longer want to render the image anywhere. > virtual void startAnimation() { } >diff --git a/Source/WebKit/Shared/cg/ShareableBitmapCG.cpp b/Source/WebKit/Shared/cg/ShareableBitmapCG.cpp >index 52fd3fbfa81c45595ce60cb2b2b67937fb5e52ac..4275e1aa3c041dabd6fafb073ca2fec2b6fa0dba 100644 >--- a/Source/WebKit/Shared/cg/ShareableBitmapCG.cpp >+++ b/Source/WebKit/Shared/cg/ShareableBitmapCG.cpp >@@ -43,19 +43,15 @@ void ShareableBitmap::validateConfiguration(Configuration& configuration) > if (!configuration.colorSpace) > return; > >- CGColorSpaceRef colorSpace = configuration.colorSpace->platformColorSpace(); >- if (CGColorSpaceGetModel(colorSpace) == kCGColorSpaceModelIndexed) >- colorSpace = CGColorSpaceGetBaseColorSpace(colorSpace); >+ configuration.colorSpace = configuration.colorSpace->asRGB(); > >- if (CGColorSpaceGetModel(colorSpace) != kCGColorSpaceModelRGB) { >+ if (!configuration.colorSpace) { > #if HAVE(CORE_GRAPHICS_EXTENDED_SRGB_COLOR_SPACE) >- colorSpace = extendedSRGBColorSpaceRef(); >+ configuration.colorSpace = DestinationColorSpace(extendedSRGBColorSpaceRef()); > #else >- colorSpace = sRGBColorSpaceRef(); >+ configuration.colorSpace = DestinationColorSpace::SRGB(); > #endif > } >- >- configuration.colorSpace = DestinationColorSpace(colorSpace); > } > > static CGColorSpaceRef colorSpace(const ShareableBitmap::Configuration& configuration) >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 9f22f0554332f473ab011fe58e60c4fa35700e20..8bb89b3da6bd5bcbf65e1429da844eff1968e80d 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,16 @@ >+2021-09-13 Cameron McCormack <heycam@apple.com> >+ >+ Preserve color space when creating ImageBuffers for ImageBitmaps >+ https://bugs.webkit.org/show_bug.cgi?id=229022 >+ <rdar://problem/81828459> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * TestExpectations: >+ * platform/ios-14/TestExpectations: >+ * platform/ios/TestExpectations: >+ * platform/mac/TestExpectations: >+ > 2021-09-16 Youenn Fablet <youenn@apple.com> > > WPT webrtc RTCPeerConnection-setLocalDescription-offer.html and RTCPeerConnection-setLocalDescription-answer.html are flaky due to always changing failing assertion >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index 080d8c293ec1c30325dbf740cbe232400f6ec9e3..c4967d4491884ffc88927075160b1b6bbdff74d6 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,24 @@ >+2021-09-13 Cameron McCormack <heycam@apple.com> >+ >+ Preserve color space when creating ImageBuffers for ImageBitmaps >+ https://bugs.webkit.org/show_bug.cgi?id=229022 >+ <rdar://problem/81828459> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob-expected.txt: Added. >+ * web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob.html: Added. >+ * web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap-expected.txt: Added. >+ * web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap.html: Added. >+ * web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData-expected.txt: Added. >+ * web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData.html: Added. >+ * web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas-expected.txt: Added. >+ * web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas.html: Added. >+ * web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned-expected.txt: Added. >+ * web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned.html: Added. >+ * web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image-expected.txt: Added. >+ * web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image.html: Added. >+ > 2021-09-17 Youenn Fablet <youenn@apple.com> > > Compute RTCPeerConnection.connectionState as per https://w3c.github.io/webrtc-pc/#rtcpeerconnectionstate-enum >diff --git a/LayoutTests/TestExpectations b/LayoutTests/TestExpectations >index 94c6278a9c550587c10575233c23afc80277a0c7..9d882d8cfa6a709d8245f4f7e680206b3a87b900 100644 >--- a/LayoutTests/TestExpectations >+++ b/LayoutTests/TestExpectations >@@ -5253,6 +5253,12 @@ imported/w3c/web-platform-tests/css/css-color/predefined-013.html [ Skip ] > fast/canvas/canvas-color-space-display-p3-ImageData.html [ Failure ] > fast/canvas/canvas-color-space-display-p3.html [ Failure ] > imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage.html [ Failure ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob.html [ Failure ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap.html [ Failure ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData.html [ Failure ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas.html [ Failure ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned.html [ Failure ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image.html [ Failure ] > imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-pattern-canvas.html [ Failure ] > imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-pattern-image.html [ Failure ] > imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-settings.html [ Failure ] >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6285e777defd67185e1be32ac67aab4408da5c86 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob-expected.txt >@@ -0,0 +1,210 @@ >+ >+PASS sRGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-BB0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-BB0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-BB0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-BB0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Generic-CMYK-FF000000.jpg, Context srgb, ImageData srgb, cropSource=false >+PASS Generic-CMYK-FF000000.jpg, Context srgb, ImageData srgb, cropSource=true >+PASS Generic-CMYK-FF000000.jpg, Context srgb, ImageData display-p3, cropSource=false >+PASS Generic-CMYK-FF000000.jpg, Context srgb, ImageData display-p3, cropSource=true >+PASS Generic-CMYK-FF000000.jpg, Context display-p3, ImageData srgb, cropSource=false >+PASS Generic-CMYK-FF000000.jpg, Context display-p3, ImageData srgb, cropSource=true >+PASS Generic-CMYK-FF000000.jpg, Context display-p3, ImageData display-p3, cropSource=false >+PASS Generic-CMYK-FF000000.jpg, Context display-p3, ImageData display-p3, cropSource=true >+PASS Generic-CMYK-BE000000.jpg, Context srgb, ImageData srgb, cropSource=false >+PASS Generic-CMYK-BE000000.jpg, Context srgb, ImageData srgb, cropSource=true >+PASS Generic-CMYK-BE000000.jpg, Context srgb, ImageData display-p3, cropSource=false >+PASS Generic-CMYK-BE000000.jpg, Context srgb, ImageData display-p3, cropSource=true >+PASS Generic-CMYK-BE000000.jpg, Context display-p3, ImageData srgb, cropSource=false >+PASS Generic-CMYK-BE000000.jpg, Context display-p3, ImageData srgb, cropSource=true >+PASS Generic-CMYK-BE000000.jpg, Context display-p3, ImageData display-p3, cropSource=false >+PASS Generic-CMYK-BE000000.jpg, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob.html b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9b96b1a6d21ce7bdc4d45db8e07db4e4c828b2f6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="canvas-display-p3.js"></script> >+<script> >+// Test that drawing ImageBitmaps with different image Blob source bit depths >+// and color profiles into sRGB and Display P3 canvases works, by reading pixels >+// with getImageData() as sRGB and Display P3 values. >+for (let [filename, expectedPixels] of Object.entries(imageTests)) { >+ for (let contextColorSpace of ["srgb", "display-p3"]) { >+ for (let imageDataColorSpace of ["srgb", "display-p3"]) { >+ for (let cropSource of [false, true]) { >+ async_test(function(t) { >+ fetch(`resources/${filename}`) >+ .then(t.step_func(response => response.blob())) >+ .then(t.step_func(blob => (cropSource ? createImageBitmap(blob, 1, 1, 1, 1) : createImageBitmap(blob)))) >+ .then(t.step_func_done(function(imageBitmap) { >+ let canvas = document.createElement("canvas"); >+ canvas.width = 2; >+ canvas.height = 2; >+ >+ let ctx = canvas.getContext("2d", { colorSpace: contextColorSpace }); >+ ctx.drawImage(imageBitmap, 0, 0); >+ >+ let imageData = ctx.getImageData(0, 0, 1, 1, { colorSpace: imageDataColorSpace }); >+ >+ let expected = expectedPixels[`${contextColorSpace} ${imageDataColorSpace}`]; >+ assert_true(pixelsApproximatelyEqual(imageData.data, expected), `Actual pixel value ${[...imageData.data]} is approximately equal to ${expected}.`); >+ })); >+ }, `${filename}, Context ${contextColorSpace}, ImageData ${imageDataColorSpace}, cropSource=${cropSource}`); >+ } >+ } >+ } >+} >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6285e777defd67185e1be32ac67aab4408da5c86 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap-expected.txt >@@ -0,0 +1,210 @@ >+ >+PASS sRGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-BB0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-BB0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-BB0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-BB0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Generic-CMYK-FF000000.jpg, Context srgb, ImageData srgb, cropSource=false >+PASS Generic-CMYK-FF000000.jpg, Context srgb, ImageData srgb, cropSource=true >+PASS Generic-CMYK-FF000000.jpg, Context srgb, ImageData display-p3, cropSource=false >+PASS Generic-CMYK-FF000000.jpg, Context srgb, ImageData display-p3, cropSource=true >+PASS Generic-CMYK-FF000000.jpg, Context display-p3, ImageData srgb, cropSource=false >+PASS Generic-CMYK-FF000000.jpg, Context display-p3, ImageData srgb, cropSource=true >+PASS Generic-CMYK-FF000000.jpg, Context display-p3, ImageData display-p3, cropSource=false >+PASS Generic-CMYK-FF000000.jpg, Context display-p3, ImageData display-p3, cropSource=true >+PASS Generic-CMYK-BE000000.jpg, Context srgb, ImageData srgb, cropSource=false >+PASS Generic-CMYK-BE000000.jpg, Context srgb, ImageData srgb, cropSource=true >+PASS Generic-CMYK-BE000000.jpg, Context srgb, ImageData display-p3, cropSource=false >+PASS Generic-CMYK-BE000000.jpg, Context srgb, ImageData display-p3, cropSource=true >+PASS Generic-CMYK-BE000000.jpg, Context display-p3, ImageData srgb, cropSource=false >+PASS Generic-CMYK-BE000000.jpg, Context display-p3, ImageData srgb, cropSource=true >+PASS Generic-CMYK-BE000000.jpg, Context display-p3, ImageData display-p3, cropSource=false >+PASS Generic-CMYK-BE000000.jpg, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap.html b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0bd18e9bebd05b3a0f4736d7d4aac06773e7025c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="canvas-display-p3.js"></script> >+<script> >+// Test that drawing ImageBitmaps created from other ImageBitamps with different >+// image source bit depths and color profiles into sRGB and Display P3 >+// canvases works, by reading pixels with getImageData() as sRGB and Display P3 >+// values. >+for (let [filename, expectedPixels] of Object.entries(imageTests)) { >+ for (let contextColorSpace of ["srgb", "display-p3"]) { >+ for (let imageDataColorSpace of ["srgb", "display-p3"]) { >+ for (let cropSource of [false, true]) { >+ async_test(function(t) { >+ let image = new Image(); >+ image.onload = t.step_func_done(function() { >+ >+ let canvas = document.createElement("canvas"); >+ canvas.width = 2; >+ canvas.height = 2; >+ >+ let ctx = canvas.getContext("2d", { colorSpace: contextColorSpace }); >+ >+ createImageBitmap(image).then(t.step_func(function(sourceImageBitmap) { >+ let imageBitmapPromise; >+ if (cropSource) >+ imageBitmapPromise = createImageBitmap(sourceImageBitmap, 1, 1, 1, 1); >+ else >+ imageBitmapPromise = createImageBitmap(sourceImageBitmap); >+ >+ imageBitmapPromise.then(t.step_func_done(function(imageBitmap) { >+ ctx.drawImage(imageBitmap, 0, 0); >+ >+ let imageData = ctx.getImageData(0, 0, 1, 1, { colorSpace: imageDataColorSpace }); >+ >+ let expected = expectedPixels[`${contextColorSpace} ${imageDataColorSpace}`]; >+ assert_true(pixelsApproximatelyEqual(imageData.data, expected), `Actual pixel value ${[...imageData.data]} is approximately equal to ${expected}.`); >+ })); >+ })); >+ }); >+ image.src = `resources/${filename}`; >+ }, `${filename}, Context ${contextColorSpace}, ImageData ${imageDataColorSpace}, cropSource=${cropSource}`); >+ } >+ } >+ } >+} >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..86860a71f763370683c3f120a25d2f73fc794265 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData-expected.txt >@@ -0,0 +1,18 @@ >+ >+PASS Source srgb, destination display-p3, color 255,0,0,255, cropSource=false >+PASS Source srgb, destination display-p3, color 255,0,0,255, cropSource=true >+PASS Source srgb, destination display-p3, color 255,0,0,204, cropSource=false >+PASS Source srgb, destination display-p3, color 255,0,0,204, cropSource=true >+PASS Source srgb, destination display-p3, color 187,0,0,255, cropSource=false >+PASS Source srgb, destination display-p3, color 187,0,0,255, cropSource=true >+PASS Source srgb, destination display-p3, color 187,0,0,204, cropSource=false >+PASS Source srgb, destination display-p3, color 187,0,0,204, cropSource=true >+PASS Source display-p3, destination srgb, color 255,0,0,255, cropSource=false >+PASS Source display-p3, destination srgb, color 255,0,0,255, cropSource=true >+PASS Source display-p3, destination srgb, color 255,0,0,204, cropSource=false >+PASS Source display-p3, destination srgb, color 255,0,0,204, cropSource=true >+PASS Source display-p3, destination srgb, color 187,0,0,255, cropSource=false >+PASS Source display-p3, destination srgb, color 187,0,0,255, cropSource=true >+PASS Source display-p3, destination srgb, color 187,0,0,204, cropSource=false >+PASS Source display-p3, destination srgb, color 187,0,0,204, cropSource=true >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData.html b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2216b46dd84ea162e88859ff9af2189efe7e96af >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData.html >@@ -0,0 +1,46 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="canvas-display-p3.js"></script> >+<script> >+// Test that ImageBitmaps created from ImageData sources with different color >+// spaces can be drawn into sRGB and Display P3 canvases, by reading pixels with >+// getImageData() as sRGB and Display P3 values. >+function runTest(sourceColorSpace, destinationColorSpace, colors) { >+ for (let [sourceColorString, expectedColor] of Object.entries(colors)) { >+ for (let cropSource of [false, true]) { >+ async_test(function(t) { >+ let sourceColor = sourceColorString.split(",").map(x => +x); >+ >+ let sourceImageData = new ImageData(4, 4, { colorSpace: sourceColorSpace }); >+ for (let i = 0; i < 4 * 4 * 4; i += 4) { >+ for (let c = 0; c < 4; ++c) >+ sourceImageData.data[i + c] = sourceColor[c]; >+ } >+ >+ let imageBitmapPromise; >+ if (cropSource) >+ imageBitmapPromise = createImageBitmap(sourceImageData, 2, 2, 2, 2); >+ else >+ imageBitmapPromise = createImageBitmap(sourceImageData); >+ >+ imageBitmapPromise.then(t.step_func_done(function(imageBitmap) { >+ let destination = document.createElement("canvas"); >+ destination.width = 2; >+ destination.height = 2; >+ >+ let destinationContext = destination.getContext("2d", { colorSpace: destinationColorSpace }); >+ destinationContext.drawImage(imageBitmap, 0, 0); >+ >+ let destinationImageData = destinationContext.getImageData(1, 1, 1, 1); >+ >+ assert_true(pixelsApproximatelyEqual(destinationImageData.data, expectedColor), `Actual pixel value ${[...destinationImageData.data]} is approximately equal to ${expectedColor}.`); >+ })); >+ }, `Source ${sourceColorSpace}, destination ${destinationColorSpace}, color ${sourceColorString}, cropSource=${cropSource}`); >+ } >+ } >+} >+ >+runTest("srgb", "display-p3", fromSRGBToDisplayP3); >+runTest("display-p3", "srgb", fromDisplayP3ToSRGB); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..86860a71f763370683c3f120a25d2f73fc794265 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas-expected.txt >@@ -0,0 +1,18 @@ >+ >+PASS Source srgb, destination display-p3, color 255,0,0,255, cropSource=false >+PASS Source srgb, destination display-p3, color 255,0,0,255, cropSource=true >+PASS Source srgb, destination display-p3, color 255,0,0,204, cropSource=false >+PASS Source srgb, destination display-p3, color 255,0,0,204, cropSource=true >+PASS Source srgb, destination display-p3, color 187,0,0,255, cropSource=false >+PASS Source srgb, destination display-p3, color 187,0,0,255, cropSource=true >+PASS Source srgb, destination display-p3, color 187,0,0,204, cropSource=false >+PASS Source srgb, destination display-p3, color 187,0,0,204, cropSource=true >+PASS Source display-p3, destination srgb, color 255,0,0,255, cropSource=false >+PASS Source display-p3, destination srgb, color 255,0,0,255, cropSource=true >+PASS Source display-p3, destination srgb, color 255,0,0,204, cropSource=false >+PASS Source display-p3, destination srgb, color 255,0,0,204, cropSource=true >+PASS Source display-p3, destination srgb, color 187,0,0,255, cropSource=false >+PASS Source display-p3, destination srgb, color 187,0,0,255, cropSource=true >+PASS Source display-p3, destination srgb, color 187,0,0,204, cropSource=false >+PASS Source display-p3, destination srgb, color 187,0,0,204, cropSource=true >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas.html b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f3156349ed95cf9c864522e154a9084aeecca1b0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas.html >@@ -0,0 +1,53 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="canvas-display-p3.js"></script> >+<script> >+// Test that ImageBitmaps created from canvas sources with different color >+// spaces can be drawn into sRGB and Display P3 canvases, by reading pixels with >+// getImageData() as sRGB and Display P3 values. >+function runTest(sourceColorSpace, destinationColorSpace, colors) { >+ for (let [sourceColorString, expectedColor] of Object.entries(colors)) { >+ for (let cropSource of [false, true]) { >+ async_test(function(t) { >+ let source = document.createElement("canvas"); >+ source.width = 4; >+ source.height = 4; >+ >+ let sourceContext = source.getContext("2d", { colorSpace: sourceColorSpace }); >+ >+ let sourceColor = sourceColorString.split(",").map(x => +x); >+ >+ let sourceImageData = new ImageData(4, 4, { colorSpace: sourceColorSpace }); >+ for (let i = 0; i < 4 * 4 * 4; i += 4) { >+ for (let c = 0; c < 4; ++c) >+ sourceImageData.data[i + c] = sourceColor[c]; >+ } >+ sourceContext.putImageData(sourceImageData, 0, 0); >+ >+ let imageBitmapPromise; >+ if (cropSource) >+ imageBitmapPromise = createImageBitmap(source, 2, 2, 2, 2); >+ else >+ imageBitmapPromise = createImageBitmap(source); >+ >+ imageBitmapPromise.then(t.step_func_done(function(imageBitmap) { >+ let destination = document.createElement("canvas"); >+ destination.width = 2; >+ destination.height = 2; >+ >+ let destinationContext = destination.getContext("2d", { colorSpace: destinationColorSpace }); >+ destinationContext.drawImage(imageBitmap, 0, 0); >+ >+ let destinationImageData = destinationContext.getImageData(1, 1, 1, 1); >+ >+ assert_true(pixelsApproximatelyEqual(destinationImageData.data, expectedColor), `Actual pixel value ${[...destinationImageData.data]} is approximately equal to ${expectedColor}.`); >+ })); >+ }, `Source ${sourceColorSpace}, destination ${destinationColorSpace}, color ${sourceColorString}, cropSource=${cropSource}`); >+ } >+ } >+} >+ >+runTest("srgb", "display-p3", fromSRGBToDisplayP3); >+runTest("display-p3", "srgb", fromDisplayP3ToSRGB); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e4dc56bc87fff19be4f628be9bb8ac1afe7c9306 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned-expected.txt >@@ -0,0 +1,210 @@ >+ >+PASS sRGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+FAIL sRGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL sRGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL sRGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL sRGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL sRGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL sRGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL sRGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL sRGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL sRGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,0,0,255. expected true got false >+FAIL sRGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,0,0,255. expected true got false >+FAIL sRGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,255. expected true got false >+FAIL sRGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,255. expected true got false >+FAIL sRGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,1,0,255. expected true got false >+FAIL sRGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,1,0,255. expected true got false >+FAIL sRGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,255. expected true got false >+FAIL sRGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,255. expected true got false >+FAIL sRGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,0,0,204. expected true got false >+FAIL sRGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,0,0,204. expected true got false >+FAIL sRGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,204. expected true got false >+FAIL sRGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,204. expected true got false >+FAIL sRGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,1,0,204. expected true got false >+FAIL sRGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,1,0,204. expected true got false >+FAIL sRGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,204. expected true got false >+FAIL sRGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,204. expected true got false >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+FAIL Display-P3-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,0,0,255. expected true got false >+FAIL Display-P3-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,0,0,255. expected true got false >+FAIL Display-P3-FF0000CC.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Display-P3-FF0000CC.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Display-P3-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL Display-P3-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL Display-P3-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Display-P3-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Display-P3-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Display-P3-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Display-P3-BB0000FF.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,255. expected true got false >+FAIL Display-P3-BB0000FF.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,255. expected true got false >+FAIL Display-P3-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 188,39,26,255. expected true got false >+FAIL Display-P3-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 188,39,26,255. expected true got false >+FAIL Display-P3-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,255. expected true got false >+FAIL Display-P3-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,255. expected true got false >+FAIL Display-P3-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 187,0,0,255. expected true got false >+FAIL Display-P3-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 187,0,0,255. expected true got false >+FAIL Display-P3-BB0000CC.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,204. expected true got false >+FAIL Display-P3-BB0000CC.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,204. expected true got false >+FAIL Display-P3-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 188,39,26,204. expected true got false >+FAIL Display-P3-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 188,39,26,204. expected true got false >+FAIL Display-P3-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,204. expected true got false >+FAIL Display-P3-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,204. expected true got false >+FAIL Display-P3-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 187,0,0,204. expected true got false >+FAIL Display-P3-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 187,0,0,204. expected true got false >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+FAIL Adobe-RGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,19,11,255. expected true got false >+FAIL Adobe-RGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,19,11,255. expected true got false >+FAIL Adobe-RGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,61,43,255. expected true got false >+FAIL Adobe-RGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,61,43,255. expected true got false >+FAIL Adobe-RGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Adobe-RGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Adobe-RGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL Adobe-RGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL Adobe-RGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,19,11,204. expected true got false >+FAIL Adobe-RGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,19,11,204. expected true got false >+FAIL Adobe-RGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,61,43,204. expected true got false >+FAIL Adobe-RGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,61,43,204. expected true got false >+FAIL Adobe-RGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,0,255. expected true got false >+FAIL Adobe-RGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,0,255. expected true got false >+FAIL Adobe-RGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,255. expected true got false >+FAIL Adobe-RGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,255. expected true got false >+FAIL Adobe-RGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,1,255. expected true got false >+FAIL Adobe-RGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,1,255. expected true got false >+FAIL Adobe-RGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,255. expected true got false >+FAIL Adobe-RGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,255. expected true got false >+FAIL Adobe-RGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,0,204. expected true got false >+FAIL Adobe-RGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,0,204. expected true got false >+FAIL Adobe-RGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,204. expected true got false >+FAIL Adobe-RGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,204. expected true got false >+FAIL Adobe-RGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,1,204. expected true got false >+FAIL Adobe-RGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,1,204. expected true got false >+FAIL Adobe-RGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,204. expected true got false >+FAIL Adobe-RGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,204. expected true got false >+FAIL Generic-CMYK-FF000000.jpg, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 0,163,218,255. expected true got false >+FAIL Generic-CMYK-FF000000.jpg, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 0,163,218,255. expected true got false >+FAIL Generic-CMYK-FF000000.jpg, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 72,161,213,255. expected true got false >+FAIL Generic-CMYK-FF000000.jpg, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 72,161,213,255. expected true got false >+FAIL Generic-CMYK-FF000000.jpg, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 0,163,218,255. expected true got false >+FAIL Generic-CMYK-FF000000.jpg, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 0,163,218,255. expected true got false >+FAIL Generic-CMYK-FF000000.jpg, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 0,160,213,255. expected true got false >+FAIL Generic-CMYK-FF000000.jpg, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 0,160,213,255. expected true got false >+FAIL Generic-CMYK-BE000000.jpg, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 0,180,223,255. expected true got false >+FAIL Generic-CMYK-BE000000.jpg, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 0,180,223,255. expected true got false >+FAIL Generic-CMYK-BE000000.jpg, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 80,177,219,255. expected true got false >+FAIL Generic-CMYK-BE000000.jpg, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 80,177,219,255. expected true got false >+FAIL Generic-CMYK-BE000000.jpg, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 0,180,223,255. expected true got false >+FAIL Generic-CMYK-BE000000.jpg, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 0,180,223,255. expected true got false >+FAIL Generic-CMYK-BE000000.jpg, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 65,177,219,255. expected true got false >+FAIL Generic-CMYK-BE000000.jpg, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 65,177,219,255. expected true got false >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+FAIL sRGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL sRGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL sRGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL sRGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL sRGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,0,0,255. expected true got false >+FAIL sRGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,0,0,255. expected true got false >+FAIL sRGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,255. expected true got false >+FAIL sRGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,255. expected true got false >+FAIL sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,1,0,255. expected true got false >+FAIL sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,1,0,255. expected true got false >+FAIL sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,255. expected true got false >+FAIL sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,255. expected true got false >+FAIL sRGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,0,0,204. expected true got false >+FAIL sRGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,0,0,204. expected true got false >+FAIL sRGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,204. expected true got false >+FAIL sRGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,204. expected true got false >+FAIL sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,1,0,204. expected true got false >+FAIL sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 187,1,0,204. expected true got false >+FAIL sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,204. expected true got false >+FAIL sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 171,35,23,204. expected true got false >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+FAIL Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,0,0,255. expected true got false >+FAIL Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,0,0,255. expected true got false >+FAIL Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,255. expected true got false >+FAIL Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,255. expected true got false >+FAIL Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 188,39,26,255. expected true got false >+FAIL Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 188,39,26,255. expected true got false >+FAIL Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,255. expected true got false >+FAIL Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,255. expected true got false >+FAIL Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 187,0,0,255. expected true got false >+FAIL Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 187,0,0,255. expected true got false >+FAIL Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,204. expected true got false >+FAIL Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,204. expected true got false >+FAIL Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 188,39,26,204. expected true got false >+FAIL Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 188,39,26,204. expected true got false >+FAIL Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,204. expected true got false >+FAIL Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 205,0,0,204. expected true got false >+FAIL Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 187,0,0,204. expected true got false >+FAIL Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 187,0,0,204. expected true got false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+FAIL Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,19,11,255. expected true got false >+FAIL Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,19,11,255. expected true got false >+FAIL Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,61,43,255. expected true got false >+FAIL Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,61,43,255. expected true got false >+FAIL Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,0,0,204. expected true got false >+FAIL Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 234,51,35,204. expected true got false >+FAIL Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,19,11,204. expected true got false >+FAIL Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 255,19,11,204. expected true got false >+FAIL Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,61,43,204. expected true got false >+FAIL Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 255,61,43,204. expected true got false >+FAIL Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,0,255. expected true got false >+FAIL Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,0,255. expected true got false >+FAIL Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,255. expected true got false >+FAIL Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,255. expected true got false >+FAIL Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,1,255. expected true got false >+FAIL Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,1,255. expected true got false >+FAIL Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,255. expected true got false >+FAIL Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,255. expected true got false >+FAIL Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,0,204. expected true got false >+FAIL Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,0,204. expected true got false >+FAIL Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,204. expected true got false >+FAIL Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,204. expected true got false >+FAIL Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,1,204. expected true got false >+FAIL Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true assert_true: Actual pixel value 255,0,0,255 is approximately equal to 219,0,1,204. expected true got false >+FAIL Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,204. expected true got false >+FAIL Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true assert_true: Actual pixel value 234,51,35,255 is approximately equal to 201,42,29,204. expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned.html b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6f009b0f1a90a4f022d6da1b23c9f32ab3907478 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned.html >@@ -0,0 +1,51 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="canvas-display-p3.js"></script> >+<script> >+// Test that drawing structured cloned ImageBitmaps with different image source >+// bit depths and color profiles into sRGB and Display P3 canvases works, by >+// reading pixels with getImageData() as sRGB and Display P3 values. >+for (let [filename, expectedPixels] of Object.entries(imageTests)) { >+ for (let contextColorSpace of ["srgb", "display-p3"]) { >+ for (let imageDataColorSpace of ["srgb", "display-p3"]) { >+ for (let cropSource of [false, true]) { >+ async_test(function(t) { >+ let image = new Image(); >+ image.onload = t.step_func(function() { >+ >+ let canvas = document.createElement("canvas"); >+ canvas.width = 2; >+ canvas.height = 2; >+ >+ let ctx = canvas.getContext("2d", { colorSpace: contextColorSpace }); >+ >+ let imageBitmapPromise; >+ if (cropSource) >+ imageBitmapPromise = createImageBitmap(image, 1, 1, 1, 1); >+ else >+ imageBitmapPromise = createImageBitmap(image); >+ >+ imageBitmapPromise.then(t.step_func(function(imageBitmap) { >+ window.addEventListener( >+ "message", >+ t.step_func_done(function(message) { >+ ctx.drawImage(message.data, 0, 0); >+ >+ let imageData = ctx.getImageData(0, 0, 1, 1, { colorSpace: imageDataColorSpace }); >+ >+ let expected = expectedPixels[`${contextColorSpace} ${imageDataColorSpace}`]; >+ assert_true(pixelsApproximatelyEqual(imageData.data, expected), `Actual pixel value ${[...imageData.data]} is approximately equal to ${expected}.`); >+ }), >+ { once: true } >+ ); >+ window.postMessage(imageBitmap); >+ })); >+ }); >+ image.src = `resources/${filename}`; >+ }, `${filename}, Context ${contextColorSpace}, ImageData ${imageDataColorSpace}, cropSource=${cropSource}`); >+ } >+ } >+ } >+} >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6285e777defd67185e1be32ac67aab4408da5c86 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image-expected.txt >@@ -0,0 +1,210 @@ >+ >+PASS sRGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-BB0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-BB0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-BB0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-BB0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FF0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FF0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BB0000FF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BB0000FF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BB0000FF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BB0000FF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BB0000CC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BB0000CC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BB0000CC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BB0000CC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Generic-CMYK-FF000000.jpg, Context srgb, ImageData srgb, cropSource=false >+PASS Generic-CMYK-FF000000.jpg, Context srgb, ImageData srgb, cropSource=true >+PASS Generic-CMYK-FF000000.jpg, Context srgb, ImageData display-p3, cropSource=false >+PASS Generic-CMYK-FF000000.jpg, Context srgb, ImageData display-p3, cropSource=true >+PASS Generic-CMYK-FF000000.jpg, Context display-p3, ImageData srgb, cropSource=false >+PASS Generic-CMYK-FF000000.jpg, Context display-p3, ImageData srgb, cropSource=true >+PASS Generic-CMYK-FF000000.jpg, Context display-p3, ImageData display-p3, cropSource=false >+PASS Generic-CMYK-FF000000.jpg, Context display-p3, ImageData display-p3, cropSource=true >+PASS Generic-CMYK-BE000000.jpg, Context srgb, ImageData srgb, cropSource=false >+PASS Generic-CMYK-BE000000.jpg, Context srgb, ImageData srgb, cropSource=true >+PASS Generic-CMYK-BE000000.jpg, Context srgb, ImageData display-p3, cropSource=false >+PASS Generic-CMYK-BE000000.jpg, Context srgb, ImageData display-p3, cropSource=true >+PASS Generic-CMYK-BE000000.jpg, Context display-p3, ImageData srgb, cropSource=false >+PASS Generic-CMYK-BE000000.jpg, Context display-p3, ImageData srgb, cropSource=true >+PASS Generic-CMYK-BE000000.jpg, Context display-p3, ImageData display-p3, cropSource=false >+PASS Generic-CMYK-BE000000.jpg, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS sRGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS sRGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS sRGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS sRGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS sRGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Display-P3-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Display-P3-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-FFFF00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BBBC00000000FFFF.png, Context display-p3, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context srgb, ImageData display-p3, cropSource=true >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=false >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData srgb, cropSource=true >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=false >+PASS Adobe-RGB-BBBC00000000CCCC.png, Context display-p3, ImageData display-p3, cropSource=true >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image.html b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e7e85c915d27d52d6d529f7f4a524470fd76db96 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image.html >@@ -0,0 +1,44 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="canvas-display-p3.js"></script> >+<script> >+// Test that drawing ImageBitmaps with different image source bit depths and >+// color profiles into sRGB and Display P3 canvases works, by reading pixels >+// with getImageData() as sRGB and Display P3 values. >+for (let [filename, expectedPixels] of Object.entries(imageTests)) { >+ for (let contextColorSpace of ["srgb", "display-p3"]) { >+ for (let imageDataColorSpace of ["srgb", "display-p3"]) { >+ for (let cropSource of [false, true]) { >+ async_test(function(t) { >+ let image = new Image(); >+ image.onload = t.step_func(function() { >+ >+ let canvas = document.createElement("canvas"); >+ canvas.width = 2; >+ canvas.height = 2; >+ >+ let ctx = canvas.getContext("2d", { colorSpace: contextColorSpace }); >+ >+ let imageBitmapPromise; >+ if (cropSource) >+ imageBitmapPromise = createImageBitmap(image, 1, 1, 1, 1); >+ else >+ imageBitmapPromise = createImageBitmap(image); >+ >+ imageBitmapPromise.then(t.step_func_done(function(imageBitmap) { >+ ctx.drawImage(imageBitmap, 0, 0); >+ >+ let imageData = ctx.getImageData(0, 0, 1, 1, { colorSpace: imageDataColorSpace }); >+ >+ let expected = expectedPixels[`${contextColorSpace} ${imageDataColorSpace}`]; >+ assert_true(pixelsApproximatelyEqual(imageData.data, expected), `Actual pixel value ${[...imageData.data]} is approximately equal to ${expected}.`); >+ })); >+ }); >+ image.src = `resources/${filename}`; >+ }, `${filename}, Context ${contextColorSpace}, ImageData ${imageDataColorSpace}, cropSource=${cropSource}`); >+ } >+ } >+ } >+} >+</script> >diff --git a/LayoutTests/platform/ios-14/TestExpectations b/LayoutTests/platform/ios-14/TestExpectations >index 9454c2aae69e42f8671193fec839bce75438dbe6..268c20aee0fec87c4ef4e08d970e2d44ddd005de 100644 >--- a/LayoutTests/platform/ios-14/TestExpectations >+++ b/LayoutTests/platform/ios-14/TestExpectations >@@ -72,6 +72,12 @@ http/tests/app-privacy-report/ [ Skip ] > fast/canvas/canvas-color-space-display-p3-ImageData.html [ Failure ] > fast/canvas/canvas-color-space-display-p3.html [ Failure ] > imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage.html [ Failure ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob.html [ Failure ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap.html [ Failure ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData.html [ Failure ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas.html [ Failure ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned.html [ Failure ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image.html [ Failure ] > imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-pattern-canvas.html [ Failure ] > imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-pattern-image.html [ Failure ] > imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-settings.html [ Failure ] >diff --git a/LayoutTests/platform/ios/TestExpectations b/LayoutTests/platform/ios/TestExpectations >index 11884c799543db1c5a700a9ceabbe7b0d1ba7bfc..e58fa09424d58db1ec17c038138d730f2d17df72 100644 >--- a/LayoutTests/platform/ios/TestExpectations >+++ b/LayoutTests/platform/ios/TestExpectations >@@ -3488,6 +3488,12 @@ webkit.org/b/228176 fast/text/variable-system-font-2.html [ Pass ] > fast/canvas/canvas-color-space-display-p3-ImageData.html [ Pass ] > fast/canvas/canvas-color-space-display-p3.html [ Pass ] > imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage.html [ Pass ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob.html [ Pass ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap.html [ Pass ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData.html [ Pass ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas.html [ Pass ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned.html [ Pass ] >+imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image.html [ Pass ] > imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-pattern-canvas.html [ Pass ] > imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-pattern-image.html [ Pass ] > imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-settings.html [ Pass ] >diff --git a/LayoutTests/platform/mac/TestExpectations b/LayoutTests/platform/mac/TestExpectations >index edd3e835ff1f673d4fb141f80fd8e5313719890a..1e2b9583297e721b56d09b784200117270e89598 100644 >--- a/LayoutTests/platform/mac/TestExpectations >+++ b/LayoutTests/platform/mac/TestExpectations >@@ -2347,6 +2347,12 @@ webkit.org/b/230116 imported/w3c/web-platform-tests/webrtc-extensions/transfer-d > [ Monterey+ ] fast/canvas/canvas-color-space-display-p3-ImageData.html [ Pass ] > [ Monterey+ ] fast/canvas/canvas-color-space-display-p3.html [ Pass ] > [ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage.html [ Pass ] >+[ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob.html [ Pass ] >+[ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageBitmap.html [ Pass ] >+[ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-ImageData.html [ Pass ] >+[ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-canvas.html [ Pass ] >+[ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-cloned.html [ Pass ] >+[ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-image.html [ Pass ] > [ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-pattern-canvas.html [ Pass ] > [ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-pattern-image.html [ Pass ] > [ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-settings.html [ Pass ]
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 229022
:
438106
|
438194
|
438196
|
438197
| 438449