blob: ad9972d3711d4cc185539b4a89c5e9b374a44171 [file] [log] [blame]
// 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