Title: [259578] trunk
Revision
259578
Author
[email protected]
Date
2020-04-06 10:47:38 -0700 (Mon, 06 Apr 2020)

Log Message

The change of zoom shouldn't affect ResizeObserverSize
https://bugs.webkit.org/show_bug.cgi?id=209947

Reviewed by Simon Fraser.

Source/WebCore:

Zoom in/out shouldn't affect ResizeObserverSize. Use adjustLayoutUnitForAbsoluteZoom instead.

Test: imported/w3c/web-platform-tests/resize-observer/resize-observer-with-zoom.html

* page/ResizeObservation.cpp:
(WebCore::ResizeObservation::computeObservedSize const):

LayoutTests:

Add test for resizeObserver with zoom. The ResizeObserverSize shouldn't be effected by zooms.

* resize-observer/resize-observer-with-zoom-expected.txt: Added.
* resize-observer/resize-observer-with-zoom.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (259577 => 259578)


--- trunk/LayoutTests/ChangeLog	2020-04-06 17:41:43 UTC (rev 259577)
+++ trunk/LayoutTests/ChangeLog	2020-04-06 17:47:38 UTC (rev 259578)
@@ -1,3 +1,15 @@
+2020-04-06  Cathie Chen  <[email protected]>
+
+        The change of zoom shouldn't affect ResizeObserverSize
+        https://bugs.webkit.org/show_bug.cgi?id=209947
+
+        Reviewed by Simon Fraser.
+
+        Add test for resizeObserver with zoom. The ResizeObserverSize shouldn't be effected by zooms.
+
+        * resize-observer/resize-observer-with-zoom-expected.txt: Added.
+        * resize-observer/resize-observer-with-zoom.html: Added.
+
 2020-04-04  Darin Adler  <[email protected]>
 
         Stop using live ranges in DocumentMarkerController

Added: trunk/LayoutTests/resize-observer/resize-observer-with-zoom-expected.txt (0 => 259578)


--- trunk/LayoutTests/resize-observer/resize-observer-with-zoom-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/resize-observer/resize-observer-with-zoom-expected.txt	2020-04-06 17:47:38 UTC (rev 259578)
@@ -0,0 +1,8 @@
+CONSOLE MESSAGE: ResizeObserver loop completed with undelivered notifications.
+CONSOLE MESSAGE: ResizeObserver loop completed with undelivered notifications.
+
+PASS ResizeObserver implemented 
+PASS guard 
+PASS test0: The change of zoom shouldn't affect resizeObserver size. 
+PASS test1: The change of zoom shouldn't affect svg resizeObserver size. 
+

Added: trunk/LayoutTests/resize-observer/resize-observer-with-zoom.html (0 => 259578)


--- trunk/LayoutTests/resize-observer/resize-observer-with-zoom.html	                        (rev 0)
+++ trunk/LayoutTests/resize-observer/resize-observer-with-zoom.html	2020-04-06 17:47:38 UTC (rev 259578)
@@ -0,0 +1,88 @@
+<!DOCTYPE html><!-- webkit-test-runner [ experimental:ResizeObserverEnabled=true ] -->
+<script src=""
+<script src=""
+<script src=""
+<style>
+    #target {
+        width: 200px;
+        height: 200px;
+    }
+</style>
+<div id="target"></div>
+<svg height="200" width="200">
+    <circle cx="10" cy="10" r="5" style="fill:orange;stroke:black;stroke-width:1" />
+</svg>
+<script>
+'use strict';
+
+// allow uncaught exception because ResizeObserver posts exceptions
+// to window error handler when limit is exceeded.
+setup({ allow_uncaught_exception: true });
+
+function test0() {
+    let target = document.querySelector('#target');
+    let helper = new ResizeTestHelper(
+        "test0: The change of zoom shouldn't affect resizeObserver size.",
+        [
+            {
+                setup: observer => {
+                    observer.observe(target);
+                },
+                notify: entries => {
+                    assert_equals(entries[0].contentRect.width, 200);
+                    assert_equals(entries[0].contentRect.height, 200);
+                }
+            }, 
+            {
+                setup: observer => {
+                    window.internals.setPageZoomFactor(2);
+                    target.style.width = "100px";
+                },
+                notify: entries => {
+                    assert_equals(entries[0].contentRect.width, 100);
+                    assert_equals(entries[0].contentRect.height, 200);
+                }
+            }
+        ]);
+    return helper.start();
+}
+
+function test1() {
+    let target = document.querySelector('circle');
+    let helper = new ResizeTestHelper(
+        "test1: The change of zoom shouldn't affect svg resizeObserver size.",
+        [
+            {
+                setup: observer => {
+                    observer.observe(target);
+                },
+                notify: entries => {
+                    assert_equals(entries[0].contentRect.width, 10);
+                    assert_equals(entries[0].contentRect.height, 10);
+                }
+            },
+            {
+                setup: observer => {
+                    window.internals.setPageZoomFactor(2);
+                    target.setAttribute('r', 10);
+                },
+                notify: entries => {
+                    assert_equals(entries[0].contentRect.width, 20);
+                    assert_equals(entries[0].contentRect.height, 20);
+                }
+            }
+        ]);
+    return helper.start();
+}
+
+let guard;
+test(_ => {
+    assert_own_property(window, "ResizeObserver");
+    guard = async_test('guard');
+}, "ResizeObserver implemented")
+
+test0()
+    .then(() => { return test1(); })
+    .then(() => { guard.done(); });
+    
+</script>

Modified: trunk/Source/WebCore/ChangeLog (259577 => 259578)


--- trunk/Source/WebCore/ChangeLog	2020-04-06 17:41:43 UTC (rev 259577)
+++ trunk/Source/WebCore/ChangeLog	2020-04-06 17:47:38 UTC (rev 259578)
@@ -1,3 +1,17 @@
+2020-04-06  Cathie Chen  <[email protected]>
+
+        The change of zoom shouldn't affect ResizeObserverSize
+        https://bugs.webkit.org/show_bug.cgi?id=209947
+
+        Reviewed by Simon Fraser.
+
+        Zoom in/out shouldn't affect ResizeObserverSize. Use adjustLayoutUnitForAbsoluteZoom instead.
+
+        Test: imported/w3c/web-platform-tests/resize-observer/resize-observer-with-zoom.html
+
+        * page/ResizeObservation.cpp:
+        (WebCore::ResizeObservation::computeObservedSize const):
+
 2020-04-06  Antoine Quint  <[email protected]>
 
         [Web Animations] Move Document.getAnimations() to DocumentOrShadowRoot

Modified: trunk/Source/WebCore/page/ResizeObservation.cpp (259577 => 259578)


--- trunk/Source/WebCore/page/ResizeObservation.cpp	2020-04-06 17:41:43 UTC (rev 259577)
+++ trunk/Source/WebCore/page/ResizeObservation.cpp	2020-04-06 17:47:38 UTC (rev 259578)
@@ -60,8 +60,12 @@
         if (downcast<SVGElement>(*m_target).getBoundingBox(svgRect))
             return LayoutSize(svgRect.width(), svgRect.height());
     }
-    if (m_target->renderBox())
-        return m_target->renderBox()->contentSize();
+    auto* box = m_target->renderBox();
+    if (box) {
+        auto contentSize = box->contentSize();
+        return LayoutSize(adjustLayoutUnitForAbsoluteZoom(contentSize.width(), *box), adjustLayoutUnitForAbsoluteZoom(contentSize.height(), *box));
+    }
+
     return LayoutSize();
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to