WICKET-1718 check successful rendering of page before validating headers
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/bb7f9cf5 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/bb7f9cf5 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/bb7f9cf5 Branch: refs/heads/master Commit: bb7f9cf54770d8470c03a7e2f00eb6445e3953f4 Parents: af84be5 Author: Sven Meier <[email protected]> Authored: Sat Jul 25 23:19:42 2015 +0200 Committer: Sven Meier <[email protected]> Committed: Sat Jul 25 23:43:44 2015 +0200 ---------------------------------------------------------------------- .../org/apache/wicket/markup/html/WebPage.java | 7 ++-- ...artResponseAtInterceptPageExceptionTest.java | 39 ++++++++++++++++++-- 2 files changed, 40 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/bb7f9cf5/wicket-core/src/main/java/org/apache/wicket/markup/html/WebPage.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/WebPage.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/WebPage.java index 903d7c4..5c7d6bb 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/WebPage.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/WebPage.java @@ -26,11 +26,9 @@ import org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler; import org.apache.wicket.markup.renderStrategy.AbstractHeaderRenderStrategy; import org.apache.wicket.model.IModel; import org.apache.wicket.protocol.http.WebApplication; -import org.apache.wicket.request.IRequestHandler; import org.apache.wicket.request.Request; import org.apache.wicket.request.Response; import org.apache.wicket.request.cycle.RequestCycle; -import org.apache.wicket.core.request.handler.IPageRequestHandler; import org.apache.wicket.request.http.WebRequest; import org.apache.wicket.request.http.WebResponse; import org.apache.wicket.request.mapper.parameter.PageParameters; @@ -216,7 +214,10 @@ public class WebPage extends Page // only in development mode validate the headers if (getApplication().usesDevelopmentConfig()) { - validateHeaders(); + // check headers only when page was completely rendered + if (wasRendered(this)) { + validateHeaders(); + } } super.onAfterRender(); http://git-wip-us.apache.org/repos/asf/wicket/blob/bb7f9cf5/wicket-core/src/test/java/org/apache/wicket/RestartResponseAtInterceptPageExceptionTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/RestartResponseAtInterceptPageExceptionTest.java b/wicket-core/src/test/java/org/apache/wicket/RestartResponseAtInterceptPageExceptionTest.java index 1361d36..8220cd0 100644 --- a/wicket-core/src/test/java/org/apache/wicket/RestartResponseAtInterceptPageExceptionTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/RestartResponseAtInterceptPageExceptionTest.java @@ -16,13 +16,22 @@ */ package org.apache.wicket; +import org.apache.wicket.ajax.AjaxEventBehavior; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.authorization.Action; import org.apache.wicket.authorization.strategies.page.AbstractPageAuthorizationStrategy; +import org.apache.wicket.markup.head.IHeaderResponse; +import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.pages.RedirectPage; import org.apache.wicket.mock.MockApplication; +import org.apache.wicket.mock.MockHomePage; import org.apache.wicket.protocol.http.WebApplication; +import org.apache.wicket.resource.CoreLibrariesContributor; import org.apache.wicket.util.tester.WicketTestCase; import org.junit.Test; +import junit.framework.Assert; + /** * Tests for {@link RestartResponseAtInterceptPageException} */ @@ -42,10 +51,12 @@ public class RestartResponseAtInterceptPageExceptionTest extends WicketTestCase getSecuritySettings().setAuthorizationStrategy( new AbstractPageAuthorizationStrategy() { + /** + * No rendering for pages other than RedirectPage. + */ @Override - protected <T extends Page> boolean isPageAuthorized(Class<T> pageClass) - { - if (pageClass != RedirectPage.class) + public boolean isActionAuthorized(Component c, Action action) { + if ((action.toString() == Action.RENDER) && c instanceof WebPage && c.getClass() != RedirectPage.class) { RedirectPage intercept = new RedirectPage("http://example.com/path"); throw new RestartResponseAtInterceptPageException(intercept); @@ -68,4 +79,26 @@ public class RestartResponseAtInterceptPageExceptionTest extends WicketTestCase tester.assertRenderedPage(RedirectPage.class); } + /** + * https://issues.apache.org/jira/browse/WICKET-5955 + */ + @Test + public void interceptPagePreventsHeaderContributionButShouldNotBeLogged() + { + tester.startPage(new MockHomePage() { + @Override + public void renderHead(IHeaderResponse response) { + super.renderHead(response); + + CoreLibrariesContributor.contribute(getApplication(), response); + } + + @Override + protected void reportMissingHead(CharSequence collectedHeaderOutput) { + fail("missing headers should not be reported for unrendered page"); + } + }); + + tester.assertRenderedPage(RedirectPage.class); + } }
