EmbeddedBrowserPrototypingJWebPane
Prototyping JWebPane integration (November/2009)
- no API for manipulation with cookies (add/remove cookie, clear cookie list). I assume that now each instance of JWebPane has it's own set of cookies, is that correct? This is required for integration of new Kenai web pages into the IDE. We need a way to silently log user in. The best solution would be injecting an appropriate cookie into embedded browser, the workaround is using JavaScript to log user in.
- no API to bind mouse and keyboard event with appropriate elements in DOM tree. We want to provide our own popup menu and have the possibility to react to mouse-over events. Without this API we can't implement some advanced web preview features, e.g. highlight appropriate html code snippet for DOM element under mouse cursor. We also want to provide our own popup menu or at least customize the existing one.
- no API to retrieve selected text. Text selection should be bound to NetBeans Copy/Cut clipboard actions.
- no binaries for Windows x64
- no binaries for Linux x64
- link error when running on OpenSolaris, workaroundable by specifying library path in system environment variable
- no Flash plugin
- no SVG support
- seems to be fairly stable and fast
- stability testing:
| HW | OS | JDK | Owner | Status |
|---|---|---|---|---|
| Intel Mac 64b | Mac OS-X Leopard 64b | 6 64b | Milan | tested |
| Intel Mac 64b | Win XP 32b in VBox (Mac OS-X Leopard 64b) | 6 32b | Milan | tested |
| Intel Mac 64b | Ubuntu 9.10 32b in VBox (Mac OS-X Leopard 64b) | 6 32b | Milan | tested |
| Intel PC | Ubuntu 9.10 32b | 6 32b | Tonda | tested |
| Intel Mac 64b | Mac OS-X Snow Leopard 64b | 6 64b | Tonda | tested |
| Intel PC | Win Vista 64b | 6 32b | Standa | tested |
| Intel PC | Win 7 32b in VBox | 6 32b | Standa | tested |
| Intel PC | Linux Ubuntu 64b in VBox | 6 64b | Standa | binaries not available |
| Intel PC | Solaris 32b in VBox | 6 32b | Standa | tested |
- testing results:
| URL | Intel Mac 64b
Mac OS-X Leopard 64b JDK 6 64b Milan | Intel Mac 64b
Win XP 32b in VBox JDK 6 32b Milan | Intel Mac 64b
Ubuntu 9.10 32b in VBox JDK 6 32b Milan | Intel PC
Ubuntu 9.10 32b JDK 6 32b Tonda | Intel Mac 64b
Mac OS-X Snow Leopard 64b JDK 6 64b Tonda | Intel PC
Win Vista 64b JDK 6 32b Standa | Intel PC
Win 7 32b in VBox JDK 6 32b Standa | Intel PC
Linux Ubuntu 64b in VBox JDK 6 64b Standa | Intel PC
Solaris 32b in VBox JDK 6 32b Standa |
|---|---|---|---|---|---|---|---|---|---|
| scrolling on some pages with images tracked as P1 #6908771 | VM crash | ||||||||
| NetBeans Wiki login tracked as P1 #6908349 | VM crash | VM crash | VM crash | VM crash | VM crash | VM crash | VM crash | no binaries | VM crash |
| Kenai login tracked as P1 #6908349 | VM crash | VM crash | VM crash | VM crash | VM crash | VM crash | VM crash | no binaries | VM crash |
| Zpravy iDnes tracked as P2 #6909729 | doesn't load | doesn't load | doesn't load | doesn't load | doesn't load | doesn't load | doesn't load | no binaries | doesn't load |
| Plugin Portal tracked as P2 #6909734 | loads incorrectly | loads incorrectly | loads incorrectly | loads incorrectly | loads incorrectly | loads incorrectly | loads incorrectly | no binaries | loads incorrectly |
| any file download tracked as P4 #6909743 | loads as text | loads as text | loads as text | loads as text | loads as text | loads as text | loads as text | no binaries | loads as text |
| CSS Complex Spiral | Broken | OK | ok | broken | no binaries | ok | |||
| Math ML | Broken | Broken | broken | broken | no binaries | broken | |||
| Eagle | Broken | OK | ok | broken | no binaries | ok | |||
| Mozilla Stickies | Broken | Broken | broken | broken | no binaries | broken | |||
| Mine Hunter | OK | OK | ok | ok | no binaries | deadlock | |||
| Menu Bar | OK | OK | ok | ok | no binaries | ok | |||
| Credits | OK | OK | ok | ok | no binaries | ok | |||
| Bar Graph | OK | OK | ok | ok | no binaries | ok | |||
| Curvelicious | Broken | OK | ok | broken | no binaries | ok | |||
| Transitions | Broken | Broken | broken | broken | no binaries | broken | |||
| Toolbar | Broken | Broken | broken | broken | no binaries | broken | |||
| Webkit stickies | Partially broken | OK | ok | ok | no binaries | ok |
Web pages for stability and performance testing:
- NetBeans
- Kenai
- Mozilla Demos (see Examples section)
- Webkit Demos
Prototyping JWebPane integration (May/2009 - June/2009)
- uses Swing's default look and feel to render some HTML widgets (buttons, combo boxes etc) - this means the rendering looks different on different OS/LaF combinations and definitely does not render nice as native browsers
- noticeably slower rendering and page scrolling in comparison to a native browser solution
- experienced JVM crashes when playing with the prototype
- problems with keyboard input (e.g. ENTER in a search field did not work, TAB does not move keyboard focus between input fields)
- cookies are not persisted (e.g. login to netbeans.org websites does not work)
- no API for cookies management
- JavaScript support not working 100% (e.g. download page on netbeans.org does not detect and set your OS as the default target platform for the download)
- doesn't work well with some browser plugins, e.g. Flash (as of June 30th)
- doesn't allow manipulations with HTML document (no access to DOM tree) (as of June 30th)
- doesn't work on Windows Vista 64bit
- native binaries must be placed in netbeans/bin folder when running under Windows XP and in JDK's bin folder when running under Linux
- not possible to locate selected element in DOM tree (required to implement pop-up menu)
- no SVG support
- OutOfMemoryError when setting fontsize:
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:59) at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397) at sun.awt.image.ByteInterleavedRaster.<init>(ByteInterleavedRaster.java:72) at sun.awt.image.ByteInterleavedRaster.createCompatibleWritableRaster(ByteInterleavedRaster.java:1310) at java.awt.image.AffineTransformOp.createCompatibleDestImage(AffineTransformOp.java:448) at java.awt.image.AffineTransformOp.filter(AffineTransformOp.java:209) at org.webkit.webcore.platform.graphics.WCGraphics2DContext.drawPattern(WCGraphics2DContext.java:357) at org.webkit.webcore.platform.WCWidget.twkUpdateContents(Native Method) at org.webkit.webcore.platform.WidgetDelegate$2.run(WidgetDelegate.java:94) at org.webkit.webcore.platform.SimplifiedWebKitFlow.invokeAndWait(SimplifiedWebKitFlow.java:25) at org.webkit.webcore.platform.WidgetDelegate.paintComponent(WidgetDelegate.java:90) at javax.swing.JComponent.paint(JComponent.java:1027) at javax.swing.JComponent.paintChildren(JComponent.java:864) at javax.swing.JComponent.paint(JComponent.java:1036) at javax.swing.JViewport.paint(JViewport.java:747) at javax.swing.JComponent.paintChildren(JComponent.java:864) at javax.swing.JComponent.paint(JComponent.java:1036) at javax.swing.JComponent.paintChildren(JComponent.java:864) at javax.swing.JComponent.paint(JComponent.java:1036) at javax.swing.JComponent.paintChildren(JComponent.java:864) at javax.swing.JComponent.paint(JComponent.java:1036) at javax.swing.JComponent.paintChildren(JComponent.java:864) at javax.swing.JComponent.paint(JComponent.java:1036) at javax.swing.JComponent.paintChildren(JComponent.java:864) at javax.swing.JSplitPane.paintChildren(JSplitPane.java:1030) at javax.swing.JComponent.paint(JComponent.java:1036) at javax.swing.JComponent.paintChildren(JComponent.java:864) at javax.swing.JComponent.paint(JComponent.java:1036) at javax.swing.JComponent.paintChildren(JComponent.java:864) at javax.swing.JComponent.paint(JComponent.java:1036) at javax.swing.JLayeredPane.paint(JLayeredPane.java:564) at javax.swing.JComponent.paintChildren(JComponent.java:864)
