summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/loader/long_task_detector_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/loader/long_task_detector_test.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/loader/long_task_detector_test.cc33
1 files changed, 32 insertions, 1 deletions
diff --git a/chromium/third_party/blink/renderer/core/loader/long_task_detector_test.cc b/chromium/third_party/blink/renderer/core/loader/long_task_detector_test.cc
index 3384fa8ebfb..403ba452362 100644
--- a/chromium/third_party/blink/renderer/core/loader/long_task_detector_test.cc
+++ b/chromium/third_party/blink/renderer/core/loader/long_task_detector_test.cc
@@ -27,9 +27,26 @@ class TestLongTaskObserver :
last_long_task_start = start_time;
last_long_task_end = end_time;
}
-}; // Anonymous namespace
+};
+
+class SelfUnregisteringObserver
+ : public GarbageCollected<SelfUnregisteringObserver>,
+ public LongTaskObserver {
+ public:
+ void OnLongTaskDetected(base::TimeTicks, base::TimeTicks) override {
+ called_ = true;
+ LongTaskDetector::Instance().UnregisterObserver(this);
+ }
+ bool IsCalled() const { return called_; }
+
+ void Reset() { called_ = false; }
+
+ private:
+ bool called_ = false;
+};
} // namespace
+
class LongTaskDetectorTest : public testing::Test {
public:
// Public because it's executed on a task queue.
@@ -126,4 +143,18 @@ TEST_F(LongTaskDetectorTest, RegisterSameObserverTwice) {
long_task_end_when_registered);
}
+TEST_F(LongTaskDetectorTest, SelfUnregisteringObserver) {
+ auto* observer = MakeGarbageCollected<SelfUnregisteringObserver>();
+
+ LongTaskDetector::Instance().RegisterObserver(observer);
+ SimulateTask(LongTaskDetector::kLongTaskThreshold +
+ base::TimeDelta::FromMilliseconds(10));
+ EXPECT_TRUE(observer->IsCalled());
+ observer->Reset();
+
+ SimulateTask(LongTaskDetector::kLongTaskThreshold +
+ base::TimeDelta::FromMilliseconds(10));
+ EXPECT_FALSE(observer->IsCalled());
+}
+
} // namespace blink