diff options
author | Leif Åstrand <leif@vaadin.com> | 2012-11-15 09:40:42 +0200 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2012-11-19 09:58:01 +0000 |
commit | 008dd4cf731522543c80ea81c0d5dca35f85c90b (patch) | |
tree | 8275ae680a4331412fc770891c80f223dcc88439 /uitest | |
parent | 977c8b01c042f2ffec36e3cb5c7ad517b738d06e (diff) | |
download | vaadin-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.java | 116 |
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); + } + +} |