summaryrefslogtreecommitdiffstats
path: root/uitest
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2012-11-15 09:40:42 +0200
committerVaadin Code Review <review@vaadin.com>2012-11-19 09:58:01 +0000
commit008dd4cf731522543c80ea81c0d5dca35f85c90b (patch)
tree8275ae680a4331412fc770891c80f223dcc88439 /uitest
parent977c8b01c042f2ffec36e3cb5c7ad517b738d06e (diff)
downloadvaadin-framework-008dd4cf731522543c80ea81c0d5dca35f85c90b.tar.gz
vaadin-framework-008dd4cf731522543c80ea81c0d5dca35f85c90b.zip
Handle canceled or ignored XHR requests after beforeunload (#8891)
* Not automatically testable as it depends exact timings Change-Id: I53bccce675520ab2c7bb007766546b4cd3fe6e53
Diffstat (limited to 'uitest')
-rw-r--r--uitest/src/com/vaadin/tests/application/NavigateWithOngoingXHR.java116
1 files changed, 116 insertions, 0 deletions
diff --git a/uitest/src/com/vaadin/tests/application/NavigateWithOngoingXHR.java b/uitest/src/com/vaadin/tests/application/NavigateWithOngoingXHR.java
new file mode 100644
index 0000000000..e11a18d895
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/application/NavigateWithOngoingXHR.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2012 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.application;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import com.vaadin.server.ExternalResource;
+import com.vaadin.server.RequestHandler;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinResponse;
+import com.vaadin.server.VaadinServiceSession;
+import com.vaadin.shared.ui.progressindicator.ProgressIndicatorServerRpc;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.ProgressIndicator;
+
+public class NavigateWithOngoingXHR extends AbstractTestUI {
+ private final RequestHandler slowRequestHandler = new RequestHandler() {
+ @Override
+ public boolean handleRequest(VaadinServiceSession session,
+ VaadinRequest request, VaadinResponse response)
+ throws IOException {
+ if ("/slowRequestHandler".equals(request.getRequestPathInfo())) {
+ // Make the navigation request last longer to keep the
+ // communication error visible
+ // System.out.println("Got slow content request");
+ try {
+ Thread.sleep(5000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ if (request.getParameter("download") != null) {
+ response.setHeader("Content-Disposition", "attachment");
+ }
+
+ response.setContentType("text/plain");
+ PrintWriter writer = response.getWriter();
+ writer.println("Loaded slowly");
+ writer.close();
+
+ // System.out.println("Finished slow content request");
+
+ return true;
+ }
+ return false;
+ }
+ };
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ addComponent(new ProgressIndicator() {
+ {
+ registerRpc(new ProgressIndicatorServerRpc() {
+ @Override
+ public void poll() {
+ // System.out.println("Pausing poll request");
+ try {
+ // Make the XHR request last longer to make it
+ // easier to click the link at the right moment.
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ // System.out.println("Continuing poll request");
+ }
+ });
+ setPollingInterval(3000);
+ }
+ });
+
+ // Hacky URLs that are might not work in all deployment scenarios
+ addComponent(new Link("Navigate away", new ExternalResource(
+ "slowRequestHandler")));
+ addComponent(new Link("Start download", new ExternalResource(
+ "slowRequestHandler?download")));
+ }
+
+ @Override
+ public void attach() {
+ super.attach();
+ getSession().addRequestHandler(slowRequestHandler);
+ }
+
+ @Override
+ public void detach() {
+ getSession().removeRequestHandler(slowRequestHandler);
+ super.detach();
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Navigating away from a Vaadin page while there's an ongoing XHR request should not cause a communication error to be displayed";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return Integer.valueOf(8891);
+ }
+
+}