Back to index

lightning-sunbird  0.9+nobinonly
Classes | Defines | Functions | Variables
PtMozilla.cpp File Reference
#include <stdlib.h>
#include "nsCWebBrowser.h"
#include "nsILocalFile.h"
#include "nsISelectionController.h"
#include "nsEmbedAPI.h"
#include "nsWidgetsCID.h"
#include "nsIAppShell.h"
#include "nsIContentViewer.h"
#include "nsIMarkupDocumentViewer.h"
#include <nsProfileDirServiceProvider.h>
#include "nsIDocumentLoaderFactory.h"
#include "nsILoadGroup.h"
#include "nsIHistoryEntry.h"
#include "nsIWebBrowserPrint.h"
#include "nsIPrintOptions.h"
#include "nsIDOMEventReceiver.h"
#include "nsIDOMEventListener.h"
#include "nsIDOMKeyListener.h"
#include "nsIDOMMouseListener.h"
#include "nsIDOMMouseEvent.h"
#include "nsIDOMWindow.h"
#include "nsIObserverService.h"
#include "nsIObserver.h"
#include "nsIDeviceContext.h"
#include "nsIViewManager.h"
#include "nsNetUtil.h"
#include "nsIFocusController.h"
#include <nsIWebBrowserFind.h>
#include "nsReadableUtils.h"
#include "nsIPresShell.h"
#include "nsIDirectoryService.h"
#include "nsAppDirectoryServiceDefs.h"
#include "nsIFile.h"
#include "nsIURIFixup.h"
#include "nsPIDOMWindow.h"
#include "nsIEventQueueService.h"
#include "nsIServiceManager.h"
#include "nsIComponentRegistrar.h"
#include "nsUnknownContentTypeHandler.h"
#include "EmbedPrivate.h"
#include "EmbedWindow.h"
#include "EmbedDownload.h"
#include "HeaderSniffer.h"
#include "PromptService.h"
#include "PtMozilla.h"

Go to the source code of this file.

Classes

class  WindowChangeObserver

Defines

#define NS_TO_PH_RGB(ns)   (ns & 0xff) << 16 | (ns & 0xff00) | ((ns >> 16) & 0xff)
#define PH_TO_NS_RGB(ns)   (ns & 0xff) << 16 | (ns & 0xff00) | ((ns >> 16) & 0xff)
#define NS_PROMPTSERVICE_CID   {0xa2112d6a, 0x0e28, 0x421f, {0xb4, 0x6a, 0x25, 0xc0, 0xb3, 0x8, 0xcb, 0xd0}}

Functions

static NS_DEFINE_CID (kAppShellCID, NS_APPSHELL_CID)
static NS_DEFINE_CID (kPromptServiceCID, NS_PROMPTSERVICE_CID)
static void mozilla_set_pref (PtWidget_t *widget, char *option, char *value)
static void mozilla_get_pref (PtWidget_t *widget, char *option, char *value)
static void fix_translation_string (char *string)
PtWidgetClass_t * PtCreateMozillaClass (void)
void MozSetPreference (PtWidget_t *widget, int type, char *pref, void *data)
static void MozLoadURL (PtMozillaWidget_t *moz, char *url)
static int EvInfo (PtWidget_t *widget, void *data, PtCallbackInfo_t *cbinfo)
void MozSaveTarget (char *url, PtMozillaWidget_t *moz)
static void mozilla_defaults (PtWidget_t *widget)
static void mozilla_destroy (PtWidget_t *widget)
static int child_getting_focus (PtWidget_t *widget, PtWidget_t *child, PhEvent_t *ev)
static int child_losing_focus (PtWidget_t *widget, PtWidget_t *child, PhEvent_t *ev)
static void mozilla_extent (PtWidget_t *widget)
static void mozilla_modify (PtWidget_t *widget, PtArg_t const *argt, PtResourceRec_t const *mod)
static int mozilla_get_info (PtWidget_t *widget, PtArg_t *argt, PtResourceRec_t const *mod)
static int StartupProfile (char *sProfileDir)
static int StartupEmbedding ()

Variables

PtWidgetClassRef_t __PtMozilla = { NULL, PtCreateMozillaClass }
PtWidgetClassRef_t * PtMozilla = &__PtMozilla
char * g_Print_Left_Header_String
char * g_Print_Right_Header_String
char * g_Print_Left_Footer_String
char * g_Print_Right_Footer_String
const char *const kPersistContractID = "@mozilla.org/embedding/browser/nsWebBrowserPersist;1"
int sProfileDirCreated

Define Documentation

#define NS_PROMPTSERVICE_CID   {0xa2112d6a, 0x0e28, 0x421f, {0xb4, 0x6a, 0x25, 0xc0, 0xb3, 0x8, 0xcb, 0xd0}}

Definition at line 147 of file PtMozilla.cpp.

#define NS_TO_PH_RGB (   ns)    (ns & 0xff) << 16 | (ns & 0xff00) | ((ns >> 16) & 0xff)

Definition at line 141 of file PtMozilla.cpp.

#define PH_TO_NS_RGB (   ns)    (ns & 0xff) << 16 | (ns & 0xff00) | ((ns >> 16) & 0xff)

Definition at line 142 of file PtMozilla.cpp.


Function Documentation

static int child_getting_focus ( PtWidget_t *  widget,
PtWidget_t *  child,
PhEvent_t *  ev 
) [static]

Definition at line 278 of file PtMozilla.cpp.

                                                                                       {
  PtMozillaWidget_t *moz = (PtMozillaWidget_t *) widget;
  nsCOMPtr<nsPIDOMWindow> piWin;

  moz->EmbedRef->GetPIDOMWindow( getter_AddRefs( piWin ) );
  if( !piWin ) return Pt_CONTINUE;

  nsIFocusController *focusController = piWin->GetRootFocusController();
  if( focusController )
    focusController->SetActive( PR_TRUE );

  if( moz->toActivate ) {
    moz->toActivate = 0;
    piWin->Activate();
    }

  return Pt_CONTINUE;
  }

Here is the call graph for this function:

Here is the caller graph for this function:

static int child_losing_focus ( PtWidget_t *  widget,
PtWidget_t *  child,
PhEvent_t *  ev 
) [static]

Definition at line 297 of file PtMozilla.cpp.

                                                                                      {
  PtMozillaWidget_t *moz = (PtMozillaWidget_t *) widget;
  nsCOMPtr<nsPIDOMWindow> piWin;

  moz->EmbedRef->GetPIDOMWindow( getter_AddRefs( piWin ) );
  if( !piWin ) return Pt_CONTINUE;

  nsIFocusController *focusController = piWin->GetRootFocusController();
  if( focusController )
    focusController->SetActive( PR_FALSE );

  piWin->Deactivate();
  moz->toActivate = 1;

  return Pt_CONTINUE;
  }

Here is the call graph for this function:

Here is the caller graph for this function:

static int EvInfo ( PtWidget_t *  widget,
void data,
PtCallbackInfo_t *  cbinfo 
) [static]

Definition at line 200 of file PtMozilla.cpp.

{
  if( cbinfo->event && cbinfo->event->type == Ph_EV_INFO && cbinfo->event->subtype == Ph_OFFSCREEN_INVALID ) {
    PtMozillaWidget_t *moz = ( PtMozillaWidget_t * ) widget;
    nsIPref *pref = moz->EmbedRef->GetPrefs();
    PRBool displayInternalChange = PR_FALSE;
    pref->GetBoolPref("browser.display.internaluse.graphics_changed", &displayInternalChange);
    pref->SetBoolPref("browser.display.internaluse.graphics_changed", !displayInternalChange);
    }
  return Pt_CONTINUE;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void fix_translation_string ( char *  string) [static]

Definition at line 1189 of file PtMozilla.cpp.

                                                   {
  /* for instance it has to be windows-1252 not Windows-1252 */
  if( !strncmp( string, "Windows", 7 ) ) *string = 'w';
  }

Here is the caller graph for this function:

static void mozilla_defaults ( PtWidget_t *  widget) [static]

Definition at line 238 of file PtMozilla.cpp.

{
  PtMozillaWidget_t   *moz = (PtMozillaWidget_t *) widget;
  PtBasicWidget_t   *basic = (PtBasicWidget_t *) widget;
  PtContainerWidget_t *cntr = (PtContainerWidget_t*) widget;

  moz->EmbedRef = new EmbedPrivate();
  moz->EmbedRef->Init(widget);
  moz->EmbedRef->Setup();

  moz->disable_new_windows = 0;
  moz->disable_exception_dlg = 0;
  moz->text_zoom = 100;
  moz->actual_text_zoom = 100;
  moz->toActivate = 0;

  // widget related
  basic->flags = Pt_ALL_OUTLINES | Pt_ALL_BEVELS | Pt_FLAT_FILL;
  widget->resize_flags &= ~Pt_RESIZE_XY_BITS; // fixed size.
  widget->anchor_flags = Pt_TOP_ANCHORED_TOP | Pt_LEFT_ANCHORED_LEFT | \
      Pt_BOTTOM_ANCHORED_TOP | Pt_RIGHT_ANCHORED_LEFT | Pt_ANCHORS_INVALID;

  cntr->flags |= Pt_CHILD_GETTING_FOCUS;

  PtAddEventHandler( widget, Ph_EV_INFO, EvInfo, NULL );
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void mozilla_destroy ( PtWidget_t *  widget) [static]

Definition at line 267 of file PtMozilla.cpp.

{
  PtMozillaWidget_t *moz = (PtMozillaWidget_t *) widget;

  if (moz->EmbedRef)
  {
    moz->EmbedRef->Destroy();
    delete moz->EmbedRef;
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void mozilla_extent ( PtWidget_t *  widget) [static]

Definition at line 315 of file PtMozilla.cpp.

{
  PtMozillaWidget_t *moz = (PtMozillaWidget_t *) widget;

  PtSuperClassExtent(PtContainer, widget);

  moz->EmbedRef->Position(widget->area.pos.x, widget->area.pos.y);
  moz->EmbedRef->Size(widget->area.size.w, widget->area.size.h);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static int mozilla_get_info ( PtWidget_t *  widget,
PtArg_t *  argt,
PtResourceRec_t const mod 
) [static]

Definition at line 539 of file PtMozilla.cpp.

{
  PtMozillaWidget_t *moz = (PtMozillaWidget_t *) widget;
  nsIPref *pref = moz->EmbedRef->GetPrefs();

  switch (argt->type)
  {
    case Pt_ARG_MOZ_NAVIGATE_PAGE:
      moz->navigate_flags = 0;
      if (moz->EmbedRef->CanGoBack())
        moz->navigate_flags |= ( 1 << Pt_WEB_DIRECTION_BACK );
      if (moz->EmbedRef->CanGoForward())
        moz->navigate_flags |= ( 1 << Pt_WEB_DIRECTION_FWD );
      *((int **)argt->value) = &moz->navigate_flags;
      break;

    case Pt_ARG_MOZ_OPTION:
      mozilla_get_pref( widget, (char*)argt->len, (char*) argt->value );
      break;

    case Pt_ARG_MOZ_GET_CONTEXT: {
      if( argt->len & Pt_MOZ_CONTEXT_LINK )
        *(char**) argt->value = moz->rightClickUrl_link;
      else if( argt->len & Pt_MOZ_CONTEXT_IMAGE )
        *(char**) argt->value = moz->rightClickUrl_image;
      else *(char**) argt->value = moz->rightClickUrl_link;
      }
      break;

    case Pt_ARG_MOZ_ENCODING: 
      {
      PRUnichar *charset = nsnull;
      static char encoding[256];
      pref->GetLocalizedUnicharPref( "intl.charset.default", &charset );
      strcpy( encoding, NS_ConvertUCS2toUTF8(charset).get() );
      *(char**)argt->value = encoding;
      }
      break;

    case Pt_ARG_MOZ_GET_HISTORY: 
      {
        PtWebClientHistory_t *hist_info = (PtWebClientHistory_t *)argt->len;
        PtWebClientHistoryData_t *HistoryReplyBuf = (PtWebClientHistoryData_t *) argt->value;
        int i, j;
        PRInt32 total;
        moz->EmbedRef->mSessionHistory->GetCount( &total );

        for( i=total-2, j=0; i>=0 && j<hist_info->num; i--, j++) 
        {
          nsIHistoryEntry *entry;
          moz->EmbedRef->mSessionHistory->GetEntryAtIndex( i, PR_FALSE, &entry );
        
          PRUnichar *title;
          nsIURI *url;
          entry->GetTitle( &title );
          entry->GetURI( &url );

          nsString stitle( title );
          HistoryReplyBuf[j].title = strdup( ToNewCString(stitle) );

          nsCAutoString specString;
          url->GetSpec(specString);
          HistoryReplyBuf[j].url = strdup( (char *) specString.get() );
        }
      }
      break;
  }

  return (Pt_CONTINUE);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void mozilla_get_pref ( PtWidget_t *  widget,
char *  option,
char *  value 
) [static]

Definition at line 939 of file PtMozilla.cpp.

                                                                              {
  PtMozillaWidget_t *moz = ( PtMozillaWidget_t * ) widget;
  nsIPref *pref = moz->EmbedRef->GetPrefs();

  /* HTML Options */
  if( !strcmp( option, "A:link color" ) || !strcmp( option, "A:active color" ) ) {
    nsXPIDLCString colorStr;
    if( pref->CopyCharPref( "browser.anchor_color", getter_Copies(colorStr) ) == NS_OK )
      strcpy( value, colorStr );
    }
  else if( !strcmp( option, "A:visited color" ) ) {
    nsXPIDLCString colorStr;
    if( pref->CopyCharPref( "browser.visited_color", getter_Copies(colorStr) ) == NS_OK )
      strcpy( value, colorStr );
    }
  else if( !strcmp( option, "BODY color" ) ) {
    nsXPIDLCString colorStr;
    if( pref->CopyCharPref( "browser.display.foreground_color", getter_Copies(colorStr) ) == NS_OK )
      strcpy( value, colorStr );
    }
  else if( !strcmp( option, "BODY background" ) ) {
    nsXPIDLCString colorStr;
    if( pref->CopyCharPref( "browser.display.background_color", getter_Copies(colorStr) ) == NS_OK )
      strcpy( value, colorStr );
    }
  else if( !strcmp( option, "bIgnoreDocumentAttributes" ) ) {
    PRBool val;
    pref->GetBoolPref( "browser.display.use_document_colors", &val );
    sprintf( value, "%s", val == PR_TRUE ? "FALSE" : "TRUE" );
    }
  else if( !strcmp( option, "disable_new_windows" ) ) {
    sprintf( value, "%s", (moz->disable_new_windows == 1) ? "TRUE" : "FALSE" );
    }
  else if( !strcmp( option, "disable_exception_dlg" ) ) {
    sprintf( value, "%s", (moz->disable_exception_dlg == 1) ? "TRUE" : "FALSE" );
    }
  else if( !strcmp( option, "bUnderlineLinks" ) ) {
    PRBool val;
    pref->GetBoolPref( "browser.underline_anchors", &val );
    sprintf( value, "%s", val == PR_TRUE ? "TRUE" : "FALSE" );
    }
  else if( !strcmp( option, "iUserTextSize" ) ) {
    sprintf( value, "%d", moz->text_zoom );
    }
  else if( !strcmp( option, "BODY font-family" ) || !strcmp( option, "H* font-family" ) ) {
    /* set the current font */
    char *font_default = NULL, *font;
    char preference[256];

    pref->CopyCharPref( "font.default.x-western", &font_default );
    if( !font_default ) font_default = "serif";

    sprintf( preference, "font.name.%s.x-western", font_default );
    if( pref->CopyCharPref( preference, &font ) == NS_OK )
      strcpy( value, font );
    }
  else if( !strcmp( option, "PRE font-family" ) ) {
    /* set the current font */
    char *font;
    if( pref->CopyCharPref( "font.name.monospace.x-western", &font ) == NS_OK )
      strcpy( value, font );
    }

/* HTTP options */
  else if( !strcmp( option, "http_proxy_host" ) ) {
    char *s;
    if( pref->CopyCharPref( "network.proxy.http", &s ) == NS_OK )
      strcpy( value, s );
    }
  else if( !strcmp( option, "http_proxy_port" ) ) {
    int n;
    pref->GetIntPref( "network.proxy.http_port", &n );
    sprintf( value, "%d", n );
    }
  else if( !strcmp( option, "proxy_overrides" ) ) {
    char *s;
    if( pref->CopyCharPref( "network.proxy.no_proxies_on", &s ) == NS_OK )
      strcpy( value, s );
    }
  else if( !strcmp( option, "https_proxy_host" ) ) {
    char *s;
    if( pref->CopyCharPref( "network.proxy.ssl", &s ) == NS_OK )
      strcpy( value, s );
    }
  else if( !strcmp( option, "https_proxy_port" ) ) {
    int n;
    pref->GetIntPref( "network.proxy.ssl_port", &n );
    sprintf( value, "%d", n );
    }


/* FTP options */
  else if( !strcmp( option, "ftp_proxy_host" ) ) {
    char *s;
    if( pref->CopyCharPref( "network.proxy.ftp", &s ) == NS_OK )
      strcpy( value, s );
    }
  else if( !strcmp( option, "ftp_proxy_port" ) ) {
    int n;
    pref->GetIntPref( "network.proxy.ftp_port", &n );
    sprintf( value, "%d", n );
    }

/* Gopher options */
  else if( !strcmp( option, "gopher_proxy_host" ) ) {
    char *s;
    if( pref->CopyCharPref( "network.proxy.gopher", &s ) == NS_OK )
      strcpy( value, s );
    }
  else if( !strcmp( option, "gopher_proxy_port" ) ) {
    int n;
    pref->GetIntPref( "gopher_proxy_port", &n );
    sprintf( value, "%d", n );
    }

/* TCP/IP options */
  else if( !strcmp( option, "max_connections" ) ) {
    int n;
    pref->GetIntPref( "network.http.max-connections", &n );
    sprintf( value, "%d", n );
    }

/* Disk-cache options */
  else if( !strcmp( option, "main_cache_kb_size" ) ) {
    int n;
    pref->GetIntPref( "browser.cache.disk.capacity", &n );
    sprintf( value, "%d", n );
    }
  else if( !strcmp( option, "enable_disk_cache" ) ) {
    PRBool val;
    pref->GetBoolPref( "browser.cache.disk.enable", &val );
    sprintf( value, "%s", val == PR_TRUE ? "TRUE" : "FALSE" );
    }
  else if( !strcmp( option, "dcache_verify_policy" ) ) {
    int n, voyager_value = 0;
    pref->GetIntPref( "browser.cache.check_doc_frequency", &n );
// 0 = once-per-session, 1 = each-time, 2 = never, 3 = when-appropriate/automatically
    if( n == 0 ) voyager_value = 1; /* voyager: 1 = once per session */
    else if( n == 1 ) voyager_value = 2; /* voyager: 2 = always */
    else if( n == 2 ) voyager_value = 0; /* voyager: 0 = never */
    else voyager_value = 1; /* mapp the when-appropriate/automatically to the once per session */
    sprintf( value, "%d", voyager_value );
    }

/* Miscellaneous options */
  else if( !strcmp( option, "History_Expire" ) ) {
    int n;
    pref->GetIntPref( "browser.history_expire_days", &n );
    sprintf( value, "%d", n );
    }
  else if( !strcmp( option, "Page_History_Length" ) ) {
    int n;
    pref->GetIntPref( "browser.sessionhistory.max_entries", &n );
    sprintf( value, "%d", n );
    }

  else if( !strcmp( option, "clear_main_cache_on_exit" ) ) {
    strcpy( value, "FALSE" ); /* even if not used, match this with the default value */
    }
  else if( !strcmp( option, "quantize_jpegs" ) ) {
    strcpy( value, "FALSE" ); /* even if not used, match this with the default value */
    }
  else if( !strcmp( option, "ServerId" ) ) {
    strcpy( value, "mozserver" );
    }
  else *value = 0;

  }

Here is the call graph for this function:

Here is the caller graph for this function:

static void mozilla_modify ( PtWidget_t *  widget,
PtArg_t const argt,
PtResourceRec_t const mod 
) [static]

Definition at line 327 of file PtMozilla.cpp.

{
  PtMozillaWidget_t *moz = (PtMozillaWidget_t *)widget;
  nsIPref *pref = moz->EmbedRef->GetPrefs();

  switch( argt->type )  
  {
    case Pt_ARG_MOZ_GET_URL:
      MozLoadURL(moz, (char *)(argt->value));
      break;

    case Pt_ARG_MOZ_NAVIGATE_PAGE:
      if (moz->EmbedRef)
      {
        if (argt->value == Pt_WEB_DIRECTION_FWD)
          moz->EmbedRef->Forward();
        else if (argt->value == Pt_WEB_DIRECTION_BACK)
          moz->EmbedRef->Back();
        else 
        {
          int incr;

          incr = argt->len ? argt->len : 1;

          if (argt->value == Pt_WEB_DIRECTION_UP)
            moz->EmbedRef->ScrollUp(incr);
          else if (argt->value == Pt_WEB_DIRECTION_DOWN)
            moz->EmbedRef->ScrollDown(incr);
          else if (argt->value == Pt_WEB_DIRECTION_LEFT)
            moz->EmbedRef->ScrollLeft(incr);
          else if (argt->value == Pt_WEB_DIRECTION_RIGHT)
            moz->EmbedRef->ScrollRight(incr);
        }
      }
      break;

    case Pt_ARG_MOZ_SCROLL_TO:
      if (moz->EmbedRef)
        moz->EmbedRef->ScrollTo(argt->value, argt->len);
      break;

    case Pt_ARG_MOZ_STOP:
      if (moz->EmbedRef)
        moz->EmbedRef->Stop();
      break;

    case Pt_ARG_MOZ_RELOAD:
      if (moz->EmbedRef)
        moz->EmbedRef->Reload(0);
      break;

    case Pt_ARG_MOZ_PRINT: 
      {
      PpPrintContext_t *pc = ( PpPrintContext_t * ) argt->value;
      moz->EmbedRef->Print(pc);
      }
      break;

    case Pt_ARG_MOZ_OPTION:
      mozilla_set_pref(widget, (char*)argt->len, (char*)argt->value);
      break;

    case Pt_ARG_MOZ_ENCODING: {
      char translation[1024];
      strcpy( translation, (char*)argt->value );
      fix_translation_string( translation );
      pref->SetUnicharPref( "intl.charset.default", NS_ConvertASCIItoUCS2( translation ).get());
      pref->SavePrefFile( nsnull );
      }
      break;

    case Pt_ARG_MOZ_COMMAND: {
      PtWebClient2Command_t *wdata = ( PtWebClient2Command_t * ) argt->len;
      switch ((int)(argt->value)) 
      {
        case Pt_MOZ_COMMAND_CUT: {
          moz->EmbedRef->Cut(wdata?wdata->ClipboardInfo.input_group:1);
          }
          break;
        case Pt_MOZ_COMMAND_COPY: {
          moz->EmbedRef->Copy(wdata?wdata->ClipboardInfo.input_group:1);
          }
          break;
        case Pt_MOZ_COMMAND_PASTE: {
          moz->EmbedRef->Paste(wdata?wdata->ClipboardInfo.input_group:1);
          }
          break;
        case Pt_MOZ_COMMAND_SELECTALL: {
          moz->EmbedRef->SelectAll();
          }
          break;
        case Pt_MOZ_COMMAND_CLEAR: {
          moz->EmbedRef->Clear();
          }
          break;

        case Pt_MOZ_COMMAND_FIND: {
          nsCOMPtr<nsIWebBrowserFind> finder( do_GetInterface( moz->EmbedRef->mWindow->mWebBrowser ) );
          finder->SetSearchString( NS_ConvertASCIItoUCS2(wdata->FindInfo.string).get() );
          finder->SetMatchCase( wdata->FindInfo.flags & Pt_WEB_FIND_MATCH_CASE );
          finder->SetFindBackwards( wdata->FindInfo.flags & Pt_WEB_FIND_GO_BACKWARDS );
          finder->SetWrapFind( wdata->FindInfo.flags & Pt_WEB_FIND_START_AT_TOP );
          finder->SetEntireWord( wdata->FindInfo.flags & Pt_WEB_FIND_MATCH_WHOLE_WORDS );

          PRBool didFind;
          finder->FindNext( &didFind );
          break;
          }

        case Pt_MOZ_COMMAND_SAVEAS: {
          char *dirname = ( char * ) calloc( 1, strlen( wdata->SaveasInfo.filename + 7 ) );
          if( dirname ) {
            sprintf( dirname, "%s_files", wdata->SaveasInfo.filename );
            moz->EmbedRef->SaveAs( wdata->SaveasInfo.filename, dirname );
            free( dirname );
            }
          break;
          }
        }
      }
      break;

    case Pt_ARG_MOZ_WEB_DATA_URL:
#if 0
//        moz->MyBrowser->WebBrowserContainer->OpenStream( moz->MyBrowser->WebBrowser, "file://", "text/html" );
//        strcpy( moz->url, (char*)argt->value );
#endif
        break;

    case Pt_ARG_MOZ_UNKNOWN_RESP: {
      PtWebClient2UnknownData_t *unknown = ( PtWebClient2UnknownData_t * ) argt->value;
      if( unknown->response == Pt_WEB_RESPONSE_CANCEL ) {
        EmbedDownload *d = FindDownload( moz, unknown->download_ticket );
        if( d ) {
          if( d->mLauncher ) d->mLauncher->Cancel(NS_BINDING_ABORTED); /* this will also call the EmbedDownload destructor */
          else if( d->mPersist ) d->mPersist->CancelSave(); /* this will also call the EmbedDownload destructor */
          else delete d; /* just in case neither d->mLauncher or d->mPersist was set */
          }
        }
      }
      break;

    case Pt_ARG_MOZ_DOWNLOAD: 
      {
        MozSaveTarget( (char*)argt->value, moz );
      }
      break;

    case Pt_ARG_MOZ_WEB_DATA: {
#if 0
        WWWRequest *req = ( WWWRequest * ) argt->value;
        char *hdata;
        int len;

        if( strcmp( moz->url, req->DataHdr.url ) ) break;

        hdata = (char*) argt->len;
        len = req->DataHdr.length;

        switch( req->DataHdr.type ) {
          case Pt_WEB_DATA_HEADER:
            if( !moz->MyBrowser->WebBrowserContainer->IsStreaming( ) ) break;

            /* request the document body */
            if( moz->web_data_req_cb ) {
              PtCallbackInfo_t  cbinfo;
              PtMozillaDataRequestCb_t cb;

              memset( &cbinfo, 0, sizeof( cbinfo ) );
              cbinfo.reason = Pt_CB_MOZ_WEB_DATA_REQ;
              cbinfo.cbdata = &cb;
              cb.type = Pt_WEB_DATA_BODY;
              cb.length = 32768;
              cb.url = moz->url;
              PtInvokeCallbackList( moz->web_data_req_cb, (PtWidget_t *)moz, &cbinfo);
              }
            break;
          case Pt_WEB_DATA_BODY: {
            if( !moz->MyBrowser->WebBrowserContainer->IsStreaming( ) ) break;
            if( len )
              moz->MyBrowser->WebBrowserContainer->AppendToStream( hdata, len );
            else moz->MyBrowser->WebBrowserContainer->CloseStream( );

            /* request the next piece of the body */
            PtCallbackInfo_t  cbinfo;
            PtMozillaDataRequestCb_t cb;

            memset( &cbinfo, 0, sizeof( cbinfo ) );
            cbinfo.reason = Pt_CB_MOZ_WEB_DATA_REQ;
            cbinfo.cbdata = &cb;
            cb.type = len ? Pt_WEB_DATA_BODY : Pt_WEB_DATA_CLOSE;
            cb.length = 32768;
            cb.url = moz->url;
            PtInvokeCallbackList( moz->web_data_req_cb, (PtWidget_t *)moz, &cbinfo);
            }
            break;
          case Pt_WEB_DATA_CLOSE:
            if( !moz->MyBrowser->WebBrowserContainer->IsStreaming( ) ) break;
            moz->MyBrowser->WebBrowserContainer->CloseStream( );
            break;
          }
#endif
        }
      break;
    }

  return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void mozilla_set_pref ( PtWidget_t *  widget,
char *  option,
char *  value 
) [static]

Definition at line 612 of file PtMozilla.cpp.

{
  PtMozillaWidget_t *moz = ( PtMozillaWidget_t * ) widget;
  nsIPref *pref = moz->EmbedRef->GetPrefs();
  char buffer[1024];

  mozilla_get_pref( widget, option, buffer );
  if( buffer[0] && !strcmp( value, buffer ) )
    return; /* the option is already set */

/* HTML Options */
  if( !strcmp( option, "A:visited color" ) ) {
    pref->SetUnicharPref( "browser.visited_color", NS_ConvertASCIItoUCS2(value).get() );
    }
  else if( !strcmp( option, "A:link color" ) ) {
    pref->SetUnicharPref( "browser.anchor_color", NS_ConvertASCIItoUCS2(value).get() );
    }

/* the mozserver already has A:link color == browser.anchor_color for this */
//  else if( !strcmp( option, "A:active color" ) ) {
//    pref->SetUnicharPref( "browser.anchor_color", NS_ConvertASCIItoUCS2(value).get() );
//    }

  else if( !strcmp( option, "BODY color" ) ) {
    pref->SetUnicharPref( "browser.display.foreground_color", NS_ConvertASCIItoUCS2(value).get() );
    }
  else if( !strcmp( option, "BODY background" ) ) {
    pref->SetUnicharPref( "browser.display.background_color", NS_ConvertASCIItoUCS2(value).get() );
    }
  else if( !strcmp( option, "bIgnoreDocumentAttributes" ) )
    pref->SetBoolPref( "browser.display.use_document_colors", stricmp( value, "TRUE" ) ? PR_FALSE : PR_TRUE );
  else if( !strcmp( option, "bUnderlineLinks" ) ) {
    pref->SetBoolPref( "browser.underline_anchors", !stricmp( value, "TRUE" ) ? PR_TRUE : PR_FALSE );
    }
  else if( !strcmp( option, "iUserTextSize" ) ) {
       int zoom = atoi( value );
    nsCOMPtr<nsIDOMWindow> domWindow;
    moz->EmbedRef->mWindow->mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
    if(domWindow) {
      domWindow->SetTextZoom( zoom/100. );
      moz->text_zoom = zoom;
      float vv;
      domWindow->GetTextZoom( &vv );
      moz->actual_text_zoom = (int) ( vv * 100 );
      }
    }
  else if( !strcmp( option, "iZoomPercent" ) ) {
       int zoom = atoi( value );
       //nsCOMPtr<nsIBaseWindow> baseWindow = do_QueryInterface(moz->EmbedRef->mWindow->mWebBrowser);
    nsCOMPtr<nsIDocShell> docShell = do_GetInterface( moz->EmbedRef->mWindow->mWebBrowser );
       if (docShell) {
         nsCOMPtr<nsIPresShell> shell;
         docShell->GetPresShell(getter_AddRefs(shell));
         if (shell) {
           nsIViewManager* vm = shell->GetViewManager();
           if (vm) {
          nsIDeviceContext *dev;
             vm->GetDeviceContext(dev);
          if(dev) {
            nsCOMPtr<nsIDOMWindow> domWindow;
            moz->EmbedRef->mWindow->mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
            if(domWindow) {
                       int prev_zoom = moz->text_zoom;
                       int x,y;
                       //
                       // The iZoomPercent option is meant for kwww, which is set to
                       // always zoom images along with text. See nsDocumentViewer.cpp's
                       // DocumentViewerImpl::SetTextZoom() which also calls
                       // SetCanonicalPixelScale() for the device context in the kwww
                       // case. The extra SetCanonicalPixelScale() done here is only done
                       // so the images grow/shrink right away when the text sizing
                       // initiates a reflow.
                       // BUG: The immediate draw is not perfect
                       // and a reload is needed anyways on certain web pages, or after
                       // multiple zoomings.
                       //
                       domWindow->GetScrollX( &x );
                       domWindow->GetScrollY( &y );

                       //struct _Pf_ctrl *pfc = PfDefaultContext();
                       //int rc = PfSetRenderingDPICx( pfc, 192, 192 );
                       //printf("Got _Pf_ctrl* 0x%x, rc %d\n", pfc, rc);

              //dev->SetCanonicalPixelScale( zoom/100. );
              domWindow->SetTextZoom( zoom/100.0 );
              moz->text_zoom = zoom;

              float vv;
              domWindow->GetTextZoom( &vv );
              moz->actual_text_zoom = (int) ( vv * 100 );
                       //printf("*** Scroll pos %d,%d, actual zoom: %d, scrolling to %f,%f\n", x,y, moz->actual_text_zoom, (double)zoom*x/prev_zoom, (double)zoom*y/prev_zoom);
                    domWindow->ScrollTo(zoom*x/prev_zoom, zoom*y/prev_zoom);
                       }
            }
             }
           }
         }
    }
  else if( !strcmp( option, "iReflow" ) ) {
       int zoom = atoi( value );
       //nsCOMPtr<nsIBaseWindow> baseWindow = do_QueryInterface(moz->EmbedRef->mWindow->mWebBrowser);
    nsCOMPtr<nsIDocShell> docShell = do_GetInterface( moz->EmbedRef->mWindow->mWebBrowser );
       if (docShell) {
         nsCOMPtr<nsIPresShell> shell;
         docShell->GetPresShell(getter_AddRefs(shell));
         if (shell) {
           nsIViewManager* vm = shell->GetViewManager();
           if (vm) {
          nsIDeviceContext *dev;
             vm->GetDeviceContext(dev);
          if(dev) {
            nsCOMPtr<nsIDOMWindow> domWindow;
            moz->EmbedRef->mWindow->mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
            if(domWindow) {
                       int prev_zoom = moz->text_zoom;
                       int x,y;

                       domWindow->GetScrollX( &x );
                       domWindow->GetScrollY( &y );

                       dev->FlushFontCache();
                       printf("** Called dev->FlushFontCache()\n");
                       }
            }
             }
           }
         }
    }
  else if( !strcmp( option, "BODY font-family" ) ) {
    /* set the current font */
    char *font_default = NULL;
    char preference[256];

    pref->CopyCharPref( "font.default.x-western", &font_default );
    if( !font_default ) font_default = "serif";

    sprintf( preference, "font.name.%s.x-western", font_default );
    pref->SetCharPref( preference, value );
    }
  else if( !strcmp( option, "PRE font-family" ) ) {
    pref->SetCharPref( "font.name.monospace.x-western", value );
    }
  else if( !strcmp( option, "H* font-family" ) ) {
    /* do not set these - use the BODY font-family instead */
    }

/* SOCKS options */
  else if( !strcmp( option, "socks_server" ) )  ; /* not used */
  else if( !strcmp( option, "socks_port" ) )    ; /* not used */
  else if( !strcmp( option, "socks_user" ) )    ; /* not used */
  else if( !strcmp( option, "socks_app" ) )     ; /* not used */

/* HTTP options */

  else if( !strcmp( option, "enable_proxy" ) ) {
    if( value && !stricmp( value, "yes" ) )
      pref->SetIntPref( "network.proxy.type", 1 );
      else pref->SetIntPref( "network.proxy.type", 0 );
    }
  else if( !strcmp( option, "http_proxy_host" ) ) {
    pref->SetCharPref( "network.proxy.http", value );
    }
  else if( !strcmp( option, "http_proxy_port" ) ) {
    pref->SetIntPref( "network.proxy.http_port", atoi(value) );
    }
  else if( !strcmp( option, "proxy_overrides" ) ) {
    pref->SetCharPref( "network.proxy.no_proxies_on", value );
    }
  else if( !strcmp( option, "https_proxy_host" ) ) {
    pref->SetCharPref( "network.proxy.ssl", value );
    }
  else if( !strcmp( option, "https_proxy_port" ) ) {
    pref->SetIntPref( "network.proxy.ssl_port", atoi(value) );
    }


/* FTP options */
  else if( !strcmp( option, "ftp_proxy_host" ) )
    pref->SetCharPref( "network.proxy.ftp", value );
  else if( !strcmp( option, "ftp_proxy_port" ) )
    pref->SetIntPref( "network.proxy.ftp_port", atoi(value) );
  else if( !strcmp( option, "email_address" ) )   ; /* not used */

/* Gopher options */
  else if( !strcmp( option, "gopher_proxy_host" ) )
    pref->SetCharPref( "network.proxy.gopher", value );
  else if( !strcmp( option, "gopher_proxy_port" ) )
    pref->SetIntPref( "network.proxy.gopher_port", atoi(value) );

/* TCP/IP options */
  else if( !strcmp( option, "max_connections" ) )
    pref->SetIntPref( "network.http.max-connections", atoi( value ) );

/* Disk-cache options */
  else if( !strcmp( option, "main_cache_kb_size" ) )
    pref->SetIntPref( "browser.cache.disk.capacity", atoi( value ) );
  else if( !strcmp( option, "enable_disk_cache" ) )
    pref->SetBoolPref( "browser.cache.disk.enable", !stricmp( value, "TRUE" ) ? PR_TRUE : PR_FALSE );
  else if( !strcmp( option, "dcache_verify_policy" ) ) {
    int n = atoi( value ), moz_value=3;
    if( n == 0 ) moz_value = 2; /* never */
    else if( n == 1 ) moz_value = 0; /* once */
    else if( n == 2 ) moz_value = 1; /* always */

// mozilla wants: 0 = once-per-session, 1 = each-time, 2 = never, 3 = when-appropriate/automatically
    pref->SetIntPref( "browser.cache.check_doc_frequency", moz_value );
    }
  else if( !strcmp( option, "main_cache_dir" ) )    ; /* not used */
  else if( !strcmp( option, "main_index_file" ) )     ; /* not used */
  else if( !strcmp( option, "clear_main_cache_on_exit" ) )    ; /* not used */
  else if( !strcmp( option, "keep_index_file_updated" ) )     ; /* not used */

/* memory cache options */
  else if( !strcmp( option, "memory_cache_kb_size" ) || !strcmp( option, "image_cache_size_KB" ) ) {
    int kb = atoi( value );
    if( kb <= 0 ) kb = 100; /* have a minimum threshold */
    pref->SetIntPref( "browser.cache.memory.capacity", kb );
    }

/* Miscellaneous options */
  else if( !strcmp( option, "History_Expire" ) )
    pref->SetIntPref( "browser.history_expire_days", atoi( value ) );
  else if( !strcmp( option, "Page_History_Length" ) )
    pref->SetIntPref( "browser.sessionhistory.max_entries", atoi( value ) );



/* HTML Options */
  else if( !strcmp( option, "bAutoLoadImages" ) )     ; /* not used */
  else if( !strcmp( option, "iReformatHandling" ) )   ; /* not used */
  else if( !strcmp( option, "BODY margin-top" ) )   ; /* not used */
  else if( !strcmp( option, "BODY margin-right" ) )   ; /* not used */
  else if( !strcmp( option, "iScrollbarSize" ) )    ; /* not used */
  else if( !strcmp( option, "top_focus_color" ) )   ; /* not used */
  else if( !strcmp( option, "bot_focus_color" ) )   ; /* not used */
  else if( !strcmp( option, "top_border_color" ) )    ; /* not used */
  else if( !strcmp( option, "bot_border_color" ) )    ; /* not used */
  else if( !strcmp( option, "bview_source" ) )    ; /* not used */
  else if( !strcmp( option, "underline_width" ) )   ; /* not used */
  else if( !strcmp( option, "bkey_mode" ) )   ; /* not used */
  else if( !strcmp( option, "mono_form_font" ) )    ; /* not used */
  else if( !strcmp( option, "form_font" ) )   ; /* not used */
  else if( !strcmp( option, "frame_spacing" ) )   ; /* not used */
  else if( !strcmp( option, "disable_new_windows" ) ) /* disable new windows*/
  {
    if (strcmp(value, "TRUE") == 0)
      moz->disable_new_windows = 1;
    else
      moz->disable_new_windows = 0;
  }
  else if( !strcmp( option, "disable_exception_dlg" ) ) /* disable exception dialogs */ 
  {
    if (strcmp(value, "TRUE") == 0)
      moz->disable_exception_dlg = 1;
    else
      moz->disable_exception_dlg = 0;
  }

  else if( !strcmp( option, "bDisableHighlight" ) )   ; /* not used */

/* HTTP cookie options */
  else if( !strcmp( option, "cookiejar_path" ) )    ; /* not used */
  else if( !strcmp( option, "cookiejar_name" ) )    ; /* not used */
  else if( !strcmp( option, "cookiejar_size" ) )    ; /* not used */
  else if( !strcmp( option, "cookiejar_save_always" ) )   ; /* not used */

/* Authentication options */
  else if( !strcmp( option, "max_password_guesses" ) )    ; /* not used */

/* File options */
  else if( !strcmp( option, "file_display_dir" ) )    ; /* not used */

/* Image options */
  else if( !strcmp( option, "bProgressiveImageDisplay" ) )    ; /* not used */
  else if( !strcmp( option, "quantize_jpegs" ) )    ; /* not used */
  else if( !strcmp( option, "concurrent_decodes" ) )    ; /* not used */


/* Print options */
  else if( !strcmp( option, "Print_Header_Font" ) )     ; /* not used */
  else if( !strcmp( option, "Print_Header_Font_Size" ) )    ; /* not used */
  else if( !strcmp( option, "Print_Left_Header_String" ) ) {
    if( g_Print_Left_Header_String ) free( g_Print_Left_Header_String );
    g_Print_Left_Header_String = strdup( value );
    }
  else if( !strcmp( option, "Print_Right_Header_String" ) ) {
    if( g_Print_Right_Header_String ) free( g_Print_Right_Header_String );
    g_Print_Right_Header_String = strdup( value );
    }
  else if( !strcmp( option, "Print_Left_Footer_String" ) ) {
    if( g_Print_Left_Footer_String ) free( g_Print_Left_Footer_String );
    g_Print_Left_Footer_String = strdup( value );
    }
  else if( !strcmp( option, "Print_Right_Footer_String" ) ) {
    if( g_Print_Right_Footer_String ) free( g_Print_Right_Footer_String );
    g_Print_Right_Footer_String = strdup( value );
    }


/* Miscellaneous options */
  else if( !strcmp( option, "Global_History_File" ) )     ; /* not used */
  else if( !strcmp( option, "IBeam_Cursor" ) )    ; /* not used */
  else if( !strcmp( option, "Image_Cache_Size_KB" ) )     ; /* not used */
  else if( !strcmp( option, "ImageMap_Cursor" ) )     ; /* not used */
  else if( !strcmp( option, "ImageMap_Cursor_NoLink" ) )    ; /* not used */
  else if( !strcmp( option, "Link_Cursor" ) )     ; /* not used */
  else if( !strcmp( option, "LinkWait_Cursor" ) )     ; /* not used */
  else if( !strcmp( option, "Normal_Cursor" ) )     ; /* not used */
  else if( !strcmp( option, "NormalWait_Cursor" ) )     ; /* not used */
  else if( !strcmp( option, "Page_Cache_Size" ) )     ; /* not used */
  else if( !strcmp( option, "Safe_Memory_Free" ) )    ; /* not used */
  else if( !strcmp( option, "Site_History_Length" ) )     ; /* not used */
  else if( !strcmp( option, "Show_Server_Errors" ) )    ; /* not used */
  else if( !strcmp( option, "Use_Anti_Alias" ) )    ; /* not used */
  else if( !strcmp( option, "Use_Explicit_Accept_Headers" ) )     ; /* not used */
  else if( !strcmp( option, "Visitation_Horizon" ) )    ; /* not used */

  else if( !strcmp( option, "Print_Frame" ) )
    pref->SetCharPref( "user.print.print_frame", value );
  else if( !strcmp( option, "SetPrintBGColors" ) )
    pref->SetCharPref( "user.print.SetPrintBGColors", value );
  else if( !strcmp( option, "SetPrintBGImages" ) )
    pref->SetCharPref( "user.print.SetPrintBGImages", value );

  pref->SavePrefFile( nsnull );
  }

Here is the call graph for this function:

Here is the caller graph for this function:

static void MozLoadURL ( PtMozillaWidget_t moz,
char *  url 
) [static]

Definition at line 189 of file PtMozilla.cpp.

{
    // If the widget isn't realized, just return.
  if (!(PtWidgetFlags((PtWidget_t *)moz) & Pt_REALIZED))
    return;

  moz->EmbedRef->SetURI(url);
  moz->EmbedRef->LoadCurrentURI();
}

Here is the caller graph for this function:

void MozSaveTarget ( char *  url,
PtMozillaWidget_t moz 
)

Definition at line 214 of file PtMozilla.cpp.

{
  nsresult rv;
  nsCOMPtr<nsIWebBrowserPersist> webPersist(do_CreateInstance(kPersistContractID, &rv));
  if( !webPersist ) return;

  nsCOMPtr<nsIURI> uri;
  NS_NewURI( getter_AddRefs(uri), url );

  /* create a temporary file */
  char tmp_path[1024];
  tmpnam( tmp_path );
  nsCOMPtr<nsILocalFile> tmpFile;
  NS_NewNativeLocalFile(nsDependentCString( tmp_path ), PR_TRUE, getter_AddRefs(tmpFile));

  /* create a download object, use to sniff the headers for a location indication */
  HeaderSniffer *sniffer = new HeaderSniffer( webPersist, moz, uri, tmpFile );

  webPersist->SetProgressListener( sniffer );
  webPersist->SaveURI( uri, nsnull, nsnull, nsnull, nsnull, tmpFile );
}

Here is the call graph for this function:

Here is the caller graph for this function:

void MozSetPreference ( PtWidget_t *  widget,
int  type,
char *  pref,
void data 
)

Definition at line 165 of file PtMozilla.cpp.

{
  PtMozillaWidget_t *moz = (PtMozillaWidget_t *) widget;
  nsIPref *prefs = moz->EmbedRef->GetPrefs();

  switch (type)
  {
    case Pt_MOZ_PREF_CHAR:
      prefs->SetCharPref(pref, (char *)data);
      break;
    case Pt_MOZ_PREF_BOOL:
      prefs->SetBoolPref(pref, (int)data);
      break;
    case Pt_MOZ_PREF_INT:
      prefs->SetIntPref(pref, (int)data);
      break;
    case Pt_MOZ_PREF_COLOR:
// not supported yet
//      prefs->SetColorPrefDWord(pref, (uint32) data);
      break;
  }
}

Here is the call graph for this function:

static NS_DEFINE_CID ( kAppShellCID  ,
NS_APPSHELL_CID   
) [static]
static NS_DEFINE_CID ( kPromptServiceCID  ,
NS_PROMPTSERVICE_CID   
) [static]
PtWidgetClass_t * PtCreateMozillaClass ( void  )

Definition at line 1195 of file PtMozilla.cpp.

{
  static const PtResourceRec_t resources[] =
  {
    { Pt_ARG_MOZ_GET_URL,           mozilla_modify, Pt_QUERY_PREVENT },
    { Pt_ARG_MOZ_NAVIGATE_PAGE,     mozilla_modify, mozilla_get_info },
    { Pt_ARG_MOZ_SCROLL_TO,         mozilla_modify, Pt_QUERY_PREVENT },
    { Pt_ARG_MOZ_RELOAD,            mozilla_modify, Pt_QUERY_PREVENT },
    { Pt_ARG_MOZ_STOP,              mozilla_modify, Pt_QUERY_PREVENT },
    { Pt_ARG_MOZ_PRINT,             mozilla_modify, Pt_QUERY_PREVENT },
    { Pt_ARG_MOZ_COMMAND,           mozilla_modify, Pt_QUERY_PREVENT },
    { Pt_ARG_MOZ_OPTION,            mozilla_modify, mozilla_get_info },
    { Pt_ARG_MOZ_GET_CONTEXT,       NULL,           mozilla_get_info },
    { Pt_ARG_MOZ_GET_HISTORY,       NULL,           mozilla_get_info },
    { Pt_ARG_MOZ_ENCODING,          mozilla_modify, mozilla_get_info },
    { Pt_ARG_MOZ_WEB_DATA_URL,      mozilla_modify, Pt_QUERY_PREVENT },
    { Pt_ARG_MOZ_WEB_DATA,          mozilla_modify, Pt_QUERY_PREVENT },
    { Pt_ARG_MOZ_UNKNOWN_RESP,      mozilla_modify, Pt_QUERY_PREVENT },
    { Pt_ARG_MOZ_DOWNLOAD,          mozilla_modify, Pt_QUERY_PREVENT },
    { Pt_ARG_MOZ_AUTH_CTRL,         NULL, NULL, Pt_ARG_IS_POINTER( PtMozillaWidget_t, moz_auth_ctrl ) },
    { Pt_ARG_MOZ_UNKNOWN_CTRL,      NULL, NULL, Pt_ARG_IS_POINTER( PtMozillaWidget_t, moz_unknown_ctrl ) },
    { Pt_CB_MOZ_INFO,       NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, info_cb) },
    { Pt_CB_MOZ_START,        NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, start_cb) },
    { Pt_CB_MOZ_COMPLETE,     NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, complete_cb) },
    { Pt_CB_MOZ_PROGRESS,     NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, progress_cb) },
    { Pt_CB_MOZ_URL,        NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, url_cb) },
    { Pt_CB_MOZ_EVENT,        NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, event_cb) },
    { Pt_CB_MOZ_NET_STATE,      NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, net_state_cb) },
    { Pt_CB_MOZ_NEW_WINDOW,     NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, new_window_cb) },
    { Pt_CB_MOZ_NEW_AREA,       NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, resize_cb) },
    { Pt_CB_MOZ_DESTROY,      NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, destroy_cb) },
    { Pt_CB_MOZ_VISIBILITY,     NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, visibility_cb) },
    { Pt_CB_MOZ_OPEN,       NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, open_cb) },
    { Pt_CB_MOZ_DIALOG,       NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, dialog_cb) },
    { Pt_CB_MOZ_AUTHENTICATE,   NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, auth_cb) },
    { Pt_CB_MOZ_PROMPT,       NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, prompt_cb) },
    { Pt_CB_MOZ_CONTEXT,      NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, context_cb) },
    { Pt_CB_MOZ_PRINT_STATUS,   NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, print_status_cb) },
    { Pt_CB_MOZ_WEB_DATA_REQ,   NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, web_data_req_cb) },
    { Pt_CB_MOZ_UNKNOWN,        NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, web_unknown_cb) },
    { Pt_CB_MOZ_ERROR,          NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, web_error_cb) },
    { Pt_CB_MOZ_DOWNLOAD,       NULL, NULL, Pt_ARG_IS_CALLBACK_LIST(PtMozillaWidget_t, web_download_cb) }
  };

  static const PtArg_t args[] = 
  {
    { Pt_SET_VERSION, 200},
    { Pt_SET_STATE_LEN, sizeof( PtMozillaWidget_t ) },
    { Pt_SET_DFLTS_F, (long)mozilla_defaults },
    { Pt_SET_EXTENT_F, (long)mozilla_extent },
    { Pt_SET_FLAGS, Pt_RECTANGULAR, Pt_RECTANGULAR },
    { Pt_SET_DESTROY_F, (long) mozilla_destroy },
    { Pt_SET_CHILD_GETTING_FOCUS_F, ( long ) child_getting_focus },
    { Pt_SET_CHILD_LOSING_FOCUS_F, ( long ) child_losing_focus },
    { Pt_SET_RESOURCES, (long) resources },
    { Pt_SET_NUM_RESOURCES, sizeof( resources )/sizeof( resources[0] ) },
    { Pt_SET_DESCRIPTION, (long) "PtMozilla" },
  };

  if (StartupEmbedding() == -1)
    return (NULL);

  Init_nsUnknownContentTypeHandler_Factory( );

  nsCOMPtr<nsIFactory> promptFactory;
  NS_NewPromptServiceFactory(getter_AddRefs(promptFactory));

  nsCOMPtr<nsIComponentRegistrar> registrar;
  NS_GetComponentRegistrar(getter_AddRefs(registrar));
  registrar->RegisterFactory(kPromptServiceCID, "Prompt Service", 
      "@mozilla.org/embedcomp/prompt-service;1",
      promptFactory);

  nsCOMPtr<nsIObserverService> observerService(do_GetService("@mozilla.org/observer-service;1"));
  WindowChangeObserver *observer = new WindowChangeObserver;
  observer->AddRef();
  observerService->AddObserver(NS_STATIC_CAST(nsIObserver *, observer), "domwindowclosed", PR_FALSE);

  PtMozilla->wclass = PtCreateWidgetClass(PtContainer, 0, sizeof(args)/sizeof(args[0]), args);

  return (PtMozilla->wclass);
}

Here is the call graph for this function:

static int StartupEmbedding ( ) [static]

Definition at line 1155 of file PtMozilla.cpp.

{
  nsresult rv;

#ifdef _BUILD_STATIC_BIN
  rv = NS_InitEmbedding(nsnull, nsnull, kPStaticModules, kStaticModuleCount);
#else
  rv = NS_InitEmbedding(nsnull, nsnull);
#endif

  if( NS_FAILED( rv ) ) return -1;

  char *profile_dir;
  profile_dir = (char *)alloca(strlen(getenv("HOME")) + strlen("/.ph/mozilla") + 1);
  sprintf(profile_dir, "%s/.ph/mozilla", getenv("HOME"));
  rv = StartupProfile( profile_dir );
  if( NS_FAILED( rv ) )
    NS_WARNING("Warning: Failed to start up profiles.\n");
    
  nsCOMPtr<nsIAppShell> appShell;
  appShell = do_CreateInstance(kAppShellCID);
  if( !appShell ) {
      NS_WARNING("Failed to create appshell in EmbedPrivate::PushStartup!\n");
      return (-1);
      }
  nsIAppShell * sAppShell = appShell.get();
  NS_ADDREF(sAppShell);
  sAppShell->Create(0, nsnull);
  sAppShell->Spinup();
  return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static int StartupProfile ( char *  sProfileDir) [static]

Definition at line 1109 of file PtMozilla.cpp.

{
  // initialize profiles
  if(sProfileDir) 
  {
    nsresult rv;
    nsCOMPtr<nsILocalFile> profileDir;
    PRBool exists = PR_FALSE;
    PRBool isDir = PR_FALSE;
    profileDir = do_CreateInstance(NS_LOCAL_FILE_CONTRACTID);
    rv = profileDir->InitWithNativePath(nsDependentCString(sProfileDir));
    if (NS_FAILED(rv))
        return NS_ERROR_FAILURE;
    profileDir->Exists(&exists);
    profileDir->IsDirectory(&isDir);
    // if it exists and it isn't a directory then give up now.
    if (!exists) 
    {
      rv = profileDir->Create(nsIFile::DIRECTORY_TYPE, 0700);
      if( NS_FAILED(rv) )
        return NS_ERROR_FAILURE;
      sProfileDirCreated = 1;
    }
    else if (exists && !isDir)
      return NS_ERROR_FAILURE;

    nsCOMPtr<nsProfileDirServiceProvider> locProvider;
    NS_NewProfileDirServiceProvider(PR_TRUE, getter_AddRefs(locProvider));
    if (!locProvider)
      return NS_ERROR_FAILURE;

    // Directory service holds an strong reference to any
    // provider that is registered with it. Let it hold the
    // only ref. locProvider won't die when we leave this scope.
    rv = locProvider->Register();
    if (NS_FAILED(rv))
      return rv;
    rv = locProvider->SetProfileDir(profileDir);
    if (NS_FAILED(rv))
      return rv;
    }
  
  return NS_OK;
}

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

PtWidgetClassRef_t __PtMozilla = { NULL, PtCreateMozillaClass }

Definition at line 157 of file PtMozilla.cpp.

Definition at line 162 of file PtMozilla.cpp.

Definition at line 162 of file PtMozilla.cpp.

Definition at line 162 of file PtMozilla.cpp.

Definition at line 162 of file PtMozilla.cpp.

const char* const kPersistContractID = "@mozilla.org/embedding/browser/nsWebBrowserPersist;1"

Definition at line 212 of file PtMozilla.cpp.

PtWidgetClassRef_t* PtMozilla = &__PtMozilla

Definition at line 158 of file PtMozilla.cpp.

Definition at line 1108 of file PtMozilla.cpp.