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