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