OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "core/observer/ResizeObserver.h" |
| 6 |
| 7 #include "core/observer/ResizeObservation.h" |
| 8 #include "core/observer/ResizeObserverCallback.h" |
| 9 #include "platform/testing/UnitTestHelpers.h" |
| 10 #include "web/WebViewImpl.h" |
| 11 #include "web/tests/sim/SimCompositor.h" |
| 12 #include "web/tests/sim/SimDisplayItemList.h" |
| 13 #include "web/tests/sim/SimRequest.h" |
| 14 #include "web/tests/sim/SimTest.h" |
| 15 #include "wtf/CurrentTime.h" |
| 16 |
| 17 namespace blink { |
| 18 |
| 19 namespace { |
| 20 |
| 21 class TestResizeObserverCallback : public ResizeObserverCallback { |
| 22 public: |
| 23 TestResizeObserverCallback(Document& document) |
| 24 : m_document(document) |
| 25 , m_callCount(0) |
| 26 { } |
| 27 void handleEvent(const HeapVector<Member<ResizeObserverEntry>>& entries, Res
izeObserver*) override |
| 28 { |
| 29 m_callCount++; |
| 30 } |
| 31 ExecutionContext* getExecutionContext() const { return m_document; } |
| 32 int callCount() const { return m_callCount; } |
| 33 |
| 34 DEFINE_INLINE_TRACE() { |
| 35 ResizeObserverCallback::trace(visitor); |
| 36 visitor->trace(m_document); |
| 37 } |
| 38 |
| 39 private: |
| 40 Member<Document> m_document; |
| 41 int m_callCount; |
| 42 }; |
| 43 |
| 44 } // namespace |
| 45 |
| 46 /* Testing: |
| 47 * getTargetSize |
| 48 * setTargetSize |
| 49 * oubservationSizeOutOfSync == false |
| 50 * modify target size |
| 51 * oubservationSizeOutOfSync == true |
| 52 */ |
| 53 class ResizeObservationUnitTest : public SimTest { }; |
| 54 |
| 55 TEST_F(ResizeObservationUnitTest, ObserveSchedulesFrame) |
| 56 { |
| 57 SimRequest mainResource("https://example.com/", "text/html"); |
| 58 loadURL("https://example.com/"); |
| 59 |
| 60 mainResource.start(); |
| 61 mainResource.write( |
| 62 "<div id='domTarget' style='width:100px;height:100px'>yo</div>" |
| 63 "<svg height='200' width='200'>" |
| 64 "<circle id='svgTarget' cx='100' cy='100' r='100'/>" |
| 65 "</svg>" |
| 66 ); |
| 67 mainResource.finish(); |
| 68 |
| 69 ResizeObserverCallback* callback = new TestResizeObserverCallback(document()
); |
| 70 ResizeObserver* observer = ResizeObserver::create(document(), callback); |
| 71 Element* domTarget = document().getElementById("domTarget"); |
| 72 Element* svgTarget = document().getElementById("svgTarget"); |
| 73 ResizeObservation* domObservation = new ResizeObservation(domTarget, observe
r); |
| 74 ResizeObservation* svgObservation = new ResizeObservation(svgTarget, observe
r); |
| 75 |
| 76 // Initial observation is out of sync |
| 77 ASSERT_TRUE(domObservation->observationSizeOutOfSync()); |
| 78 ASSERT_TRUE(svgObservation->observationSizeOutOfSync()); |
| 79 |
| 80 // Target size is correct |
| 81 LayoutSize size = ResizeObservation::getTargetSize(domTarget); |
| 82 ASSERT_EQ(size.width(), 100); |
| 83 ASSERT_EQ(size.height(), 100); |
| 84 domObservation->setObservationSize(size); |
| 85 |
| 86 size = ResizeObservation::getTargetSize(svgTarget); |
| 87 ASSERT_EQ(size.width(), 200); |
| 88 ASSERT_EQ(size.height(), 200); |
| 89 svgObservation->setObservationSize(size); |
| 90 |
| 91 // Target size is in sync |
| 92 ASSERT_FALSE(domObservation->observationSizeOutOfSync()); |
| 93 |
| 94 // Target depths |
| 95 ASSERT_EQ(svgObservation->targetDepth() - domObservation->targetDepth(), (si
ze_t)1); |
| 96 } |
| 97 |
| 98 } // namespace blink |
OLD | NEW |