+ /** returns true iff the platform has a case-sensitive filesystem */
+ public static boolean isCaseSensitive() { return platform._isCaseSensitive(); }
+
+ /** displays a platform-specific "open file" dialog and returns the chosen filename, or null if the user hit cancel */
+ public static String fileDialog(String suggestedFileName, boolean write) {
+ if (!ThreadMessage.suspendThread()) return null;
+ try {
+ return platform._fileDialog(suggestedFileName, write);
+ } finally {
+ ThreadMessage.resumeThread();
+ }
+ }
+
+ /** opens a new browser window */
+ public static void newBrowserWindow(String url) {
+ if (!(url.startsWith("https://") || url.startsWith("http://") || url.startsWith("ftp://") || url.startsWith("mailto:"))) {
+ if (Log.on) Log.log(Platform.class, "xwt.newBrowserWindow() only supports http and https urls");
+ return;
+ }
+
+ // check the URL for well-formedness, as a defense against buffer overflow attacks
+ try {
+ String u = url;
+ if (u.startsWith("https")) u = "http" + u.substring(5);
+ new URL(u);
+ } catch (MalformedURLException e) {
+ if (Log.on) Log.log(Platform.class, "URL " + url + " is not well-formed");
+ if (Log.on) Log.log(Platform.class, e);
+ }
+
+ if (Log.on) Log.log(Platform.class, "newBrowserWindow, url = " + url);
+ platform._newBrowserWindow(url);
+ }
+