From 8e12029407cf1cca95b7f79bf5e5a5fec5bea9cb Mon Sep 17 00:00:00 2001 From: tsepez Date: Wed, 3 Aug 2016 14:03:35 -0700 Subject: Add test for bug 620428 (setinterval cancellation) While we're at it, beef up existing test for non-cancellation. In turn, fix test harness to implement intervals properly. In turn, fix public documentation to be clearer about timers. Also rename a few identifiers that sounded "off". Review-Url: https://codereview.chromium.org/2211513002 --- testing/embedder_test_timer_handling_delegate.h | 41 ++++++++++++------------- 1 file changed, 20 insertions(+), 21 deletions(-) (limited to 'testing/embedder_test_timer_handling_delegate.h') diff --git a/testing/embedder_test_timer_handling_delegate.h b/testing/embedder_test_timer_handling_delegate.h index cb0c31bd95..709dd22c17 100644 --- a/testing/embedder_test_timer_handling_delegate.h +++ b/testing/embedder_test_timer_handling_delegate.h @@ -15,40 +15,38 @@ class EmbedderTestTimerHandlingDelegate : public EmbedderTest::Delegate { public: - struct ReceivedAlert { - ReceivedAlert(FPDF_WIDESTRING message_in, - FPDF_WIDESTRING title_in, - int type_in, - int icon_in) - : type(type_in), icon(icon_in) { - message = GetPlatformWString(message_in); - title = GetPlatformWString(title_in); - } - + struct AlertRecord { std::wstring message; std::wstring title; int type; int icon; }; + struct Timer { + int id; + int interval; + TimerCallback fn; + }; + int Alert(FPDF_WIDESTRING message, FPDF_WIDESTRING title, int type, int icon) override { - alerts_.push_back(ReceivedAlert(message, title, type, icon)); + alerts_.push_back( + {GetPlatformWString(message), GetPlatformWString(title), type, icon}); return 0; } int SetTimer(int msecs, TimerCallback fn) override { expiry_to_timer_map_.insert(std::pair( - msecs + imaginary_elapsed_msecs_, Timer(++next_timer_id_, fn))); + msecs + fake_elapsed_msecs_, {++next_timer_id_, msecs, fn})); return next_timer_id_; } void KillTimer(int id) override { for (auto iter = expiry_to_timer_map_.begin(); iter != expiry_to_timer_map_.end(); ++iter) { - if (iter->second.first == id) { + if (iter->second.id == id) { expiry_to_timer_map_.erase(iter); break; } @@ -56,29 +54,30 @@ class EmbedderTestTimerHandlingDelegate : public EmbedderTest::Delegate { } void AdvanceTime(int increment_msecs) { - imaginary_elapsed_msecs_ += increment_msecs; + fake_elapsed_msecs_ += increment_msecs; while (1) { auto iter = expiry_to_timer_map_.begin(); if (iter == expiry_to_timer_map_.end()) { break; } - Timer t = iter->second; - if (t.first > imaginary_elapsed_msecs_) { + if (iter->first > fake_elapsed_msecs_) { break; } + Timer t = iter->second; expiry_to_timer_map_.erase(iter); - t.second(t.first); // Fire timer. + expiry_to_timer_map_.insert( + std::pair(fake_elapsed_msecs_ + t.interval, t)); + t.fn(t.id); // Fire timer. } } - const std::vector& GetAlerts() const { return alerts_; } + const std::vector& GetAlerts() const { return alerts_; } protected: - using Timer = std::pair; // ID, callback pair. std::multimap expiry_to_timer_map_; // Keyed by timeout. int next_timer_id_ = 0; - int imaginary_elapsed_msecs_ = 0; - std::vector alerts_; + int fake_elapsed_msecs_ = 0; + std::vector alerts_; }; #endif // TESTING_EMBEDDER_TEST_TIMER_HANDLING_DELEGATE_H_ -- cgit v1.2.3