LibWeb: Implement ResizeObserver::disconnect()
This commit is contained in:
parent
70a0f07732
commit
2b7e7cc1ad
Notes:
sideshowbarker
2024-07-17 07:43:05 +09:00
Author: https://github.com/kalenikaliaksandr Commit: https://github.com/SerenityOS/serenity/commit/2b7e7cc1ad Pull-request: https://github.com/SerenityOS/serenity/pull/23260 Issue: https://github.com/SerenityOS/serenity/issues/23197
3 changed files with 80 additions and 2 deletions
2
Tests/LibWeb/Text/expected/ResizeObserver/disconnect.txt
Normal file
2
Tests/LibWeb/Text/expected/ResizeObserver/disconnect.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Size changed: 100px x 100px
|
||||
Size changed: 200px x 200px
|
72
Tests/LibWeb/Text/input/ResizeObserver/disconnect.html
Normal file
72
Tests/LibWeb/Text/input/ResizeObserver/disconnect.html
Normal file
|
@ -0,0 +1,72 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<head>
|
||||
<style>
|
||||
#outer {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
background-color: lightblue;
|
||||
}
|
||||
|
||||
#inner {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background-color: pink;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="outer">
|
||||
<div id="inner"></div>
|
||||
</div>
|
||||
</body>
|
||||
<script src="../include.js"></script>
|
||||
<script>
|
||||
asyncTest(async done => {
|
||||
const outerBox = document.getElementById("outer");
|
||||
const innerBox = document.getElementById("inner");
|
||||
|
||||
function createTimeoutPromise(timeout) {
|
||||
return new Promise(r => {
|
||||
setTimeout(r, timeout);
|
||||
});
|
||||
}
|
||||
|
||||
function createResizeObserverCallback() {
|
||||
let resolve;
|
||||
const promise = new Promise(r => {
|
||||
resolve = r;
|
||||
});
|
||||
|
||||
const callback = (entries) => {
|
||||
for (let entry of entries) {
|
||||
const { width, height } = entry.contentRect;
|
||||
println(`Size changed: ${width}px x ${height}px`);
|
||||
}
|
||||
|
||||
resolve();
|
||||
};
|
||||
|
||||
return { promise, callback };
|
||||
}
|
||||
|
||||
const { callback, promise } = createResizeObserverCallback();
|
||||
|
||||
const resizeObserver = new ResizeObserver(callback);
|
||||
resizeObserver.observe(innerBox);
|
||||
resizeObserver.observe(outerBox);
|
||||
|
||||
await promise;
|
||||
|
||||
resizeObserver.disconnect();
|
||||
|
||||
innerBox.style.width = "500px";
|
||||
outerBox.style.width = "600px";
|
||||
|
||||
// Let event loop run to ensure that observer callback is not invoked.
|
||||
await createTimeoutPromise(0);
|
||||
|
||||
done();
|
||||
});
|
||||
</script>
|
|
@ -89,10 +89,14 @@ void ResizeObserver::unobserve(DOM::Element& target)
|
|||
m_observation_targets.remove(observation.index());
|
||||
}
|
||||
|
||||
// https://drafts.csswg.org/resize-observer/#dom-resizeobserver-disconnect
|
||||
// https://drafts.csswg.org/resize-observer-1/#dom-resizeobserver-disconnect
|
||||
void ResizeObserver::disconnect()
|
||||
{
|
||||
// FIXME: Implement
|
||||
// 1. Clear the [[observationTargets]] list.
|
||||
m_observation_targets.clear();
|
||||
|
||||
// 2. Clear the [[activeTargets]] list.
|
||||
m_active_targets.clear();
|
||||
}
|
||||
|
||||
void ResizeObserver::invoke_callback(Vector<JS::NonnullGCPtr<ResizeObserverEntry>>& entries) const
|
||||
|
|
Loading…
Add table
Reference in a new issue