Skip to content

Commit 84c6117

Browse files
[IntersectionObserver] Fix tracking bookkeeping
Cherry-picked from: https://chromium-review.googlesource.com/c/chromium/src/+/1513077 BUG=926539 [email protected] Change-Id: I90ca898574e4c9efb6bdbe35aade2860d9763399 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1518910 Reviewed-by: Stefan Zager <[email protected]> Cr-Commit-Position: refs/branch-heads/3729@{#55} Cr-Branched-From: d4a8972-refs/heads/master@{#638880}
1 parent 3b6cf30 commit 84c6117

File tree

4 files changed

+19
-2
lines changed

4 files changed

+19
-2
lines changed

third_party/blink/renderer/core/intersection_observer/intersection_observation.cc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,14 @@ void IntersectionObservation::TakeRecords(
9292

9393
void IntersectionObservation::Disconnect() {
9494
DCHECK(Observer());
95-
if (target_)
95+
if (target_) {
9696
Target()->EnsureIntersectionObserverData().RemoveObservation(*Observer());
97+
if (target_->isConnected()) {
98+
target_->GetDocument()
99+
.EnsureIntersectionObserverController()
100+
.RemoveTrackedTarget(*target_);
101+
}
102+
}
97103
entries_.clear();
98104
observer_.Clear();
99105
}

third_party/blink/renderer/core/intersection_observer/intersection_observer_controller.cc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ void IntersectionObserverController::AddTrackedTarget(Element& target) {
8989
}
9090

9191
void IntersectionObserverController::RemoveTrackedTarget(Element& target) {
92-
target.ComputeIntersectionObservations(false);
9392
tracked_observation_targets_.erase(&target);
9493
}
9594

third_party/blink/renderer/core/intersection_observer/intersection_observer_controller.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ class IntersectionObserverController
4949
const char* NameInHeapSnapshot() const override {
5050
return "IntersectionObserverController";
5151
}
52+
unsigned GetTrackedTargetCountForTesting() const {
53+
return tracked_observation_targets_.size();
54+
}
5255

5356
private:
5457
void PostTaskToDeliverObservations();

third_party/blink/renderer/core/intersection_observer/intersection_observer_test.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "third_party/blink/renderer/core/dom/element.h"
88
#include "third_party/blink/renderer/core/exported/web_view_impl.h"
99
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
10+
#include "third_party/blink/renderer/core/intersection_observer/intersection_observer_controller.h"
1011
#include "third_party/blink/renderer/core/intersection_observer/intersection_observer_delegate.h"
1112
#include "third_party/blink/renderer/core/intersection_observer/intersection_observer_init.h"
1213
#include "third_party/blink/renderer/core/layout/layout_view.h"
@@ -339,6 +340,10 @@ TEST_F(IntersectionObserverTest, DisconnectClearsNotifications) {
339340
Element* target = GetDocument().getElementById("target");
340341
ASSERT_TRUE(target);
341342
observer->observe(target, exception_state);
343+
EXPECT_EQ(GetDocument()
344+
.EnsureIntersectionObserverController()
345+
.GetTrackedTargetCountForTesting(),
346+
1u);
342347

343348
Compositor().BeginFrame();
344349
test::RunPendingTasks();
@@ -350,6 +355,10 @@ TEST_F(IntersectionObserverTest, DisconnectClearsNotifications) {
350355
kProgrammaticScroll);
351356
Compositor().BeginFrame();
352357
observer->disconnect();
358+
EXPECT_EQ(GetDocument()
359+
.EnsureIntersectionObserverController()
360+
.GetTrackedTargetCountForTesting(),
361+
0u);
353362
test::RunPendingTasks();
354363
EXPECT_EQ(observer_delegate->CallCount(), 1);
355364
}

0 commit comments

Comments
 (0)