diff options
author | tsepez <tsepez@chromium.org> | 2016-08-03 14:03:35 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-03 14:03:35 -0700 |
commit | 8e12029407cf1cca95b7f79bf5e5a5fec5bea9cb (patch) | |
tree | b1329865ce4aeae51a71abdcacdf6bc6514e3822 /testing/embedder_test_timer_handling_delegate.h | |
parent | 8d0cc67cdf3ef45ee7268d3e00a21c0a99843a84 (diff) | |
download | pdfium-8e12029407cf1cca95b7f79bf5e5a5fec5bea9cb.tar.xz |
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
Diffstat (limited to 'testing/embedder_test_timer_handling_delegate.h')
-rw-r--r-- | testing/embedder_test_timer_handling_delegate.h | 41 |
1 files changed, 20 insertions, 21 deletions
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<int, Timer>( - 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<int, Timer>(fake_elapsed_msecs_ + t.interval, t)); + t.fn(t.id); // Fire timer. } } - const std::vector<ReceivedAlert>& GetAlerts() const { return alerts_; } + const std::vector<AlertRecord>& GetAlerts() const { return alerts_; } protected: - using Timer = std::pair<int, TimerCallback>; // ID, callback pair. std::multimap<int, Timer> expiry_to_timer_map_; // Keyed by timeout. int next_timer_id_ = 0; - int imaginary_elapsed_msecs_ = 0; - std::vector<ReceivedAlert> alerts_; + int fake_elapsed_msecs_ = 0; + std::vector<AlertRecord> alerts_; }; #endif // TESTING_EMBEDDER_TEST_TIMER_HANDLING_DELEGATE_H_ |