Updated Branches: refs/heads/wicket-6.x 4ab1dbc3f -> cc16f8e92
WICKET-5484 rendering and writing of a page should never happen on an Ajax request, even if other circumstances imply otherwise Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/cc16f8e9 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/cc16f8e9 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/cc16f8e9 Branch: refs/heads/wicket-6.x Commit: cc16f8e920205af12c505968ebb6db343321dce5 Parents: 4ab1dbc Author: svenmeier <[email protected]> Authored: Thu Jan 23 14:29:15 2014 +0100 Committer: svenmeier <[email protected]> Committed: Thu Jan 23 14:29:15 2014 +0100 ---------------------------------------------------------------------- .../request/handler/render/WebPageRenderer.java | 18 +++---- .../handler/render/WebPageRendererTest.java | 57 ++++++++++++++++++++ 2 files changed, 66 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/cc16f8e9/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java b/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java index 8e77875..d27cab6 100644 --- a/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java +++ b/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java @@ -200,15 +200,15 @@ public class WebPageRenderer extends PageRenderer // if there is saved response for this URL render it bufferedResponse.writeTo((WebResponse)requestCycle.getResponse()); } - else if (getRedirectPolicy() == RedirectPolicy.NEVER_REDIRECT || - (isOnePassRender() && isAjax == false && getRedirectPolicy() != RedirectPolicy.ALWAYS_REDIRECT) // - || - (!isAjax // - && - (targetUrl.equals(currentUrl) && !getPageProvider().isNewPageInstance() && !getPage().isPageStateless()) // - || (targetUrl.equals(currentUrl) && isRedirectToRender()) // - ) // - || shouldPreserveClientUrl) // + else if (isAjax == false && (// + getRedirectPolicy() == RedirectPolicy.NEVER_REDIRECT // + || (isOnePassRender() && getRedirectPolicy() != RedirectPolicy.ALWAYS_REDIRECT) // + || ((targetUrl.equals(currentUrl) && !getPageProvider().isNewPageInstance() && !getPage() + .isPageStateless()) // + || (targetUrl.equals(currentUrl) && isRedirectToRender()) // + ) // + || shouldPreserveClientUrl) // + ) // { // if the policy is never to redirect // or one pass render mode is on http://git-wip-us.apache.org/repos/asf/wicket/blob/cc16f8e9/wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java b/wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java index 5af4df4..005d56b 100644 --- a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java @@ -725,6 +725,63 @@ public class WebPageRendererTest } /** + * Tests that when {@link WebRequest#shouldPreserveClientUrl()} returns + * {@code true} and the current request is Ajax then a redirect should be + * issued + */ + @Test + public void testShouldPreserveClientUrlAndAjaxRequest() + { + PageRenderer renderer = new TestPageRenderer(handler); + + when(urlRenderer.getBaseUrl()).thenReturn(Url.parse("base")); + + when(requestCycle.mapUrlFor(eq(handler))).thenReturn(Url.parse("base/a")); + + when(request.isAjax()).thenReturn(true); + + when(request.shouldPreserveClientUrl()).thenReturn(true); + + when(provider.isNewPageInstance()).thenReturn(true); + + renderer.respond(requestCycle); + + verify(response).sendRedirect(anyString()); + verify(response, never()).write(any(byte[].class)); + + } + + /** + * Tests that when {@link RedirectPolicy#NEVER_REDIRECT} is configured but + * the current request is Ajax then a redirect should still be issued + */ + @Test + public void testNeverRedirectButAjaxRequest() + { + PageRenderer renderer = new TestPageRenderer(handler) + { + protected RedirectPolicy getRedirectPolicy() + { + return RedirectPolicy.NEVER_REDIRECT; + } + }; + + when(urlRenderer.getBaseUrl()).thenReturn(Url.parse("base")); + + when(requestCycle.mapUrlFor(eq(handler))).thenReturn(Url.parse("base/a")); + + when(request.isAjax()).thenReturn(true); + + when(provider.isNewPageInstance()).thenReturn(true); + + renderer.respond(requestCycle); + + verify(response).sendRedirect(anyString()); + verify(response, never()).write(any(byte[].class)); + + } + + /** * Configures common methods which are used by all tests */ private static class TestPageRenderer extends WebPageRenderer
