From: <rb...@us...> - 2018-08-30 19:28:19
|
Revision: 15559 http://sourceforge.net/p/htmlunit/code/15559 Author: rbri Date: 2018-08-30 19:28:16 +0000 (Thu, 30 Aug 2018) Log Message: ----------- another cleanup step Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/ScriptResult.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlInput.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlRadioButtonInput.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/EventTarget.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFormElement2Test.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/ScriptResult.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/ScriptResult.java 2018-08-30 17:34:53 UTC (rev 15558) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/ScriptResult.java 2018-08-30 19:28:16 UTC (rev 15559) @@ -27,18 +27,13 @@ /** The object that was returned from the script engine. */ private final Object javaScriptResult_; - /** The page that is currently loaded at the end of the script execution. */ - private final Page newPage_; - /** * Creates a new instance. * * @param javaScriptResult the object that was returned from the script engine - * @param newPage the page that is currently loaded at the end of the script execution */ - public ScriptResult(final Object javaScriptResult, final Page newPage) { + public ScriptResult(final Object javaScriptResult) { javaScriptResult_ = javaScriptResult; - newPage_ = newPage; } /** @@ -50,19 +45,11 @@ } /** - * Returns the page that is loaded at the end of the script execution. - * @return the new page - */ - public Page getNewPage() { - return newPage_; - } - - /** * {@inheritDoc} */ @Override public String toString() { - return "ScriptResult[result=" + javaScriptResult_ + " page=" + newPage_ + "]"; + return "ScriptResult[result=" + javaScriptResult_ + "]"; } /** Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomElement.java 2018-08-30 17:34:53 UTC (rev 15558) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomElement.java 2018-08-30 19:28:16 UTC (rev 15559) @@ -1150,7 +1150,7 @@ if (scriptResult == null) { return clickPage; } - return (P) scriptResult.getNewPage(); + return (P) getPage().getWebClient().getCurrentWindow().getEnclosedPage(); } /** @@ -1359,7 +1359,7 @@ currentPage = page; } else { - currentPage = scriptResult.getNewPage(); + currentPage = page.getWebClient().getCurrentWindow().getEnclosedPage(); } final boolean mouseOver = !MouseEvent.TYPE_MOUSE_OUT.equals(eventType); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java 2018-08-30 17:34:53 UTC (rev 15558) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java 2018-08-30 19:28:16 UTC (rev 15559) @@ -125,13 +125,14 @@ if (scriptResult == null) { return htmlPage; } - return scriptResult.getNewPage(); + return htmlPage.getWebClient().getCurrentWindow().getEnclosedPage(); } } final String action = getActionAttribute().trim(); if (StringUtils.startsWithIgnoreCase(action, JavaScriptURLConnection.JAVASCRIPT_PREFIX)) { - return htmlPage.executeJavaScript(action, "Form action", getStartLineNumber()).getNewPage(); + htmlPage.executeJavaScript(action, "Form action", getStartLineNumber()); + return htmlPage.getWebClient().getCurrentWindow().getEnclosedPage(); } } else { @@ -377,7 +378,7 @@ final SgmlPage htmlPage = getPage(); final ScriptResult scriptResult = fireEvent(Event.TYPE_RESET); if (ScriptResult.isFalse(scriptResult)) { - return scriptResult.getNewPage(); + return htmlPage.getWebClient().getCurrentWindow().getEnclosedPage(); } for (final HtmlElement next : getHtmlElementDescendants()) { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlInput.java 2018-08-30 17:34:53 UTC (rev 15558) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlInput.java 2018-08-30 19:28:16 UTC (rev 15559) @@ -530,7 +530,7 @@ if (scriptResult != null) { // current window doesn't exist anymore - return scriptResult.getNewPage(); + return page.getWebClient().getCurrentWindow().getEnclosedPage(); } return page; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java 2018-08-30 17:34:53 UTC (rev 15558) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java 2018-08-30 19:28:16 UTC (rev 15559) @@ -909,7 +909,7 @@ */ public ScriptResult executeJavaScript(String sourceCode, final String sourceName, final int startLine) { if (!getWebClient().getOptions().isJavaScriptEnabled()) { - return new ScriptResult(Undefined.instance, this); + return new ScriptResult(Undefined.instance); } if (StringUtils.startsWithIgnoreCase(sourceCode, JavaScriptURLConnection.JAVASCRIPT_PREFIX)) { @@ -920,7 +920,7 @@ } final Object result = getWebClient().getJavaScriptEngine().execute(this, sourceCode, sourceName, startLine); - return new ScriptResult(result, getWebClient().getCurrentWindow().getEnclosedPage()); + return new ScriptResult(result); } /** Various possible external JavaScript file loading results. */ @@ -2505,7 +2505,7 @@ public ScriptResult executeJavaScriptFunction(final Object function, final Object thisObject, final Object[] args, final DomNode htmlElementScope) { if (!getWebClient().getOptions().isJavaScriptEnabled()) { - return new ScriptResult(null, this); + return new ScriptResult(null); } return executeJavaScriptFunction((Function) function, (Scriptable) thisObject, args, htmlElementScope); @@ -2517,7 +2517,7 @@ final JavaScriptEngine engine = (JavaScriptEngine) getWebClient().getJavaScriptEngine(); final Object result = engine.callFunction(this, function, thisObject, args, htmlElementScope); - return new ScriptResult(result, getWebClient().getCurrentWindow().getEnclosedPage()); + return new ScriptResult(result); } private void writeObject(final ObjectOutputStream oos) throws IOException { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlRadioButtonInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlRadioButtonInput.java 2018-08-30 17:34:53 UTC (rev 15558) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlRadioButtonInput.java 2018-08-30 19:28:16 UTC (rev 15559) @@ -143,7 +143,7 @@ if (changed) { final ScriptResult scriptResult = fireEvent(Event.TYPE_CHANGE); if (scriptResult != null) { - page = scriptResult.getNewPage(); + page = page.getEnclosingWindow().getWebClient().getCurrentWindow().getEnclosedPage(); } } return page; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/EventTarget.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/EventTarget.java 2018-08-30 17:34:53 UTC (rev 15558) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/EventTarget.java 2018-08-30 19:28:16 UTC (rev 15559) @@ -111,18 +111,7 @@ * @return the result */ public ScriptResult fireEvent(final Event event) { - fireEventImpl(event); - // This is deprecated but there're still a few places using ScriptResult.getNewPage() - return new ScriptResult(null, getWindow().getWebWindow().getWebClient().getCurrentWindow().getEnclosedPage()); - } - - /** - * Fires the event on the node with capturing and bubbling phase. - * @param event the event - */ - private void fireEventImpl(final Event event) { final Window window = getWindow(); - final Object[] args = new Object[] {event}; event.startFire(); final Event previousEvent = window.getCurrentEvent(); @@ -146,7 +135,7 @@ propagationPath.add(parent.getScriptableObject()); } - // The load event has some unnatural behaviour that we need to handle specially + // The load event has some unnatural behavior that we need to handle specially if (Event.TYPE_LOAD.equals(event.getType())) { // The load event for other elements target that element and but path only // up to Document and not Window, so do nothing here @@ -166,9 +155,9 @@ final EventTarget jsNode = propagationPath.get(i); final EventListenersContainer elc = jsNode.eventListenersContainer_; if (elc != null) { - elc.executeCapturingListeners(event, args); + elc.executeCapturingListeners(event, new Object[] {event}); if (event.isPropagationStopped()) { - return; + return new ScriptResult(null); } } } @@ -182,24 +171,13 @@ final EventTarget jsNode = propagationPath.get(0); final EventListenersContainer elc = jsNode.eventListenersContainer_; if (elc != null) { - elc.executeAtTargetListeners(event, args); + elc.executeAtTargetListeners(event, new Object[] {event}); if (event.isPropagationStopped()) { - return; + return new ScriptResult(null); } } } - // Refactoring note: This should probably be done further down - HtmlLabel label = null; - if (event.processLabelAfterBubbling()) { - for (DomNode parent = ourParentNode; parent != null; parent = parent.getParentNode()) { - if (parent instanceof HtmlLabel) { - label = (HtmlLabel) parent; - break; - } - } - } - // bubbling phase if (event.isBubbles()) { // This belongs here inside the block because events that don't bubble never set @@ -210,14 +188,24 @@ final EventTarget jsNode = propagationPath.get(i); final EventListenersContainer elc = jsNode.eventListenersContainer_; if (elc != null) { - elc.executeBubblingListeners(event, args); + elc.executeBubblingListeners(event, new Object[] {event}); if (event.isPropagationStopped()) { - return; + return new ScriptResult(null); } } } } + HtmlLabel label = null; + if (event.processLabelAfterBubbling()) { + for (DomNode parent = ourParentNode; parent != null; parent = parent.getParentNode()) { + if (parent instanceof HtmlLabel) { + label = (HtmlLabel) parent; + break; + } + } + } + if (label != null) { final HtmlElement element = label.getReferencedElement(); if (element != null && element != getDomNodeOrNull()) { @@ -235,6 +223,8 @@ event.endFire(); window.setCurrentEvent(previousEvent); // reset event } + + return new ScriptResult(null); } /** Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFormElement2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFormElement2Test.java 2018-08-30 17:34:53 UTC (rev 15558) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFormElement2Test.java 2018-08-30 19:28:16 UTC (rev 15559) @@ -64,8 +64,8 @@ getMockWebConnection().setDefaultResponse(secondContent); final HtmlPage page = loadPageWithAlerts(html); - final HtmlPage secondPage = - (HtmlPage) page.executeJavaScript("document.form1.submit()").getNewPage(); + page.executeJavaScript("document.form1.submit()"); + final HtmlPage secondPage = (HtmlPage) getWebClient().getCurrentWindow().getEnclosedPage(); assertEquals("second", secondPage.getTitleText()); } @@ -87,7 +87,8 @@ final List<String> collectedAlerts = new ArrayList<>(); final HtmlPage page1 = loadPage(html, collectedAlerts); - final HtmlPage page2 = (HtmlPage) page1.executeJavaScript("document.form1.submit()").getNewPage(); + page1.executeJavaScript("document.form1.submit()"); + final HtmlPage page2 = (HtmlPage) getWebClient().getCurrentWindow().getEnclosedPage(); assertEquals(page1, page2); assertEquals(getExpectedAlerts(), collectedAlerts); @@ -111,7 +112,8 @@ final List<String> collectedAlerts = new ArrayList<>(); final HtmlPage page1 = loadPage(html, collectedAlerts); - final HtmlPage page2 = (HtmlPage) page1.executeJavaScript("document.form1.submit()").getNewPage(); + page1.executeJavaScript("document.form1.submit()"); + final HtmlPage page2 = (HtmlPage) getWebClient().getCurrentWindow().getEnclosedPage(); assertEquals(page1, page2); assertEquals(getExpectedAlerts(), collectedAlerts); @@ -135,7 +137,8 @@ final List<String> collectedAlerts = new ArrayList<>(); final HtmlPage page1 = loadPage(html, collectedAlerts); - final HtmlPage page2 = (HtmlPage) page1.executeJavaScript("document.form1.submit()").getNewPage(); + page1.executeJavaScript("document.form1.submit()"); + final HtmlPage page2 = (HtmlPage) getWebClient().getCurrentWindow().getEnclosedPage(); assertEquals(page1, page2); assertEquals(getExpectedAlerts(), collectedAlerts); @@ -183,8 +186,9 @@ final HtmlPage page = loadPageWithAlerts(html); - final HtmlPage secondPage - = (HtmlPage) page.executeJavaScript("document.form1.submit()").getNewPage(); + page.executeJavaScript("document.form1.submit()"); + final HtmlPage secondPage = (HtmlPage) getWebClient().getCurrentWindow().getEnclosedPage(); + assertEquals("second", secondPage.getTitleText()); assertEquals("MyNewWindow", secondPage.getEnclosingWindow().getName()); } |