| Index: third_party/WebKit/Source/web/tests/ResizeObserverTest.cpp
|
| diff --git a/third_party/WebKit/Source/web/tests/ResizeObserverTest.cpp b/third_party/WebKit/Source/web/tests/ResizeObserverTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e78a0ebdabefd197f680f3cab007d3ca9501afb1
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/web/tests/ResizeObserverTest.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/observer/ResizeObserver.h"
|
| +
|
| +#include "core/observer/ResizeObservation.h"
|
| +#include "core/observer/ResizeObserverCallback.h"
|
| +#include "platform/testing/UnitTestHelpers.h"
|
| +#include "web/WebViewImpl.h"
|
| +#include "web/tests/sim/SimCompositor.h"
|
| +#include "web/tests/sim/SimDisplayItemList.h"
|
| +#include "web/tests/sim/SimRequest.h"
|
| +#include "web/tests/sim/SimTest.h"
|
| +#include "wtf/CurrentTime.h"
|
| +
|
| +namespace blink {
|
| +
|
| +namespace {
|
| +
|
| +class TestResizeObserverCallback : public ResizeObserverCallback {
|
| +public:
|
| + TestResizeObserverCallback(Document& document)
|
| + : m_document(document)
|
| + , m_callCount(0)
|
| + { }
|
| + void handleEvent(const HeapVector<Member<ResizeObserverEntry>>& entries, ResizeObserver*) override
|
| + {
|
| + m_callCount++;
|
| + }
|
| + ExecutionContext* getExecutionContext() const { return m_document; }
|
| + int callCount() const { return m_callCount; }
|
| +
|
| + DEFINE_INLINE_TRACE() {
|
| + ResizeObserverCallback::trace(visitor);
|
| + visitor->trace(m_document);
|
| + }
|
| +
|
| +private:
|
| + Member<Document> m_document;
|
| + int m_callCount;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +/* Testing:
|
| + * getTargetSize
|
| + * setTargetSize
|
| + * oubservationSizeOutOfSync == false
|
| + * modify target size
|
| + * oubservationSizeOutOfSync == true
|
| + */
|
| +class ResizeObservationUnitTest : public SimTest { };
|
| +
|
| +TEST_F(ResizeObservationUnitTest, ObserveSchedulesFrame)
|
| +{
|
| + SimRequest mainResource("https://example.com/", "text/html");
|
| + loadURL("https://example.com/");
|
| +
|
| + mainResource.start();
|
| + mainResource.write(
|
| + "<div id='domTarget' style='width:100px;height:100px'>yo</div>"
|
| + "<svg height='200' width='200'>"
|
| + "<circle id='svgTarget' cx='100' cy='100' r='100'/>"
|
| + "</svg>"
|
| + );
|
| + mainResource.finish();
|
| +
|
| + ResizeObserverCallback* callback = new TestResizeObserverCallback(document());
|
| + ResizeObserver* observer = ResizeObserver::create(document(), callback);
|
| + Element* domTarget = document().getElementById("domTarget");
|
| + Element* svgTarget = document().getElementById("svgTarget");
|
| + ResizeObservation* domObservation = new ResizeObservation(domTarget, observer);
|
| + ResizeObservation* svgObservation = new ResizeObservation(svgTarget, observer);
|
| +
|
| + // Initial observation is out of sync
|
| + ASSERT_TRUE(domObservation->observationSizeOutOfSync());
|
| + ASSERT_TRUE(svgObservation->observationSizeOutOfSync());
|
| +
|
| + // Target size is correct
|
| + LayoutSize size = ResizeObservation::getTargetSize(domTarget);
|
| + ASSERT_EQ(size.width(), 100);
|
| + ASSERT_EQ(size.height(), 100);
|
| + domObservation->setObservationSize(size);
|
| +
|
| + size = ResizeObservation::getTargetSize(svgTarget);
|
| + ASSERT_EQ(size.width(), 200);
|
| + ASSERT_EQ(size.height(), 200);
|
| + svgObservation->setObservationSize(size);
|
| +
|
| + // Target size is in sync
|
| + ASSERT_FALSE(domObservation->observationSizeOutOfSync());
|
| +
|
| + // Target depths
|
| + ASSERT_EQ(svgObservation->targetDepth() - domObservation->targetDepth(), (size_t)1);
|
| +}
|
| +
|
| +} // namespace blink
|
|
|