home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIPHEFT062001.ISO / browser / nc32lyc / comm.z / java40.jar / netscape / applet / MozillaAppletContext.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-15  |  18.7 KB  |  1,003 lines

  1. package netscape.applet;
  2.  
  3. import java.applet.Applet;
  4. import java.applet.AppletContext;
  5. import java.applet.AudioClip;
  6. import java.awt.Image;
  7. import java.awt.Toolkit;
  8. import java.awt.Window;
  9. import java.io.PrintStream;
  10. import java.net.MalformedURLException;
  11. import java.net.URL;
  12. import java.util.Enumeration;
  13. import java.util.Hashtable;
  14. import java.util.Vector;
  15. import netscape.debug.Debugger;
  16. import netscape.net.URLStreamHandlerFactory;
  17. import netscape.security.AppletSecurity;
  18. import netscape.security.AppletSecurityException;
  19. import netscape.security.ForbiddenTargetException;
  20. import netscape.security.PrivilegeManager;
  21. import sun.awt.image.URLImageSource;
  22.  
  23. class MozillaAppletContext implements AppletContext {
  24.    boolean bIcon;
  25.    int frameMWContext;
  26.    private Mapping appletFrames;
  27.    Hashtable imageCache;
  28.    Hashtable audioClipCache;
  29.    URL documentURL;
  30.    Integer contextID;
  31.    static AppletThreadKiller killer;
  32.    static Console console;
  33.    static boolean javaInitialized;
  34.    static boolean javaOneTimeInitDone;
  35.    static int totalApplets;
  36.    static int trimThreshold;
  37.    static boolean noisyTrimming;
  38.    static Mapping appletContexts;
  39.    static int debug;
  40.    static final int DBG_NONE = 0;
  41.    static final int DBG_APPLET_USER = 1;
  42.    static final int DBG_LOADING_USER = 2;
  43.    static final int DBG_CONTEXT_USER = 3;
  44.    static final int DBG_APPLET_DEV = 4;
  45.    static final int DBG_LOADING_DEV = 5;
  46.    static final int DBG_CONTEXT_DEV = 6;
  47.    static final int DBG_APPLET_NS = 7;
  48.    static final int DBG_LOADING_NS = 8;
  49.    static final int DBG_CONTEXT_NS = 9;
  50.  
  51.    MozillaAppletContext(int var1, Integer var2, String var3) {
  52.       this.frameMWContext = var1;
  53.       this.contextID = var2;
  54.       this.appletFrames = new Mapping();
  55.       this.imageCache = new Hashtable();
  56.       this.audioClipCache = new Hashtable();
  57.       if (debug >= 3) {
  58.          System.out.println("# New applet context: " + var3 + ", contextID=" + var2);
  59.       }
  60.  
  61.       if (var3 != null) {
  62.          try {
  63.             this.documentURL = new URL(var3);
  64.          } catch (MalformedURLException var4) {
  65.             if (debug >= 4) {
  66.                System.err.println("#     Malformed documentURL: " + var3);
  67.             }
  68.  
  69.             this.mochaOnLoad(-1);
  70.          }
  71.       }
  72.  
  73.       Debugger.debuggerStartHook();
  74.    }
  75.  
  76.    static void indent(PrintStream var0, int var1) {
  77.       while(true) {
  78.          --var1;
  79.          if (var1 < 0) {
  80.             return;
  81.          }
  82.  
  83.          var0.print("  ");
  84.       }
  85.    }
  86.  
  87.    void dumpState(PrintStream var1, int var2) {
  88.       indent(var1, var2);
  89.       int var3 = this.appletFrames == null ? 0 : this.appletFrames.size();
  90.       int var4 = this.imageCache == null ? 0 : this.imageCache.size();
  91.       int var5 = this.audioClipCache == null ? 0 : this.audioClipCache.size();
  92.       var1.println("MozillaAppletContext id=" + this.contextID + " #frames=" + var3 + " #images=" + var4 + " #audioClips=" + var5 + " url=" + this.documentURL);
  93.  
  94.       for(int var6 = 0; var6 < var3; ++var6) {
  95.          DerivedAppletFrame var7 = (DerivedAppletFrame)this.appletFrames.elementAt(var6);
  96.          var7.dumpState(var1, var2 + 1);
  97.       }
  98.  
  99.       if (var4 > 0) {
  100.          indent(var1, var2 + 1);
  101.          var1.println("image cache:");
  102.          Enumeration var9 = this.imageCache.keys();
  103.  
  104.          while(var9.hasMoreElements()) {
  105.             URL var8 = (URL)var9.nextElement();
  106.             indent(var1, var2 + 2);
  107.             var1.println(var8.toString());
  108.          }
  109.       }
  110.  
  111.       if (var5 > 0) {
  112.          indent(var1, var2 + 1);
  113.          var1.println("audio clip cache:");
  114.          Enumeration var10 = this.audioClipCache.keys();
  115.  
  116.          while(var10.hasMoreElements()) {
  117.             URL var11 = (URL)var10.nextElement();
  118.             indent(var1, var2 + 2);
  119.             var1.println(var11.toString());
  120.          }
  121.       }
  122.  
  123.    }
  124.  
  125.    void confirmClassLoader(ClassLoader var1) {
  126.       AppletSecurity var2 = (AppletSecurity)System.getSecurityManager();
  127.       if (var2 != null) {
  128.          boolean var3 = true;
  129.  
  130.          try {
  131.             var3 = !SecurityManager.isPrivilegeEnabled("UniversalClassLoaderAccess");
  132.          } catch (ForbiddenTargetException var4) {
  133.             var3 = true;
  134.          }
  135.  
  136.          if (var3) {
  137.             SecurityManager.enablePrivilege("MarimbaAppContextTarget");
  138.             if (var1 != var2.getCurrentClassLoader()) {
  139.                SecurityManager.revertPrivilege();
  140.                throw new AppletSecurityException("Invalid access to ClassLoader");
  141.             }
  142.          }
  143.  
  144.          SecurityManager.revertPrivilege();
  145.       }
  146.    }
  147.  
  148.    public boolean noAppletFrames() {
  149.       return this.appletFrames != null && this.appletFrames.isEmpty();
  150.    }
  151.  
  152.    synchronized boolean destroy() {
  153.       boolean var1 = true;
  154.       if (debug >= 3) {
  155.          System.err.println("# Destroying applet context: " + this.documentURL + ", contextID=" + this.contextID);
  156.       }
  157.  
  158.       if (debug >= 9) {
  159.          System.err.println("#   frameMWContext=" + this.frameMWContext);
  160.       }
  161.  
  162.       this.destroyApplets();
  163.       this.frameMWContext = 0;
  164.       this.appletFrames = null;
  165.       this.imageCache = null;
  166.       this.audioClipCache = null;
  167.       appletContexts.remove(this.contextID);
  168.       return var1;
  169.    }
  170.  
  171.    public AudioClip getAudioClip(URL var1) {
  172.       AudioClip var2 = lookupAudioClip(this, var1);
  173.       return var2;
  174.    }
  175.  
  176.    public Image getImage(URL var1) {
  177.       Image var2 = lookupImage(this, var1);
  178.       return var2;
  179.    }
  180.  
  181.    public Applet getApplet(String var1) {
  182.       int var2 = this.appletFrames.size();
  183.  
  184.       for(int var3 = 0; var3 < var2; ++var3) {
  185.          DerivedAppletFrame var4 = (DerivedAppletFrame)this.appletFrames.elementAt(var3);
  186.          if (var1.equals(var4.applet.getParameter("name"))) {
  187.             this.confirmClassLoader(var4.applet.getClass().getClassLoader());
  188.             return var4.applet;
  189.          }
  190.       }
  191.  
  192.       return null;
  193.    }
  194.  
  195.    public Enumeration getApplets() {
  196.       int var1 = this.appletFrames.size();
  197.       Vector var2 = new Vector(var1);
  198.  
  199.       for(int var3 = 0; var3 < var1; ++var3) {
  200.          DerivedAppletFrame var4 = (DerivedAppletFrame)this.appletFrames.elementAt(var3);
  201.          this.confirmClassLoader(var4.applet.getClass().getClassLoader());
  202.          var2.addElement(var4.applet);
  203.       }
  204.  
  205.       return var2.elements();
  206.    }
  207.  
  208.    public void showDocument(URL var1) {
  209.       this.showDocument(var1, "_top");
  210.    }
  211.  
  212.    public void showDocument(URL var1, String var2) {
  213.       this.pShowDocument(var1.toExternalForm(), (String)null, var2);
  214.    }
  215.  
  216.    public void showStatus(String var1) {
  217.       if (this.frameMWContext != 0) {
  218.          this.pShowStatus(var1);
  219.       }
  220.  
  221.    }
  222.  
  223.    public void mochaOnLoad(int var1) {
  224.       this.pMochaOnLoad(var1);
  225.    }
  226.  
  227.    private native void pShowDocument(String var1, String var2, String var3);
  228.  
  229.    private native void pShowStatus(String var1);
  230.  
  231.    private native void pMochaOnLoad(int var1);
  232.  
  233.    static synchronized AudioClip lookupAudioClip(MozillaAppletContext var0, URL var1) {
  234.       int var2 = appletContexts.size();
  235.  
  236.       for(int var3 = 0; var3 < var2; ++var3) {
  237.          MozillaAppletContext var4 = (MozillaAppletContext)appletContexts.elementAt(var3);
  238.          Object var5 = var4.audioClipCache.get(var1);
  239.          if (var5 != null) {
  240.             return (AudioClip)var5;
  241.          }
  242.       }
  243.  
  244.       AppletAudioClip var6 = new AppletAudioClip(var1);
  245.       var0.audioClipCache.put(var1, var6);
  246.       if (debug >= 2) {
  247.          System.err.println("# Loaded audio clip: " + var1);
  248.       }
  249.  
  250.       return var6;
  251.    }
  252.  
  253.    static synchronized Image lookupImage(MozillaAppletContext var0, URL var1) {
  254.       int var2 = appletContexts.size();
  255.  
  256.       for(int var3 = 0; var3 < var2; ++var3) {
  257.          MozillaAppletContext var4 = (MozillaAppletContext)appletContexts.elementAt(var3);
  258.          Object var5 = var4.imageCache.get(var1);
  259.          if (var5 != null) {
  260.             return (Image)var5;
  261.          }
  262.       }
  263.  
  264.       Image var7;
  265.       try {
  266.          URLImageSource var8 = new URLImageSource(var1);
  267.          var7 = Toolkit.getDefaultToolkit().createImage(var8);
  268.          var0.imageCache.put(var1, var7);
  269.          if (debug >= 2) {
  270.             System.err.println("# Loaded image: " + var1);
  271.          }
  272.       } catch (Exception var6) {
  273.          var7 = null;
  274.       }
  275.  
  276.       return var7;
  277.    }
  278.  
  279.    synchronized void initApplet(int var1, String var2, Hashtable var3, boolean var4) {
  280.       if (debug >= 4) {
  281.          String var5 = (String)var3.get("code");
  282.          System.err.println("# Initializing applet: " + var5 + ", appletID=" + var1 + ", contextID=" + this.contextID);
  283.       }
  284.  
  285.       if (debug >= 7) {
  286.          System.err.println("#   docURL=" + var2 + " reloadClasses=" + var4);
  287.       }
  288.  
  289.       if (this.documentURL != null) {
  290.          String var21 = (String)var3.get("codebase");
  291.          if (var21 == null) {
  292.             int var6 = var2.lastIndexOf(47) + 1;
  293.             var21 = var2.substring(0, var6);
  294.          } else {
  295.             if (!var21.endsWith("/")) {
  296.                var21 = var21 + "/";
  297.             }
  298.  
  299.             try {
  300.                URL var22 = new URL(this.documentURL, var21);
  301.                var21 = var22.toString();
  302.                int var7 = var21.lastIndexOf(47) + 1;
  303.                if (var7 != var21.length() - 1) {
  304.                   var21 = var21.substring(0, var7);
  305.                }
  306.             } catch (MalformedURLException var20) {
  307.             }
  308.  
  309.             if (!var2.startsWith("file:") && var21.startsWith("file:")) {
  310.                throw new AppletSecurityException("Illegal access from non-'file:' document to 'file:' codebase.\n#\tdocument: " + var2 + "\n#\tcodebase: " + var21);
  311.             }
  312.          }
  313.  
  314.          var3.put("codebase", var21);
  315.          URL var23 = this.documentURL;
  316.  
  317.          try {
  318.             var23 = new URL(var21);
  319.          } catch (MalformedURLException var19) {
  320.          }
  321.  
  322.          Object var24 = null;
  323.          String var8 = (String)var3.get("archive");
  324.          String var9 = (String)var3.get("archives");
  325.          if (var9 != null) {
  326.             if (var8 != null) {
  327.                var8 = var8 + "," + var9;
  328.             } else {
  329.                var8 = var9;
  330.             }
  331.          }
  332.  
  333.          URL[] var25;
  334.          if (var8 != null) {
  335.             int var10 = 1;
  336.  
  337.             for(int var11 = -1; (var11 = var8.indexOf(44, var11 + 1)) != -1; ++var10) {
  338.             }
  339.  
  340.             var25 = new URL[var10];
  341.             int var27 = -1;
  342.             String var12 = var8;
  343.             String var13 = null;
  344.  
  345.             for(int var14 = 0; var14 < var10; ++var14) {
  346.                try {
  347.                   int var15 = var8.indexOf(44, var27 + 1);
  348.                   if (var15 != -1) {
  349.                      var12 = var8.substring(var27 + 1, var15).trim();
  350.                      var27 = var15;
  351.                   } else {
  352.                      var12 = var8.substring(var27 + 1).trim();
  353.                   }
  354.  
  355.                   URL var16 = new URL(var23, var12);
  356.                   var12 = var16.toString();
  357.                } catch (MalformedURLException var18) {
  358.                }
  359.  
  360.                if (!var21.startsWith("file:") && var12.startsWith("file:")) {
  361.                   throw new AppletSecurityException("Illegal access from non-'file:' document to 'file:' codebase.\n#\tdocument: " + var2 + "\n#\tcodebase: " + var21);
  362.                }
  363.  
  364.                var13 = var13 + var12;
  365.  
  366.                try {
  367.                   var25[var14] = new URL(var12);
  368.                } catch (MalformedURLException var17) {
  369.                }
  370.             }
  371.  
  372.             var3.put("archive", var13);
  373.          } else {
  374.             var25 = new URL[0];
  375.          }
  376.  
  377.          Integer var26 = new Integer(var1);
  378.          DerivedAppletFrame var28 = new DerivedAppletFrame(this.documentURL, var23, var25, var3, this, var26, var4);
  379.          this.appletFrames.put(var26, var28);
  380.          ++totalApplets;
  381.          if (debug >= 7) {
  382.             System.err.println("#     total applets=" + totalApplets);
  383.          }
  384.  
  385.          if (debug >= 7) {
  386.             String var30 = "";
  387.  
  388.             Object var32;
  389.             for(Enumeration var31 = var3.keys(); var31.hasMoreElements(); var30 = var30 + (String)var32 + "=" + (String)var3.get(var32) + " ") {
  390.                var32 = var31.nextElement();
  391.             }
  392.  
  393.             System.err.println("#     New applet: " + var1 + " at " + var23 + " " + var30);
  394.          }
  395.  
  396.          var28.start();
  397.          ((Window)var28).pack();
  398.          ((Window)var28).show();
  399.          var28.loadApplet();
  400.          var28.initApplet();
  401.       }
  402.    }
  403.  
  404.    DerivedAppletFrame getAppletFrame(Integer var1) {
  405.       DerivedAppletFrame var2 = (DerivedAppletFrame)this.appletFrames.get(var1);
  406.       if (var2 == null && debug >= 7) {
  407.          System.err.println("#   Warning: AppletFrame not found for appletID " + var1);
  408.       }
  409.  
  410.       return var2;
  411.    }
  412.  
  413.    synchronized void startApplet(int var1) {
  414.       DerivedAppletFrame var2 = this.getAppletFrame(new Integer(var1));
  415.       if (debug >= 4) {
  416.          System.err.println("# Starting applet: " + (var2 != null ? var2.getAppletName() : "?") + ", appletID=" + var1 + ", contextID=" + this.contextID);
  417.       }
  418.  
  419.       if (var2 == null) {
  420.          if (debug >= 7) {
  421.             System.err.println("#   applet must have been pruned: " + var1 + " on " + this.documentURL);
  422.          }
  423.  
  424.       } else {
  425.          var2.inHistory = false;
  426.          var2.startApplet();
  427.       }
  428.    }
  429.  
  430.    synchronized void resizeApplet(int var1, int var2, int var3, int var4, int var5) {
  431.    }
  432.  
  433.    synchronized void printApplet(int var1, int var2) {
  434.       DerivedAppletFrame var3 = this.getAppletFrame(new Integer(var1));
  435.       if (var3 != null) {
  436.          if (debug >= 4) {
  437.             System.err.println("# Printing applet: " + var3.getAppletName() + ", appletID=" + var1 + ", contextID=" + this.contextID);
  438.          }
  439.  
  440.          AppletHostToolkit var4 = AppletHostToolkit.getDefaultToolkit();
  441.          if (var4 != null) {
  442.             try {
  443.                var4.printApplet(var3.applet, var3.getAppletName(), var2);
  444.             } catch (Exception var5) {
  445.             }
  446.          }
  447.       }
  448.    }
  449.  
  450.    synchronized void stopApplet(int var1) {
  451.       DerivedAppletFrame var2 = this.getAppletFrame(new Integer(var1));
  452.       if (var2 != null) {
  453.          if (debug >= 4) {
  454.             System.err.println("# Stopping applet: " + var2.getAppletName() + ", appletID=" + var1 + ", contextID=" + this.contextID);
  455.          }
  456.  
  457.          var2.inHistory = true;
  458.          var2.stopApplet();
  459.       }
  460.    }
  461.  
  462.    synchronized void destroyApplet(Integer var1) {
  463.       this.frameMWContext = 0;
  464.       DerivedAppletFrame var2 = this.getAppletFrame(var1);
  465.       boolean var3 = false;
  466.       if (var2 != null) {
  467.          if (noisyTrimming && debug >= 4) {
  468.             System.err.println("# Destroying applet: " + var2.getAppletName() + ", appletID=" + var1 + ", contextID=" + this.contextID);
  469.          }
  470.  
  471.          --totalApplets;
  472.          if (noisyTrimming && debug >= 7) {
  473.             System.err.println("#     total applets=" + totalApplets);
  474.          }
  475.  
  476.          if (!noisyTrimming) {
  477.             var2.noisy = false;
  478.          }
  479.  
  480.          this.appletFrames.remove(var1, true);
  481.          ThreadGroup var4 = var2.getThreadGroup();
  482.          var2.pData = 0;
  483.          AppletThreadList var5 = new AppletThreadList(var4, var2);
  484.          var2.pData = 0;
  485.          killer.addAppletThread(var5);
  486.          if (this.appletFrames.isEmpty()) {
  487.             if (debug >= 9) {
  488.                System.err.println("#   destroying context for contextID " + this.contextID);
  489.             }
  490.  
  491.             var3 = this.destroy();
  492.          }
  493.  
  494.       }
  495.    }
  496.  
  497.    synchronized void iconifyApplets() {
  498.       if (!this.bIcon) {
  499.          this.bIcon = true;
  500.          if (debug >= 6) {
  501.             System.err.println("# Iconifying all applets: " + this.documentURL + ", contextID=" + this.contextID);
  502.          }
  503.  
  504.          int var1 = this.appletFrames.size();
  505.  
  506.          for(int var2 = 0; var2 < var1; ++var2) {
  507.             DerivedAppletFrame var3 = (DerivedAppletFrame)this.appletFrames.elementAt(var2);
  508.             if (debug >= 7) {
  509.                System.err.println("#     iconifyApplets: stopping appletID " + var3.pData);
  510.             }
  511.  
  512.             var3.stopApplet();
  513.          }
  514.  
  515.       }
  516.    }
  517.  
  518.    synchronized void uniconifyApplets() {
  519.       if (this.bIcon) {
  520.          this.bIcon = false;
  521.          if (debug >= 6) {
  522.             System.err.println("# Uniconifying all applets: " + this.documentURL + ", contextID=" + this.contextID);
  523.          }
  524.  
  525.          int var1 = this.appletFrames.size();
  526.  
  527.          for(int var2 = 0; var2 < var1; ++var2) {
  528.             DerivedAppletFrame var3 = (DerivedAppletFrame)this.appletFrames.elementAt(var2);
  529.             if (debug >= 7) {
  530.                System.err.println("#     uniconifyApplets: starting appletID " + var3.pData);
  531.             }
  532.  
  533.             var3.startApplet();
  534.          }
  535.  
  536.       }
  537.    }
  538.  
  539.    synchronized Object reflectApplet(int var1) {
  540.       if (debug >= 7) {
  541.          System.err.println("#   reflectApplet: appletID=" + var1);
  542.       }
  543.  
  544.       DerivedAppletFrame var2 = this.getAppletFrame(new Integer(var1));
  545.       if (var2 == null) {
  546.          return null;
  547.       } else {
  548.          this.confirmClassLoader(var2.applet.getClass().getClassLoader());
  549.          return var2.applet;
  550.       }
  551.    }
  552.  
  553.    synchronized void destroyApplets() {
  554.       if (debug >= 6) {
  555.          System.err.println("# Destroying all applets: " + this.documentURL + ", contextID=" + this.contextID);
  556.       }
  557.  
  558.       this.frameMWContext = 0;
  559.       int var1 = this.appletFrames.size();
  560.  
  561.       for(int var2 = var1 - 1; var2 >= 0; --var2) {
  562.          Integer var3 = (Integer)this.appletFrames.keyAt(var2);
  563.          this.destroyApplet(var3);
  564.       }
  565.  
  566.    }
  567.  
  568.    static void init() {
  569.       if (!javaOneTimeInitDone) {
  570.          SecurityManager.enablePrivilege("UniversalSetFactory");
  571.          URL.setURLStreamHandlerFactory(new URLStreamHandlerFactory());
  572.          AppletSecurity.setPrivilegeManager(new PrivilegeManager());
  573.       }
  574.  
  575.       console = new Console();
  576.  
  577.       try {
  578.          SecurityManager.enablePrivilege("UniversalPropertyWrite");
  579.          System.setProperties(new AppletProperties());
  580.       } catch (SecurityException var0) {
  581.       }
  582.  
  583.       appletContexts = new Mapping();
  584.       killer = new AppletThreadKiller();
  585.       if (!javaOneTimeInitDone) {
  586.          System.setSecurityManager(new AppletSecurity());
  587.          javaOneTimeInitDone = true;
  588.       }
  589.  
  590.       javaInitialized = true;
  591.    }
  592.  
  593.    static boolean shutdown() {
  594.       javaInitialized = false;
  595.       destroyAll();
  596.       Task.destroyAll();
  597.       boolean var0 = killer.shutdown();
  598.       killer = null;
  599.       appletContexts = null;
  600.       return var0;
  601.    }
  602.  
  603.    static void setConsoleState(int var0) {
  604.       setConsoleState0(var0);
  605.    }
  606.  
  607.    static native void setConsoleState0(int var0);
  608.  
  609.    static void showConsole() {
  610.       console.show();
  611.    }
  612.  
  613.    static void hideConsole() {
  614.       console.hide();
  615.    }
  616.  
  617.    static int trimApplets(int var0, boolean var1) {
  618.       int var2 = trimApplets1(var0, true);
  619.       if (var2 < var0 && !var1) {
  620.          var2 += trimApplets1(var0 - var2, false);
  621.       }
  622.  
  623.       return var2;
  624.    }
  625.  
  626.    static int trimApplets1(int var0, boolean var1) {
  627.       int var2;
  628.       for(var2 = 0; var0-- > 0; ++var2) {
  629.          long var3 = -1L;
  630.          DerivedAppletFrame var5 = null;
  631.          MozillaAppletContext var6 = null;
  632.          int var7 = appletContexts.size();
  633.  
  634.          for(int var8 = 0; var8 < var7; ++var8) {
  635.             MozillaAppletContext var9 = (MozillaAppletContext)appletContexts.elementAt(var8);
  636.             int var10 = var9.appletFrames.size();
  637.  
  638.             for(int var11 = 0; var11 < var10; ++var11) {
  639.                DerivedAppletFrame var12 = (DerivedAppletFrame)var9.appletFrames.elementAt(var11);
  640.                if ((!var1 || var12.inHistory) && (var3 == -1L || var12.timestamp < var3)) {
  641.                   var3 = var12.timestamp;
  642.                   var5 = var12;
  643.                   var6 = var9;
  644.                }
  645.             }
  646.          }
  647.  
  648.          if (var5 == null) {
  649.             if (noisyTrimming && debug >= 4) {
  650.                System.err.println("# No stopped applets to prune.");
  651.             }
  652.  
  653.             return var2;
  654.          }
  655.  
  656.          try {
  657.             if (noisyTrimming) {
  658.                Applet var15 = var5.applet;
  659.                String var16 = null;
  660.                if (var15 != null) {
  661.                   var16 = var15.getParameter("name");
  662.                }
  663.  
  664.                if (var16 == null) {
  665.                   var16 = var15.getClass().getName().toString();
  666.                }
  667.  
  668.                System.err.println("# Pruning applet " + var16 + " from " + var6.documentURL + " to save memory.");
  669.                if (debug >= 7) {
  670.                   System.err.println("#   Pruning appletID=" + var5.pData + " contextID=" + var6.contextID + " applet=" + var5.applet);
  671.                }
  672.             }
  673.          } catch (Throwable var14) {
  674.          }
  675.  
  676.          try {
  677.             var6.destroyApplet(var5.appletID);
  678.          } catch (Throwable var13) {
  679.          }
  680.       }
  681.  
  682.       return var2;
  683.    }
  684.  
  685.    static void trimApplets() {
  686.       trimApplets(totalApplets - trimThreshold, true);
  687.    }
  688.  
  689.    static MozillaAppletContext getAppletContext(int var0) {
  690.       Integer var1 = new Integer(var0);
  691.       MozillaAppletContext var2 = (MozillaAppletContext)appletContexts.get(var1);
  692.       if (var2 == null && debug >= 9) {
  693.          System.err.println("# Warning: applet context not found for contextID " + var0);
  694.       }
  695.  
  696.       return var2;
  697.    }
  698.  
  699.    static MozillaAppletContext ensureAppletContext(int var0, int var1, String var2) {
  700.       Integer var3 = new Integer(var1);
  701.       MozillaAppletContext var4 = (MozillaAppletContext)appletContexts.get(var3);
  702.       if (var4 == null) {
  703.          var4 = new MozillaAppletContext(var0, var3, var2);
  704.          appletContexts.put(var3, var4);
  705.       }
  706.  
  707.       return var4;
  708.    }
  709.  
  710.    static void initApplet(int var0, int var1, int var2, int var3, String[] var4, boolean var5) {
  711.       if (javaInitialized) {
  712.          Hashtable var6 = new Hashtable();
  713.  
  714.          for(int var7 = 1; var7 < var4.length; ++var7) {
  715.             String var8 = var4[var7];
  716.             int var9 = var8.indexOf(61);
  717.             if (var9 >= 0) {
  718.                var6.put(var8.substring(0, var9).toLowerCase(), var8.substring(var9 + 1));
  719.             }
  720.          }
  721.  
  722.          String var11 = (String)var6.get("debug");
  723.          if (var11 != null) {
  724.             try {
  725.                debug = Integer.parseInt(var11);
  726.             } catch (Exception var10) {
  727.             }
  728.          }
  729.  
  730.          if (debug >= 7) {
  731.             System.err.println("# initApplet: contextID=" + var2 + " appletID=" + var3 + " parentContext=" + var0 + " frameContext=" + var1);
  732.          }
  733.  
  734.          trimApplets();
  735.          MozillaAppletContext var12 = ensureAppletContext(var1, var2, var4[0]);
  736.          var12.frameMWContext = var1;
  737.          var12.initApplet(var3, var4[0], var6, var5);
  738.       }
  739.    }
  740.  
  741.    static void startApplet(int var0, int var1, int var2) {
  742.       if (javaInitialized) {
  743.          if (debug >= 7) {
  744.             System.err.println("# startApplet: contextID=" + var0 + " appletID=" + var1 + " newFrameMWContext=" + var2);
  745.          }
  746.  
  747.          MozillaAppletContext var3 = getAppletContext(var0);
  748.          if (var3 != null) {
  749.             var3.frameMWContext = var2;
  750.             var3.startApplet(var1);
  751.          }
  752.       }
  753.    }
  754.  
  755.    static void resizeApplet(int var0, int var1, int var2, int var3, int var4, int var5) {
  756.       if (javaInitialized) {
  757.          if (debug >= 7) {
  758.             System.err.println("# resizeApplet: contextID=" + var0 + " appletID=" + var1);
  759.          }
  760.  
  761.          MozillaAppletContext var6 = getAppletContext(var0);
  762.          if (var6 != null) {
  763.             var6.resizeApplet(var1, var2, var3, var4, var5);
  764.          }
  765.       }
  766.    }
  767.  
  768.    static void printApplet(int var0, int var1, int var2) {
  769.       if (javaInitialized) {
  770.          if (debug >= 7) {
  771.             System.err.println("# printApplet: contextID=" + var0 + " appletID=" + var1);
  772.          }
  773.  
  774.          MozillaAppletContext var3 = getAppletContext(var0);
  775.          if (var3 != null) {
  776.             var3.printApplet(var1, var2);
  777.          }
  778.       }
  779.    }
  780.  
  781.    static void stopApplet(int var0, int var1, int var2) {
  782.       if (javaInitialized) {
  783.          if (debug >= 7) {
  784.             System.err.println("# stopApplet: contextID=" + var0 + " appletID=" + var1 + " parentMWContext=" + var2);
  785.          }
  786.  
  787.          MozillaAppletContext var3 = getAppletContext(var0);
  788.          if (var3 != null) {
  789.             var3.frameMWContext = var2;
  790.             var3.stopApplet(var1);
  791.          }
  792.       }
  793.    }
  794.  
  795.    static void destroyApplet(int var0, int var1) {
  796.       if (javaInitialized) {
  797.          if (debug >= 7) {
  798.             System.err.println("# destroyApplet: contextID=" + var0 + " appletID=" + var1);
  799.          }
  800.  
  801.          MozillaAppletContext var2 = getAppletContext(var0);
  802.          if (var2 != null) {
  803.             var2.destroyApplet(new Integer(var1));
  804.          }
  805.       }
  806.    }
  807.  
  808.    static Object reflectApplet(int var0, int var1) {
  809.       if (!javaInitialized) {
  810.          return null;
  811.       } else {
  812.          if (debug >= 7) {
  813.             System.err.println("# reflectApplet: contextID=" + var0 + " appletID=" + var1);
  814.          }
  815.  
  816.          MozillaAppletContext var3 = getAppletContext(var0);
  817.          if (var3 == null) {
  818.             return null;
  819.          } else {
  820.             SecurityManager.enablePrivilege("UniversalClassLoaderAccess");
  821.             Object var2 = var3.reflectApplet(var1);
  822.             SecurityManager.revertPrivilege();
  823.             return var2;
  824.          }
  825.       }
  826.    }
  827.  
  828.    static void iconifyApplets(int var0) {
  829.       if (javaInitialized) {
  830.          if (debug >= 7) {
  831.             System.err.println("# iconifyApplets: contextID=" + var0);
  832.          }
  833.  
  834.          MozillaAppletContext var1 = getAppletContext(var0);
  835.          if (var1 != null) {
  836.             var1.iconifyApplets();
  837.          }
  838.       }
  839.    }
  840.  
  841.    static void uniconifyApplets(int var0) {
  842.       if (javaInitialized) {
  843.          if (debug >= 7) {
  844.             System.err.println("# uniconifyApplets: contextID=" + var0);
  845.          }
  846.  
  847.          MozillaAppletContext var1 = getAppletContext(var0);
  848.          if (var1 != null) {
  849.             var1.uniconifyApplets();
  850.          }
  851.       }
  852.    }
  853.  
  854.    static void destroyApplets(int var0) {
  855.       if (javaInitialized) {
  856.          if (debug >= 7) {
  857.             System.err.println("# destroyApplets: contextID=" + var0);
  858.          }
  859.  
  860.          MozillaAppletContext var1 = getAppletContext(var0);
  861.          if (var1 == null) {
  862.             if (debug >= 7) {
  863.                System.out.println("# Failed to find context " + var0);
  864.             }
  865.  
  866.          } else {
  867.             var1.destroy();
  868.          }
  869.       }
  870.    }
  871.  
  872.    static void destroyAll() {
  873.       if (debug >= 7) {
  874.          System.err.println("# destroyAll");
  875.       }
  876.  
  877.       int var0 = appletContexts.size();
  878.  
  879.       for(int var1 = var0 - 1; var1 >= 0; --var1) {
  880.          MozillaAppletContext var2 = (MozillaAppletContext)appletContexts.elementAt(var1);
  881.          var2.destroy();
  882.       }
  883.  
  884.    }
  885.  
  886.    static void dumpState(PrintStream var0) {
  887.       int var1 = appletContexts.size();
  888.       boolean var2 = false;
  889.  
  890.       for(int var3 = 0; var3 < var1; ++var3) {
  891.          if (!var2) {
  892.             var0.println("# Active applets and applet contexts:");
  893.             var2 = true;
  894.          }
  895.  
  896.          MozillaAppletContext var4 = (MozillaAppletContext)appletContexts.elementAt(var3);
  897.          var4.dumpState(var0, 0);
  898.       }
  899.  
  900.       if (!var2) {
  901.          var0.println("# No active applets or applet contexts.");
  902.       }
  903.  
  904.       if (killer != null) {
  905.          killer.dumpState(var0);
  906.       }
  907.  
  908.    }
  909.  
  910.    Applet[] getContextAppletArray() {
  911.       Mapping var2 = this.appletFrames;
  912.       synchronized(var2){}
  913.  
  914.       Applet[] var1;
  915.       try {
  916.          int var4 = this.appletFrames.size();
  917.          Applet[] var5 = new Applet[var4];
  918.  
  919.          for(int var6 = var4 - 1; var6 >= 0; --var6) {
  920.             DerivedAppletFrame var7 = (DerivedAppletFrame)this.appletFrames.elementAt(var6);
  921.             var5[var6] = var7.applet;
  922.          }
  923.  
  924.          var1 = var5;
  925.       } catch (Throwable var9) {
  926.          throw var9;
  927.       }
  928.  
  929.       return var1;
  930.    }
  931.  
  932.    static Applet[] getAppletArray() {
  933.       int var0 = 0;
  934.       Mapping var2 = appletContexts;
  935.       synchronized(var2){}
  936.  
  937.       Applet[][] var1;
  938.       try {
  939.          int var4 = appletContexts.size();
  940.          var1 = new Applet[var4][];
  941.  
  942.          for(int var5 = var4 - 1; var5 >= 0; --var5) {
  943.             MozillaAppletContext var6 = (MozillaAppletContext)appletContexts.elementAt(var5);
  944.             var1[var5] = var6.getContextAppletArray();
  945.             var0 += var1[var5].length;
  946.          }
  947.       } catch (Throwable var8) {
  948.          throw var8;
  949.       }
  950.  
  951.       Applet[] var9 = new Applet[var0];
  952.       int var3 = 0;
  953.  
  954.       for(int var10 = 0; var10 < var1.length; ++var10) {
  955.          for(int var11 = 0; var11 < var1[var10].length; ++var11) {
  956.             var9[var3++] = var1[var10][var11];
  957.          }
  958.       }
  959.  
  960.       return var9;
  961.    }
  962.  
  963.    static MozillaAppletContext[] getAppletContexts() {
  964.       Mapping var1 = appletContexts;
  965.       synchronized(var1){}
  966.  
  967.       MozillaAppletContext[] var0;
  968.       try {
  969.          int var3 = appletContexts.size();
  970.          var0 = new MozillaAppletContext[var3];
  971.  
  972.          for(int var4 = var3 - 1; var4 >= 0; --var4) {
  973.             var0[var4] = (MozillaAppletContext)appletContexts.elementAt(var4);
  974.          }
  975.       } catch (Throwable var6) {
  976.          throw var6;
  977.       }
  978.  
  979.       return var0;
  980.    }
  981.  
  982.    EmbeddedAppletFrame getAppletFrame(Applet var1) {
  983.       Mapping var3 = this.appletFrames;
  984.       synchronized(var3){}
  985.  
  986.       try {
  987.          int var5 = this.appletFrames.size();
  988.  
  989.          for(int var6 = var5 - 1; var6 >= 0; --var6) {
  990.             DerivedAppletFrame var7 = (DerivedAppletFrame)this.appletFrames.elementAt(var6);
  991.             if (var7.applet == var1) {
  992.                DerivedAppletFrame var2 = var7;
  993.                return var2;
  994.             }
  995.          }
  996.  
  997.          return null;
  998.       } catch (Throwable var9) {
  999.          throw var9;
  1000.       }
  1001.    }
  1002. }
  1003.