home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2001 February / maximum-cd-2001-02.iso / PowerWare / Opera / Opera5_final_java.exe / OPERA.JAR / opera / PluginClassLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-03  |  3.6 KB  |  136 lines

  1. package opera;
  2.  
  3. import java.net.URL;
  4. import java.net.URLClassLoader;
  5. import java.security.AllPermission;
  6. import java.security.CodeSource;
  7. import java.security.PermissionCollection;
  8. import java.util.PropertyPermission;
  9. import sun.applet.AppletThreadGroup;
  10. import sun.awt.AppContext;
  11.  
  12. public class PluginClassLoader extends URLClassLoader {
  13.    private static RuntimePermission usePolicyPermission = new RuntimePermission("usePolicy");
  14.    private static PropertyPermission browserReadPerm = new PropertyPermission("browser", "read");
  15.    private static PropertyPermission browserVerReadPerm = new PropertyPermission("browser.version", "read");
  16.    private URL codeBase;
  17.    private AppContext appContext = null;
  18.    private ThreadGroup threadGroup = null;
  19.    private int usageCount = 0;
  20.  
  21.    public PluginClassLoader(URL var1) {
  22.       super(new URL[0], ClassLoader.getSystemClassLoader(), new StreamHandlerFactory());
  23.       this.codeBase = var1;
  24.    }
  25.  
  26.    public void addJar(URL var1) {
  27.       ((URLClassLoader)this).addURL(var1);
  28.    }
  29.  
  30.    boolean allPermissionsGranted(CodeSource var1) {
  31.       return CertificateHandler.checkCertificates(var1);
  32.    }
  33.  
  34.    public AppContext getAppContext() {
  35.       return this.appContext;
  36.    }
  37.  
  38.    public PermissionCollection getPermissions(CodeSource var1) {
  39.       PermissionCollection var2 = super.getPermissions(var1);
  40.       var2.add(browserReadPerm);
  41.       var2.add(browserVerReadPerm);
  42.       if (var1.getCertificates() != null && !var2.implies(usePolicyPermission) && this.allPermissionsGranted(var1)) {
  43.          var2.add(new AllPermission());
  44.       }
  45.  
  46.       return var2;
  47.    }
  48.  
  49.    ThreadGroup getThreadGroup() {
  50.       try {
  51.          if (this.threadGroup == null || this.threadGroup.isDestroyed()) {
  52.             this.threadGroup = new AppletThreadGroup(String.valueOf(this.codeBase) + "-threadGroup");
  53.             AppContextCreator var1 = new AppContextCreator(this.threadGroup);
  54.             Object var2 = var1.syncObject;
  55.             synchronized(var2){}
  56.  
  57.             try {
  58.                ((Thread)var1).start();
  59.  
  60.                try {
  61.                   var1.syncObject.wait();
  62.                } catch (InterruptedException var6) {
  63.                }
  64.  
  65.                this.appContext = var1.appContext;
  66.             } catch (Throwable var7) {
  67.                throw var7;
  68.             }
  69.  
  70.             Object var9 = null;
  71.          }
  72.       } catch (Exception var8) {
  73.          ((Throwable)var8).printStackTrace(System.err);
  74.       }
  75.  
  76.       return this.threadGroup;
  77.    }
  78.  
  79.    protected void grab() {
  80.       ++this.usageCount;
  81.       this.getThreadGroup();
  82.    }
  83.  
  84.    protected void release() {
  85.       if (this.usageCount > 1) {
  86.          --this.usageCount;
  87.       } else {
  88.          if (this.appContext != null) {
  89.             try {
  90.                this.appContext.dispose();
  91.             } catch (IllegalThreadStateException var13) {
  92.             }
  93.          }
  94.  
  95.          if (this.appContext != null) {
  96.             AppContextCreator var1 = new AppContextCreator(this.threadGroup);
  97.             Object var2 = var1.syncObject;
  98.             synchronized(var2){}
  99.  
  100.             try {
  101.                var1.appContext = this.appContext;
  102.                ((Thread)var1).start();
  103.  
  104.                try {
  105.                   var1.syncObject.wait();
  106.                } catch (InterruptedException var11) {
  107.                }
  108.             } catch (Throwable var12) {
  109.                throw var12;
  110.             }
  111.  
  112.             Object var14 = null;
  113.          }
  114.  
  115.          if (this.threadGroup != null) {
  116.             int var15 = this.threadGroup.activeCount();
  117.             Thread[] var16 = new Thread[var15];
  118.             int var3 = this.threadGroup.enumerate(var16);
  119.  
  120.             for(int var4 = 0; var4 < var3; ++var4) {
  121.                try {
  122.                   var16[var4].interrupt();
  123.                } catch (Throwable var10) {
  124.                   var10.printStackTrace(System.err);
  125.                }
  126.             }
  127.          }
  128.  
  129.          this.usageCount = 0;
  130.          this.appContext = null;
  131.          this.threadGroup = null;
  132.       }
  133.  
  134.    }
  135. }
  136.