Browse Source

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
tags/7.0.0.beta1
Artur Signell 11 years ago
parent
commit
c8f35e5aef

+ 5
- 0
WebContent/statictestfiles/applet.html View File

@@ -0,0 +1,5 @@
<html>
<body>
<applet code="com/vaadin/tests/components/embedded/TestApplet/class"></applet>
</body>
</html>

BIN
WebContent/statictestfiles/com/vaadin/tests/components/embedded/TestApplet.class View File


+ 18
- 4
src/com/vaadin/terminal/gwt/client/ui/VOverlay.java View File

@@ -244,7 +244,7 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
}

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<PopupPanel> {
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<PopupPanel> {
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);

+ 36
- 0
tests/testbench/com/vaadin/tests/components/embedded/EmbeddedApplet.html View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="" />
<title>EmbeddedClickListenerRelativeCoordinates</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">EmbeddedClickListenerRelativeCoordinates</td></tr>
</thead><tbody>
<tr>
<td>open</td>
<td>/run/com.vaadin.tests.components.embedded.EmbeddedApplet?restartApplication</td>
<td></td>
</tr>
<tr>
<td>screenCapture</td>
<td></td>
<td>with-applet</td>
</tr>
<tr>
<td>click</td>
<td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedApplet::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
<td>screenCapture</td>
<td></td>
<td>without-applet</td>
</tr>
</tbody></table>
</body>
</html>

+ 42
- 0
tests/testbench/com/vaadin/tests/components/embedded/EmbeddedApplet.java View File

@@ -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);
}
}

+ 11
- 0
tests/testbench/com/vaadin/tests/components/embedded/TestApplet.java View File

@@ -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);
}
}

Loading…
Cancel
Save