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