diff --git a/Tests/LibWeb/Text/expected/ResizeObserver/unobserve.txt b/Tests/LibWeb/Text/expected/ResizeObserver/unobserve.txt new file mode 100644 index 0000000000..4c325a31f3 --- /dev/null +++ b/Tests/LibWeb/Text/expected/ResizeObserver/unobserve.txt @@ -0,0 +1 @@ + Size changed: 200px x 200px diff --git a/Tests/LibWeb/Text/input/ResizeObserver/unobserve.html b/Tests/LibWeb/Text/input/ResizeObserver/unobserve.html new file mode 100644 index 0000000000..3bf4860b8a --- /dev/null +++ b/Tests/LibWeb/Text/input/ResizeObserver/unobserve.html @@ -0,0 +1,55 @@ + +
+ + + + + + + diff --git a/Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.cpp b/Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.cpp index 83ec505478..8330f7eed4 100644 --- a/Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.cpp +++ b/Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.cpp @@ -75,11 +75,18 @@ void ResizeObserver::observe(DOM::Element& target, ResizeObserverOptions options m_observation_targets.append(resize_observation); } -// https://drafts.csswg.org/resize-observer/#dom-resizeobserver-unobserve +// https://drafts.csswg.org/resize-observer-1/#dom-resizeobserver-unobserve void ResizeObserver::unobserve(DOM::Element& target) { - // FIXME: Implement - (void)target; + // 1. Let observation be ResizeObservation in [[observationTargets]] whose target slot is target. + auto observation = m_observation_targets.find_if([&](auto& observation) { return observation->target().ptr() == ⌖ }); + + // 2. If observation is not found, return. + if (observation.is_end()) + return; + + // 3. Remove observation from [[observationTargets]]. + m_observation_targets.remove(observation.index()); } // https://drafts.csswg.org/resize-observer/#dom-resizeobserver-disconnect