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

Unified Diff: third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp

Issue 1775153002: Make OffscreenCanvasRenderingContext2D renderable on a worker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes and tests for transferToImageBitmap Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
diff --git a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
index 3349165f1cf7fe12515fd25e00101e00dc7ebf1b..b018506b1ee9438bb80404819e601e2493f0b8a2 100644
--- a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
+++ b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
@@ -5,7 +5,10 @@
#include "modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h"
#include "bindings/modules/v8/UnionTypesModules.h"
+#include "core/frame/ImageBitmap.h"
#include "platform/NotImplemented.h"
+#include "platform/graphics/ImageBuffer.h"
+#include "platform/graphics/StaticBitmapImage.h"
#include "wtf/Assertions.h"
#define UNIMPLEMENTED ASSERT_NOT_REACHED
@@ -31,13 +34,12 @@ DEFINE_TRACE(OffscreenCanvasRenderingContext2D)
// BaseRenderingContext2D implementation
bool OffscreenCanvasRenderingContext2D::originClean() const
{
- notImplemented();
- return true;
+ return m_originClean;
}
void OffscreenCanvasRenderingContext2D::setOriginTainted()
{
- notImplemented();
+ m_originClean = false;
}
bool OffscreenCanvasRenderingContext2D::wouldTaintOrigin(CanvasImageSource* source)
@@ -48,80 +50,99 @@ bool OffscreenCanvasRenderingContext2D::wouldTaintOrigin(CanvasImageSource* sour
int OffscreenCanvasRenderingContext2D::width() const
{
- return offscreenCanvas()->height();
+ return offscreenCanvas()->width();
}
int OffscreenCanvasRenderingContext2D::height() const
{
- return offscreenCanvas()->width();
+ return offscreenCanvas()->height();
}
bool OffscreenCanvasRenderingContext2D::hasImageBuffer() const
{
- notImplemented();
- return false;
+ return !!m_imageBuffer;
}
ImageBuffer* OffscreenCanvasRenderingContext2D::imageBuffer() const
{
- notImplemented();
- return nullptr;
+ if (!m_imageBuffer) {
+ OffscreenCanvasRenderingContext2D* nonConstThis = const_cast<OffscreenCanvasRenderingContext2D*>(this);
+ nonConstThis->m_imageBuffer = ImageBuffer::create(IntSize(width(), height()), m_hasAlpha ? NonOpaque : Opaque, InitializeImagePixels);
+ // TODO: crbug.com/593349 Restore matrix and clip state on the new ImageBuffer.
+ }
+
+ return m_imageBuffer.get();
}
-bool OffscreenCanvasRenderingContext2D::parseColorOrCurrentColor(Color&, const String& colorString) const
+PassRefPtrWillBeRawPtr<ImageBitmap> OffscreenCanvasRenderingContext2D::transferToImageBitmap(ExceptionState& exceptionState)
{
- notImplemented();
- return false;
+ if (!imageBuffer())
+ return nullptr;
+ RefPtr<SkImage> skImage = m_imageBuffer->newSkImageSnapshot(PreferNoAcceleration, SnapshotReasonUnknown);
Stephen White 2016/03/09 18:54:07 Add a reference to a bug for making OffscreenCanva
+ RefPtr<StaticBitmapImage> image = StaticBitmapImage::create(skImage.release());
+ m_imageBuffer.clear(); // "Transfer" means no retained buffer
+ return ImageBitmap::create(image.release());
+}
+
+bool OffscreenCanvasRenderingContext2D::parseColorOrCurrentColor(Color& color, const String& colorString) const
+{
+ return ::blink::parseColorOrCurrentColor(color, colorString, nullptr);
}
SkCanvas* OffscreenCanvasRenderingContext2D::drawingCanvas() const
{
- notImplemented();
- return nullptr;
+ ImageBuffer* buffer = imageBuffer();
+ if (!buffer)
+ return nullptr;
+ return imageBuffer()->canvas();
}
SkCanvas* OffscreenCanvasRenderingContext2D::existingDrawingCanvas() const
{
- notImplemented();
- return nullptr;
+ if (!m_imageBuffer)
+ return nullptr;
+ return m_imageBuffer->canvas();
}
void OffscreenCanvasRenderingContext2D::disableDeferral(DisableDeferralReason)
-{
- notImplemented();
-}
+{ }
AffineTransform OffscreenCanvasRenderingContext2D::baseTransform() const
{
- notImplemented();
- return 0;
+ if (!m_imageBuffer)
+ return AffineTransform(); // identity
+ return m_imageBuffer->baseTransform();
}
void OffscreenCanvasRenderingContext2D::didDraw(const SkIRect& dirtyRect)
-{
- notImplemented();
-}
+{ }
bool OffscreenCanvasRenderingContext2D::stateHasFilter()
{
- notImplemented();
+ // TODO: make hasFilter accept nullptr
Stephen White 2016/03/09 18:54:07 Add a bug reference here?
+ // return state().hasFilter(nullptr, nullptr, IntSize(width(), height()), this);
return false;
}
SkImageFilter* OffscreenCanvasRenderingContext2D::stateGetFilter()
{
- notImplemented();
+ // TODO: make getFilter accept nullptr
+ // return state().getFilter(nullptr, nullptr, IntSize(width(), height()), this);
return nullptr;
}
void OffscreenCanvasRenderingContext2D::validateStateStack()
{
- notImplemented();
+#if ENABLE(ASSERT)
+ SkCanvas* skCanvas = existingDrawingCanvas();
+ if (skCanvas) {
+ ASSERT(static_cast<size_t>(skCanvas->getSaveCount()) == m_stateStack.size());
+ }
+#endif
}
bool OffscreenCanvasRenderingContext2D::isContextLost() const
{
- notImplemented();
return false;
}

Powered by Google App Engine
This is Rietveld 408576698