protected IWebBrowser doCreateBrowser(int style, String browserId, String name, String tooltip)
      throws PartInitException {

    // external browser is not required by called or user
    if (((style & AS_EXTERNAL) == 0)
        && (WebBrowserPreference.getBrowserChoice() == WebBrowserPreference.INTERNAL)) {
      return new InternalWebBrowser(this, browserId);
    }

    IWebBrowser webBrowser = null;

    // AS_EXTERNAL will force the external browser regardless of the user
    // preference
    // The help editor will open in an editor regardless of the user
    // preferences
    boolean isHelpEditor = ((style & AS_EDITOR) != 0) && HELP_BROWSER_ID.equals(browserId);
    if ((style & AS_EXTERNAL) != 0
        || (WebBrowserPreference.getBrowserChoice() != WebBrowserPreference.INTERNAL
            && !isHelpEditor)
        || !WebBrowserUtil.canUseInternalWebBrowser()) {
      IBrowserDescriptor ewb = BrowserManager.getInstance().getCurrentWebBrowser();
      if (ewb == null) throw new PartInitException("Error No Browser detected");

      if (ewb instanceof SystemBrowserDescriptor) webBrowser = new SystemBrowserInstance(browserId);
      else {
        IBrowserExt ext = null;
        if (ewb != null) ext = WebBrowserUIPlugin.findBrowsers(getLocation(ewb));
        if (ext != null)
          webBrowser = ext.createBrowser(browserId, getLocation(ewb), ewb.getParameters());
        if (webBrowser == null) webBrowser = new ExternalBrowserInstance(browserId, ewb);
      }
    } else {
      if ((style & IWorkbenchBrowserSupport.AS_VIEW) != 0)
        webBrowser = new InternalBrowserViewInstance(browserId, style, name, tooltip);
      else webBrowser = new InternalBrowserEditorInstance(browserId, style, name, tooltip);
    }

    return webBrowser;
  }
 @SuppressWarnings("unchecked")
 private static List<IBrowserDescriptor> getBrowsers() {
   return BrowserManager.getInstance().getWebBrowsers();
 }