Daniel Kurka has uploaded a new change for review.
https://gwt-review.googlesource.com/3430
Change subject: making RootPanel.clear(true) respects GWT loader iframei
......................................................................
making RootPanel.clear(true) respects GWT loader iframei
fixes issue 8200
Change-Id: If876b04c453a1d4e170870e97f3a82d0d86599d5
---
M user/src/com/google/gwt/user/client/ui/RootPanel.java
M user/test/com/google/gwt/user/client/ui/RootPanelTest.java
2 files changed, 49 insertions(+), 2 deletions(-)
diff --git a/user/src/com/google/gwt/user/client/ui/RootPanel.java
b/user/src/com/google/gwt/user/client/ui/RootPanel.java
index c4929c6..6cf2e06 100644
--- a/user/src/com/google/gwt/user/client/ui/RootPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/RootPanel.java
@@ -15,11 +15,13 @@
*/
package com.google.gwt.user.client.ui;
+import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.impl.Disposable;
import com.google.gwt.core.client.impl.Impl;
import com.google.gwt.dom.client.BodyElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Node;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.i18n.client.BidiUtils;
@@ -28,8 +30,10 @@
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Window;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -317,10 +321,32 @@
clear();
if (clearDom) {
- com.google.gwt.user.client.Element containerElement = getElement();
+ List<Node> nodesToReAttach = new ArrayList<Node>();
+ Element containerElement = getElement();
while (containerElement.hasChildNodes()) {
- containerElement.removeChild(containerElement.getFirstChild());
+ Node child = containerElement.getFirstChild();
+
+ if (!shouldNodeBeRemoved(child)) {
+ nodesToReAttach.add(child);
+ }
+ containerElement.removeChild(child);
+ }
+
+ for (Node node : nodesToReAttach) {
+ containerElement.appendChild(node);
}
}
}
+
+ private boolean shouldNodeBeRemoved(Node child) {
+ if (Element.is(child)) {
+ Element childElement = (Element) child;
+ // do not remove GWT's iframe that is used for loading code
+ if ("iframe".equalsIgnoreCase(childElement.getTagName())
+ && GWT.getModuleName().equals(childElement.getId())) {
+ return false;
+ }
+ }
+ return true;
+ }
}
diff --git a/user/test/com/google/gwt/user/client/ui/RootPanelTest.java
b/user/test/com/google/gwt/user/client/ui/RootPanelTest.java
index d455bd1..5a3ad2e 100644
--- a/user/test/com/google/gwt/user/client/ui/RootPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/RootPanelTest.java
@@ -15,6 +15,7 @@
*/
package com.google.gwt.user.client.ui;
+import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
@@ -69,6 +70,26 @@
assertEquals(0, rootPanel.getElement().getChildCount());
}
+ public void testClearRootPanelWithGWTFrame() {
+
+ RootPanel rootPanel = createDOM("testClearRootPanel");
+
+ rootPanel.add(new Button("a"));
+ rootPanel.add(new Button("b"));
+
+ rootPanel.clear(true);
+ assertEquals(0, rootPanel.getElement().getChildCount());
+
+ Element iFrame = DOM.createIFrame();
+ iFrame.setId(GWT.getModuleName());
+ rootPanel.getElement().appendChild(iFrame);
+
+ assertEquals(1, rootPanel.getElement().getChildCount());
+
+ rootPanel.clear(true);
+ assertEquals(1, rootPanel.getElement().getChildCount());
+ }
+
public void testClearRootPanelContainingTextNodes() {
RootPanel rootPanel = createDOM("testClearRootPanelAndDOM");
--
To view, visit https://gwt-review.googlesource.com/3430
To unsubscribe, visit https://gwt-review.googlesource.com/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: If876b04c453a1d4e170870e97f3a82d0d86599d5
Gerrit-PatchSet: 1
Gerrit-Project: gwt
Gerrit-Branch: master
Gerrit-Owner: Daniel Kurka <[email protected]>
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors
---
You received this message because you are subscribed to the Google Groups "GWT Contributors" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.