home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 January / PCO0198.ISO / browser / net_linx / java40.jar / netscape / applet / MozillaAppletContext.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  14.5 KB  |  896 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 printApplet(int var1, int var2) {
  373.    }
  374.  
  375.    static void printApplet(int var0, int var1, int var2) {
  376.       System.err.println("Applet printing will be supported soon");
  377.    }
  378.  
  379.    synchronized void stopApplet(int var1) {
  380.       DerivedAppletFrame var2 = this.getAppletFrame(new Integer(var1));
  381.       if (var2 != null) {
  382.          if (debug >= 4) {
  383.             System.err.println("# Stopping applet: " + var2.getAppletName() + ", appletID=" + var1 + ", contextID=" + this.contextID);
  384.          }
  385.  
  386.          var2.inHistory = true;
  387.          var2.sendEvent(new AppletEvent(4));
  388.       }
  389.    }
  390.  
  391.    synchronized void destroyApplet(Integer var1) {
  392.       DerivedAppletFrame var2 = this.getAppletFrame(var1);
  393.       boolean var3 = false;
  394.       if (var2 != null) {
  395.          if (noisyTrimming && debug >= 4) {
  396.             System.err.println("# Destroying applet: " + var2.getAppletName() + ", appletID=" + var1 + ", contextID=" + this.contextID);
  397.          }
  398.  
  399.          --totalApplets;
  400.          if (noisyTrimming && debug >= 7) {
  401.             System.err.println("#     total applets=" + totalApplets);
  402.          }
  403.  
  404.          if (!noisyTrimming) {
  405.             var2.noisy = false;
  406.          }
  407.  
  408.          this.appletFrames.remove(var1, true);
  409.          ThreadGroup var4 = var2.handler.getThreadGroup();
  410.          AppletThreadList var5 = new AppletThreadList(var4, var2);
  411.          var2.pData = 0;
  412.          killer.addAppletThread(var5);
  413.          if (this.appletFrames.isEmpty()) {
  414.             if (debug >= 9) {
  415.                System.err.println("#   destroying context for contextID " + this.contextID);
  416.             }
  417.  
  418.             var3 = this.destroy();
  419.          }
  420.  
  421.       }
  422.    }
  423.  
  424.    synchronized void iconifyApplets() {
  425.       if (debug >= 6) {
  426.          System.err.println("# Iconifying all applets: " + this.documentURL + ", contextID=" + this.contextID);
  427.       }
  428.  
  429.       int var1 = this.appletFrames.size();
  430.  
  431.       for(int var2 = 0; var2 < var1; ++var2) {
  432.          DerivedAppletFrame var3 = (DerivedAppletFrame)this.appletFrames.elementAt(var2);
  433.          if (debug >= 7) {
  434.             System.err.println("#     iconifyApplets: stopping appletID " + var3.pData);
  435.          }
  436.  
  437.          var3.sendEvent(new AppletEvent(4));
  438.       }
  439.  
  440.    }
  441.  
  442.    synchronized void uniconifyApplets() {
  443.       if (debug >= 6) {
  444.          System.err.println("# Uniconifying all applets: " + this.documentURL + ", contextID=" + this.contextID);
  445.       }
  446.  
  447.       int var1 = this.appletFrames.size();
  448.  
  449.       for(int var2 = 0; var2 < var1; ++var2) {
  450.          DerivedAppletFrame var3 = (DerivedAppletFrame)this.appletFrames.elementAt(var2);
  451.          if (debug >= 7) {
  452.             System.err.println("#     uniconifyApplets: starting appletID " + var3.pData);
  453.          }
  454.  
  455.          var3.sendEvent(new AppletEvent(3));
  456.       }
  457.  
  458.    }
  459.  
  460.    synchronized Object reflectApplet(int var1) {
  461.       if (debug >= 7) {
  462.          System.err.println("#   reflectApplet: appletID=" + var1);
  463.       }
  464.  
  465.       DerivedAppletFrame var2 = this.getAppletFrame(new Integer(var1));
  466.       return var2 == null ? null : var2.applet;
  467.    }
  468.  
  469.    synchronized void destroyApplets() {
  470.       if (debug >= 6) {
  471.          System.err.println("# Destroying all applets: " + this.documentURL + ", contextID=" + this.contextID);
  472.       }
  473.  
  474.       this.frameMWContext = 0;
  475.       int var1 = this.appletFrames.size();
  476.  
  477.       for(int var2 = var1 - 1; var2 >= 0; --var2) {
  478.          Integer var3 = (Integer)this.appletFrames.keyAt(var2);
  479.          this.destroyApplet(var3);
  480.       }
  481.  
  482.    }
  483.  
  484.    static void init() {
  485.       if (!javaOneTimeInitDone) {
  486.          SecurityManager.enablePrivilege("UniversalSetFactory");
  487.          URL.setURLStreamHandlerFactory(new URLStreamHandlerFactory());
  488.          AppletSecurity.setPrivilegeManager(new PrivilegeManager());
  489.          System.setSecurityManager(new AppletSecurity());
  490.          javaOneTimeInitDone = true;
  491.       }
  492.  
  493.       console = new Console();
  494.  
  495.       try {
  496.          SecurityManager.enablePrivilege("UniversalPropertyWrite");
  497.          System.setProperties(new AppletProperties());
  498.       } catch (SecurityException var0) {
  499.       }
  500.  
  501.       appletContexts = new Mapping();
  502.       killer = new AppletThreadKiller();
  503.       javaInitialized = true;
  504.    }
  505.  
  506.    static boolean shutdown() {
  507.       javaInitialized = false;
  508.       destroyAll();
  509.       Task.destroyAll();
  510.       boolean var0 = killer.shutdown();
  511.       killer = null;
  512.       appletContexts = null;
  513.       return var0;
  514.    }
  515.  
  516.    static void setConsoleState(int var0) {
  517.       setConsoleState0(var0);
  518.    }
  519.  
  520.    static native void setConsoleState0(int var0);
  521.  
  522.    static void showConsole() {
  523.       console.show();
  524.    }
  525.  
  526.    static void hideConsole() {
  527.       console.hide();
  528.    }
  529.  
  530.    static int trimApplets(int var0, boolean var1) {
  531.       int var2 = trimApplets1(var0, true);
  532.       if (var2 < var0 && !var1) {
  533.          var2 += trimApplets1(var0 - var2, false);
  534.       }
  535.  
  536.       return var2;
  537.    }
  538.  
  539.    static int trimApplets1(int var0, boolean var1) {
  540.       int var2;
  541.       for(var2 = 0; var0-- > 0; ++var2) {
  542.          long var3 = -1L;
  543.          DerivedAppletFrame var5 = null;
  544.          MozillaAppletContext var6 = null;
  545.          int var7 = appletContexts.size();
  546.  
  547.          for(int var8 = 0; var8 < var7; ++var8) {
  548.             MozillaAppletContext var9 = (MozillaAppletContext)appletContexts.elementAt(var8);
  549.             int var10 = var9.appletFrames.size();
  550.  
  551.             for(int var11 = 0; var11 < var10; ++var11) {
  552.                DerivedAppletFrame var12 = (DerivedAppletFrame)var9.appletFrames.elementAt(var11);
  553.                if ((!var1 || var12.inHistory) && (var3 == -1L || var12.timestamp < var3)) {
  554.                   var3 = var12.timestamp;
  555.                   var5 = var12;
  556.                   var6 = var9;
  557.                }
  558.             }
  559.          }
  560.  
  561.          if (var5 == null) {
  562.             if (noisyTrimming && debug >= 4) {
  563.                System.err.println("# No stopped applets to prune.");
  564.             }
  565.  
  566.             return var2;
  567.          }
  568.  
  569.          try {
  570.             if (noisyTrimming) {
  571.                Applet var15 = var5.applet;
  572.                String var16 = null;
  573.                if (var15 != null) {
  574.                   var16 = var15.getParameter("name");
  575.                }
  576.  
  577.                if (var16 == null) {
  578.                   var16 = var15.getClass().getName().toString();
  579.                }
  580.  
  581.                System.err.println("# Pruning applet " + var16 + " from " + var6.documentURL + " to save memory.");
  582.                if (debug >= 7) {
  583.                   System.err.println("#   Pruning appletID=" + var5.pData + " contextID=" + var6.contextID + " applet=" + var5.applet);
  584.                }
  585.             }
  586.          } catch (Throwable var14) {
  587.          }
  588.  
  589.          try {
  590.             var6.destroyApplet(var5.appletID);
  591.          } catch (Throwable var13) {
  592.          }
  593.       }
  594.  
  595.       return var2;
  596.    }
  597.  
  598.    static void trimApplets() {
  599.       trimApplets(totalApplets - trimThreshold, true);
  600.    }
  601.  
  602.    static MozillaAppletContext getAppletContext(int var0) {
  603.       Integer var1 = new Integer(var0);
  604.       MozillaAppletContext var2 = (MozillaAppletContext)appletContexts.get(var1);
  605.       if (var2 == null && debug >= 9) {
  606.          System.err.println("# Warning: applet context not found for contextID " + var0);
  607.       }
  608.  
  609.       return var2;
  610.    }
  611.  
  612.    static MozillaAppletContext ensureAppletContext(int var0, int var1, String var2) {
  613.       Integer var3 = new Integer(var1);
  614.       MozillaAppletContext var4 = (MozillaAppletContext)appletContexts.get(var3);
  615.       if (var4 == null) {
  616.          var4 = new MozillaAppletContext(var0, var3, var2);
  617.          appletContexts.put(var3, var4);
  618.       }
  619.  
  620.       return var4;
  621.    }
  622.  
  623.    static void initApplet(int var0, int var1, int var2, int var3, String[] var4, boolean var5) {
  624.       if (javaInitialized) {
  625.          Hashtable var6 = new Hashtable();
  626.  
  627.          for(int var7 = 1; var7 < var4.length; ++var7) {
  628.             String var8 = var4[var7];
  629.             int var9 = var8.indexOf(61);
  630.             if (var9 >= 0) {
  631.                var6.put(var8.substring(0, var9).toLowerCase(), var8.substring(var9 + 1));
  632.             }
  633.          }
  634.  
  635.          String var11 = (String)var6.get("debug");
  636.          if (var11 != null) {
  637.             try {
  638.                debug = Integer.parseInt(var11);
  639.             } catch (Exception var10) {
  640.             }
  641.          }
  642.  
  643.          if (debug >= 7) {
  644.             System.err.println("# initApplet: contextID=" + var2 + " appletID=" + var3 + " parentContext=" + var0 + " frameContext=" + var1);
  645.          }
  646.  
  647.          trimApplets();
  648.          MozillaAppletContext var12 = ensureAppletContext(var1, var2, var4[0]);
  649.          var12.frameMWContext = var1;
  650.          var12.initApplet(var3, var4[0], var6, var5);
  651.       }
  652.    }
  653.  
  654.    static void startApplet(int var0, int var1, int var2) {
  655.       if (javaInitialized) {
  656.          if (debug >= 7) {
  657.             System.err.println("# startApplet: contextID=" + var0 + " appletID=" + var1 + " newFrameMWContext=" + var2);
  658.          }
  659.  
  660.          MozillaAppletContext var3 = getAppletContext(var0);
  661.          if (var3 != null) {
  662.             var3.frameMWContext = var2;
  663.             var3.startApplet(var1);
  664.          }
  665.       }
  666.    }
  667.  
  668.    static void resizeApplet(int var0, int var1, int var2, int var3, int var4, int var5) {
  669.       if (javaInitialized) {
  670.          if (debug >= 7) {
  671.             System.err.println("# resizeApplet: contextID=" + var0 + " appletID=" + var1);
  672.          }
  673.  
  674.          MozillaAppletContext var6 = getAppletContext(var0);
  675.          if (var6 != null) {
  676.             var6.resizeApplet(var1, var2, var3, var4, var5);
  677.          }
  678.       }
  679.    }
  680.  
  681.    static void stopApplet(int var0, int var1, int var2) {
  682.       if (javaInitialized) {
  683.          if (debug >= 7) {
  684.             System.err.println("# stopApplet: contextID=" + var0 + " appletID=" + var1 + " parentMWContext=" + var2);
  685.          }
  686.  
  687.          MozillaAppletContext var3 = getAppletContext(var0);
  688.          if (var3 != null) {
  689.             var3.frameMWContext = var2;
  690.             var3.stopApplet(var1);
  691.          }
  692.       }
  693.    }
  694.  
  695.    static void destroyApplet(int var0, int var1) {
  696.       if (javaInitialized) {
  697.          if (debug >= 7) {
  698.             System.err.println("# destroyApplet: contextID=" + var0 + " appletID=" + var1);
  699.          }
  700.  
  701.          MozillaAppletContext var2 = getAppletContext(var0);
  702.          if (var2 != null) {
  703.             var2.destroyApplet(new Integer(var1));
  704.          }
  705.       }
  706.    }
  707.  
  708.    static Object reflectApplet(int var0, int var1) {
  709.       if (!javaInitialized) {
  710.          return null;
  711.       } else {
  712.          if (debug >= 7) {
  713.             System.err.println("# reflectApplet: contextID=" + var0 + " appletID=" + var1);
  714.          }
  715.  
  716.          MozillaAppletContext var2 = getAppletContext(var0);
  717.          return var2 == null ? null : var2.reflectApplet(var1);
  718.       }
  719.    }
  720.  
  721.    static void iconifyApplets(int var0) {
  722.       if (javaInitialized) {
  723.          if (debug >= 7) {
  724.             System.err.println("# iconifyApplets: contextID=" + var0);
  725.          }
  726.  
  727.          MozillaAppletContext var1 = getAppletContext(var0);
  728.          if (var1 != null) {
  729.             var1.iconifyApplets();
  730.          }
  731.       }
  732.    }
  733.  
  734.    static void uniconifyApplets(int var0) {
  735.       if (javaInitialized) {
  736.          if (debug >= 7) {
  737.             System.err.println("# uniconifyApplets: contextID=" + var0);
  738.          }
  739.  
  740.          MozillaAppletContext var1 = getAppletContext(var0);
  741.          if (var1 != null) {
  742.             var1.uniconifyApplets();
  743.          }
  744.       }
  745.    }
  746.  
  747.    static void destroyApplets(int var0) {
  748.       if (javaInitialized) {
  749.          if (debug >= 7) {
  750.             System.err.println("# destroyApplets: contextID=" + var0);
  751.          }
  752.  
  753.          MozillaAppletContext var1 = getAppletContext(var0);
  754.          if (var1 == null) {
  755.             if (debug >= 7) {
  756.                System.out.println("# Failed to find context " + var0);
  757.             }
  758.  
  759.          } else {
  760.             var1.destroy();
  761.          }
  762.       }
  763.    }
  764.  
  765.    static void destroyAll() {
  766.       if (debug >= 7) {
  767.          System.err.println("# destroyAll");
  768.       }
  769.  
  770.       int var0 = appletContexts.size();
  771.  
  772.       for(int var1 = var0 - 1; var1 >= 0; --var1) {
  773.          MozillaAppletContext var2 = (MozillaAppletContext)appletContexts.elementAt(var1);
  774.          var2.destroy();
  775.       }
  776.  
  777.    }
  778.  
  779.    static void dumpState(PrintStream var0) {
  780.       int var1 = appletContexts.size();
  781.       boolean var2 = false;
  782.  
  783.       for(int var3 = 0; var3 < var1; ++var3) {
  784.          if (!var2) {
  785.             var0.println("# Active applets and applet contexts:");
  786.             var2 = true;
  787.          }
  788.  
  789.          MozillaAppletContext var4 = (MozillaAppletContext)appletContexts.elementAt(var3);
  790.          var4.dumpState(var0, 0);
  791.       }
  792.  
  793.       if (!var2) {
  794.          var0.println("# No active applets or applet contexts.");
  795.       }
  796.  
  797.       if (killer != null) {
  798.          killer.dumpState(var0);
  799.       }
  800.  
  801.    }
  802.  
  803.    Applet[] getContextAppletArray() {
  804.       Mapping var2 = this.appletFrames;
  805.       synchronized(var2){}
  806.  
  807.       Applet[] var1;
  808.       try {
  809.          int var4 = this.appletFrames.size();
  810.          Applet[] var5 = new Applet[var4];
  811.  
  812.          for(int var6 = var4 - 1; var6 >= 0; --var6) {
  813.             DerivedAppletFrame var7 = (DerivedAppletFrame)this.appletFrames.elementAt(var6);
  814.             var5[var6] = var7.applet;
  815.          }
  816.  
  817.          var1 = var5;
  818.       } catch (Throwable var9) {
  819.          throw var9;
  820.       }
  821.  
  822.       return var1;
  823.    }
  824.  
  825.    static Applet[] getAppletArray() {
  826.       int var0 = 0;
  827.       Mapping var2 = appletContexts;
  828.       synchronized(var2){}
  829.  
  830.       Applet[][] var1;
  831.       try {
  832.          int var4 = appletContexts.size();
  833.          var1 = new Applet[var4][];
  834.  
  835.          for(int var5 = var4 - 1; var5 >= 0; --var5) {
  836.             MozillaAppletContext var6 = (MozillaAppletContext)appletContexts.elementAt(var5);
  837.             var1[var5] = var6.getContextAppletArray();
  838.             var0 += var1[var5].length;
  839.          }
  840.       } catch (Throwable var8) {
  841.          throw var8;
  842.       }
  843.  
  844.       Applet[] var9 = new Applet[var0];
  845.       int var3 = 0;
  846.  
  847.       for(int var10 = 0; var10 < var1.length; ++var10) {
  848.          for(int var11 = 0; var11 < var1[var10].length; ++var11) {
  849.             var9[var3++] = var1[var10][var11];
  850.          }
  851.       }
  852.  
  853.       return var9;
  854.    }
  855.  
  856.    static MozillaAppletContext[] getAppletContexts() {
  857.       Mapping var1 = appletContexts;
  858.       synchronized(var1){}
  859.  
  860.       MozillaAppletContext[] var0;
  861.       try {
  862.          int var3 = appletContexts.size();
  863.          var0 = new MozillaAppletContext[var3];
  864.  
  865.          for(int var4 = var3 - 1; var4 >= 0; --var4) {
  866.             var0[var4] = (MozillaAppletContext)appletContexts.elementAt(var4);
  867.          }
  868.       } catch (Throwable var6) {
  869.          throw var6;
  870.       }
  871.  
  872.       return var0;
  873.    }
  874.  
  875.    EmbeddedAppletFrame getAppletFrame(Applet var1) {
  876.       Mapping var3 = this.appletFrames;
  877.       synchronized(var3){}
  878.  
  879.       try {
  880.          int var5 = this.appletFrames.size();
  881.  
  882.          for(int var6 = var5 - 1; var6 >= 0; --var6) {
  883.             DerivedAppletFrame var7 = (DerivedAppletFrame)this.appletFrames.elementAt(var6);
  884.             if (var7.applet == var1) {
  885.                DerivedAppletFrame var2 = var7;
  886.                return var2;
  887.             }
  888.          }
  889.  
  890.          return null;
  891.       } catch (Throwable var9) {
  892.          throw var9;
  893.       }
  894.    }
  895. }
  896.