| Index: third_party/WebKit/Source/core/paint/HTMLCanvasPainterTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/paint/HTMLCanvasPainterTest.cpp b/third_party/WebKit/Source/core/paint/HTMLCanvasPainterTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f80897dd062436fccbd543618ab2659efcea6a38
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/core/paint/HTMLCanvasPainterTest.cpp
|
| @@ -0,0 +1,98 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "core/paint/HTMLCanvasPainter.h"
|
| +
|
| +#include "core/frame/FrameView.h"
|
| +#include "core/frame/Settings.h"
|
| +#include "core/html/HTMLCanvasElement.h"
|
| +#include "core/html/canvas/CanvasContextCreationAttributes.h"
|
| +#include "core/html/canvas/CanvasRenderingContext.h"
|
| +#include "core/loader/EmptyClients.h"
|
| +#include "core/paint/StubChromeClientForSPv2.h"
|
| +#include "core/testing/DummyPageHolder.h"
|
| +#include "platform/graphics/Canvas2DImageBufferSurface.h"
|
| +#include "platform/graphics/Canvas2DLayerBridge.h"
|
| +#include "platform/graphics/test/FakeGLES2Interface.h"
|
| +#include "platform/graphics/test/FakeWebGraphicsContext3DProvider.h"
|
| +#include "public/platform/WebLayer.h"
|
| +#include "public/platform/WebSize.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +// Integration tests of canvas painting code (in SPv2 mode).
|
| +
|
| +namespace blink {
|
| +
|
| +class HTMLCanvasPainterTestForSPv2 : public ::testing::TestWithParam<WebLayerTreeViewImplForTesting::LayerListPolicy> {
|
| +protected:
|
| + void SetUp() override
|
| + {
|
| + RuntimeEnabledFeatures::setSlimmingPaintV2Enabled(true);
|
| + m_chromeClient = new StubChromeClientForSPv2(GetParam());
|
| + Page::PageClients clients;
|
| + fillWithEmptyClients(clients);
|
| + clients.chromeClient = m_chromeClient.get();
|
| + m_pageHolder = DummyPageHolder::create(IntSize(800, 600), &clients, nullptr,
|
| + [](Settings& settings)
|
| + {
|
| + settings.setAcceleratedCompositingEnabled(true);
|
| + // LayoutHTMLCanvas doesn't exist if script is disabled.
|
| + settings.setScriptEnabled(true);
|
| + });
|
| + document().view()->setParentVisible(true);
|
| + document().view()->setSelfVisible(true);
|
| + }
|
| +
|
| + void TearDown() override
|
| + {
|
| + m_featuresBackup.restore();
|
| + }
|
| +
|
| + Document& document() { return m_pageHolder->document(); }
|
| + bool hasLayerAttached(const WebLayer& layer) { return m_chromeClient->hasLayer(layer); }
|
| +
|
| + PassRefPtr<Canvas2DLayerBridge> makeCanvas2DLayerBridge(const IntSize& size)
|
| + {
|
| + return adoptRef(new Canvas2DLayerBridge(
|
| + wrapUnique(new FakeWebGraphicsContext3DProvider(&m_gl)),
|
| + size, 0, NonOpaque, Canvas2DLayerBridge::ForceAccelerationForTesting));
|
| + }
|
| +
|
| +private:
|
| + RuntimeEnabledFeatures::Backup m_featuresBackup;
|
| + Persistent<StubChromeClientForSPv2> m_chromeClient;
|
| + FakeGLES2Interface m_gl;
|
| + std::unique_ptr<DummyPageHolder> m_pageHolder;
|
| +};
|
| +
|
| +INSTANTIATE_TEST_CASE_P(, HTMLCanvasPainterTestForSPv2, ::testing::Values(
|
| + WebLayerTreeViewImplForTesting::DontUseLayerLists,
|
| + WebLayerTreeViewImplForTesting::UseLayerLists));
|
| +
|
| +TEST_P(HTMLCanvasPainterTestForSPv2, Canvas2DLayerAppearsInLayerTree)
|
| +{
|
| + // Insert a <canvas> and force it into accelerated mode.
|
| + document().body()->setInnerHTML("<canvas width=300 height=200>", ASSERT_NO_EXCEPTION);
|
| + HTMLCanvasElement* element = toHTMLCanvasElement(document().body()->firstChild());
|
| + CanvasContextCreationAttributes attributes;
|
| + attributes.setAlpha(true);
|
| + CanvasRenderingContext* context = element->getCanvasRenderingContext("2d", attributes);
|
| + RefPtr<Canvas2DLayerBridge> bridge = makeCanvas2DLayerBridge(IntSize(300, 200));
|
| + element->createImageBufferUsingSurfaceForTesting(
|
| + wrapUnique(new Canvas2DImageBufferSurface(bridge, IntSize(300, 200))));
|
| + ASSERT_EQ(context, element->renderingContext());
|
| + ASSERT_TRUE(context->isAccelerated());
|
| +
|
| + // Force the page to paint.
|
| + document().view()->updateAllLifecyclePhases();
|
| +
|
| + // Fetch the layer associated with the <canvas>, and check that it was
|
| + // correctly configured in the layer tree.
|
| + const WebLayer* layer = context->platformLayer();
|
| + ASSERT_TRUE(layer);
|
| + EXPECT_TRUE(hasLayerAttached(*layer));
|
| + EXPECT_EQ(WebSize(300, 200), layer->bounds());
|
| +}
|
| +
|
| +} // namespace blink
|
|
|