public static void main(String[] args) {
    Assert.setEnabled(true);

    Log.setApplicationName("WindowControlImpl");
    Log.setApplicationVersion("0.0");
    Log.setApplicationVersionDate(
        "$Id: WindowControlImpl.java,v 1.1 2001/07/27 21:01:12 ashuk%eng.sun.com Exp $");

    try {
      org.mozilla.webclient.BrowserControlFactory.setAppData("nonnative", args[0]);
      org.mozilla.webclient.BrowserControl control =
          org.mozilla.webclient.BrowserControlFactory.newBrowserControl();
      Assert.assert_it(control != null);

      WindowControl wc =
          (WindowControl)
              control.queryInterface(org.mozilla.webclient.BrowserControl.WINDOW_CONTROL_NAME);
      Assert.assert_it(wc != null);
    } catch (Exception e) {
      System.out.println("got exception: " + e.getMessage());
    }
  }
/** @author edburns */
abstract class NativeBrowserControlCanvas extends BrowserControlCanvas {

  public static final String LOG =
      "org.mozilla.webclient.impl.wrapper_native.NativeBrowserControlCanvas";

  public static final Logger LOGGER = Log.getLogger(LOG);

  protected int nativeWindow = 0;

  /** Creates a new instance of NativeBrowserControlCanvas */
  public NativeBrowserControlCanvas() {}

  public void addNotify() {
    super.addNotify();

    if (0 == nativeWindow) {
      synchronized (getTreeLock()) {
        // Create the Native window and it's container and
        // get a handle to this widget
        nativeWindow = getWindow();
      }
    } else {
      return;
    }

    try {
      synchronized (getTreeLock()) {
        createNativeBrowser();
        initializeOK = true;
      }
    } catch (IllegalStateException ise) {
      if (LOGGER.isLoggable(Level.SEVERE)) {
        LOGGER.log(Level.SEVERE, "Exception while creating native browser", ise);
      }
      throw ise;
    }
  }

  /** Create the Native window and get it's handle */
  protected abstract int getWindow();

  /** Allow platform specific handling of new window creation. */
  abstract void performPlatformAppropriateNewWindowRealization(NewWindowEvent event);

  private void createNativeBrowser() throws IllegalStateException {
    try {
      Rectangle r = new Rectangle(getBoundsRelativeToWindow());
      Assert.assert_it(null != webShell);

      WindowControl wc =
          (WindowControl) webShell.queryInterface(BrowserControl.WINDOW_CONTROL_NAME);
      // This createWindow call sets in motion the creation of the
      // nativeInitContext and the creation of the Mozilla embedded
      // webBrowser
      wc.createWindow(nativeWindow, r);
    } catch (IllegalStateException ise) {
      if (LOGGER.isLoggable(Level.SEVERE)) {
        LOGGER.log(Level.SEVERE, "Exception while creating native browser", ise);
      }
      throw ise;
    } catch (Exception e) {
      if (LOGGER.isLoggable(Level.SEVERE)) {
        LOGGER.log(Level.SEVERE, "Exception while creating native browser", e);
      }
      throw new IllegalStateException(null != e.getCause() ? e.getCause() : e);
    }
    return;
  }
}