diff options
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.cc | 33 |
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 |