From: Johannes Dahlström Date: Fri, 2 May 2014 15:29:42 +0000 (+0300) Subject: Fix improper merge of 3d0ff32b from 7.1 to master (#13620) X-Git-Tag: 7.2.0~8^2~1 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=f21c10882e74ec58260cae289c4180c19ff8a816;p=vaadin-framework.git Fix improper merge of 3d0ff32b from 7.1 to master (#13620) Correctly call PushConnection.disconnect instead of setting to null. Also remove the obsolete PushHandler.disconnectCallback. Change-Id: Ied055d489a269b016318947cd89cf0b46003c596 --- diff --git a/server/src/com/vaadin/server/communication/PushHandler.java b/server/src/com/vaadin/server/communication/PushHandler.java index c6126f9d21..983ada3279 100644 --- a/server/src/com/vaadin/server/communication/PushHandler.java +++ b/server/src/com/vaadin/server/communication/PushHandler.java @@ -186,46 +186,6 @@ public class PushHandler extends AtmosphereResourceEventListenerAdapter { } }; - /** - * Callback used when a connection is closed, either deliberately or because - * an error occurred. - */ - private final PushEventCallback disconnectCallback = new PushEventCallback() { - @Override - public void run(AtmosphereResource resource, UI ui) throws IOException { - PushMode pushMode = ui.getPushConfiguration().getPushMode(); - AtmospherePushConnection connection = getConnectionForUI(ui); - - String id = resource.uuid(); - - if (connection == null) { - getLogger() - .log(Level.WARNING, - "Could not find push connection to close: {0} with transport {1}", - new Object[] { id, resource.transport() }); - } else { - if (!pushMode.isEnabled()) { - /* - * The client is expected to close the connection after push - * mode has been set to disabled. - */ - getLogger().log(Level.FINER, - "Connection closed for resource {0}", id); - } else { - /* - * Unexpected cancel, e.g. if the user closes the browser - * tab. - */ - getLogger() - .log(Level.FINER, - "Connection unexpectedly closed for resource {0} with transport {1}", - new Object[] { id, resource.transport() }); - } - connection.disconnect(); - } - } - }; - private VaadinServletService service; public PushHandler(VaadinServletService service) { @@ -428,7 +388,12 @@ public class PushHandler extends AtmosphereResourceEventListenerAdapter { "Connection unexpectedly closed for resource {0} with transport {1}", new Object[] { id, resource.transport() }); } - ui.setPushConnection(null); + if (pushConnection.isConnected()) { + // disconnect() assumes the push connection is connected but + // this method can currently be called more than once during + // disconnect, depending on the situation + pushConnection.disconnect(); + } } } catch (final Exception e) { diff --git a/uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefresh.java b/uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefresh.java new file mode 100644 index 0000000000..8834a05069 --- /dev/null +++ b/uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefresh.java @@ -0,0 +1,48 @@ +package com.vaadin.tests.push; + +import com.vaadin.annotations.PreserveOnRefresh; +import com.vaadin.annotations.Push; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.tests.util.Log; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.Label; + +@PreserveOnRefresh +@Push +public class PushWithPreserveOnRefresh extends AbstractTestUI { + + private Log log = new Log(5); + private int times = 0; + + @Override + protected void setup(VaadinRequest request) { + // Internal parameter sent by vaadinBootstrap.js, + addComponent(new Label("window.name: " + request.getParameter("v-wn"))); + addComponent(new Label("UI id: " + getUIId())); + addComponent(log); + + Button b = new Button("click me"); + b.addClickListener(new ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + log.log("Button has been clicked " + (++times) + " times"); + } + }); + + addComponent(b); + } + + @Override + protected String getTestDescription() { + return "Refreshing the browser window should preserve the state and push should continue to work"; + } + + @Override + protected Integer getTicketNumber() { + return Integer.valueOf(13620); + } +} diff --git a/uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefreshTest.java b/uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefreshTest.java new file mode 100644 index 0000000000..3c532b2e55 --- /dev/null +++ b/uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefreshTest.java @@ -0,0 +1,38 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.push; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class PushWithPreserveOnRefreshTest extends MultiBrowserTest { + + @Test + public void ensurePushWorksAfterRefresh() { + openTestURL(); + $(ButtonElement.class).first().click(); + $(ButtonElement.class).first().click(); + Assert.assertEquals("2. Button has been clicked 2 times", getLogRow(0)); + openTestURL(); + Assert.assertEquals("2. Button has been clicked 2 times", getLogRow(0)); + $(ButtonElement.class).first().click(); + Assert.assertEquals("3. Button has been clicked 3 times", getLogRow(0)); + + } +}