You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(10) |
Aug
(30) |
Sep
(15) |
Oct
(26) |
Nov
(12) |
Dec
(17) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(7) |
Feb
(27) |
Mar
(73) |
Apr
(17) |
May
(17) |
Jun
(78) |
Jul
(67) |
Aug
(60) |
Sep
(89) |
Oct
(140) |
Nov
(173) |
Dec
(46) |
2004 |
Jan
(39) |
Feb
(7) |
Mar
(21) |
Apr
(31) |
May
(13) |
Jun
(86) |
Jul
(14) |
Aug
(14) |
Sep
(53) |
Oct
(184) |
Nov
(186) |
Dec
(319) |
2005 |
Jan
(336) |
Feb
(274) |
Mar
(226) |
Apr
(102) |
May
(196) |
Jun
(130) |
Jul
(119) |
Aug
(143) |
Sep
(76) |
Oct
(85) |
Nov
(70) |
Dec
(159) |
2006 |
Jan
(125) |
Feb
(100) |
Mar
(80) |
Apr
(39) |
May
(55) |
Jun
(58) |
Jul
(50) |
Aug
(76) |
Sep
(55) |
Oct
(101) |
Nov
(163) |
Dec
(85) |
2007 |
Jan
(56) |
Feb
(53) |
Mar
(180) |
Apr
(221) |
May
(290) |
Jun
(199) |
Jul
(322) |
Aug
(515) |
Sep
(121) |
Oct
(297) |
Nov
(177) |
Dec
(103) |
2008 |
Jan
(516) |
Feb
(315) |
Mar
(586) |
Apr
(615) |
May
(197) |
Jun
(381) |
Jul
(390) |
Aug
(195) |
Sep
(603) |
Oct
(499) |
Nov
(622) |
Dec
(350) |
2009 |
Jan
(313) |
Feb
(338) |
Mar
(507) |
Apr
(317) |
May
(197) |
Jun
(375) |
Jul
(235) |
Aug
(424) |
Sep
(410) |
Oct
(338) |
Nov
(286) |
Dec
(306) |
2010 |
Jan
(367) |
Feb
(339) |
Mar
(371) |
Apr
(172) |
May
(233) |
Jun
(264) |
Jul
(421) |
Aug
(110) |
Sep
(218) |
Oct
(189) |
Nov
(185) |
Dec
(168) |
2011 |
Jan
(145) |
Feb
(213) |
Mar
(205) |
Apr
(64) |
May
(159) |
Jun
(67) |
Jul
(104) |
Aug
(126) |
Sep
(144) |
Oct
(106) |
Nov
(154) |
Dec
(225) |
2012 |
Jan
(111) |
Feb
(87) |
Mar
(131) |
Apr
(102) |
May
(180) |
Jun
(160) |
Jul
(412) |
Aug
(315) |
Sep
(311) |
Oct
(369) |
Nov
(464) |
Dec
(284) |
2013 |
Jan
(343) |
Feb
(165) |
Mar
(174) |
Apr
(120) |
May
(153) |
Jun
(134) |
Jul
(202) |
Aug
(105) |
Sep
(228) |
Oct
(332) |
Nov
(192) |
Dec
(219) |
2014 |
Jan
(348) |
Feb
(194) |
Mar
(189) |
Apr
(188) |
May
(297) |
Jun
(206) |
Jul
(79) |
Aug
(279) |
Sep
(111) |
Oct
(159) |
Nov
(61) |
Dec
(78) |
2015 |
Jan
(152) |
Feb
(145) |
Mar
(239) |
Apr
(223) |
May
(248) |
Jun
(296) |
Jul
(172) |
Aug
(189) |
Sep
(338) |
Oct
(217) |
Nov
(131) |
Dec
(184) |
2016 |
Jan
(118) |
Feb
(221) |
Mar
(414) |
Apr
(412) |
May
(303) |
Jun
(133) |
Jul
(129) |
Aug
(121) |
Sep
(136) |
Oct
(67) |
Nov
(89) |
Dec
(245) |
2017 |
Jan
(349) |
Feb
(90) |
Mar
(328) |
Apr
(430) |
May
(284) |
Jun
(199) |
Jul
(164) |
Aug
(120) |
Sep
(57) |
Oct
(105) |
Nov
(108) |
Dec
(146) |
2018 |
Jan
(85) |
Feb
(48) |
Mar
(97) |
Apr
(62) |
May
(64) |
Jun
(136) |
Jul
(123) |
Aug
(87) |
Sep
(17) |
Oct
(27) |
Nov
(9) |
Dec
(16) |
2019 |
Jan
(9) |
Feb
(17) |
Mar
(18) |
Apr
(14) |
May
(8) |
Jun
|
Jul
(6) |
Aug
(12) |
Sep
(5) |
Oct
|
Nov
(2) |
Dec
|
2020 |
Jan
(8) |
Feb
|
Mar
(6) |
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
(4) |
Oct
(1) |
Nov
|
Dec
|
2021 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(4) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(4) |
Dec
|
2022 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(2) |
Dec
|
2023 |
Jan
|
Feb
(6) |
Mar
(9) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2024 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: RBRi <rb...@us...> - 2018-09-12 18:16:38
|
fixed, the next release is on the way --- ** [feature-requests:#256] Fire INPUT event on tel input** **Status:** accepted **Group:** 2.32 **Created:** Tue Sep 11, 2018 05:02 PM UTC by Tomer Kimia **Last Updated:** Wed Sep 12, 2018 06:11 PM UTC **Owner:** RBRi Currently in `HTMLElement.java` the following code is present: ~~~java if (this instanceof HtmlTextInput || this instanceof HtmlTextArea || this instanceof HtmlPasswordInput) { fireKeyboardEvent(Event.TYPE_INPUT, c, shiftPressed_ || isShiftNeeded); } ~~~ My team uses the `tel` input type to make it easier for mobile users to type in numeric values (i.e. zip codes). We have a function that occurs on input on these fields (which fires on Chrome, Firefox, etc) that does not get called in our tests because, as shown above) HTMLUnit only fires the INPUT event for a few types. --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/feature-requests/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/feature-requests/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: RBRi <rb...@us...> - 2018-09-12 18:11:27
|
- **status**: open --> accepted - **assigned_to**: RBRi --- ** [feature-requests:#256] Fire INPUT event on tel input** **Status:** accepted **Group:** 2.32 **Created:** Tue Sep 11, 2018 05:02 PM UTC by Tomer Kimia **Last Updated:** Tue Sep 11, 2018 05:02 PM UTC **Owner:** RBRi Currently in `HTMLElement.java` the following code is present: ~~~java if (this instanceof HtmlTextInput || this instanceof HtmlTextArea || this instanceof HtmlPasswordInput) { fireKeyboardEvent(Event.TYPE_INPUT, c, shiftPressed_ || isShiftNeeded); } ~~~ My team uses the `tel` input type to make it easier for mobile users to type in numeric values (i.e. zip codes). We have a function that occurs on input on these fields (which fires on Chrome, Firefox, etc) that does not get called in our tests because, as shown above) HTMLUnit only fires the INPUT event for a few types. --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/feature-requests/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/feature-requests/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: RBRi <rb...@us...> - 2018-09-11 06:59:35
|
Does the latest snapshot help - regarding getTop? --- ** [bugs:#1986] getPosX, getPosY, getBoundingClientRect return incorrect values** **Status:** pending **Group:** 2.32 **Created:** Thu Aug 23, 2018 08:39 AM UTC by Bogdan **Last Updated:** Fri Sep 07, 2018 04:54 PM UTC **Owner:** RBRi Im running htmlunit 2.32, all dependecies are checked. To reproduce I compare GoogleChrome console result with the HmlUnit: load for test the HTML page at: https://www.le.ac.uk/oerresources/bdra/html/page_09.htm In Google Chrome Console run: document.getElementById("toc").getBoundingClientRect() result: DOMRect {x: 1, y: 63.609375, width: 180, height: 458.609375, top: 63.609375, …} bottom:522.21875 height:458.609375 left:1 right:181 top:63.609375 width:180 x:1 y:63.609375 In HtmlUnit: webClient = new WebClient(BrowserVersion.CHROME)); webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setRedirectEnabled(true); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.setRefreshHandler(new RefreshHandler() { public void handleRefresh(Page page, URL url, int seconds) throws IOException { } }); webClient.getOptions().setCssEnabled(true); webClient.getOptions().setTimeout(timeout * 1000); webClient.setJavaScriptTimeout(1000); Page somepage = webClient.getPage(url); then: HtmlDivision div = (HtmlDivision) page.getElementById("toc"); ClientRect rect = ((HTMLElement) (div).getScriptableObject()).getBoundingClientRect(); rect values: bottom: 90 left: 9195 right : 10451 top: 90 getPosX and GetPosY return: x: 9195 y: 90 --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: rbri <rb...@rb...> - 2018-09-09 14:51:18
|
Branch: refs/tags/2.33 Home: https://github.com/HtmlUnit/htmlunit-core-js **NOTE:** This service has been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/ Functionality will be removed from GitHub.com on January 31st, 2019. |
From: rbri <rb...@rb...> - 2018-09-09 14:42:45
|
Branch: refs/heads/master Home: https://github.com/HtmlUnit/htmlunit-core-js Commit: 4702f1c03585ceb206e57e4b941ec49af100bbf5 https://github.com/HtmlUnit/htmlunit-core-js/commit/4702f1c03585ceb206e57e4b941ec49af100bbf5 Author: rbri <rb...@rb...> Date: 2018-09-09 (Sun, 09 Sep 2018) Changed paths: M build.gradle Log Message: ----------- prepare 2.33 **NOTE:** This service has been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/ Functionality will be removed from GitHub.com on January 31st, 2019. |
From: rbri <rb...@rb...> - 2018-09-09 13:10:21
|
Branch: refs/heads/master Home: https://github.com/HtmlUnit/htmlunit-rhino-fork Commit: 9980ea18bed0c414fd426fa3a49043e9cf834ccb https://github.com/HtmlUnit/htmlunit-rhino-fork/commit/9980ea18bed0c414fd426fa3a49043e9cf834ccb Author: rbri <rb...@rb...> Date: 2018-09-09 (Sun, 09 Sep 2018) Changed paths: M src/org/mozilla/javascript/MemberBox.java Log Message: ----------- replace tabs by blanks **NOTE:** This service has been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/ Functionality will be removed from GitHub.com on January 31st, 2019. |
From: rbri <rb...@rb...> - 2018-09-09 13:08:38
|
Branch: refs/heads/master Home: https://github.com/HtmlUnit/htmlunit-rhino-fork Commit: 890213a518b4f39fd12014d46301b40ef07f98f6 https://github.com/HtmlUnit/htmlunit-rhino-fork/commit/890213a518b4f39fd12014d46301b40ef07f98f6 Author: rbri <rb...@rb...> Date: 2018-09-09 (Sun, 09 Sep 2018) Changed paths: M src/org/mozilla/javascript/InterpretedFunction.java M src/org/mozilla/javascript/InterpreterData.java M src/org/mozilla/javascript/MemberBox.java M src/org/mozilla/javascript/NativeError.java M src/org/mozilla/javascript/NativeObject.java M src/org/mozilla/javascript/ScriptRuntime.java M src/org/mozilla/javascript/ast/FunctionNode.java Log Message: ----------- replace tabs by blanks **NOTE:** This service has been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/ Functionality will be removed from GitHub.com on January 31st, 2019. |
From: RBRi <rb...@us...> - 2018-09-07 18:44:25
|
- **status**: accepted --> closed --- ** [bugs:#1984] Reworking the JS Event listeners implementation** **Status:** closed **Group:** Latest SVN **Created:** Tue Aug 14, 2018 01:38 PM UTC by Atsushi Nakagawa **Last Updated:** Fri Sep 07, 2018 06:44 PM UTC **Owner:** RBRi **Attachments:** - [EventListenersContainer.java](https://sourceforge.net/p/htmlunit/bugs/1984/attachment/EventListenersContainer.java) (16.9 kB; application/octet-stream) - [EventListenersContainer.java-2.32.txt](https://sourceforge.net/p/htmlunit/bugs/1984/attachment/EventListenersContainer.java-2.32.txt) (15.5 kB; text/plain) - [EventTarget.java](https://sourceforge.net/p/htmlunit/bugs/1984/attachment/EventTarget.java) (14.7 kB; application/octet-stream) - [EventTarget.java-2.32.txt](https://sourceforge.net/p/htmlunit/bugs/1984/attachment/EventTarget.java-2.32.txt) (13.4 kB; text/plain) ### Problem in brief Thorough testing has revealed event listeners in HtmlUnit are implemented quite liberally in a few places with regards to how they should work. It's somewhat surprising they're working so well in practice. This bug report attempts to address the problems and tackle at fixing them. Scope includes `xyz.addListenerEvent('foo', function () { ... })` listeners and `xyz.onfoo = function () { ... }` property handlers. ##### Problems noticed * Ordering of listeners called during the *at target* phase should honour the order in which the listeners were added, but does not. * Ordering of property handlers such as `window.onload` should honour the timing at which the property was set, with respect to other event listeners, but does not. * Events where `event.bubbles` is `false` should not have a *bubbling* phase, but does. * The load event for `Window`should only traverse `Window` but traverses `Window, Document` instead. * The load event for everything else should traverse from `Document` to all levels down to the element in question, but traverses the element in question only. (Every place using `EventTarget.executeEventLocally()` potentially applies to this and should probably be using the standard `EventTarget.fireEvent()` instead.) * The load event for the `<frame>` element should be treated like "everything else" above, but is not. (On the other hand, the `onload` property for `<body>` and `<frameset>` is correctly tied to `Window`.) * The propagation path of events should not be affected by changes to the DOM tree by intermediate listeners, and therefore the *bubbling* phase should always traverse the same nodes as the *capturing* phase only in reverse, but is and does not. * The return value of event listeners should be ignored (really? it looks that way.. maybe it was different in older IE) and only that of the property handler should be used, but is not. ### Test cases There are five tests which I'm putting in the comments because it's quite long. * `test_onload.html` * `test_frame.html` * `test_click.html` * `test_nested_click.html` * `test_event_return_value.html` These extra two I'm including but haven't fixed yet. They're limited to the load/error behaviour of `<script>` and `<img>` and require fixing up some implementation in `HtmlScript` and `HtmlImage`. * `test_script_onload.html` * `test_img_onload.html` ### Possible fix The fix spans three files: * `html/HtmlPage.java` * `javascript/host/event/EventListenersContainer.java` * `javascript/host/event/EventTarget.java` Changes to `HtmlPage` is the diff below. The changes for `EventListenersContainer.java` and `EventTarget.java` are rather extensive so I'm attaching the modified files along with their respective base versions suffixed with `-2.32.txt`. ```diff --- a/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java +++ b/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java @@ -86,15 +86,16 @@ import com.gargoylesoftware.htmlunit.javascript.PostponedAction; import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; import com.gargoylesoftware.htmlunit.javascript.host.Window; -import com.gargoylesoftware.htmlunit.javascript.host.dom.Node; import com.gargoylesoftware.htmlunit.javascript.host.event.BeforeUnloadEvent; import com.gargoylesoftware.htmlunit.javascript.host.event.Event; +import com.gargoylesoftware.htmlunit.javascript.host.event.EventTarget; import com.gargoylesoftware.htmlunit.javascript.host.html.HTMLDocument; import com.gargoylesoftware.htmlunit.protocol.javascript.JavaScriptURLConnection; import com.gargoylesoftware.htmlunit.util.EncodingSniffer; import com.gargoylesoftware.htmlunit.util.UrlUtils; import net.sourceforge.htmlunit.corejs.javascript.Context; +import net.sourceforge.htmlunit.corejs.javascript.ContextFactory; import net.sourceforge.htmlunit.corejs.javascript.Function; import net.sourceforge.htmlunit.corejs.javascript.Script; import net.sourceforge.htmlunit.corejs.javascript.Scriptable; @@ -1214,18 +1215,28 @@ private boolean executeEventHandlersIfNeeded(final String eventType) { // Execute the specified event on the document element. final WebWindow window = getEnclosingWindow(); if (window.getScriptableObject() instanceof Window) { - final DomElement element = getDocumentElement(); - if (element == null) { // happens for instance if document.documentElement has been removed from parent - return true; - } + // We need the 'Document' node for these load events but getDocumentElement() returns + // <html> (HtmlHtml) which is one below that. The 'Document' node is incidentally just + // us (HtmlPage). (Some tidbits at https://www.w3.org/TR/DOM-Level-3-Events/#event-flow) + final DomNode node = this; final Event event; if (eventType.equals(Event.TYPE_BEFORE_UNLOAD)) { - event = new BeforeUnloadEvent(element, eventType); + event = new BeforeUnloadEvent(node, eventType); } else { - event = new Event(element, eventType); + event = new Event(node, eventType); + } + + // This is the same as DomElement.fireEvent() and was copied + // here so it could be used with HtmlPage. + if (LOG.isDebugEnabled()) { + LOG.debug("Firing " + event); } - final ScriptResult result = element.fireEvent(event); + + final EventTarget jsNode = node.getScriptableObject(); + final ContextFactory cf = ((JavaScriptEngine) getWebClient().getJavaScriptEngine()).getContextFactory(); + final ScriptResult result = cf.call(cx -> jsNode.fireEvent(event)); + if (!isOnbeforeunloadAccepted(this, event, result)) { return false; } @@ -1253,7 +1264,12 @@ private boolean executeEventHandlersIfNeeded(final String eventType) { else { event = new Event(frame, eventType); } - final ScriptResult result = ((Node) frame.getScriptableObject()).executeEventLocally(event); + + // This fires the "load" event for the <frame> element which, like all non-window + // load events, propagates up to Document but not Window. The "load" event for + // <frameset> on the other hand, like that of <body>, is handled above where it is + // fired against Document and directed to Window. + final ScriptResult result = frame.fireEvent(event); if (!isOnbeforeunloadAccepted((HtmlPage) frame.getPage(), event, result)) { return false; } ``` --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: RBRi <rb...@us...> - 2018-09-07 18:44:08
|
I think i have done at least all the important things here. If you have any suggestions for the refactoring please create an pull request on github. Many, many thanks for all the update and fixes, hope you provide more now if github is ready. https://github.com/HtmlUnit/htmlunit --- ** [bugs:#1984] Reworking the JS Event listeners implementation** **Status:** accepted **Group:** Latest SVN **Created:** Tue Aug 14, 2018 01:38 PM UTC by Atsushi Nakagawa **Last Updated:** Tue Aug 28, 2018 03:02 AM UTC **Owner:** RBRi **Attachments:** - [EventListenersContainer.java](https://sourceforge.net/p/htmlunit/bugs/1984/attachment/EventListenersContainer.java) (16.9 kB; application/octet-stream) - [EventListenersContainer.java-2.32.txt](https://sourceforge.net/p/htmlunit/bugs/1984/attachment/EventListenersContainer.java-2.32.txt) (15.5 kB; text/plain) - [EventTarget.java](https://sourceforge.net/p/htmlunit/bugs/1984/attachment/EventTarget.java) (14.7 kB; application/octet-stream) - [EventTarget.java-2.32.txt](https://sourceforge.net/p/htmlunit/bugs/1984/attachment/EventTarget.java-2.32.txt) (13.4 kB; text/plain) ### Problem in brief Thorough testing has revealed event listeners in HtmlUnit are implemented quite liberally in a few places with regards to how they should work. It's somewhat surprising they're working so well in practice. This bug report attempts to address the problems and tackle at fixing them. Scope includes `xyz.addListenerEvent('foo', function () { ... })` listeners and `xyz.onfoo = function () { ... }` property handlers. ##### Problems noticed * Ordering of listeners called during the *at target* phase should honour the order in which the listeners were added, but does not. * Ordering of property handlers such as `window.onload` should honour the timing at which the property was set, with respect to other event listeners, but does not. * Events where `event.bubbles` is `false` should not have a *bubbling* phase, but does. * The load event for `Window`should only traverse `Window` but traverses `Window, Document` instead. * The load event for everything else should traverse from `Document` to all levels down to the element in question, but traverses the element in question only. (Every place using `EventTarget.executeEventLocally()` potentially applies to this and should probably be using the standard `EventTarget.fireEvent()` instead.) * The load event for the `<frame>` element should be treated like "everything else" above, but is not. (On the other hand, the `onload` property for `<body>` and `<frameset>` is correctly tied to `Window`.) * The propagation path of events should not be affected by changes to the DOM tree by intermediate listeners, and therefore the *bubbling* phase should always traverse the same nodes as the *capturing* phase only in reverse, but is and does not. * The return value of event listeners should be ignored (really? it looks that way.. maybe it was different in older IE) and only that of the property handler should be used, but is not. ### Test cases There are five tests which I'm putting in the comments because it's quite long. * `test_onload.html` * `test_frame.html` * `test_click.html` * `test_nested_click.html` * `test_event_return_value.html` These extra two I'm including but haven't fixed yet. They're limited to the load/error behaviour of `<script>` and `<img>` and require fixing up some implementation in `HtmlScript` and `HtmlImage`. * `test_script_onload.html` * `test_img_onload.html` ### Possible fix The fix spans three files: * `html/HtmlPage.java` * `javascript/host/event/EventListenersContainer.java` * `javascript/host/event/EventTarget.java` Changes to `HtmlPage` is the diff below. The changes for `EventListenersContainer.java` and `EventTarget.java` are rather extensive so I'm attaching the modified files along with their respective base versions suffixed with `-2.32.txt`. ```diff --- a/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java +++ b/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java @@ -86,15 +86,16 @@ import com.gargoylesoftware.htmlunit.javascript.PostponedAction; import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; import com.gargoylesoftware.htmlunit.javascript.host.Window; -import com.gargoylesoftware.htmlunit.javascript.host.dom.Node; import com.gargoylesoftware.htmlunit.javascript.host.event.BeforeUnloadEvent; import com.gargoylesoftware.htmlunit.javascript.host.event.Event; +import com.gargoylesoftware.htmlunit.javascript.host.event.EventTarget; import com.gargoylesoftware.htmlunit.javascript.host.html.HTMLDocument; import com.gargoylesoftware.htmlunit.protocol.javascript.JavaScriptURLConnection; import com.gargoylesoftware.htmlunit.util.EncodingSniffer; import com.gargoylesoftware.htmlunit.util.UrlUtils; import net.sourceforge.htmlunit.corejs.javascript.Context; +import net.sourceforge.htmlunit.corejs.javascript.ContextFactory; import net.sourceforge.htmlunit.corejs.javascript.Function; import net.sourceforge.htmlunit.corejs.javascript.Script; import net.sourceforge.htmlunit.corejs.javascript.Scriptable; @@ -1214,18 +1215,28 @@ private boolean executeEventHandlersIfNeeded(final String eventType) { // Execute the specified event on the document element. final WebWindow window = getEnclosingWindow(); if (window.getScriptableObject() instanceof Window) { - final DomElement element = getDocumentElement(); - if (element == null) { // happens for instance if document.documentElement has been removed from parent - return true; - } + // We need the 'Document' node for these load events but getDocumentElement() returns + // <html> (HtmlHtml) which is one below that. The 'Document' node is incidentally just + // us (HtmlPage). (Some tidbits at https://www.w3.org/TR/DOM-Level-3-Events/#event-flow) + final DomNode node = this; final Event event; if (eventType.equals(Event.TYPE_BEFORE_UNLOAD)) { - event = new BeforeUnloadEvent(element, eventType); + event = new BeforeUnloadEvent(node, eventType); } else { - event = new Event(element, eventType); + event = new Event(node, eventType); + } + + // This is the same as DomElement.fireEvent() and was copied + // here so it could be used with HtmlPage. + if (LOG.isDebugEnabled()) { + LOG.debug("Firing " + event); } - final ScriptResult result = element.fireEvent(event); + + final EventTarget jsNode = node.getScriptableObject(); + final ContextFactory cf = ((JavaScriptEngine) getWebClient().getJavaScriptEngine()).getContextFactory(); + final ScriptResult result = cf.call(cx -> jsNode.fireEvent(event)); + if (!isOnbeforeunloadAccepted(this, event, result)) { return false; } @@ -1253,7 +1264,12 @@ private boolean executeEventHandlersIfNeeded(final String eventType) { else { event = new Event(frame, eventType); } - final ScriptResult result = ((Node) frame.getScriptableObject()).executeEventLocally(event); + + // This fires the "load" event for the <frame> element which, like all non-window + // load events, propagates up to Document but not Window. The "load" event for + // <frameset> on the other hand, like that of <body>, is handled above where it is + // fired against Document and directed to Window. + final ScriptResult result = frame.fireEvent(event); if (!isOnbeforeunloadAccepted((HtmlPage) frame.getPage(), event, result)) { return false; } ``` --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: RBRi <rb...@us...> - 2018-09-07 16:54:15
|
- **status**: accepted --> pending --- ** [bugs:#1986] getPosX, getPosY, getBoundingClientRect return incorrect values** **Status:** pending **Group:** 2.32 **Created:** Thu Aug 23, 2018 08:39 AM UTC by Bogdan **Last Updated:** Fri Sep 07, 2018 04:48 PM UTC **Owner:** RBRi Im running htmlunit 2.32, all dependecies are checked. To reproduce I compare GoogleChrome console result with the HmlUnit: load for test the HTML page at: https://www.le.ac.uk/oerresources/bdra/html/page_09.htm In Google Chrome Console run: document.getElementById("toc").getBoundingClientRect() result: DOMRect {x: 1, y: 63.609375, width: 180, height: 458.609375, top: 63.609375, …} bottom:522.21875 height:458.609375 left:1 right:181 top:63.609375 width:180 x:1 y:63.609375 In HtmlUnit: webClient = new WebClient(BrowserVersion.CHROME)); webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setRedirectEnabled(true); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.setRefreshHandler(new RefreshHandler() { public void handleRefresh(Page page, URL url, int seconds) throws IOException { } }); webClient.getOptions().setCssEnabled(true); webClient.getOptions().setTimeout(timeout * 1000); webClient.setJavaScriptTimeout(1000); Page somepage = webClient.getPage(url); then: HtmlDivision div = (HtmlDivision) page.getElementById("toc"); ClientRect rect = ((HTMLElement) (div).getScriptableObject()).getBoundingClientRect(); rect values: bottom: 90 left: 9195 right : 10451 top: 90 getPosX and GetPosY return: x: 9195 y: 90 --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: RBRi <rb...@us...> - 2018-09-07 16:48:39
|
Have done another update fot the top position. Again: i will inform about snapshot updates via twitter https://twitter.com/HtmlUnit --- ** [bugs:#1986] getPosX, getPosY, getBoundingClientRect return incorrect values** **Status:** accepted **Group:** 2.32 **Created:** Thu Aug 23, 2018 08:39 AM UTC by Bogdan **Last Updated:** Fri Sep 07, 2018 12:14 PM UTC **Owner:** RBRi Im running htmlunit 2.32, all dependecies are checked. To reproduce I compare GoogleChrome console result with the HmlUnit: load for test the HTML page at: https://www.le.ac.uk/oerresources/bdra/html/page_09.htm In Google Chrome Console run: document.getElementById("toc").getBoundingClientRect() result: DOMRect {x: 1, y: 63.609375, width: 180, height: 458.609375, top: 63.609375, …} bottom:522.21875 height:458.609375 left:1 right:181 top:63.609375 width:180 x:1 y:63.609375 In HtmlUnit: webClient = new WebClient(BrowserVersion.CHROME)); webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setRedirectEnabled(true); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.setRefreshHandler(new RefreshHandler() { public void handleRefresh(Page page, URL url, int seconds) throws IOException { } }); webClient.getOptions().setCssEnabled(true); webClient.getOptions().setTimeout(timeout * 1000); webClient.setJavaScriptTimeout(1000); Page somepage = webClient.getPage(url); then: HtmlDivision div = (HtmlDivision) page.getElementById("toc"); ClientRect rect = ((HTMLElement) (div).getScriptableObject()).getBoundingClientRect(); rect values: bottom: 90 left: 9195 right : 10451 top: 90 getPosX and GetPosY return: x: 9195 y: 90 --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: RBRi <rb...@us...> - 2018-09-02 16:14:13
|
Sorry for the delay but had some technical problems with Sonatype and was busy bringing the code to github. There is a new snapshot available.. Usually i will inform about snapshot updates via twitter https://twitter.com/HtmlUnit --- ** [bugs:#1986] getPosX, getPosY, getBoundingClientRect return incorrect values** **Status:** accepted **Group:** 2.32 **Created:** Thu Aug 23, 2018 08:39 AM UTC by Bogdan **Last Updated:** Tue Aug 28, 2018 10:03 AM UTC **Owner:** RBRi Im running htmlunit 2.32, all dependecies are checked. To reproduce I compare GoogleChrome console result with the HmlUnit: load for test the HTML page at: https://www.le.ac.uk/oerresources/bdra/html/page_09.htm In Google Chrome Console run: document.getElementById("toc").getBoundingClientRect() result: DOMRect {x: 1, y: 63.609375, width: 180, height: 458.609375, top: 63.609375, …} bottom:522.21875 height:458.609375 left:1 right:181 top:63.609375 width:180 x:1 y:63.609375 In HtmlUnit: webClient = new WebClient(BrowserVersion.CHROME)); webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setRedirectEnabled(true); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.setRefreshHandler(new RefreshHandler() { public void handleRefresh(Page page, URL url, int seconds) throws IOException { } }); webClient.getOptions().setCssEnabled(true); webClient.getOptions().setTimeout(timeout * 1000); webClient.setJavaScriptTimeout(1000); Page somepage = webClient.getPage(url); then: HtmlDivision div = (HtmlDivision) page.getElementById("toc"); ClientRect rect = ((HTMLElement) (div).getScriptableObject()).getBoundingClientRect(); rect values: bottom: 90 left: 9195 right : 10451 top: 90 getPosX and GetPosY return: x: 9195 y: 90 --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: <rb...@us...> - 2018-08-31 05:37:22
|
Revision: 15560 http://sourceforge.net/p/htmlunit/code/15560 Author: rbri Date: 2018-08-31 05:37:19 +0000 (Fri, 31 Aug 2018) Log Message: ----------- switch to https Modified Paths: -------------- trunk/htmlunit/pom.xml Modified: trunk/htmlunit/pom.xml =================================================================== --- trunk/htmlunit/pom.xml 2018-08-30 19:28:16 UTC (rev 15559) +++ trunk/htmlunit/pom.xml 2018-08-31 05:37:19 UTC (rev 15560) @@ -1067,11 +1067,11 @@ </site> <snapshotRepository> <id>sonatype-nexus-snapshots</id> - <url>http://oss.sonatype.org/content/repositories/snapshots</url> + <url>https://oss.sonatype.org/content/repositories/snapshots</url> </snapshotRepository> <repository> <id>sonatype-nexus-staging</id> - <url>http://oss.sonatype.org/service/local/staging/deploy/maven2</url> + <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url> </repository> </distributionManagement> <repositories> |
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()); } |
From: <rb...@us...> - 2018-08-30 17:34:55
|
Revision: 15558 http://sourceforge.net/p/htmlunit/code/15558 Author: rbri Date: 2018-08-30 17:34:53 +0000 (Thu, 30 Aug 2018) Log Message: ----------- update pom Modified Paths: -------------- trunk/htmlunit/pom.xml Modified: trunk/htmlunit/pom.xml =================================================================== --- trunk/htmlunit/pom.xml 2018-08-30 14:39:46 UTC (rev 15557) +++ trunk/htmlunit/pom.xml 2018-08-30 17:34:53 UTC (rev 15558) @@ -837,12 +837,18 @@ <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> - <version>3.7</version> + <version>3.8</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-text</artifactId> <version>1.4</version> + <exclusions> + <exclusion> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> |
From: <rb...@us...> - 2018-08-30 14:39:50
|
Revision: 15557 http://sourceforge.net/p/htmlunit/code/15557 Author: rbri Date: 2018-08-30 14:39:46 +0000 (Thu, 30 Aug 2018) Log Message: ----------- cleanup Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/ScriptResult.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/WebSocket.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/EventListenersContainer.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/EventTarget.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIFrameElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/worker/DedicatedWorkerGlobalScope.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 08:13:33 UTC (rev 15556) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/ScriptResult.java 2018-08-30 14:39:46 UTC (rev 15557) @@ -82,49 +82,4 @@ public static boolean isUndefined(final ScriptResult scriptResult) { return scriptResult != null && scriptResult.getJavaScriptResult() instanceof Undefined; } - - /** - * Creates and returns a composite {@link ScriptResult} based on the two input {@link ScriptResult}s. This - * method defines how the return values for multiple event handlers are combined during event capturing and - * bubbling. The behavior of this method varies based on whether or not we are emulating IE. - * - * @param newResult the new {@link ScriptResult} (may be {@code null}) - * @param originalResult the original {@link ScriptResult} (may be {@code null}) - * @return a composite {@link ScriptResult}, based on the two input {@link ScriptResult}s - */ - public static ScriptResult combine(final ScriptResult newResult, final ScriptResult originalResult) { - final Object jsResult; - final Page page; - - if (ScriptResult.isFalse(newResult)) { - jsResult = newResult.getJavaScriptResult(); - } - else if (originalResult != null) { - jsResult = originalResult.getJavaScriptResult(); - } - else if (newResult != null) { - jsResult = newResult.getJavaScriptResult(); - } - else { - jsResult = null; - } - - // The new page is always the newest page. - if (newResult != null) { - page = newResult.getNewPage(); - } - else if (originalResult != null) { - page = originalResult.getNewPage(); - } - else { - page = null; - } - - // Build and return the composite script result. - if (jsResult == null && page == null) { - return null; - } - return new ScriptResult(jsResult, page); - } - } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/WebSocket.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/WebSocket.java 2018-08-30 08:13:33 UTC (rev 15556) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/WebSocket.java 2018-08-30 14:39:46 UTC (rev 15557) @@ -499,7 +499,10 @@ evt.setPrototype(getPrototype(evt.getClass())); final JavaScriptEngine engine = (JavaScriptEngine) containingPage_.getWebClient().getJavaScriptEngine(); - engine.getContextFactory().call(cx -> executeEventLocally(evt)); + engine.getContextFactory().call(cx -> { + executeEventLocally(evt); + return null; + }); } private void callFunction(final Function function, final Object[] args) { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/EventListenersContainer.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/EventListenersContainer.java 2018-08-30 08:13:33 UTC (rev 15556) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/EventListenersContainer.java 2018-08-30 14:39:46 UTC (rev 15557) @@ -290,14 +290,13 @@ }); } - private ScriptResult executeEventListeners(final int eventPhase, final Event event, final Object[] args) { + private void executeEventListeners(final int eventPhase, final Event event, final Object[] args) { final DomNode node = jsNode_.getDomNodeOrNull(); // some event don't apply on all kind of nodes, for instance "blur" if (node != null && !node.handles(event)) { - return null; + return; } - ScriptResult allResult = null; final TypeContainer container = getTypeContainer(event.getType()); final List<Scriptable> listeners = container.getListeners(eventPhase); if (!listeners.isEmpty()) { @@ -346,17 +345,13 @@ // Return value is only honored for property handlers (Tested in Chrome/FF/IE11) if (isPropertyHandler && !ScriptResult.isUndefined(result)) { event.handlePropertyHandlerReturnValue(result.getJavaScriptResult()); - - // This return value is now all but unused and can be refactored away - allResult = null; } } if (event.isImmediatePropagationStopped()) { - return allResult; + return; } } } - return allResult; } /** @@ -363,10 +358,9 @@ * Executes bubbling listeners. * @param event the event * @param args arguments - * @return the result */ - public ScriptResult executeBubblingListeners(final Event event, final Object[] args) { - return executeEventListeners(Event.BUBBLING_PHASE, event, args); + public void executeBubblingListeners(final Event event, final Object[] args) { + executeEventListeners(Event.BUBBLING_PHASE, event, args); } /** @@ -373,10 +367,9 @@ * Executes capturing listeners. * @param event the event * @param args the arguments - * @return the result */ - public ScriptResult executeCapturingListeners(final Event event, final Object[] args) { - return executeEventListeners(Event.CAPTURING_PHASE, event, args); + public void executeCapturingListeners(final Event event, final Object[] args) { + executeEventListeners(Event.CAPTURING_PHASE, event, args); } /** @@ -383,10 +376,9 @@ * Executes listeners for events targeting the node. (non-propagation phase) * @param event the event * @param args the arguments - * @return the result */ - public ScriptResult executeAtTargetListeners(final Event event, final Object[] args) { - return executeEventListeners(Event.AT_TARGET, event, args); + public void executeAtTargetListeners(final Event event, final Object[] args) { + executeEventListeners(Event.AT_TARGET, event, args); } /** 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 08:13:33 UTC (rev 15556) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/EventTarget.java 2018-08-30 14:39:46 UTC (rev 15557) @@ -87,10 +87,9 @@ /** * Executes the event on this object only (needed for instance for onload on (i)frame tags). * @param event the event - * @return the result * @see #fireEvent(Event) */ - public ScriptResult executeEventLocally(final Event event) { + public void executeEventLocally(final Event event) { final EventListenersContainer eventListenersContainer = getEventListenersContainer(); final Window window = getWindow(); final Object[] args = new Object[] {event}; @@ -99,7 +98,7 @@ window.setCurrentEvent(event); try { event.setEventPhase(Event.AT_TARGET); - return eventListenersContainer.executeAtTargetListeners(event, args); + eventListenersContainer.executeAtTargetListeners(event, args); } finally { window.setCurrentEvent(previousEvent); // reset event @@ -126,7 +125,6 @@ final Object[] args = new Object[] {event}; event.startFire(); - ScriptResult result = null; final Event previousEvent = window.getCurrentEvent(); window.setCurrentEvent(event); @@ -168,8 +166,7 @@ final EventTarget jsNode = propagationPath.get(i); final EventListenersContainer elc = jsNode.eventListenersContainer_; if (elc != null) { - final ScriptResult r = elc.executeCapturingListeners(event, args); - result = ScriptResult.combine(r, result); + elc.executeCapturingListeners(event, args); if (event.isPropagationStopped()) { return; } @@ -185,8 +182,7 @@ final EventTarget jsNode = propagationPath.get(0); final EventListenersContainer elc = jsNode.eventListenersContainer_; if (elc != null) { - final ScriptResult r = elc.executeAtTargetListeners(event, args); - result = ScriptResult.combine(r, result); + elc.executeAtTargetListeners(event, args); if (event.isPropagationStopped()) { return; } @@ -214,8 +210,7 @@ final EventTarget jsNode = propagationPath.get(i); final EventListenersContainer elc = jsNode.eventListenersContainer_; if (elc != null) { - final ScriptResult r = elc.executeBubblingListeners(event, args); - result = ScriptResult.combine(r, result); + elc.executeBubblingListeners(event, args); if (event.isPropagationStopped()) { return; } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIFrameElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIFrameElement.java 2018-08-30 08:13:33 UTC (rev 15556) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIFrameElement.java 2018-08-30 14:39:46 UTC (rev 15557) @@ -20,7 +20,6 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.IE; -import com.gargoylesoftware.htmlunit.ScriptResult; import com.gargoylesoftware.htmlunit.html.BaseFrameElement; import com.gargoylesoftware.htmlunit.html.HtmlInlineFrame; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; @@ -200,12 +199,11 @@ * {@inheritDoc} */ @Override - public ScriptResult executeEventLocally(final Event event) { + public void executeEventLocally(final Event event) { if (Event.TYPE_LOAD != event.getType() || !isAttachedToPageDuringOnload_ || getBrowserVersion().hasFeature(JS_IFRAME_ALWAYS_EXECUTE_ONLOAD)) { - return super.executeEventLocally(event); + super.executeEventLocally(event); } - return null; } /** Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/worker/DedicatedWorkerGlobalScope.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/worker/DedicatedWorkerGlobalScope.java 2018-08-30 08:13:33 UTC (rev 15556) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/worker/DedicatedWorkerGlobalScope.java 2018-08-30 14:39:46 UTC (rev 15557) @@ -125,7 +125,8 @@ public Object run(final Context cx) { worker_.getEventListenersContainer().executeCapturingListeners(event, null); final Object[] args = new Object[] {event}; - return worker_.getEventListenersContainer().executeBubblingListeners(event, args); + worker_.getEventListenersContainer().executeBubblingListeners(event, args); + return null; } }; |
From: <rb...@us...> - 2018-08-30 08:13:37
|
Revision: 15556 http://sourceforge.net/p/htmlunit/code/15556 Author: rbri Date: 2018-08-30 08:13:33 +0000 (Thu, 30 Aug 2018) Log Message: ----------- event refactoring - fix the remaining test case Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/selenium/TypingTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2018-08-28 17:44:31 UTC (rev 15555) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2018-08-30 08:13:33 UTC (rev 15556) @@ -415,6 +415,10 @@ @BrowserFeature({CHROME, FF}) HTMLELEMENT_ALIGN_INVALID, + /** Detaching the active element from the dom tree triggers no keyup event. */ + @BrowserFeature(IE) + HTMLELEMENT_DETACH_ACTIVE_TRIGGERS_NO_KEYUP_EVENT, + /** Removing the active element from the dom tree triggers the onblur event. */ @BrowserFeature(CHROME) HTMLELEMENT_REMOVE_ACTIVE_TRIGGERS_BLUR_EVENT, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java 2018-08-28 17:44:31 UTC (rev 15555) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java 2018-08-30 08:13:33 UTC (rev 15556) @@ -1185,6 +1185,10 @@ nextSibling_ = null; previousSibling_ = null; parent_ = null; + attachedToPage_ = false; + for (DomNode descendant : getDescendants()) { + descendant.attachedToPage_ = false; + } } private void fireRemoval(final DomNode exParent) { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java 2018-08-28 17:44:31 UTC (rev 15555) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java 2018-08-30 08:13:33 UTC (rev 15556) @@ -14,6 +14,7 @@ */ package com.gargoylesoftware.htmlunit.html; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLELEMENT_DETACH_ACTIVE_TRIGGERS_NO_KEYUP_EVENT; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLELEMENT_REMOVE_ACTIVE_TRIGGERS_BLUR_EVENT; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.KEYBOARD_EVENT_SPECIAL_KEYPRESS; @@ -537,7 +538,7 @@ } final Event keyDown = new KeyboardEvent(this, Event.TYPE_KEY_DOWN, c, - shiftPressed_ || isShiftNeeded, ctrlPressed_, altPressed_); + shiftPressed_ || isShiftNeeded, ctrlPressed_, altPressed_); final ScriptResult keyDownResult = fireEvent(keyDown); if (!keyDown.isAborted(keyDownResult)) { @@ -555,15 +556,32 @@ if (this instanceof HtmlTextInput || this instanceof HtmlTextArea || this instanceof HtmlPasswordInput) { - fireKeyboardEvent(Event.TYPE_INPUT, c, shiftPressed_ || isShiftNeeded); + fireEvent(new KeyboardEvent(this, Event.TYPE_INPUT, c, + shiftPressed_ || isShiftNeeded, ctrlPressed_, altPressed_)); } - fireKeyboardEvent(Event.TYPE_KEY_UP, c, shiftPressed_ || isShiftNeeded); + HtmlElement eventSource = this; + if (!isAttachedToPage()) { + final BrowserVersion browserVersion = page.getWebClient().getBrowserVersion(); + if (browserVersion.hasFeature(HTMLELEMENT_DETACH_ACTIVE_TRIGGERS_NO_KEYUP_EVENT)) { + eventSource = null; + } + else { + eventSource = page.getBody(); + } + } - if (isShiftNeeded) { - final Event shiftUp = new KeyboardEvent(this, Event.TYPE_KEY_UP, KeyboardEvent.DOM_VK_SHIFT, - false, ctrlPressed_, altPressed_); - fireEvent(shiftUp); + if (eventSource != null) { + final Event keyUp = new KeyboardEvent(this, Event.TYPE_KEY_UP, c, + shiftPressed_ || isShiftNeeded, ctrlPressed_, altPressed_); + eventSource.fireEvent(keyUp); + + if (isShiftNeeded) { + final Event shiftUp = new KeyboardEvent(this, Event.TYPE_KEY_UP, + KeyboardEvent.DOM_VK_SHIFT, + false, ctrlPressed_, altPressed_); + eventSource.fireEvent(shiftUp); + } } final HtmlForm form = getEnclosingForm(); @@ -578,10 +596,6 @@ return webClient.getCurrentWindow().getEnclosedPage(); } - private void fireKeyboardEvent(final String eventType, final char c, final boolean shift) { - fireEvent(new KeyboardEvent(this, eventType, c, shift, ctrlPressed_, altPressed_)); - } - /** * Simulates typing the specified key code while this element has focus, returning the page contained * by this element's window after typing. Note that it may or may not be the same as the original page, Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/selenium/TypingTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/selenium/TypingTest.java 2018-08-28 17:44:31 UTC (rev 15555) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/selenium/TypingTest.java 2018-08-30 08:13:33 UTC (rev 15556) @@ -28,6 +28,7 @@ import com.gargoylesoftware.htmlunit.BrowserRunner; import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; +import com.gargoylesoftware.htmlunit.BrowserRunner.BuggyWebDriver; /** * Modified from @@ -343,11 +344,10 @@ */ @Test @Alerts(DEFAULT = {"keydown (target) keyup (target) keyup (body)", - "keydown (target) keyup (target) keyup (body) keydown (target) a pressed; removing"}, - CHROME = {"keydown (target) keyup (target) keyup (body)", - "keydown (target) keyup (target) keyup (body) keydown (target) a pressed; removing keyup (body)"}, - FF60 = {"keydown (target) keyup (target) keyup (body)", - "keydown (target) keyup (target) keyup (body) keydown (target) a pressed; removing keyup (body)"}) + "keydown (target) a pressed; removing keyup (body)"}, + IE = {"keydown (target) keyup (target) keyup (body)", + "keydown (target) a pressed; removing"}) + @BuggyWebDriver public void canSafelyTypeOnElementThatIsRemovedFromTheDomOnKeyPress() { final WebDriver driver = getWebDriver("/key_tests/remove_on_keypress.html"); @@ -358,12 +358,10 @@ input.sendKeys("b"); assertEquals(getExpectedAlerts()[0], getValueText(log).replace('\n', ' ')); + log.clear(); input.sendKeys("a"); - // Some drivers (IE, Firefox) do not always generate the final keyup event since the element - // is removed from the DOM in response to the keypress (note, this is a product of how events - // are generated and does not match actual user behavior). assertEquals(getExpectedAlerts()[1], getValueText(log).replace('\n', ' ')); } |
From: <rb...@us...> - 2018-08-28 17:44:34
|
Revision: 15555 http://sourceforge.net/p/htmlunit/code/15555 Author: rbri Date: 2018-08-28 17:44:31 +0000 (Tue, 28 Aug 2018) Log Message: ----------- fix test Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/ComputedCSSStyleDeclaration.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/ComputedCSSStyleDeclaration.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/ComputedCSSStyleDeclaration.java 2018-08-28 17:43:17 UTC (rev 15554) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/ComputedCSSStyleDeclaration.java 2018-08-28 17:44:31 UTC (rev 15555) @@ -1506,7 +1506,11 @@ // We need to calculate the horizontal displacement caused by *previous* siblings. left = 0; DomNode prev = getElement().getDomNodeOrDie().getPreviousSibling(); - while (prev != null && !(prev instanceof HtmlTableRow)) { + while (prev != null) { + if (prev instanceof HtmlTableRow) { + break; + } + final Scriptable prevScriptable = prev.getScriptableObject(); if (prevScriptable instanceof HTMLElement) { final HTMLElement e = (HTMLElement) prevScriptable; |
From: <rb...@us...> - 2018-08-28 17:43:19
|
Revision: 15554 http://sourceforge.net/p/htmlunit/code/15554 Author: rbri Date: 2018-08-28 17:43:17 +0000 (Tue, 28 Aug 2018) Log Message: ----------- restructure Added Paths: ----------- tags/core-js/core-js-2.10/ tags/core-js/core-js-2.2/ tags/core-js/core-js-2.4/ tags/core-js/core-js-2.5/ tags/core-js/core-js-2.6/ tags/core-js/core-js-2.7/ tags/core-js/core-js-2.8/ tags/core-js/core-js-2.9/ Removed Paths: ------------- tags/core-js-2.10/ tags/core-js-2.2/ tags/core-js-2.4/ tags/core-js-2.5/ tags/core-js-2.6/ tags/core-js-2.7/ tags/core-js-2.8/ tags/core-js-2.9/ |
From: <rb...@us...> - 2018-08-28 17:42:45
|
Revision: 15553 http://sourceforge.net/p/htmlunit/code/15553 Author: rbri Date: 2018-08-28 17:42:42 +0000 (Tue, 28 Aug 2018) Log Message: ----------- restructure Added Paths: ----------- tags/core-js/ |
From: <rb...@us...> - 2018-08-28 17:41:36
|
Revision: 15552 http://sourceforge.net/p/htmlunit/code/15552 Author: rbri Date: 2018-08-28 17:41:34 +0000 (Tue, 28 Aug 2018) Log Message: ----------- restructure Added Paths: ----------- branches/htmlunit/htmlunit3/ branches/htmlunit/nashorn_before_release_2_28/ Removed Paths: ------------- branches/htmlunit3/ branches/nashorn_before_release_2_28/ |
From: <rb...@us...> - 2018-08-28 17:41:08
|
Revision: 15551 http://sourceforge.net/p/htmlunit/code/15551 Author: rbri Date: 2018-08-28 17:41:06 +0000 (Tue, 28 Aug 2018) Log Message: ----------- restructure Added Paths: ----------- branches/htmlunit/ |
From: <rb...@us...> - 2018-08-28 17:40:07
|
Revision: 15550 http://sourceforge.net/p/htmlunit/code/15550 Author: rbri Date: 2018-08-28 17:40:05 +0000 (Tue, 28 Aug 2018) Log Message: ----------- restructure Added Paths: ----------- tags/neko-htmlunit/HtmlUnit NekoHtml-2.21/ tags/neko-htmlunit/HtmlUnit NekoHtml-2.23/ tags/neko-htmlunit/HtmlUnit NekoHtml-2.24/ tags/neko-htmlunit/HtmlUnit NekoHtml-2.25/ tags/neko-htmlunit/HtmlUnit NekoHtml-2.27/ tags/neko-htmlunit/HtmlUnit NekoHtml-2.28/ tags/neko-htmlunit/HtmlUnit NekoHtml-2.31/ tags/neko-htmlunit/HtmlUnitDriver-2.6/ Removed Paths: ------------- tags/HtmlUnit NekoHtml-2.21/ tags/HtmlUnit NekoHtml-2.23/ tags/HtmlUnit NekoHtml-2.24/ tags/HtmlUnit NekoHtml-2.25/ tags/HtmlUnit NekoHtml-2.27/ tags/HtmlUnit NekoHtml-2.28/ tags/HtmlUnit NekoHtml-2.31/ tags/HtmlUnitDriver-2.6/ |
From: <rb...@us...> - 2018-08-28 17:39:35
|
Revision: 15549 http://sourceforge.net/p/htmlunit/code/15549 Author: rbri Date: 2018-08-28 17:39:32 +0000 (Tue, 28 Aug 2018) Log Message: ----------- restructure Added Paths: ----------- tags/neko-htmlunit/ |
From: <rb...@us...> - 2018-08-28 17:38:58
|
Revision: 15548 http://sourceforge.net/p/htmlunit/code/15548 Author: rbri Date: 2018-08-28 17:38:54 +0000 (Tue, 28 Aug 2018) Log Message: ----------- restructure Added Paths: ----------- tags/htmlunit/HtmlUnit-1dot1/ tags/htmlunit/HtmlUnit-1dot10/ tags/htmlunit/HtmlUnit-1dot11/ tags/htmlunit/HtmlUnit-1dot12/ tags/htmlunit/HtmlUnit-1dot13/ tags/htmlunit/HtmlUnit-1dot14/ tags/htmlunit/HtmlUnit-1dot2/ tags/htmlunit/HtmlUnit-1dot2dot1/ tags/htmlunit/HtmlUnit-1dot3/ tags/htmlunit/HtmlUnit-1dot4/ tags/htmlunit/HtmlUnit-1dot5/ tags/htmlunit/HtmlUnit-1dot6/ tags/htmlunit/HtmlUnit-1dot7/ tags/htmlunit/HtmlUnit-1dot8/ tags/htmlunit/HtmlUnit-1dot9/ tags/htmlunit/HtmlUnit-2.0/ tags/htmlunit/HtmlUnit-2.1/ tags/htmlunit/HtmlUnit-2.10/ tags/htmlunit/HtmlUnit-2.11/ tags/htmlunit/HtmlUnit-2.12/ tags/htmlunit/HtmlUnit-2.13/ tags/htmlunit/HtmlUnit-2.14/ tags/htmlunit/HtmlUnit-2.15/ tags/htmlunit/HtmlUnit-2.16/ tags/htmlunit/HtmlUnit-2.17/ tags/htmlunit/HtmlUnit-2.18/ tags/htmlunit/HtmlUnit-2.19/ tags/htmlunit/HtmlUnit-2.2/ tags/htmlunit/HtmlUnit-2.20/ tags/htmlunit/HtmlUnit-2.21/ tags/htmlunit/HtmlUnit-2.22/ tags/htmlunit/HtmlUnit-2.23/ tags/htmlunit/HtmlUnit-2.24/ tags/htmlunit/HtmlUnit-2.25/ tags/htmlunit/HtmlUnit-2.26/ tags/htmlunit/HtmlUnit-2.27/ tags/htmlunit/HtmlUnit-2.28/ tags/htmlunit/HtmlUnit-2.29/ tags/htmlunit/HtmlUnit-2.3/ tags/htmlunit/HtmlUnit-2.30/ tags/htmlunit/HtmlUnit-2.31/ tags/htmlunit/HtmlUnit-2.32/ tags/htmlunit/HtmlUnit-2.4/ tags/htmlunit/HtmlUnit-2.5/ tags/htmlunit/HtmlUnit-2.6/ tags/htmlunit/HtmlUnit-2.7/ tags/htmlunit/HtmlUnit-2.8/ tags/htmlunit/HtmlUnit-2.9/ Removed Paths: ------------- tags/HtmlUnit-1dot1/ tags/HtmlUnit-1dot10/ tags/HtmlUnit-1dot11/ tags/HtmlUnit-1dot12/ tags/HtmlUnit-1dot13/ tags/HtmlUnit-1dot14/ tags/HtmlUnit-1dot2/ tags/HtmlUnit-1dot2dot1/ tags/HtmlUnit-1dot3/ tags/HtmlUnit-1dot4/ tags/HtmlUnit-1dot5/ tags/HtmlUnit-1dot6/ tags/HtmlUnit-1dot7/ tags/HtmlUnit-1dot8/ tags/HtmlUnit-1dot9/ tags/HtmlUnit-2.0/ tags/HtmlUnit-2.1/ tags/HtmlUnit-2.10/ tags/HtmlUnit-2.11/ tags/HtmlUnit-2.12/ tags/HtmlUnit-2.13/ tags/HtmlUnit-2.14/ tags/HtmlUnit-2.15/ tags/HtmlUnit-2.16/ tags/HtmlUnit-2.17/ tags/HtmlUnit-2.18/ tags/HtmlUnit-2.19/ tags/HtmlUnit-2.2/ tags/HtmlUnit-2.20/ tags/HtmlUnit-2.21/ tags/HtmlUnit-2.22/ tags/HtmlUnit-2.23/ tags/HtmlUnit-2.24/ tags/HtmlUnit-2.25/ tags/HtmlUnit-2.26/ tags/HtmlUnit-2.27/ tags/HtmlUnit-2.28/ tags/HtmlUnit-2.29/ tags/HtmlUnit-2.3/ tags/HtmlUnit-2.30/ tags/HtmlUnit-2.31/ tags/HtmlUnit-2.32/ tags/HtmlUnit-2.4/ tags/HtmlUnit-2.5/ tags/HtmlUnit-2.6/ tags/HtmlUnit-2.7/ tags/HtmlUnit-2.8/ tags/HtmlUnit-2.9/ |