Title: [295744] trunk/LayoutTests/resize-observer
Revision
295744
Author
[email protected]
Date
2022-06-22 12:25:25 -0700 (Wed, 22 Jun 2022)

Log Message

Add more GC tests for ResizeObserver
https://bugs.webkit.org/show_bug.cgi?id=231260
<rdar://84168766>

Reviewed by Ryosuke Niwa.

Add more GC tests for ResizeObserver, matching the ones we have for IntersectionObserver.

* LayoutTests/resize-observer/observe-disconnected-target-crash-expected.txt: Added.
* LayoutTests/resize-observer/observe-disconnected-target-crash.html: Added.
* LayoutTests/resize-observer/observe-then-disconnect-target-expected.txt: Added.
* LayoutTests/resize-observer/observe-then-disconnect-target.html: Added.

Canonical link: https://commits.webkit.org/251748@main

Added Paths

Diff

Added: trunk/LayoutTests/resize-observer/observe-disconnected-target-crash-expected.txt (0 => 295744)


--- trunk/LayoutTests/resize-observer/observe-disconnected-target-crash-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/resize-observer/observe-disconnected-target-crash-expected.txt	2022-06-22 19:25:25 UTC (rev 295744)
@@ -0,0 +1 @@
+This test passes if it doesn't crash.

Added: trunk/LayoutTests/resize-observer/observe-disconnected-target-crash.html (0 => 295744)


--- trunk/LayoutTests/resize-observer/observe-disconnected-target-crash.html	                        (rev 0)
+++ trunk/LayoutTests/resize-observer/observe-disconnected-target-crash.html	2022-06-22 19:25:25 UTC (rev 295744)
@@ -0,0 +1,21 @@
+<!DOCTYPE html><!-- webkit-test-runner [ ResizeObserverEnabled=true ] -->
+<p>This test passes if it doesn't crash.</p>
+<script>
+  if (window.testRunner) {
+    testRunner.dumpAsText();
+    testRunner.waitUntilDone();
+  }
+  _onload_ = async () => {
+    for (let i = 0; i < 8; i++) {
+      document.createElement('div');
+    }
+    for (let i = 0; i < 8; i++) {
+      new ResizeObserver(() => {});
+    }
+    let resizeObserver = new ResizeObserver(() => {});
+    await resizeObserver.observe(document.createElement('div'));
+    new ImageData(1000, 10000);
+    if (window.testRunner)
+      testRunner.notifyDone();
+  };
+</script>

Added: trunk/LayoutTests/resize-observer/observe-then-disconnect-target-expected.txt (0 => 295744)


--- trunk/LayoutTests/resize-observer/observe-then-disconnect-target-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/resize-observer/observe-then-disconnect-target-expected.txt	2022-06-22 19:25:25 UTC (rev 295744)
@@ -0,0 +1,20 @@
+Tests that an observation is received after disconnecting a visible target
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS observations.length is 1
+PASS observations[0].target.tagName is "DIV"
+PASS observations[0].target.foo is 1
+PASS observations[0].contentRect.width > 0.0 is true
+PASS observations[0].contentRect.height > 0.0 is true
+* Removing target from document
+PASS observations.length is 1
+PASS observations[0].target.tagName is "DIV"
+PASS observations[0].target.foo is 1
+PASS observations[0].contentRect.width is 0.0
+PASS observations[0].contentRect.height is 0.0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/resize-observer/observe-then-disconnect-target.html (0 => 295744)


--- trunk/LayoutTests/resize-observer/observe-then-disconnect-target.html	                        (rev 0)
+++ trunk/LayoutTests/resize-observer/observe-then-disconnect-target.html	2022-06-22 19:25:25 UTC (rev 295744)
@@ -0,0 +1,50 @@
+<!DOCTYPE html><!-- webkit-test-runner [ ResizeObserverEnabled=true ] -->
+<html>
+<body>
+<script src=""
+<div id="testDiv">test</div>
+<script>
+  description("Tests that an observation is received after disconnecting a visible target");
+  jsTestIsAsync = true;
+
+  let receivedInitialObservation = false;
+  _onload_ = () => {
+    let resizeObserver = new ResizeObserver((_observations) => {
+      gc();
+      observations = _observations;
+
+      shouldBe("observations.length", "1");
+      shouldBeEqualToString("observations[0].target.tagName", "DIV");
+      shouldBe("observations[0].target.foo", "1");
+
+      if (!receivedInitialObservation) {
+          receivedInitialObservation = true;
+          shouldBeTrue("observations[0].contentRect.width > 0.0");
+          shouldBeTrue("observations[0].contentRect.height > 0.0");
+          requestAnimationFrame(() => {
+              debug("* Removing target from document");
+              document.getElementById("testDiv").remove();
+              gc();
+              setTimeout(gc, 0);
+              timeoutHandle = setTimeout(() => {
+                  testFailed("Didn't get observation after removing target from document");
+                  finishJSTest();
+              }, 3000);
+          });
+      } else {
+          clearTimeout(timeoutHandle);
+          shouldBe("observations[0].contentRect.width", "0.0");
+          shouldBe("observations[0].contentRect.height", "0.0");
+          setTimeout(finishJSTest, 100);
+      }
+    });
+    let div = document.getElementById("testDiv");
+    div.foo = 1;
+    resizeObserver.observe(div);
+    div = null;
+    gc();
+    setTimeout(gc, 0);
+  };
+</script>
+</body>
+</html>
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to