view overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/NetxPanel.java @ 1805:8dc304404e01

Update plugin and javaws. 2009-05-13 Omair Majid <omajid@redhat.com> * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/JNLPSplashScreen.java: New file. This new class is responsible for displaying the splash screen. * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/Launcher.java (launchApplication): Show a splash screen if specified in the JNLP file while loading the remote jars. * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/cache/DefaultDownloadIndicator.java (getListener): Reposition the frame at the bottom right corner of the screen. 2009-05-13 Lillian Angel <langel@redhat.com> * plugin/icedtea/sun/applet/PluginAppletSecurityContext.java (PluginAppletSecurityContext): Added comment. * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/runtime/JNLPSecurityManager.java (checkPermission): Fixed style. 2009-05-11 Lillian Angel <langel@redhat.com> * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/runtime/JNLPRuntime.java (getDefaultBaseDir): Added check for home dir. Return null if homeDir not found in system properties. 2009-05-11 Lillian Angel <langel@redhat.com> * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/runtime/JNLPRuntime.java (getDefaultBaseDir): Added null check. 2009-05-11 Lillian Angel <langel@redhat.com> * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/runtime/JNLPRuntime.java (getDefaultBaseDir): Set basedir for netx applications to ~/.netx, rather than asking. Now consistant with the plugin. * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/runtime/InstallDialog.java: Removed. 2009-05-06 Lillian Angel <langel@redhat.com> Fixes bz#498108 * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/NetxPanel.java (runLoader): Pass false to JNLPRuntime.initialize, since this is an applet. * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/runtime/JNLPSecurityManager.java (PluginAppletSecurityContext): Likewise. * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/runtime/Boot.java (run): Pass true to JNLPRuntime.initialize, since this is a webstart app. * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/runtime/JNLPRuntime.java (initialize): Added new parameter isApplication, which is used to set global static variable isWebstartApplication. (isWebstartApplication): New accessor function. * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/runtime/JNLPSecurityManager.java: (checkPermission): Added call to JNLPRuntime.isWebstartApplication so the check is bypassed if the permissions are to be checked for a webstart application. 2009-04-30 Deepak Bhole <dbhole@redhat.com> * plugin/icedtea/sun/applet/PluginAppletSecurityContext.java: Forgo permission check if JS source is [System] (i.e. Mozilla extension/chrome). 2009-04-23 Deepak Bhole <dbhole@redhat.com> * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/runtime/JNLPClassLoader.java: Handle nested jars. * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/runtime/JNLPPolicy.java: Use site address when checking for policy against CodeSource. * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/tools/JarSigner.java: Handle nested jars. 2009-04-10 Deepak Bhole <dbhole@redhat.com> * IcedTeaPlugin.cc: Fix rhbz478561 (freeze with empty string return from Java side). * plugin/icedtea/sun/applet/PluginMessageConsumer.java: Bump max workers from 3 to 20, limiting initial to 3, and growing if/when needed. 2009-04-02 Deepak Bhole <dbhole@redhat.com> * IcedTeaPlugin.cc: Incremented timeout to 3 minutes. Added functions to process proxy and auth info requests (the latter is unused). * plugin/icedtea/sun/applet/PasswordAuthenticationDialog.java: New file. Displays a username/password input dialog to users for sites and proxies requiring http auth. * plugin/icedtea/sun/applet/PluginAppletViewer.java: Fix wait mechanism to detect applet initialization failures correctly. Add support for requesting proxy information from the browser. * plugin/icedtea/sun/applet/PluginCallRequestFactory.java: Add support for PluginProxyInfoRequest objects. * plugin/icedtea/sun/applet/PluginMain.java: Wire in custom authenticator and proxy selector. * plugin/icedtea/sun/applet/PluginProxyInfoRequest.java: New file. Object representing proxy information request from browser. * plugin/icedtea/sun/applet/PluginProxySelector.java: Custom proxy selector that requests information from browser and uses it. * plugin/icedtea/sun/applet/PluginStreamHandler.java: Improve handling code for "plugin specific" messages on the wire. * overlays/openjdk/jdk/src/share/classes/net/sourceforge/jnlp/NetxPanel.java: Add support for improved initialization failure detection.
author Andrew John Hughes <ahughes@redhat.com>
date Wed, 20 May 2009 21:17:02 +0100
parents 9f7d3e786d0a
children
line wrap: on
line source

/*
 * Copyright 2007 Red Hat, Inc.
 * This file is part of IcedTea, http://icedtea.classpath.org
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Sun designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Sun in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 */

package net.sourceforge.jnlp;

import net.sourceforge.jnlp.runtime.AppletInstance;
import net.sourceforge.jnlp.runtime.JNLPRuntime;

import java.net.URL;
import java.util.Hashtable;

import sun.applet.AppletViewerPanel;

/**
 * This panel calls into netx to run an applet, and pipes the display
 * into a panel from gcjwebplugin.
 *
 * @author      Francis Kung <fkung@redhat.com>
 */
public class NetxPanel extends AppletViewerPanel
{
    private PluginBridge bridge = null;
    private boolean exitOnFailure = true;
    private AppletInstance appInst = null;
    private String cookieStr;
    private boolean appletAlive;

    public NetxPanel(URL documentURL, Hashtable atts)
    {
        super(documentURL, atts);
    }
    
    // overloaded constructor, called when initialized via plugin 
    public NetxPanel(URL documentURL, String cookieStr, Hashtable atts, boolean exitOnFailure)
    {
        this(documentURL, atts);
        this.exitOnFailure = exitOnFailure;
        this.cookieStr = cookieStr;
        this.appletAlive = true;
    }

    //Overriding to use Netx classloader. You might need to relax visibility
    //in sun.applet.AppletPanel for runLoader().
    protected void runLoader() {

    	try {
    		bridge = new PluginBridge(baseURL,
    				cookieStr,
    				getDocumentBase(),
    				getJarFiles(), 
    				getCode(),
    				getWidth(), 
    				getHeight(), 
    				atts);

    		synchronized(JNLPRuntime.initMutex) {
    			//The custom NetX Policy and SecurityManager are set here.
    			if (!JNLPRuntime.isInitialized()) {
    			    if (JNLPRuntime.isDebug())
    			        System.out.println("initializing JNLPRuntime...");

    				JNLPRuntime.initialize(false);
    			} else {
    			    if (JNLPRuntime.isDebug())
    			        System.out.println("JNLPRuntime already initialized");
    			}
    		}

    		doInit = true;
    		dispatchAppletEvent(APPLET_LOADING, null);
    		status = APPLET_LOAD;

    		Launcher l = new Launcher(exitOnFailure);
    		
                try {
                    appInst = (AppletInstance) l.launch(bridge, this);
                } catch (LaunchException e) {
                    // Assume user has indicated he does not trust the
                    // applet.
                	if (exitOnFailure)
                		System.exit(0);
                }
    		applet = appInst.getApplet();
    		
    		//On the other hand, if you create an applet this way, it'll work
    		//fine. Note that you might to open visibility in sun.applet.AppletPanel
    		//for this to work (the loader field, and getClassLoader).
    		//loader = getClassLoader(getCodeBase(), getClassLoaderCacheKey());
    		//applet = createApplet(loader);
    		
    		// This shows that when using NetX's JNLPClassLoader, keyboard input
    		// won't make it to the applet, whereas using sun.applet.AppletClassLoader
    		// works just fine.
    		
    		dispatchAppletEvent(APPLET_LOADING_COMPLETED, null);

    		if (applet != null)
    		{
    			// Stick it in the frame
    			applet.setStub(this);
    			applet.setVisible(false);
    			add("Center", applet);
    			showAppletStatus("loaded");
    			validate();
    		}
    	} catch (Exception e) {
    	    this.appletAlive = false;
    		e.printStackTrace();
    	}
    }

    // Reminder: Relax visibility in sun.applet.AppletPanel
    protected synchronized void createAppletThread() {
    	handler = new Thread(this);
    	handler.start();
    }
    
    public void updateSizeInAtts(int height, int width) {
    	this.atts.put("height", Integer.toString(height));
    	this.atts.put("width", Integer.toString(width));
    }
    
    public ClassLoader getAppletClassLoader() {
        return appInst.getClassLoader();
    }
    
    public boolean isAlive() {
        return handler.isAlive() && this.appletAlive;
    }
}