| // 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 "modules/canvas/HTMLCanvasElementModule.h" |
| |
| #include "core/dom/DOMNodeIds.h" |
| #include "core/dom/Document.h" |
| #include "core/frame/FrameView.h" |
| #include "core/html/HTMLCanvasElement.h" |
| #include "core/loader/EmptyClients.h" |
| #include "core/offscreencanvas/OffscreenCanvas.h" |
| #include "core/testing/DummyPageHolder.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include <memory> |
| |
| namespace blink { |
| |
| class HTMLCanvasElementModuleTest : public ::testing::Test { |
| protected: |
| virtual void SetUp() { |
| Page::PageClients page_clients; |
| FillWithEmptyClients(page_clients); |
| std::unique_ptr<DummyPageHolder> dummy_page_holder = |
| DummyPageHolder::Create(IntSize(800, 600), &page_clients); |
| Persistent<Document> document = &dummy_page_holder->GetDocument(); |
| document->documentElement()->setInnerHTML( |
| "<body><canvas id='c'></canvas></body>"); |
| document->View()->UpdateAllLifecyclePhases(); |
| canvas_element_ = toHTMLCanvasElement(document->GetElementById("c")); |
| } |
| |
| HTMLCanvasElement& CanvasElement() const { return *canvas_element_; } |
| OffscreenCanvas* TransferControlToOffscreen(ExceptionState&); |
| |
| private: |
| Persistent<HTMLCanvasElement> canvas_element_; |
| }; |
| |
| OffscreenCanvas* HTMLCanvasElementModuleTest::TransferControlToOffscreen( |
| ExceptionState& exception_state) { |
| // This unit test only tests if the Canvas Id is associated correctly, so we |
| // exclude the part that creates surface layer bridge because a mojo message |
| // pipe cannot be tested using webkit unit tests. |
| return HTMLCanvasElementModule::TransferControlToOffscreenInternal( |
| CanvasElement(), exception_state); |
| } |
| |
| TEST_F(HTMLCanvasElementModuleTest, TransferControlToOffscreen) { |
| NonThrowableExceptionState exception_state; |
| OffscreenCanvas* offscreen_canvas = |
| TransferControlToOffscreen(exception_state); |
| int canvas_id = offscreen_canvas->PlaceholderCanvasId(); |
| EXPECT_EQ(canvas_id, DOMNodeIds::IdForNode(&(CanvasElement()))); |
| } |
| |
| } // namespace blink |