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 ++++--- testing/resources/bug_551248.in | 11 +- testing/resources/bug_551248.pdf | 13 ++- testing/resources/bug_620428.in | 85 +++++++++++++++ testing/resources/bug_620428.pdf | 139 ++++++++++++++++++++++++ 5 files changed, 259 insertions(+), 30 deletions(-) create mode 100644 testing/resources/bug_620428.in create mode 100644 testing/resources/bug_620428.pdf (limited to 'testing') 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_ diff --git a/testing/resources/bug_551248.in b/testing/resources/bug_551248.in index ad10e93912..c577824873 100644 --- a/testing/resources/bug_551248.in +++ b/testing/resources/bug_551248.in @@ -65,11 +65,14 @@ endobj {{object 50 0}} << >> stream -function startDelay() -{ - app.alert("hello world"); +function fireTimeOut() { + app.alert("timer fired"); } -app.setTimeOut("startDelay()", 3000); +function fireInterval() { + app.alert("interval fired"); +} +app.setTimeOut("fireTimeOut()", 3000); +app.setInterval("fireInterval()", 2000); endstream endobj {{xref}} diff --git a/testing/resources/bug_551248.pdf b/testing/resources/bug_551248.pdf index cca1872ee7..dea541a8de 100644 --- a/testing/resources/bug_551248.pdf +++ b/testing/resources/bug_551248.pdf @@ -66,11 +66,14 @@ endobj 50 0 obj << >> stream -function startDelay() -{ - app.alert("hello world"); +function fireTimeOut() { + app.alert("timer fired"); } -app.setTimeOut("startDelay()", 3000); +function fireInterval() { + app.alert("interval fired"); +} +app.setTimeOut("fireTimeOut()", 3000); +app.setInterval("fireInterval()", 2000); endstream endobj xref @@ -130,5 +133,5 @@ trailer << /Root 1 0 R >> startxref -954 +1055 %%EOF diff --git a/testing/resources/bug_620428.in b/testing/resources/bug_620428.in new file mode 100644 index 0000000000..1942305173 --- /dev/null +++ b/testing/resources/bug_620428.in @@ -0,0 +1,85 @@ +{{header}} +{{object 1 0}} << + /Type /Catalog + /Pages 2 0 R + /AcroForm 6 0 R + /Names <> +>> +endobj +{{object 2 0}} << + /Type /Pages + /Count 1 + /Kids [4 0 R] +>> +endobj +{{object 4 0}} << + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /CropBox [0 0 612 792] + /Resources <<>> +>> +endobj +{{object 6 0}} << + /DR << + /Font <> + >> + /DA (/Helv 0 Tf 0 g) + /Fields [5 0 R] +>> +endobj +{{object 7 0}} << + /Type /Font + /Subtype /Type1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj +{{object 8 0}} << + /Type /XObject + /Subtype /Form + /FormType 1 + /Matrix [1 0 0 1 0 0] + /BBox [0 0 75.907 28.472] + /Resources << + /Font <> + >> +>> +stream +q +Q + + +endstream +endobj +{{object 11 0}} << + /Type /Action + /S /JavaScript + /JS 50 0 R +>> +endobj +{{object 13 0}} << + /Names [(startDelay) 11 0 R] +>> +endobj +{{object 50 0}} << +>> +stream +function fireTimeOut() { + app.alert("hello world"); +} +function fireInterval() { + app.alert("goodbye world"); +} +var timer = app.setTimeOut("fireTimeOut()", 3000); +var interval = app.setInterval("fireInterval()", 1000); +app.clearTimeOut(timer); +app.clearInterval(interval); +endstream +endobj +{{xref}} +trailer << + /Root 1 0 R +>> +{{startxref}} +%%EOF diff --git a/testing/resources/bug_620428.pdf b/testing/resources/bug_620428.pdf new file mode 100644 index 0000000000..ff625b7a2e --- /dev/null +++ b/testing/resources/bug_620428.pdf @@ -0,0 +1,139 @@ +%PDF-1.7 +% ò¤ô +1 0 obj << + /Type /Catalog + /Pages 2 0 R + /AcroForm 6 0 R + /Names <> +>> +endobj +2 0 obj << + /Type /Pages + /Count 1 + /Kids [4 0 R] +>> +endobj +4 0 obj << + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /CropBox [0 0 612 792] + /Resources <<>> +>> +endobj +6 0 obj << + /DR << + /Font <> + >> + /DA (/Helv 0 Tf 0 g) + /Fields [5 0 R] +>> +endobj +7 0 obj << + /Type /Font + /Subtype /Type1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj +8 0 obj << + /Type /XObject + /Subtype /Form + /FormType 1 + /Matrix [1 0 0 1 0 0] + /BBox [0 0 75.907 28.472] + /Resources << + /Font <> + >> +>> +stream +q +Q + + +endstream +endobj +11 0 obj << + /Type /Action + /S /JavaScript + /JS 50 0 R +>> +endobj +13 0 obj << + /Names [(startDelay) 11 0 R] +>> +endobj +50 0 obj << +>> +stream +function fireTimeOut() { + app.alert("hello world"); +} +function fireInterval() { + app.alert("goodbye world"); +} +var timer = app.setTimeOut("fireTimeOut()", 3000); +var interval = app.setInterval("fireInterval()", 1000); +app.clearTimeOut(timer); +app.clearInterval(interval); +endstream +endobj +xref +0 51 +0000000000 65535 f +0000000015 00000 n +0000000118 00000 n +0000000000 65535 f +0000000181 00000 n +0000000000 65535 f +0000000302 00000 n +0000000404 00000 n +0000000509 00000 n +0000000000 65535 f +0000000000 65535 f +0000000701 00000 n +0000000000 65535 f +0000000769 00000 n +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000822 00000 n +trailer << + /Root 1 0 R +>> +startxref +1135 +%%EOF -- cgit v1.2.3