Index: third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp |
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp b/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp |
index 3d73e092ac24954f8bcbc16d9b92b187a1c1f14c..71ecdd898fca67e8c0e0c7a0ede9e396155264fc 100644 |
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp |
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp |
@@ -18,6 +18,19 @@ |
namespace blink { |
+namespace { |
+ |
+// These are chosen by trial-and-error. Making these intervals smaller causes |
+// test flakiness. The main thread needs to wait until message confirmation and |
+// activity report separately. If the intervals are very short, they are |
+// notified to the main thread almost at the same time and the thread may miss |
+// the second notification. |
+const double kDefaultIntervalInSec = 0.01; |
+const double kNextIntervalInSec = 0.01; |
+const double kMaxIntervalInSec = 0.02; |
+ |
+} // namespace |
+ |
class DedicatedWorkerThreadForTest final : public DedicatedWorkerThread { |
public: |
DedicatedWorkerThreadForTest( |
@@ -49,8 +62,9 @@ class InProcessWorkerMessagingProxyForTest |
: InProcessWorkerMessagingProxy(executionContext, |
nullptr /* workerObject */, |
nullptr /* workerClients */) { |
- workerObjectProxy().m_nextIntervalInSec = 0.1; |
- workerObjectProxy().m_maxIntervalInSec = 0.2; |
+ workerObjectProxy().m_defaultIntervalInSec = kDefaultIntervalInSec; |
+ workerObjectProxy().m_nextIntervalInSec = kNextIntervalInSec; |
+ workerObjectProxy().m_maxIntervalInSec = kMaxIntervalInSec; |
m_mockWorkerLoaderProxyProvider = |
wrapUnique(new MockWorkerLoaderProxyProvider()); |
@@ -214,7 +228,7 @@ TEST_P(DedicatedWorkerTest, PendingActivity_NoActivity) { |
TEST_P(DedicatedWorkerTest, PendingActivity_SetTimeout) { |
// Start an oneshot timer on initial script evaluation. |
- const String sourceCode = "setTimeout(function() {}, 50);"; |
+ const String sourceCode = "setTimeout(function() {}, 0);"; |
startWithSourceCode(sourceCode); |
// Worker initialization should be counted as a pending activity. |
@@ -229,7 +243,8 @@ TEST_P(DedicatedWorkerTest, PendingActivity_SetTimeout) { |
TEST_P(DedicatedWorkerTest, PendingActivity_SetInterval) { |
// Start a repeated timer on initial script evaluation, and stop it when a |
- // message is received. |
+ // message is received. The timer needs a non-zero delay or else worker |
+ // activities would not run. |
const String sourceCode = |
"var id = setInterval(function() {}, 50);" |
"addEventListener('message', function(event) { clearInterval(id); });"; |
@@ -259,7 +274,7 @@ TEST_P(DedicatedWorkerTest, PendingActivity_SetTimeoutOnMessageEvent) { |
// Start an oneshot timer on a message event. |
const String sourceCode = |
"addEventListener('message', function(event) {" |
- " setTimeout(function() {}, 50);" |
+ " setTimeout(function() {}, 0);" |
"});"; |
startWithSourceCode(sourceCode); |
@@ -289,7 +304,8 @@ TEST_P(DedicatedWorkerTest, PendingActivity_SetTimeoutOnMessageEvent) { |
TEST_P(DedicatedWorkerTest, PendingActivity_SetIntervalOnMessageEvent) { |
// Start a repeated timer on a message event, and stop it when another |
- // message is received. |
+ // message is received. The timer needs a non-zero delay or else worker |
+ // activities would not run. |
const String sourceCode = |
"var count = 0;" |
"var id;" |
@@ -321,8 +337,11 @@ TEST_P(DedicatedWorkerTest, PendingActivity_SetIntervalOnMessageEvent) { |
workerMessagingProxy()->workerGlobalScopeMayHavePendingActivity()); |
// Run the message loop for a while to make sure the timer is counted as a |
- // pending activity until it's stopped. |
- testing::runDelayedTasks(1000); |
+ // pending activity until it's stopped. The delay is equal to the max |
+ // interval so that the pending activity timer may be able to have a chance |
+ // to run before the next expectation check. |
+ const double kDelayInMs = kMaxIntervalInSec * 1000; |
+ testing::runDelayedTasks(kDelayInMs); |
EXPECT_TRUE( |
workerMessagingProxy()->workerGlobalScopeMayHavePendingActivity()); |