Just to confirm that I see it as a problem with setFullSize() i.e. line# 14 in the code below, that when the line is commented out, the UI is rendered with both the components on both the browsers.
why you call login.setSizeFull(); if in two lines above you set the explicit W/H for the same component ?
calling setSizeFull() overrides your seytWidth / setHeight above, settings them to 100% both.
I think I have to do better at the layout, but the real question is about the browser differences.
Also, when I remove the setWidth/setHeight, the behaviour is still the same. Commenting out setSizeFull() makes Safari and Firefox behave the same way. With that line in there, only Firefox shows both LoginForm and OptionGroup.
To get a report of layouting problems in the currently visible layouts, enable debug mode by adding ?debug to your application URL, and use the Analyze layouts button to see the report.
For more information about the debug mode and analyze layouts, see section
11.4 from the Book of Vaadin. Also, section
6.10 about layout formatting may be good reading
As Henri pointed out, there’s an invalid layout configuration at play here. You’re using a relatively sized component inside an undefined sized layout, which results in zero sizes for the contained component (in most cases). But since these invalid situations are impossible to figure out exactly what the expected result would be, the behavior is undefined by the Vaadin layout specification.
And because of that, browser differences are let loose to handle the situation pretty much as they see fit. Safari renders the view as I would expect, where a 100% high element inside an undefined DIV is rendered 0px high, whereas Firefox probably applies some security exceptions and makes the otherwise hidden IFRAME visible (which is used to render the LoginForm).