diff --git a/flow-server/src/main/java/com/vaadin/flow/server/communication/LongPollingCacheFilter.java b/flow-server/src/main/java/com/vaadin/flow/server/communication/LongPollingCacheFilter.java index 246b09c4260..93b53f24587 100644 --- a/flow-server/src/main/java/com/vaadin/flow/server/communication/LongPollingCacheFilter.java +++ b/flow-server/src/main/java/com/vaadin/flow/server/communication/LongPollingCacheFilter.java @@ -76,7 +76,10 @@ public BroadcastAction filter(String broadcasterId, AtmosphereResource r, String uuid = r.uuid(); int lastSeenOnClient = session.getAttribute(SEEN_SERVER_SYNC_ID, Integer.class); - if (pushMessage.alreadySeen(lastSeenOnClient)) { + if (lastSeenOnClient == -1) { + return new BroadcastAction(BroadcastAction.ACTION.CONTINUE, + message); + } else if (pushMessage.alreadySeen(lastSeenOnClient)) { getLogger().trace( "Discarding message {} for resource {} as client already seen {}. {}", pushMessage.serverSyncId, uuid, lastSeenOnClient, diff --git a/flow-server/src/test/java/com/vaadin/flow/server/communication/LongPollingCacheFilterTest.java b/flow-server/src/test/java/com/vaadin/flow/server/communication/LongPollingCacheFilterTest.java index a19c2eddd4e..93d587318d6 100644 --- a/flow-server/src/test/java/com/vaadin/flow/server/communication/LongPollingCacheFilterTest.java +++ b/flow-server/src/test/java/com/vaadin/flow/server/communication/LongPollingCacheFilterTest.java @@ -81,6 +81,19 @@ public void filter_notLongPollingTransport_continueWithCurrentMessage() { verifyMessageIsNotCached(); } + @Test + public void filter_syncIdCheckDisabled_continueWithCurrentMessage() { + setTransport(AtmosphereResource.TRANSPORT.LONG_POLLING); + setSeenServerSyncIdHeader(-1); + BroadcastAction action = filter.filter("broadcasterId", resource, + originalMessage, message); + Assert.assertEquals(ACTION.CONTINUE, action.action()); + Assert.assertSame( + "Message should not be altered by filter if syncId check is disabled", + message, action.message()); + verifyMessageIsNotCached(); + } + @Test public void filter_missingLastSeenServerSyncId_continueWithCurrentMessage() { setTransport(AtmosphereResource.TRANSPORT.LONG_POLLING); @@ -224,4 +237,4 @@ private void simulatePushConnection() { private void verifyMessageIsNotCached() { Mockito.verifyNoInteractions(cache); } -} \ No newline at end of file +}