netscape-revival
lib/libmocha/lm.h
#ifndef lm_h___
#define lm_h___
/*
** Mocha in the Navigator library-private interface.
*/
#include "xp.h" /* for uint and PA_Block */
#include "libmocha.h"
#include "prlong.h" /* for int64 time type used below */
/*
** Shared string constants for common property names.
*/
extern char lm_onLoad_str[]; /* "onLoad" */
extern char lm_onUnload_str[]; /* "onUnload" */
extern char lm_onAbort_str[]; /* "onAbort" */
extern char lm_onError_str[]; /* "onError" */
extern char lm_onScroll_str[]; /* "onScroll" */
extern char lm_onFocus_str[]; /* "onFocus" */
extern char lm_onBlur_str[]; /* "onBlur" */
extern char lm_onSelect_str[]; /* "onSelect" */
extern char lm_onChange_str[]; /* "onChange" */
extern char lm_onReset_str[]; /* "onReset" */
extern char lm_onSubmit_str[]; /* "onSubmit" */
extern char lm_onClick_str[]; /* "onClick" */
extern char lm_onMouseOver_str[]; /* "onMouseOver" */
extern char lm_onMouseOut_str[]; /* "onMouseOut" */
extern char lm_focus_str[]; /* "focus" */
extern char lm_blur_str[]; /* "blur" */
extern char lm_select_str[]; /* "select" */
extern char lm_click_str[]; /* "click" */
extern char lm_scroll_str[]; /* "scroll" */
extern char lm_enable_str[]; /* "enable" */
extern char lm_disable_str[]; /* "disable" */
extern char lm_toString_str[]; /* "toString" */
extern char lm_length_str[]; /* "length" */
extern char lm_forms_str[]; /* "forms" */
extern char lm_links_str[]; /* "links" */
extern char lm_anchors_str[]; /* "anchors" */
extern char lm_applets_str[]; /* "applets" */
extern char lm_embeds_str[]; /* "embeds" */
extern char lm_plugins_str[]; /* "plugins" */
extern char lm_images_str[]; /* "images" */
extern char lm_location_str[]; /* "location" */
extern char lm_opener_str[]; /* "opener" */
extern char lm_closed_str[]; /* "closed" */
extern char lm_assign_str[]; /* "assign" */
extern char lm_reload_str[]; /* "reload" */
extern char lm_replace_str[]; /* "replace" */
/*
** Timeout structure threaded on MochaDecoder.timeouts for cleanup.
*/
struct MochaTimeout {
MochaDecoder *self; /* the initiating MochaDecoder */
void *toid; /* timeout identifier */
char *expr; /* the Mocha expression to evaluate */
int64 when; /* nominal time to run this timeout */
uint16 taint; /* taint from expr and timeout args */
MochaTimeout *next; /* next timeout in list */
};
extern void lm_ClearWindowTimeouts(MochaDecoder *decoder);
struct MochaNextURL {
URL_Struct *url_struct;
MochaBoolean replace;
MochaNextURL *next;
};
extern void lm_ClearNextURLList(MochaDecoder *decoder);
/*
** Stack size per window context, plus one for the navigator.
*/
#define LM_STACK_SIZE 8192
extern MochaDecoder *lm_global_decoder;
extern MochaDecoder *lm_crippled_decoder;
extern MochaClass lm_window_class;
extern MochaBoolean lm_data_tainting;
extern uint16 lm_branch_taint;
/*
** A pointer to the current Mocha context, or null if Mocha is not running.
** We need this kludge because data-tainting checks from NET_GetURL and FE
** submit code (which calls LO_SendOnSubmit) are not fully parameterized.
*/
extern MochaContext *lm_running_context;
extern MochaBoolean lm_SaveParamString(MochaContext *mc, PA_Block *bp,
const char *str);
extern MochaDecoder *lm_NewWindow(MWContext *context);
extern void lm_DestroyWindow(MochaDecoder *decoder);
extern MochaBoolean lm_InitWindowContent(MochaDecoder *decoder);
extern void lm_FreeWindowContent(MochaDecoder *decoder);
extern MochaBoolean lm_SetInputStream(MochaContext *mc,
MochaDecoder *decoder,
NET_StreamClass *stream,
URL_Struct *url_struct);
extern MochaObject *lm_DefineDocument(MochaDecoder *decoder);
extern MochaObject *lm_DefineHistory(MochaDecoder *decoder);
extern MochaObject *lm_DefineLocation(MochaDecoder *decoder);
extern MochaObject *lm_DefineNavigator(MochaDecoder *decoder);
extern MochaObject *lm_NewPluginList(MochaContext *mc);
extern MochaObject *lm_NewMIMETypeList(MochaContext *mc);
/*
** Get (create if needed) decoder's form, link, and named anchor arrays.
*/
extern MochaObject *lm_GetFormArray(MochaDecoder *decoder);
extern MochaObject *lm_GetLinkArray(MochaDecoder *decoder);
extern MochaObject *lm_GetNameArray(MochaDecoder *decoder);
extern MochaObject *lm_GetAppletArray(MochaDecoder *decoder);
extern MochaObject *lm_GetEmbedArray(MochaDecoder *decoder);
extern MochaObject *lm_GetImageArray(MochaDecoder *decoder);
/*
** dummy object for applets and embeds that can't be reflected
*/
extern MochaObject *lm_DummyObject;
extern void lm_InitDummyObject(MochaContext *mc);
/*
** Base class of all Mocha input private object data structures.
*/
typedef struct MochaInputBase {
MochaDecoder *decoder; /* this window's Mocha decoder */
int32 type; /* layout form element type */
} MochaInputBase;
#define FORM_TYPE_ARRAY 0x100
/*
** Base class of input event-handling elements like anchors and form inputs.
*/
typedef struct MochaInputHandler {
MochaInputBase base; /* decoder and type */
MochaObject *object; /* this input handler's Mocha object */
uint32 event_mask; /* mask of events in progress */
} MochaInputHandler;
#define base_decoder base.decoder
#define base_type base.type
/* Event bits stored in the low end of decoder->event_mask. */
#define EVENT_FOCUS 0x00000001 /* input focus event in progress */
#define EVENT_BLUR 0x00000002 /* loss of focus event in progress */
#define EVENT_SELECT 0x00000004 /* input field selection in progress */
#define EVENT_CHANGE 0x00000008 /* field value change in progress */
#define EVENT_RESET 0x00000010 /* form submit in progress */
#define EVENT_SUBMIT 0x00000020 /* form submit in progress */
#define EVENT_CLICK 0x00000040 /* input element click in progress */
#define EVENT_SCROLL 0x00000080 /* window is being scrolled */
#define EVENT_MOUSEOVER 0x00000100 /* user is mousing over a link */
#define EVENT_MOUSEOUT 0x00000200 /* user is mousing out of a link */
#define EVENT_LOAD 0x00000400 /* layout parsed a loaded document */
/*
** Mocha URL object.
**
** Location is a special URL: when you set one of its properties, your client
** window goes to the newly formed address.
*/
typedef struct MochaURL {
MochaInputHandler handler;
uint32 index;
uint16 taint;
uint16 spare;
MochaAtom *href;
MochaAtom *target;
} MochaURL;
#define URL_NOT_INDEXED ((uint32)-1)
#define url_decoder handler.base_decoder
#define url_type handler.base_type
#define url_object handler.object
#define url_event_mask handler.event_mask
extern MochaURL *
lm_NewURL(MochaContext *mc, MochaDecoder *decoder, char *href, char *target);
extern void
lm_ReplaceURL(MWContext *context, URL_Struct *url_struct);
extern MochaBoolean
lm_GetURL(MochaContext *mc, MochaDecoder *decoder, URL_Struct *url_struct,
uint16 taint);
extern const char *
lm_CheckURL(MochaContext *mc, const char *url_string);
extern MochaBoolean
lm_CheckWindowName(MochaContext *mc, const char *window_name);
extern MochaBoolean
lm_InitTaint(MochaContext *mc);
extern MochaBoolean
lm_GetTaint(MochaContext *mc, MochaDecoder *decoder, uint16 *taintp);
extern MochaBoolean
lm_SetTaint(MochaContext *mc, MochaDecoder *decoder, const char *url_string);
extern MochaBoolean
lm_MergeTaint(MochaContext *mc, MochaContext *mc2);
extern void
lm_ClearTaint(MochaContext *mc);
extern MochaBoolean
lm_CheckTaint(MochaContext *mc, uint16 taint, const char *url_desc,
const char *url_string);
extern const char *
lm_GetOrigin(MochaContext *mc, const char *url_string);
extern const char *
lm_GetOriginURL(MochaContext *mc, MochaDecoder *decoder);
extern const char *
lm_SetOriginURL(MochaContext *mc, MochaDecoder *decoder,
const char *url_string);
extern MochaBoolean
lm_CheckOrigins(MochaContext *mc, MochaDecoder *decoder);
extern MochaBoolean
lm_BranchCallback(MochaContext *mc, MochaScript *script);
extern void
lm_ErrorReporter(MochaContext *mc, const char *message,
MochaErrorReport *report);
extern MochaObject *
lm_GetFormObjectByID(MochaDecoder *decoder, uint form_id);
extern LO_FormElementStruct *
lm_GetFormElementByIndex(MochaObject *form_obj, int32 index);
extern MochaBoolean
lm_AddFormElement(MochaContext *mc, MochaObject *form, MochaObject *obj,
char *name, uint index);
extern MochaBoolean
lm_ReflectRadioButtonArray(MWContext *context, intn form_id, const char *name);
extern uint16
lm_GetFormElementTaint(MochaContext *mc, LO_FormElementStruct *form_element);
extern void
lm_ResetFormElementTaint(MochaContext *mc, LO_FormElementStruct *form_element);
extern MochaBoolean
lm_SendEvent(MWContext *context, MochaObject *obj, char *name,
MochaDatum *result);
/*
** Class initializers (the wave of the future).
*/
extern MochaBoolean
lm_InitImageClass(MochaDecoder *decoder);
extern MochaBoolean
lm_InitInputClasses(MochaDecoder *decoder);
/* XXX save and restore anonymous images across frame resize-reload */
extern void
lm_SaveAnonymousImages(MWContext *context, MochaDecoder *decoder);
extern MochaBoolean
lm_RestoreAnonymousImages(MWContext *context, MochaDecoder *decoder);
/*
** Debugging hooks.
*/
#ifdef DEBUG_brendan
#define LM_LINK_OBJECT(decoder, obj, name) lm_LinkObject(decoder, obj, name)
#define LM_UNLINK_OBJECT(decoder, obj) lm_UnlinkObject(decoder, obj)
extern void
lm_LinkObject(MochaDecoder *decoder, MochaObject *obj, const char *name);
extern void
lm_UnlinkObject(MochaDecoder *decoder, MochaObject *obj);
extern void
lm_DumpLiveObjects(MochaDecoder *decoder);
#else
#define LM_LINK_OBJECT(decoder, obj, name)
#define LM_UNLINK_OBJECT(decoder, obj)
#endif
#endif /* lm_h___ */