From c8f35e5aef1619512aee438c155b417fa7bb48ba Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Fri, 10 Aug 2012 14:09:57 +0000 Subject: [PATCH] Disabled shim iframe for all but IE8+ (#9284, #6219) The shim iframe causes crashes in IE6 and does not really help in Opera/Safari/Firefox. svn changeset:24146/svn branch:6.8 --- WebContent/statictestfiles/applet.html | 5 +++ .../components/embedded/TestApplet.class | Bin 0 -> 583 bytes .../terminal/gwt/client/ui/VOverlay.java | 22 +++++++-- .../components/embedded/EmbeddedApplet.html | 36 +++++++++++++++ .../components/embedded/EmbeddedApplet.java | 42 ++++++++++++++++++ .../tests/components/embedded/TestApplet.java | 11 +++++ 6 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 WebContent/statictestfiles/applet.html create mode 100644 WebContent/statictestfiles/com/vaadin/tests/components/embedded/TestApplet.class create mode 100644 tests/testbench/com/vaadin/tests/components/embedded/EmbeddedApplet.html create mode 100644 tests/testbench/com/vaadin/tests/components/embedded/EmbeddedApplet.java create mode 100644 tests/testbench/com/vaadin/tests/components/embedded/TestApplet.java diff --git a/WebContent/statictestfiles/applet.html b/WebContent/statictestfiles/applet.html new file mode 100644 index 0000000000..05e1785e10 --- /dev/null +++ b/WebContent/statictestfiles/applet.html @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/WebContent/statictestfiles/com/vaadin/tests/components/embedded/TestApplet.class b/WebContent/statictestfiles/com/vaadin/tests/components/embedded/TestApplet.class new file mode 100644 index 0000000000000000000000000000000000000000..7650e1f87044709f9c8d54ac1c215f694a0ae83e GIT binary patch literal 583 zcmb7B%TB{E5S%T2Kw9Vv%JYzNDi2}xT!e&>fJzaUqTWqoQA6rPsiEJ+1tbo903U@| zHvnl%Y1ls;QkiB8iPMyi}7r6^1Glx2&8e zNu+EEc|zksK1(6zgvfY8@l+da&j?GMgCQY*5r@jd5>_fGph&0&+Nhf+woGs3U8LA1 zh(|IS%2d04LFVmPPYK=NpM&)Xg+yv&39U|$4LGynDwWAtkEXqY;WFxk{c9CP@v-0c z<;0i9&mPhCgE)TlrS&JO?V*W{64nXzUp5uAuu1U3RL%xA)#jeCxwtNp=3ZoEuitkW z5Ub5UW?_Rt{FIK=rFJ<~f8srHH=+$rk$)19;}xgJSmI7_C9Z|TH!Q!*WslLx4$F*{ zYy;O-?g(qBGP=VT$g>?#K5EozUTysqjUNkdF0H`h&)KxHtqU7Ige`2d5n+eb9Cp6} D2tb0t literal 0 HcmV?d00001 diff --git a/src/com/vaadin/terminal/gwt/client/ui/VOverlay.java b/src/com/vaadin/terminal/gwt/client/ui/VOverlay.java index 60829f1cc8..92f2d6540b 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VOverlay.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VOverlay.java @@ -244,7 +244,7 @@ public class VOverlay extends PopupPanel implements CloseHandler { } private IFrameElement getShimElement() { - if (shimElement == null) { + if (shimElement == null && useShimIframe()) { shimElement = Document.get().createIFrameElement(); // Insert shim iframe before the main overlay element. It does not @@ -463,8 +463,10 @@ public class VOverlay extends PopupPanel implements CloseHandler { DOM.setStyleAttribute(shadow, "display", progress < 0.9 ? "none" : ""); } - updatePositionAndSize((Element) Element.as(getShimElement()), - positionAndSize); + if (useShimIframe()) { + updatePositionAndSize((Element) Element.as(getShimElement()), + positionAndSize); + } // Opera fix, part 2 (ticket #2704) if (BrowserInfo.get().isOpera() && isShadowEnabled()) { @@ -488,13 +490,25 @@ public class VOverlay extends PopupPanel implements CloseHandler { RootPanel.get().getElement().insertBefore(shadow, getElement()); sinkShadowEvents(); } - if (!isShimAttached()) { + if (useShimIframe() && !isShimAttached()) { RootPanel.get().getElement() .insertBefore(shimElement, getElement()); } } + /** + * Returns true if we should add a shim iframe below the overlay to deal + * with zindex issues with PDFs and applets. Can be overriden to disable + * shim iframes if they are not needed. + * + * @return true if a shim iframe should be added, false otherwise + */ + protected boolean useShimIframe() { + BrowserInfo info = BrowserInfo.get(); + return info.isIE() && info.isBrowserVersionNewerOrEqual(8, 0); + } + private void updatePositionAndSize(Element e, PositionAndSize positionAndSize) { e.getStyle().setLeft(positionAndSize.getLeft(), Unit.PX); diff --git a/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedApplet.html b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedApplet.html new file mode 100644 index 0000000000..d8fb0593d1 --- /dev/null +++ b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedApplet.html @@ -0,0 +1,36 @@ + + + + + + +EmbeddedClickListenerRelativeCoordinates + + + + + + + + + + + + + + + + + + + + + + + + + + +
EmbeddedClickListenerRelativeCoordinates
open/run/com.vaadin.tests.components.embedded.EmbeddedApplet?restartApplication
screenCapturewith-applet
clickvaadin=runcomvaadintestscomponentsembeddedEmbeddedApplet::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]
screenCapturewithout-applet
+ + diff --git a/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedApplet.java b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedApplet.java new file mode 100644 index 0000000000..7460e15af0 --- /dev/null +++ b/tests/testbench/com/vaadin/tests/components/embedded/EmbeddedApplet.java @@ -0,0 +1,42 @@ +package com.vaadin.tests.components.embedded; + +import com.vaadin.terminal.ExternalResource; +import com.vaadin.tests.components.TestBase; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Embedded; +import com.vaadin.ui.Label; +import com.vaadin.ui.Window; + +public class EmbeddedApplet extends TestBase { + + @Override + protected String getDescription() { + return "The sub window should be shown on top of the embedded applet"; + } + + @Override + protected Integer getTicketNumber() { + return 8399; + } + + @Override + public void setup() { + final Embedded applet = new Embedded(); + applet.setType(Embedded.TYPE_BROWSER); + applet.setWidth("400px"); + applet.setHeight("300px"); + applet.setSource(new ExternalResource("/statictestfiles/applet.html")); + addComponent(applet); + + addComponent(new Button("Remove applet", new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + removeComponent(applet); + } + })); + + Window window = new Window("Testwindow"); + window.addComponent(new Label("I am inside the window")); + applet.getWindow().addWindow(window); + } +} diff --git a/tests/testbench/com/vaadin/tests/components/embedded/TestApplet.java b/tests/testbench/com/vaadin/tests/components/embedded/TestApplet.java new file mode 100644 index 0000000000..3cf7cf888b --- /dev/null +++ b/tests/testbench/com/vaadin/tests/components/embedded/TestApplet.java @@ -0,0 +1,11 @@ +package com.vaadin.tests.components.embedded; + +import java.applet.Applet; +import java.awt.Graphics; + +public class TestApplet extends Applet { + @Override + public void paint(Graphics g) { + g.drawString("Hello, I am an applet! Look at me!", 10, 20); + } +} -- 2.39.5