Compare commits

..

12 Commits

Author SHA1 Message Date
mlm
5403cc1fbd - Fix for recurring static variable (make it a member of the window group
structure)


git-svn-id: svn://10.0.0.236/branches/js_ops_BRANCH@1188 18797224-902f-48f8-a5cc-f745e15eee43
1998-05-06 20:16:14 +00:00
mlm
ea8b7ae403 Moving this file for js_ops_BRANCH
git-svn-id: svn://10.0.0.236/branches/js_ops_BRANCH@1187 18797224-902f-48f8-a5cc-f745e15eee43
1998-05-06 20:13:26 +00:00
mlm
792da6f338 - Replace thread safety fixes that I accidentally didn't check in when the
source tree moved to mozilla.

   - Make timeout globals thread-safe as part of the thread group object
   - Add LM locking to go with JS_BeginRequest stuff


git-svn-id: svn://10.0.0.236/branches/js_ops_BRANCH@1162 18797224-902f-48f8-a5cc-f745e15eee43
1998-05-05 22:26:12 +00:00
mlm
8f82414d4c Branch libpref for OPS new functionality for upcoming ns->moz renaming
git-svn-id: svn://10.0.0.236/branches/js_ops_BRANCH@635 18797224-902f-48f8-a5cc-f745e15eee43
1998-04-25 00:10:10 +00:00
mlm
ad93b6b9aa Branch libhook for OPS new functionality for upcoming ns->moz renaming
git-svn-id: svn://10.0.0.236/branches/js_ops_BRANCH@634 18797224-902f-48f8-a5cc-f745e15eee43
1998-04-25 00:09:11 +00:00
mlm
bf3132f22b Branch libparse for OPS new functionality for upcoming ns->moz renaming
git-svn-id: svn://10.0.0.236/branches/js_ops_BRANCH@633 18797224-902f-48f8-a5cc-f745e15eee43
1998-04-25 00:07:25 +00:00
mlm
66d0cd3091 Branch libnet for OPS new functionality for upcoming ns->moz renaming
git-svn-id: svn://10.0.0.236/branches/js_ops_BRANCH@631 18797224-902f-48f8-a5cc-f745e15eee43
1998-04-25 00:06:27 +00:00
mlm
d1186c4663 Branch libmocha for OPS new functionality for upcoming ns->moz renaming
git-svn-id: svn://10.0.0.236/branches/js_ops_BRANCH@630 18797224-902f-48f8-a5cc-f745e15eee43
1998-04-25 00:01:56 +00:00
mlm
6b1115ec03 Branch layout for OPS new functionality for upcoming ns->moz renaming
git-svn-id: svn://10.0.0.236/branches/js_ops_BRANCH@629 18797224-902f-48f8-a5cc-f745e15eee43
1998-04-24 23:43:28 +00:00
mlm
92c4bd320a Branch mozilla.mak for OPS new functionality for upcoming ns->moz renaming
git-svn-id: svn://10.0.0.236/branches/js_ops_BRANCH@628 18797224-902f-48f8-a5cc-f745e15eee43
1998-04-24 23:38:24 +00:00
mlm
f8c60c6777 Branch libevent for OPS new functionality for upcoming ns->moz renaming
git-svn-id: svn://10.0.0.236/branches/js_ops_BRANCH@627 18797224-902f-48f8-a5cc-f745e15eee43
1998-04-24 23:37:38 +00:00
(no author)
bc0482fed5 This commit was manufactured by cvs2svn to create branch 'js_ops_BRANCH'.
git-svn-id: svn://10.0.0.236/branches/js_ops_BRANCH@595 18797224-902f-48f8-a5cc-f745e15eee43
1998-04-24 07:21:02 +00:00
217 changed files with 44147 additions and 33373 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,62 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*
jscookie.h -- javascript reflection of cookies for filters.
Created: Frederick G.M. Roeber <roeber@netscape.com>, 12-Jul-97.
Adopted: Judson Valeski, 1997
*/
#ifndef _JSCOOKIE_H_
#define _JSCOOKIE_H_
typedef enum {
JSCF_accept,
JSCF_reject,
JSCF_ask,
JSCF_whatever,
JSCF_error
}
JSCFResult;
typedef struct {
char *path_from_header;
char *host_from_header;
char *name_from_header;
char *cookie_from_header;
time_t expires;
char *url;
Bool secure;
Bool domain;
Bool prompt; /* the preference */
NET_CookieBehaviorEnum preference;
}
JSCFCookieData;
extern JSCFResult JSCF_Execute(
MWContext *mwcontext,
const char *script_name,
JSCFCookieData *data,
Bool *data_changed
);
/* runs the garbage collector on the filter context. Probably a good
idea to call on completion of NET_GetURL or something. */
extern void JSCF_Cleanup(void);
#endif /* _JSCOOKIE_H_ */

755
mozilla/include/libevent.h Normal file
View File

@@ -0,0 +1,755 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*
* Header file for event passing between the mozilla thread and
* the mocha thread
*/
#ifndef libevent_h___
#define libevent_h___
#include "libmocha.h"
#include "prtypes.h"
#ifndef NSPR20
#include "prevent.h"
#else
#include "plevent.h"
#endif
#include "shist.h"
#include "fe_proto.h"
#include "lo_ele.h"
#include "jscookie.h"
NSPR_BEGIN_EXTERN_C
extern PREventQueue * mozilla_event_queue;
typedef struct WindowGroup LMWindowGroup;
/*
* XXX - should we use the same event values as layer events?
*/
/* Event bits stored in the low end of decoder->event_mask. */
#define EVENT_MOUSEDOWN 0x00000001
#define EVENT_MOUSEUP 0x00000002
#define EVENT_MOUSEOVER 0x00000004 /* user is mousing over a link */
#define EVENT_MOUSEOUT 0x00000008 /* user is mousing out of a link */
#define EVENT_MOUSEMOVE 0x00000010
#define EVENT_MOUSEDRAG 0x00000020
#define EVENT_CLICK 0x00000040 /* input element click in progress */
#define EVENT_DBLCLICK 0x00000080
#define EVENT_KEYDOWN 0x00000100
#define EVENT_KEYUP 0x00000200
#define EVENT_KEYPRESS 0x00000400
#define EVENT_DRAGDROP 0x00000800 /* not yet implemented */
#define EVENT_FOCUS 0x00001000 /* input focus event in progress */
#define EVENT_BLUR 0x00002000 /* loss of focus event in progress */
#define EVENT_SELECT 0x00004000 /* input field selection in progress */
#define EVENT_CHANGE 0x00008000 /* field value change in progress */
#define EVENT_RESET 0x00010000 /* form submit in progress */
#define EVENT_SUBMIT 0x00020000 /* form submit in progress */
#define EVENT_SCROLL 0x00040000 /* window is being scrolled */
#define EVENT_LOAD 0x00080000 /* layout parsed a loaded document */
#define EVENT_UNLOAD 0x00100000
#define EVENT_XFER_DONE 0x00200000 /* document has loaded */
#define EVENT_ABORT 0x00400000
#define EVENT_ERROR 0x00800000
#define EVENT_LOCATE 0x01000000
#define EVENT_MOVE 0x02000000
#define EVENT_RESIZE 0x04000000
#define EVENT_FORWARD 0x08000000
#define EVENT_HELP 0x10000000 /* for handling of help events */
#define EVENT_BACK 0x20000000
/* #define EVENT_PRINT 0x20000000 *//* To be removed per joki */
#define STATUS_STOP 0x00000001 /* stop processing */
#define STATUS_IGNORE 0x00000002 /* no new messages */
#define EVENT_ALT_MASK 0x00000001
#define EVENT_CONTROL_MASK 0x00000002
#define EVENT_SHIFT_MASK 0x00000004
#define EVENT_META_MASK 0x00000008
#define ARGTYPE_NULL 0x00000001
#define ARGTYPE_INT32 0x00000002
#define ARGTYPE_BOOL 0x00000004
#define ARGTYPE_STRING 0x00000008
#define SIZE_MAX 0x00000001
#define SIZE_MIN 0X00000002
/*
* When the event has been processed by the backend, there will be
* a front-end callback that gets called. If the event processed
* successfully, the callback will be passed EVENT_OK. If the
* event wasn't successful (i.e. the user canceled it) the return
* status will be EVENT_CANCEL. If something radical happened
* and the front-end should do nothing (i.e. mocha changed the
* underlying context) the status will be EVENT_PANIC and the
* front end should treat the context and element passed to the
* exit routine as bogus
*/
typedef enum {
EVENT_OK,
EVENT_CANCEL,
EVENT_PANIC
} ETEventStatus;
/*
* When a given event gets processed we may need to tell the front
* end about it so that they can update the UI / continue the
* operation. The context, lo_element, lType and whatever
* field are all supplied by the original ET_SendEvent() call.
* See ET_SendEvent() for a description of the values for
* the status parameter
*/
typedef void
(*ETClosureFunc)(MWContext * pContext, LO_Element * lo_element,
int32 lType, void * whatever, ETEventStatus status);
/*
* Someone has initiated a call to LM_EvaluateBuffer(). This function
* gets called back with the result
*/
typedef void
(*ETEvalAckFunc)(void * data, char * result_string, size_t result_length,
char * wysiwyg_url, char * base_href, Bool valid);
/*
* This function is called back after a layer's state has been restored
* in a resize_relayout.
*/
typedef void
(*ETRestoreAckFunc)(void * data, LO_BlockInitializeStruct *param);
/*
* Typedef for a function taking a void pointer and
* returning nothing
*/
typedef void
(*ETVoidPtrFunc)(void * data);
/*
* Typedef for a function taking a void pointer and
* returning a bool
*/
typedef PRBool
(*ETBoolPtrFunc)(void * data);
/*
* Typedef for a function taking a void pointer and
* returning a int32
*/
typedef int32
(*ETIntPtrFunc)(void * data);
/*
* Typedef for a function taking a void pointer and
* returning a char *
*/
typedef char *
(*ETStringPtrFunc)(void * data);
/*
* Struct for passing JS typed variable info through C interface calls
*/
typedef union ArgVal {
int32 intArg;
XP_Bool boolArg;
char * stringArg;
} ArgVal;
typedef struct {
uint8 type; /* arg type as defined at top of file */
ArgVal value;
} JSCompArg;
/*
* Typedef for a function used to verify installed components and
* get back components utility functions.
*/
typedef PRBool
(*ETVerifyComponentFunc)(void **active_callback, void **startup_callback);
/*
* Generic function for JS setting values with native calls.
*/
typedef void
(*ETCompPropSetterFunc)(char *name, void *value);
/*
* Generic function for JS getting values from native calls.
*/
typedef void*
(*ETCompPropGetterFunc)(char *name);
/*
* Generic function for JS calling native methods.
*/
typedef void*
(*ETCompMethodFunc)(int32 argc, JSCompArg *argv);
/* --------------------------------------------------------------------------
* Common prologue for talking between the mocha thread and the mozilla
* thread
*/
typedef struct {
PREvent event; /* the PREvent structure */
MWContext* context; /* context */
int32 doc_id; /* doc id of context when event launched */
PRPackedBool handle_eagerly;
} ETEvent;
/*
* Struct to send back from front end in order to get additional
* event information without having to initialize event object
* until necessary. Yow, there is a lot of junk in here now
* can we make a union out of some of these or are they always
* needed?
*/
typedef struct {
ETEvent ce;
MochaDecoder * decoder;
JSObject * object;
int32 type;
int32 layer_id;
int32 id;
LO_Element * lo_element;
ETClosureFunc fnClosure; /* event sender closure */
void * whatever; /* anything other state */
int32 x,y;
int32 docx,docy;
int32 screenx,screeny;
uint32 which;
uint32 modifiers;
void * data;
uint32 dataSize;
PRPackedBool saved;
PRPackedBool event_handled;
} JSEvent;
/*
* Tell the backend about a new event.
* The event is placed onto an event queue, it is not processed
* immediately. If the event is the type that can be cancelled
* by the backend (i.e. a button click or a submit) the front
* end must wait until the callback routine gets called before
* continuing with the operation. The ETEventStatus will be
* EVENT_OK if the operation is to continue or EVENT_CANCEL
* if it got cancelled.
*
* The processing of the event may cause the document to change
* or even the whole window to close. In those cases the callback
* will still get called in case there is any front-end cleanup
* to do but the ETEventStatus will be set to EVENT_PANIC
*
*/
extern JSBool
ET_SendEvent(MWContext * pContext, LO_Element *pElement, JSEvent *pEvent,
ETClosureFunc fnClosure, void * whatever);
/*
* Tell the backend about a new document load event. We need a
* closure so that libparse/layout knows when its safe to discard
* the old document when they were waiting for onunload events to
* finish processing
*/
extern void
ET_SendLoadEvent(MWContext * pContext, int32 type, ETVoidPtrFunc fnClosure,
NET_StreamClass *stream, int32 layer_id, Bool resize_reload);
/*
* Tell the backend about a new image event. Async. No closure
*/
extern void
ET_SendImageEvent(MWContext * pContext, LO_ImageStruct *image_data,
LM_ImageEvent event);
/*
* Send an interrupt event to the current context
* Remove all pending events for the event queue of the given context.
*/
extern void
ET_InterruptContext(MWContext * pContext);
extern JSBool
ET_ContinueProcessing(MWContext * pContext);
/*
* Tell mocha to destroy the given context's data. The callback
* function gets called when mocha is done with all of its data
* that was associated with the context
*/
extern void
ET_RemoveWindowContext(MWContext * context, ETVoidPtrFunc fn,
void * data);
typedef struct {
uint len, line_no;
char * scope_to;
void * data;
JSVersion version;
JSPrincipals * principals;
JSBool want_result;
JSBool unicode;
} ETEvalStuff;
/*
* Evaluate the mocha code in the given buffer
*/
extern void
ET_EvaluateBuffer(MWContext * context, char * buffer, uint buflen,
uint line_no, char * scope_to, JSBool want_result,
ETEvalAckFunc fn, void * data,
JSVersion ver, struct JSPrincipals *);
extern void
ET_EvaluateScript(MWContext * context, char * buffer, ETEvalStuff * stuff,
ETEvalAckFunc fn);
/*
* Ask Mocha to reflect the given object into JavaScript
*/
extern void
ET_ReflectObject(MWContext * pContext, void * lo_ele, void * tag,
int32 layer_id, uint index, ReflectedObject type);
void
ET_ReflectFormElement(MWContext * pContext, void * form,
LO_FormElementStruct * form_element, PA_Tag * tag);
extern void
ET_ReflectWindow(MWContext * pContext,
PA_Block onLoad, PA_Block onUnload,
PA_Block onFocus, PA_Block onBlur, PA_Block onHelp,
PA_Block onMouseOver, PA_Block onMouseOut, PA_Block onDragDrop,
PA_Block onMove, PA_Block onResize,
PA_Block id, char *all,
Bool bDelete, int newline_count);
/*
* Tell mocha we are processing a form
*/
extern void
ET_SetActiveForm(MWContext * pContext, struct lo_FormData_struct * loElement);
/*
* Tell mocha which layer we are processing
*/
void
ET_SetActiveLayer(MWContext * pContext, int32 layer_id);
/*
** Tell mocha where to send its output
*/
extern void
ET_ClearDecoderStream(MWContext * context, NET_StreamClass * old_stream);
extern void
ET_SetDecoderStream(MWContext * context, NET_StreamClass *stream,
URL_Struct *url_struct, JSBool free_stream_on_close);
/*
** Remember the current nesting URL in the MochaDecoder
*/
extern void
ET_SetNestingUrl(MWContext * context, char * szUrl);
/*
** Remember the current language version in the MochaDecoder
*/
extern void
ET_SetVersion(MWContext * context, JSVersion version);
/*
* Tell mocha to trash the current document. around and around...
*/
extern void
ET_ReleaseDocument(MWContext * pContext, JSBool resize_reload);
/*
* Tell mocha to trash the layer's document.
*/
extern void
ET_DestroyLayer(MWContext * pContext, JSObject *layer_obj);
extern void
ET_MochaStreamComplete(MWContext * context, void * buf, int len,
char * content_type, Bool isUnicode);
extern void
ET_MochaStreamAbort(MWContext * context, int status);
/*
* Called when a layer's contents are changing and we want to create
* a new layer document.
*/
extern void
ET_NewLayerDocument(MWContext *pContext, int32 layer_id);
extern void
ET_DocWriteAck(MWContext *pContext, int status);
extern void
ET_RegisterComponent(char *name, void *active_callback, void *startup_callback);
extern void
ET_RegisterComponentProp(char *comp, char *name, uint8 retType, void *setter,
void *getter);
extern void
ET_RegisterComponentMethod(char *comp, char *name, uint8 retType, void *method,
int32 argc);
/* =============================================================== */
/*
* This event can be sent to both the mozilla thread and the moacha thread
*/
typedef struct {
ETEvent ce;
TimeoutCallbackFunction fnCallback;
void* pClosure;
uint32 ulTime;
void* pTimerId;
} MozillaEvent_Timeout;
/* =============================================================== */
/*
* Busy loop waiting for events to come along
*/
extern void PR_CALLBACK
lm_wait_for_events(void *);
/*
* global mocha event queues. It would be nice to not have these
* exported this globally
*/
extern PREventQueue *lm_InterpretQueue;
extern PREventQueue *lm_PriorityQueue;
/*
* Ways to send events to the front end
*/
extern JSBool
ET_PostMessageBox(MWContext* context, char* szMessage,
JSBool bConfirm);
extern void
ET_PostProgress(MWContext* context, const char* szMessage);
/* --- timeout routines --- */
/*
* Set (or clear) a timeout to go off. The timeout will go off in the
* mozilla thread so we will use the routine ET_FireTimeoutCallBack()
* to get back into our thread to actually run the closure
*/
extern void *
ET_PostSetTimeout(TimeoutCallbackFunction fnCallback,
void * pClosure, uint32 ulTime, int32 doc_id);
extern void
ET_PostClearTimeout(void * stuff);
extern void
ET_FireTimeoutCallBack(void *);
/* --- end of timeout routines --- */
extern void
ET_PostDestroyWindow(MWContext * context);
extern void
ET_PostManipulateForm(MWContext * context, LO_Element * pForm, int32 action);
extern void
ET_PostClearView(MWContext * context);
extern void
ET_PostFreeImageElement(MWContext * context, void * stuff);
extern void
ET_PostFreeImageContext(MWContext *context, IL_GroupContext *img_cx);
extern void
ET_PostFreeAnonImages(MWContext *context, IL_GroupContext *img_cx);
extern void
ET_PostDisplayImage(MWContext *, int, LO_ImageStruct *);
extern void
ET_PostGetUrl(MWContext *, URL_Struct * pUrl);
extern char *
ET_PostPrompt(MWContext* context, const char* szMessage,
const char * szDefault);
extern MWContext *
ET_PostNewWindow(MWContext* context, URL_Struct * pUrl,
char * szName, Chrome * pChrome, LMWindowGroup *grp);
extern void
ET_PostUpdateChrome(MWContext* context, Chrome * pChrome);
extern void
ET_PostQueryChrome(MWContext* context, Chrome * pChrome);
extern void
ET_PostGetScreenSize(MWContext* context, int32 *pX, int32 *pY);
extern void
ET_PostGetAvailScreenRect(MWContext* context, int32 *pX, int32 *pY,
int32 *pLeft, int32 *pTop);
extern void
ET_PostGetColorDepth(MWContext* context, int32 *pPixel, int32 *pPallette);
extern char *
ET_PostGetSelectedText(MWContext* context);
extern void
ET_PostScrollDocTo(MWContext* context, int loc, int32 x, int32 y);
extern void
ET_PostScrollDocBy(MWContext* context, int loc, int32 x, int32 y);
extern void
ET_PostBackCommand(MWContext* context);
extern void
ET_PostForwardCommand(MWContext* context);
extern void
ET_PostHomeCommand(MWContext* context);
extern JSBool
ET_PostFindCommand(MWContext* context, char * szName, JSBool matchCase,
JSBool searchBackward);
extern void
ET_PostPrintCommand(MWContext* context);
extern void
ET_PostOpenFileCommand(MWContext* context);
extern void
ET_MakeHTMLAlert(MWContext * context, const char * szString);
/* respond to events sent to the mocha thread by the mozilla thread */
extern void
ET_PostJsEventAck(MWContext* context, LO_Element * pEle, int type,
ETClosureFunc fnClosure, void * pStuff,
ETEventStatus status);
extern void
ET_PostEvalAck(MWContext * context, int doc_id, void * data,
char * str, size_t len, char * wysiwyg_url,
char * base_href, Bool valid, ETEvalAckFunc fn);
extern void
ET_PostRestoreAck(void *data, LO_BlockInitializeStruct *param,
ETRestoreAckFunc fn);
/* netlib events */
extern char *
ET_net_GetCookie(MWContext* context, int32 doc_id);
extern char *
ET_net_SetCookieString(MWContext* context, char * szCookie, int32 doc_id);
extern NET_StreamClass *
ET_net_CacheConverter(FO_Present_Types format, void * obj,
URL_Struct *pUrl, MWContext * pContext);
extern void
ET_net_FindURLInCache(URL_Struct * pUrl, MWContext * pContext);
extern NET_StreamClass *
ET_net_StreamBuilder(FO_Present_Types format, URL_Struct *pUrl,
MWContext * pContext);
/* layout events */
extern void
ET_lo_ResetForm(MWContext * pContext, LO_Element * ele);
void
ET_fe_SubmitInputElement(MWContext * pContext, LO_Element * ele);
/*
* Synchronously shove the given text down the parser's processing
* queue. If the currently loaded document is not equal to
* doc_id, this message should be ignored since it arrived too
* late for the intended document
*/
extern int
ET_lo_DoDocWrite(JSContext *cx, MWContext * context, NET_StreamClass * stream,
char * str, size_t len, int32 doc_id);
extern void
ET_il_GetImage(const char * str, MWContext * pContext, IL_GroupContext *img_cx,
LO_ImageStruct * image_data, NET_ReloadMethod how);
extern void
ET_il_SetGroupObserver(MWContext * pContext, IL_GroupContext *pImgCX, void *pDpyCX,
JSBool bAddObserver);
extern void
ET_InterruptImgCX(MWContext * pContext);
/*
* Tell layout to trash the current document.
*/
extern void
ET_lo_DiscardDocument(MWContext * pContext);
/*
* Tell layout to prepare a layer for writing.
*/
extern Bool
ET_lo_PrepareLayerForWriting(MWContext *context, int32 layer_id,
const char *referer);
/*
* Return a copy of the current history element. Caller must free
*/
extern History_entry *
ET_shist_GetCurrent(MWContext * pContext);
/*
* Return the current security status.
*/
extern int
ET_GetSecurityStatus(MWContext * pContext);
/*
* Make sure Mocha/Java glue is ready. Returns the same return code as
* LM_InitMoja.
*/
extern int
ET_InitMoja(MWContext * pContext);
/*
* Pack up toys and go home
*/
extern void
ET_FinishMocha(void);
/*
* Used to call a stream completion function in the mozilla
* thread
*/
extern void
ET_moz_CallFunction(ETVoidPtrFunc fn, void * data);
extern void
ET_moz_CallFunctionAsync(ETVoidPtrFunc fn, void * data);
extern PRBool
ET_moz_CallFunctionBool(ETBoolPtrFunc fn, void * data);
extern int32
ET_moz_CallFunctionInt(ETIntPtrFunc fn, void * data);
extern char *
ET_moz_CallFunctionString(ETStringPtrFunc fn, void * data);
extern void
ET_moz_CallAsyncAndSubEventLoop(ETVoidPtrFunc fn, void *data,
MWContext *context);
extern void
ET_moz_Abort(MKStreamAbortFunc fn, void * data, int status);
extern void
ET_moz_SetMochaWriteStream(MochaDecoder * decoder);
extern NET_StreamClass *
ET_moz_DocCacheConverter(MWContext * context, URL_Struct * pUrl,
char * wysiwyg_url, int32 layer_id);
extern PRBool
ET_moz_VerifyComponentFunction(ETVerifyComponentFunc fn, ETBoolPtrFunc *pActive_callback,
ETVoidPtrFunc *pStartup_callback);
extern void
ET_moz_CompSetterFunction(ETCompPropSetterFunc fn, char *name, void *data);
extern void *
ET_moz_CompGetterFunction(ETCompPropGetterFunc fn, char *name);
extern void *
ET_moz_CompMethodFunction(ETCompMethodFunc fn, int32 argc, JSCompArg *argv);
typedef enum {
CL_Move,
CL_MoveX,
CL_MoveY,
CL_Offset,
CL_Resize,
CL_SetBboxWidth,
CL_SetBboxHeight,
CL_SetBboxTop,
CL_SetBboxLeft,
CL_SetBboxBottom,
CL_SetBboxRight,
CL_SetHidden,
CL_MoveInZ,
CL_SetSrc,
CL_SetSrcWidth,
CL_SetZ,
CL_SetBgColor,
CL_SetBackdrop
} ETLayerOp;
extern int
ET_TweakLayer(MWContext * context, CL_Layer * layer, int32 x, int32 y,
void *param_ptr, int32 param_val, ETLayerOp op,
const char *referer, int32 doc_id);
extern void
ET_RestoreLayerState(MWContext *context, int32 layer_id,
LO_BlockInitializeStruct *param, ETRestoreAckFunc fn,
void *data);
extern int32
ET_npl_RefreshPluginList(MWContext* context, XP_Bool refreshInstances);
extern JSCFResult
ET_JSCFExecute(MWContext *context, const char *script_name,
JSCFCookieData *data, Bool *data_changed);
extern JSBool
ET_HandlePref(JSContext * cx, uint argc, jsval * argv, jsval * rval);
extern void
ET_SetPluginWindow(MWContext * pContext, void * app);
NSPR_END_EXTERN_C
#endif /* libevent_h___ */

546
mozilla/include/libmocha.h Normal file
View File

@@ -0,0 +1,546 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*
* Header file for Mocha in the Navigator (libmocha).
*/
#ifndef libmocha_h___
#define libmocha_h___
#include "ntypes.h"
#include "il_types.h"
#include "prtypes.h"
#include "plhash.h"
#include "prthread.h"
#include "jsapi.h"
/* enable JavaScript Debugger support */
#if defined (_WIN32) || defined(XP_UNIX) || defined(powerc) || defined(__powerc) || defined(XP_OS2)
#ifdef JAVA
#define JSDEBUGGER 1
#endif
#endif
NSPR_BEGIN_EXTERN_C
typedef struct JSTimeout JSTimeout;
typedef struct JSPrincipalsList JSPrincipalsList;
typedef struct JSNestingUrl JSNestingUrl;
/*
* There exists one MochaDecoder per top-level MWContext that decodes Mocha,
* either from an HTML page or from a "mocha:[expr]" URL.
*/
typedef struct MochaDecoder {
int32 forw_count; /* forward reference count */
int32 back_count; /* back (up the tree) count */
JSContext *js_context;
MWContext *window_context;
JSObject *window_object;
NET_StreamClass *stream;
int32 stream_owner; /* id of layer that's loading the stream */
URL_Struct *url_struct;
JSTimeout *timeouts;
JSTimeout *saved_timeouts;
uint16 signature_ordinal;
PRPackedBool replace_location;
PRPackedBool resize_reload;
PRPackedBool load_event_sent;
PRPackedBool visited;
PRPackedBool writing_input;
PRPackedBool free_stream_on_close;
PRPackedBool in_window_quota;
PRPackedBool called_win_close;
PRPackedBool principals_compromised;
const char *source_url;
JSNestingUrl *nesting_url;
uint32 error_count;
uint32 event_mask;
int32 active_layer_id;
uint32 active_form_id;
uint32 event_bit;
int32 doc_id;
/*
* Class prototype objects, in alphabetical order. Must be CLEARed (set
* to null) in LM_PutMochaDecoder, HELD (GC roots added) in lm_NewWindow,
* and DROPped (removed as GC roots) in lm_DestroyWindow.
* XXXbe clean up, clear via bzero, using a sub-structure.
*/
JSObject *anchor_prototype;
JSObject *bar_prototype;
JSObject *document_prototype;
JSObject *event_prototype;
JSObject *event_capturer_prototype;
JSObject *event_receiver_prototype;
JSObject *form_prototype;
JSObject *image_prototype;
JSObject *input_prototype;
JSObject *layer_prototype;
JSObject *option_prototype;
JSObject *rect_prototype;
JSObject *url_prototype;
/*
* Window sub-objects. These must also follow the CLEAR/HOLD/DROP
* protocol mentioned above.
*/
JSObject *document;
JSObject *history;
JSObject *location;
JSObject *navigator;
JSObject *components;
JSObject *screen;
JSObject *hardware;
JSObject *crypto;
JSObject *pkcs11;
/*
* Ad-hoc GC roots.
*/
JSObject *event_receiver;
JSObject *opener;
JSVersion firstVersion; /* First JS script tag version. */
/*
* Security info for all of this decoder's scripts, except those
* contained in layers.
*/
JSPrincipals *principals;
JSPrincipalsList*early_access_list;
IL_GroupContext *image_context; /* Image context for anonymous images */
/*
* Table that maintains an id to JS object mapping for reflected
* elements. This is used during resize to reestablish the connection
* between layout elements and their corresponding JS object.
* Form elements are special, since they can't use the same keying
*/
PRHashTable *id_to_object_map;
} MochaDecoder;
/*
* Number of buckets for the id-to-object hash table.
*/
#define LM_ID_TO_OBJ_MAP_SIZE 20
#define LM_FORM_ELEMENT_MAP_SIZE 10
/*
* Types of objects reflected into Mocha
*/
typedef enum {
LM_APPLETS = 0,
LM_FORMS,
LM_LINKS,
LM_NAMEDANCHORS,
LM_EMBEDS,
LM_IMAGES,
LM_FORMELEMENTS,
LM_LAYERS
} ReflectedObject;
/*
* Generates an id-to-object mapping key from the ReflectedObject
* type, the containing layer id and the id of the object itself.
* The key is 4 bits type, 14 bits layer_id and 14 bits id.
*/
#define LM_GET_MAPPING_KEY(obj_type, layer_id, id) \
(void *)(((((uint32)obj_type) << 28) & 0xF0000000UL) | \
((((uint32)layer_id) << 14) & 0x0FFFC000UL) | \
(((uint32)id) & 0x00003FFFUL))
/*
* Public, well-known string constants.
*/
extern char js_language_name[]; /* "JavaScript" */
extern char js_content_type[]; /* "application/x-javascript" */
/*
* Initialize and finalize Mocha-in-the-client.
*/
extern void LM_InitMocha(void);
extern void LM_FinishMocha(void);
/*
* Force mocha on in the given context, even if the user pref is set to
* disable mocha.
*/
extern void LM_ForceJSEnabled(MWContext *cx);
/*
* Initialize and finalize Mocha-Java connection
*/
#define LM_MOJA_UNINITIALIZED 0
#define LM_MOJA_OK 1
#define LM_MOJA_JAVA_FAILED 2
#define LM_MOJA_OUT_OF_MEMORY 3
extern int LM_InitMoja(void);
extern void LM_FinishMoja(void);
extern int LM_IsMojaInitialized(void);
/*
* Enter or leave the big mocha lock. Any thread which wants to
* preserve JavaScript run-to-completion semantics must bracket
* JavaScript evaluation with these calls.
*/
typedef void
(PR_CALLBACK *JSLockReleaseFunc)(void * data);
extern void PR_CALLBACK LM_LockJS(MWContext *mwc);
extern void PR_CALLBACK LM_UnlockJS(MWContext *mwc);
extern JSBool PR_CALLBACK LM_AttemptLockJS(MWContext *mwc,
JSLockReleaseFunc fn, void * data);
extern JSBool PR_CALLBACK LM_ClearAttemptLockJS(MWContext *mwc,
JSLockReleaseFunc fn,
void * data);
extern PRBool PR_CALLBACK
LM_HandOffJSLock(PRThread * oldOwner, PRThread *newOwner);
/*
* For interruption purposes we will sometimes need to know the
* context who is holding the JS lock
*/
extern void LM_JSLockSetContext(MWContext * context);
extern MWContext * LM_JSLockGetContext(MWContext *mwc);
/*
* Enable/disable for Mocha-in-the-client.
*/
#define LM_SwitchMocha(toggle) LM_SetMochaEnabled(toggle)
extern JSBool
LM_GetMochaEnabled(void);
/*
* Get (create if necessary) a MochaDecoder for context, adding a reference
* to its window_object. Put drops the reference, destroying window_object
* when the count reaches zero. These functions should only be called in
* the mocha thread or while holding the JS-lock
*/
extern MochaDecoder *
LM_GetMochaDecoder(MWContext *context);
extern void
LM_PutMochaDecoder(MochaDecoder *decoder);
/*
* Get the source URL for script being loaded by document. This URL will be
* the document's URL for inline script, or the SRC= URL for included script.
* The returned pointer is safe only within the extent of the function that
* calls LM_GetSourceURL().
*/
extern const char *
LM_GetSourceURL(MochaDecoder *decoder);
/*
* Set the current layer and hence the current scope for script evaluation.
*/
extern void
LM_SetActiveLayer(MWContext * context, int32 layer_id);
/*
* Get the current layer and hence the current scope for script evaluation.
*/
extern int32
LM_GetActiveLayer(MWContext * context);
/*
* Evaluate the contents of a SCRIPT tag. You can specify the JSObject
* to use as the base scope. Pass NULL to use the default window_object
*/
extern JSBool
LM_EvaluateBuffer(MochaDecoder *decoder, void *base, size_t length,
uint lineno, char * scope_to, struct JSPrincipals *principals,
JSBool unicode, jsval *result);
/*
* Evaluate an expression entity in an HTML attribute (WIDTH="&{height/2};").
* Returns null on error, otherwise a pointer to the malloc'd string result.
* The caller is responsible for freeing the string result.
*/
extern char *
LM_EvaluateAttribute(MWContext *context, char *expr, uint lineno);
/*
* Remove any MochaDecoder window_context pointer to an MWContext that's
* being destroyed.
*/
extern void
LM_RemoveWindowContext(MWContext *context, History_entry * he);
extern void
LM_DropSavedWindow(MWContext *context, void *window);
/*
* Set and clear the HTML stream and URL for the MochaDecoder
* associated with the given context
*/
extern JSBool
LM_SetDecoderStream(MWContext * context, NET_StreamClass *stream,
URL_Struct *url_struct, JSBool free_stream_on_close);
/*
* Start caching HTML or plain text generated by document.write() where the
* script is running on mc, the document is being generated into decoder's
* window, and url_struct tells about the generator.
*/
extern NET_StreamClass *
LM_WysiwygCacheConverter(MWContext *context, URL_Struct *url_struct,
const char * wysiwyg_url, const char * base_href);
/*
* Skip over the "wysiwyg://docid/" in url_string and return a pointer to the
* real URL hidden after the prefix. If url_string is not of "wysiwyg:" type,
* just return url_string. Never returns null.
*/
extern const char *
LM_StripWysiwygURLPrefix(const char *url_string);
/*
* This function works only on "wysiwyg:" type URLs -- don't call it unless
* you know that NET_URL_Type(url_string) is WYSIWYG_TYPE_URL. It'll return
* null if url_string seems too short, or if it can't find the third slash.
*/
extern const char *
LM_SkipWysiwygURLPrefix(const char *url_string);
/*
* Return a pointer to a malloc'd string of the form "<BASE HREF=...>" where
* the "..." URL is the directory of cx's origin URL. Such a base URL is the
* default base for relative URLs in generated HTML.
*/
extern char *
LM_GetBaseHrefTag(JSContext *cx, JSPrincipals *principals);
/*
* XXX Make these public LO_... typedefs in lo_ele.h/ntypes.h?
*/
struct lo_FormData_struct;
struct lo_NameList_struct;
extern struct lo_FormData_struct *
LO_GetFormDataByID(MWContext *context, int32 layer_id, intn form_id);
extern uint
LO_EnumerateForms(MWContext *context, int32 layer_id);
extern struct LO_ImageStruct_struct *
LO_GetImageByIndex(MWContext *context, int32 layer_id, intn image_id);
extern uint
LO_EnumerateImages(MWContext *context, int32 layer_id);
/*
* Reflect display layers into Mocha.
*/
extern JSObject *
LM_ReflectLayer(MWContext *context, int32 layer_id, int32 parent_layer_id,
PA_Tag *tag);
extern LO_FormElementStruct *
LO_GetFormElementByIndex(struct lo_FormData_struct *form_data, int32 index);
extern uint
LO_EnumerateFormElements(MWContext *context,
struct lo_FormData_struct *form_data);
/*
* Layout helper function to find a named anchor by its index in the
* document.anchors[] array.
*/
extern struct lo_NameList_struct *
LO_GetNamedAnchorByIndex(MWContext *context, int32 layer_id, uint index);
extern uint
LO_EnumerateNamedAnchors(MWContext *context, int32 layer_id);
/*
* Layout Mocha helper function to find an HREF Anchor by its index in the
* document.links[] array.
*/
extern LO_AnchorData *
LO_GetLinkByIndex(MWContext *context, int32 layer_id, uint index);
extern uint
LO_EnumerateLinks(MWContext *context, int32 layer_id);
extern LO_JavaAppStruct *
LO_GetAppletByIndex(MWContext *context, int32 layer_id, uint index);
extern uint
LO_EnumerateApplets(MWContext *context, int32 layer_id);
extern LO_EmbedStruct *
LO_GetEmbedByIndex(MWContext *context, int32 layer_id, uint index);
extern uint
LO_EnumerateEmbeds(MWContext *context, int32 layer_id);
/*
* Get and set a color attribute in the current document state.
*/
extern void
LO_GetDocumentColor(MWContext *context, int type, LO_Color *color);
extern void
LO_SetDocumentColor(MWContext *context, int type, LO_Color *color);
/*
* Layout function to reallocate the lo_FormElementOptionData array pointed at
* by lo_FormElementSelectData's options member to include space for the number
* of options given by selectData->option_cnt.
*/
extern XP_Bool
LO_ResizeSelectOptions(lo_FormElementSelectData *selectData);
/*
* Discard the current document and all its subsidiary objects.
*/
extern void
LM_ReleaseDocument(MWContext *context, JSBool resize_reload);
/*
* Search if a the event is being captured in the frame hierarchy.
*/
extern XP_Bool
LM_EventCaptureCheck(MWContext *context, uint32 current_event);
/*
* Scroll a window to the given point.
*/
extern void LM_SendOnScroll(MWContext *context, int32 x, int32 y);
/*
* Display a help topic.
*/
extern void LM_SendOnHelp(MWContext *context);
/*
* Send a load or abort event for an image to a callback.
*/
typedef enum LM_ImageEvent {
LM_IMGUNBLOCK = 0,
LM_IMGLOAD = 1,
LM_IMGABORT = 2,
LM_IMGERROR = 3,
LM_LASTEVENT = 3
} LM_ImageEvent;
extern void
LM_ProcessImageEvent(MWContext *context, LO_ImageStruct *image_data,
LM_ImageEvent event);
/* This should be called when a named anchor is located. */
extern JSBool
LM_SendOnLocate(MWContext *context, struct lo_NameList_struct *name_rec);
extern JSObject *
LM_ReflectApplet(MWContext *context, LO_JavaAppStruct *applet_data,
PA_Tag * tag, int32 layer_id, uint index);
extern JSObject *
LM_ReflectEmbed(MWContext *context, LO_EmbedStruct *lo_embed,
PA_Tag * tag, int32 layer_id, uint index);
struct lo_FormData_struct;
struct lo_NameList_struct;
extern JSObject *
LM_ReflectForm(MWContext *context, struct lo_FormData_struct *form_data,
PA_Tag * tag, int32 layer_id, uint index);
extern JSObject *
LM_ReflectFormElement(MWContext *context, int32 layer_id, int32 form_id,
int32 element_id, PA_Tag * tag);
extern JSObject *
LM_ReflectLink(MWContext *context, LO_AnchorData *anchor_data, PA_Tag * tag,
int32 layer_id, uint index);
extern JSObject *
LM_ReflectNamedAnchor(MWContext *context, struct lo_NameList_struct *name_rec,
PA_Tag * tag, int32 layer_id, uint index);
extern JSObject *
LM_ReflectImage(MWContext *context, LO_ImageStruct *image_data,
PA_Tag * tag, int32 layer_id, uint index);
extern JSBool
LM_CanDoJS(MWContext *context);
extern JSBool
LM_IsActive(MWContext *context);
/*
* Security.
*/
extern JSPrincipals *
LM_NewJSPrincipals(URL_Struct *archive, char *name, const char *codebase);
extern char *
LM_ExtractFromPrincipalsArchive(JSPrincipals *principals, char *name,
uint *length);
extern JSBool
LM_SetUntransformedSource(JSPrincipals *principals, char *original,
char *transformed);
extern JSPrincipals * PR_CALLBACK
LM_GetJSPrincipalsFromJavaCaller(JSContext *cx, int callerDepth);
/*
* LM_RegisterPrincipals will verify and register a set of principals
* in the decoder, modifying decoder->principals in the process. It
* returns the modified decoder.
*
* The "name" parameter may be NULL if "principals" was created with a name.
*/
extern JSPrincipals *
LM_RegisterPrincipals(MochaDecoder *decoder, JSPrincipals *principals,
char *name, char *src);
/*
* JavaScript Debugger support
*/
#ifdef JSDEBUGGER
extern NET_StreamClass*
LM_StreamBuilder( int format_out,
void *data_obj,
URL_Struct *URL_s,
MWContext *mwcontext );
extern JSBool
LM_GetJSDebugActive(void);
extern void
LM_JamSourceIntoJSDebug( const char *filename,
const char *str,
int32 len,
MWContext *mwcontext );
#endif
NSPR_END_EXTERN_C
#endif /* libmocha_h___ */

3586
mozilla/lib/layout/layutil.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,95 @@
#!gmake
#
# The contents of this file are subject to the Netscape Public License
# Version 1.0 (the "NPL"); you may not use this file except in
# compliance with the NPL. You may obtain a copy of the NPL at
# http://www.mozilla.org/NPL/
#
# Software distributed under the NPL is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
# for the specific language governing rights and limitations under the
# NPL.
#
# The Initial Developer of this code under the NPL is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
# Reserved.
DEPTH = ../..
MODULE = mocha
LIBRARY_NAME = mocha
REQUIRES = lay net parse img js style layer applet dbm nspr security \
htmldlgs util jtools pref java libreg softupdt jsdebug
CSRCS = et_mocha.c \
et_moz.c \
lm_applt.c \
lm_bars.c \
lm_cmpnt.c \
lm_doc.c \
lm_embed.c \
lm_event.c \
lm_form.c \
lm_hardw.c \
lm_hist.c \
lm_href.c \
lm_img.c \
lm_init.c \
lm_input.c \
lm_nav.c \
lm_plgin.c \
lm_screen.c \
lm_supdt.c \
lm_taint.c \
lm_trggr.c \
lm_url.c \
lm_win.c \
lm_layer.c \
lm_wngrp.c \
$(NULL)
ifdef MOZ_JAVA
CSRCS += \
lm_jsd.c \
$(NULL)
endif
ifndef NO_SECURITY
CSRCS += lm_crypt.c lm_pk11.c
endif
include $(DEPTH)/config/rules.mk
DEFINES += -DDLL_SUFFIX=\"$(DLL_SUFFIX)\"
ifdef JS_THREADSAFE
DEFINES += -DJS_THREADSAFE
endif
EMBED_CFLAGS = $(CFLAGS) -I$(DEPTH)/lib/plugin
TAINT_CFLAGS = $(CFLAGS) -I$(DEPTH)/lib/libjar -I$(DEPTH)/sun-java/netscape/security/_jri
ifneq ($(OS_ARCH),OS2)
$(OBJDIR)/lm_embed.o: lm_embed.c
@$(MAKE_OBJDIR)
$(CC) -o $@ -c $(EMBED_CFLAGS) $<
$(OBJDIR)/lm_taint.o: lm_taint.c
@$(MAKE_OBJDIR)
$(CC) -o $@ -c $(TAINT_CFLAGS) $<
else
$(OBJDIR)/lm_embed.o: lm_embed.c
@$(MAKE_OBJDIR)
$(CC) -Fo$@ -c $(EMBED_CFLAGS) $<
$(OBJDIR)/lm_taint.o: lm_taint.c
@$(MAKE_OBJDIR)
$(CC) -Fo$@ -c $(TAINT_CFLAGS) $<
endif

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

880
mozilla/lib/libmocha/lm.h Normal file
View File

@@ -0,0 +1,880 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef lm_h___
#define lm_h___
/*
* JS in the Navigator library-private interface.
*/
#include "xp.h" /* for uint and PA_Block */
#include "prlong.h" /* for int64 time type used below */
#include "libevent.h" /* until its a stand-alone */
#include "libmocha.h"
/*
* Shared string constants for common property names.
*/
extern char lm_argc_err_str[]; /* "incorrect number of arguments" */
extern char lm_unknown_origin_str[]; /* "[unknown origin]" */
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_onMouseDown_str[]; /* "onMouseDown" */
extern char lm_onMouseOver_str[]; /* "onMouseOver" */
extern char lm_onMouseOut_str[]; /* "onMouseOut" */
extern char lm_onMouseUp_str[]; /* "onMouseUp" */
extern char lm_onLocate_str[]; /* "onLocate" */
extern char lm_onHelp_str[]; /* "onHelp" [EA] */
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_document_str[]; /* "document" */
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_layers_str[]; /* "layers" */
extern char lm_location_str[]; /* "location" */
extern char lm_navigator_str[]; /* "navigator" */
extern char lm_netcaster_str[]; /* "netcaster" */
extern char lm_components_str[]; /* "components" */
extern char lm_parentLayer_str[]; /* "parentLayer" */
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" */
extern char lm_event_str[]; /* "event" */
extern char lm_methodPrefix_str[]; /* "#method" */
extern char lm_methodArgc_str[]; /* "#method" */
extern char lm_methodArgv_str[]; /* "#method" */
extern char lm_getPrefix_str[]; /* "#get_" */
extern char lm_setPrefix_str[]; /* "#set_" */
extern char lm_typePrefix_str[]; /* "#type_" */
extern const char *lm_event_argv[]; /* {lm_event_str} */
extern PRThread *lm_InterpretThread;
extern PRThread *mozilla_thread;
extern PRThread *lm_js_lock_previous_owner;
extern JSContext *lm_writing_context;
/*
* Timeout structure threaded on MochaDecoder.timeouts for cleanup.
*/
struct JSTimeout {
int32 ref_count; /* reference count to shared usage */
char *expr; /* the JS expression to evaluate */
JSObject *funobj; /* or function to call, if !expr */
jsval *argv; /* function actual arguments */
void *toid; /* Identifier, used internally only */
uint32 public_id; /* Returned as value of setTimeout() */
uint16 argc; /* and argument count */
uint16 spare; /* alignment padding */
int32 doc_id; /* document this is for */
int32 interval; /* Non-zero if repetitive timeout */
int64 when; /* nominal time to run this timeout */
JSVersion version; /* Version of JavaScript to execute */
JSPrincipals *principals; /* principals with which to execute */
char *filename; /* filename of setTimeout call */
uint32 lineno; /* line number of setTimeout call */
JSTimeout *next; /* next timeout in list */
};
extern void lm_ClearWindowTimeouts(MochaDecoder *decoder);
struct JSNestingUrl {
JSNestingUrl *next;
char *str;
};
/*
* Event queue stack madness to handle doc.write("<script>doc.write...").
*/
typedef struct QueueStackElement {
PREventQueue * queue;
MWContext * context;
int32 doc_id;
struct QueueStackElement * up;
struct QueueStackElement * down;
PRPackedBool done;
PRPackedBool discarding;
PRPackedBool inherit_parent;
void * retval;
} QueueStackElement;
extern void
et_SubEventLoop(QueueStackElement * qse);
/*
* Stack size per window context, plus one for the navigator.
*/
#define LM_STACK_SIZE 8192
extern JSRuntime *lm_runtime;
extern JSClass lm_window_class;
extern JSClass lm_layer_class;
extern JSClass lm_document_class;
extern JSClass lm_event_class;
extern JSBool lm_SaveParamString(JSContext *cx, PA_Block *bp,
const char *str);
extern MochaDecoder *lm_NewWindow(MWContext *context);
extern void lm_DestroyWindow(MochaDecoder *decoder);
/*
* Hold and drop the reference count for tree back-edges that go from object
* private data to the containing decoder. These refs do not keep the object
* tree under decoder alive from the GC, but they do keep decoder from being
* destroyed and some out of order finalizer tripping over its freed memory.
*/
#ifdef DEBUG
extern MochaDecoder *lm_HoldBackCount(MochaDecoder *decoder);
extern void lm_DropBackCount(MochaDecoder *decoder);
#define HOLD_BACK_COUNT(decoder) lm_HoldBackCount(decoder)
#define DROP_BACK_COUNT(decoder) lm_DropBackCount(decoder)
#else
#define HOLD_BACK_COUNT(decoder) \
(((decoder) ? (decoder)->back_count++ : 0), (decoder))
#define DROP_BACK_COUNT(decoder) \
(((decoder) && --(decoder)->back_count <= 0 && !(decoder)->forw_count) \
? lm_DestroyWindow(decoder) \
: (void)0)
#endif
extern JSBool lm_InitWindowContent(MochaDecoder *decoder);
extern JSBool lm_DefineWindowProps(JSContext *cx,
MochaDecoder *decoder);
extern JSBool lm_ResolveWindowProps(JSContext *cx,
MochaDecoder *decoder,
JSObject *obj,
jsval id);
extern void lm_FreeWindowContent(MochaDecoder *decoder,
JSBool fromDiscard);
extern JSBool lm_SetInputStream(JSContext *cx,
MochaDecoder *decoder,
NET_StreamClass *stream,
URL_Struct *url_struct,
JSBool free_stream_on_close);
extern JSObject *lm_DefineDocument(MochaDecoder *decoder,
int32 layer_id);
extern JSObject *lm_DefineHistory(MochaDecoder *decoder);
extern JSObject *lm_DefineLocation(MochaDecoder *decoder);
extern JSObject *lm_DefineNavigator(MochaDecoder *decoder);
extern JSObject *lm_DefineComponents(MochaDecoder *decoder);
extern JSObject *lm_DefineCrypto(MochaDecoder *decoder);
extern JSObject *lm_DefineScreen(MochaDecoder *decoder,
JSObject *parent);
extern JSObject *lm_DefineHardware(MochaDecoder *decoder,
JSObject *parent);
extern JSBool lm_DefinePluginClasses(MochaDecoder *decoder);
extern JSBool lm_DefineBarClasses(MochaDecoder *decoder);
extern JSBool lm_ResolveBar(JSContext *cx, MochaDecoder *decoder,
const char *name);
extern JSBool lm_DefineTriggers(void);
extern JSObject *lm_NewPluginList(JSContext *cx, JSObject *parent_obj);
extern JSObject *lm_NewMIMETypeList(JSContext *cx);
extern JSObject *lm_GetDocumentFromLayerId(MochaDecoder *decoder,
int32 layer_id);
extern JSObject *lm_DefinePkcs11(MochaDecoder *decoder);
/*
* Get (create if needed) document's form, link, and named anchor arrays.
*/
extern JSObject *lm_GetFormArray(MochaDecoder *decoder,
JSObject *document);
extern JSObject *lm_GetLinkArray(MochaDecoder *decoder,
JSObject *document);
extern JSObject *lm_GetNameArray(MochaDecoder *decoder,
JSObject *document);
extern JSObject *lm_GetAppletArray(MochaDecoder *decoder,
JSObject *document);
extern JSObject *lm_GetEmbedArray(MochaDecoder *decoder,
JSObject *document);
extern JSObject *lm_GetImageArray(MochaDecoder *decoder,
JSObject *document);
extern JSObject *lm_GetDocumentLayerArray(MochaDecoder *decoder,
JSObject *document);
/*
* dummy object for applets and embeds that can't be reflected
*/
extern JSObject *lm_DummyObject;
extern void lm_InitDummyObject(JSContext *cx);
/* bit vector for handlers */
typedef enum {
HANDLER_ONCLICK = 1 << 0,
HANDLER_ONFOCUS = 1 << 1,
HANDLER_ONBLUR = 1 << 2,
HANDLER_ONCHANGE = 1 << 3,
HANDLER_ONSELECT = 1 << 4,
HANDLER_ONSCROLL = 1 << 5,
HANDLER_ONMOUSEDOWN = 1 << 6,
HANDLER_ONMOUSEUP = 1 << 7,
HANDLER_ONKEYDOWN = 1 << 8,
HANDLER_ONKEYUP = 1 << 9,
HANDLER_ONKEYPRESS = 1 << 10,
HANDLER_ONDBLCLICK = 1 << 11
} JSHandlersBitVector;
/*
* Base class of all JS input private object data structures.
*/
typedef struct JSInputBase {
MochaDecoder *decoder; /* this window's JS decoder */
int32 type; /* layout form element type */
JSHandlersBitVector handlers; /* bit vector for handlers */
} JSInputBase;
/*
* Base class of event-handling elements like layers and documents.
*/
typedef struct JSInputHandler {
JSInputBase base; /* decoder and type */
JSObject *object; /* this input handler's JS object */
uint32 event_mask; /* mask of events in progress */
} JSInputHandler;
/*
* Base class of input event-capturing elements like layers and documents.
*/
typedef struct JSEventReceiver {
JSObject *object; /* this event receiver's JS object */
uint32 event_mask; /* mask of events in progress */
} JSEventReceiver;
/*
* Base class of input event-handling elements like anchors and form inputs.
*/
typedef struct JSEventCapturer {
JSEventReceiver base; /* this event capturer's receiver base */
uint32 event_bit; /* mask of events being captured */
} JSEventCapturer;
#define base_decoder base.decoder
#define base_type base.type
#define base_handlers base.handlers
/*
* JS 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 JSURL {
JSInputHandler handler;
int32 layer_id;
uint32 index;
JSString *href;
JSString *target;
JSString *text;
} JSURL;
/* JS Document Object
* Documents exist per-window and per-layer
*/
typedef struct JSDocument {
JSEventCapturer capturer;
MochaDecoder *decoder;
JSObject *object;
int32 layer_id; /* The containing layer's id */
JSObject *forms;
JSObject *links;
JSObject *anchors;
JSObject *applets;
JSObject *embeds;
JSObject *images;
JSObject *layers;
} JSDocument;
#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 JSURL *
lm_NewURL(JSContext *cx, MochaDecoder *decoder,
LO_AnchorData *anchor_data, JSObject *document);
extern void
lm_ReplaceURL(MWContext *context, URL_Struct *url_struct);
extern JSBool
lm_GetURL(JSContext *cx, MochaDecoder *decoder, URL_Struct *url_struct);
extern const char *
lm_CheckURL(JSContext *cx, const char *url_string, JSBool checkFile);
extern JSBool
lm_CheckWindowName(JSContext *cx, const char *window_name);
extern PRHashTable *
lm_GetIdToObjectMap(MochaDecoder *decoder);
extern JSBool PR_CALLBACK
lm_BranchCallback(JSContext *cx, JSScript *script);
extern void PR_CALLBACK
lm_ErrorReporter(JSContext *cx, const char *message,
JSErrorReport *report);
extern JSObject *
lm_GetFormObjectByID(MWContext *context, int32 layer_id, uint form_id);
extern LO_FormElementStruct *
lm_GetFormElementByIndex(JSContext * cx, JSObject *form_obj, int32 index);
extern JSObject *
lm_GetFormElementFromMapping(JSContext *cx, JSObject *form_obj, uint32 index);
extern JSBool
lm_AddFormElement(JSContext *cx, JSObject *form, JSObject *obj,
char *name, uint index);
extern JSBool
lm_ReflectRadioButtonArray(MWContext *context, int32 layer_id, intn form_id,
const char *name, PA_Tag * tag);
extern JSBool
lm_SendEvent(MWContext *context, JSObject *obj, JSEvent *event,
jsval *result);
extern JSBool
lm_HandleEvent(JSContext *cx, JSObject *obj, JSObject *eventObj,
jsval funval, jsval *result);
extern JSBool
lm_FindEventHandler(MWContext *context, JSObject *obj, JSObject *eventObj,
jsval funval, jsval *result);
extern JSObject *
lm_NewEventObject(MochaDecoder * decoder, JSEvent * pEvent);
typedef struct JSEventNames {
const char *lowerName;
const char *mixedName;
} JSEventNames;
extern const char *
lm_EventName(uint32 event_bit);
extern JSEventNames *
lm_GetEventNames(uint32 event_bit);
/*
* Compile the given attribute and attach it to the JSObject
*/
extern JSBool
lm_CompileEventHandler(MochaDecoder * decoder, PA_Block id, PA_Block data,
int newline_(cx, sizeof *option);
if (!option)
goto bad;
option_obj =
JS_NewObject(cx, &lm_option_class,
input->input_decoder->option_prototype, obj);
if (!option_obj || !JS_SetPrivate(cx, option_obj, option)) {
JS_free(cx, option);
goto bad;
}
option->decoder = HOLD_BACK_COUNT(input->input_decoder);
option->object = option_obj;
option->index = (uint32)slot;
option->indexInForm = form_element->element_index;
option->data = NULL;
*vp = OBJECT_TO_JSVAL(option_obj);
goto good;
}
}
break;
case FORM_TYPE_RADIO:
case FORM_TYPE_CHECKBOX:
{
lo_FormElementToggleData *toggle;
toggle = &form_element->element_data->ele_toggle;
switch (input_slot) {
case INPUT_NAME:
str = lm_LocalEncodingToStr(context,
(char *)toggle->name);
break;
case INPUT_VALUE:
str = lm_LocalEncodingToStr(context,
(char *)toggle->value);
break;
case INPUT_STATUS:
*vp = BOOLEAN_TO_JSVAL(toggle->toggled);
goto good;
case INPUT_DEFAULT_STATUS:
*vp = BOOLEAN_TO_JSVAL(toggle->default_toggle);
goto good;
#if DISABLED_READONLY_SUPPORT
case INPUT_DISABLED:
*vp = BOOLEAN_TO_JSVAL(toggle->disabled);
goto good;
case INPUT_READONLY:
*vp = BOOLEAN_TO_JSVAL(FALSE);
goto good;
#endif
default:
/* Don't mess with a user-defined property. */
goto good;
}
}
break;
default:
{
lo_FormElementMinimalData *minimal;
minimal = &form_element->element_data->ele_minimal;
switch (input_slot) {
case INPUT_NAME:
str = lm_LocalEncodingToStr(context,
(char *)minimal->name);
break;
case INPUT_VALUE:
str = lm_LocalEncodingToStr(context,
(char *)minimal->value);
break;
#if DISABLED_READONLY_SUPPORT
case INPUT_DISABLED:
*vp = BOOLEAN_TO_JSVAL(minimal->disabled);
goto good;
case INPUT_READONLY:
*vp = BOOLEAN_TO_JSVAL(FALSE); /* minimal elements don't have the readonly attribute. */
goto good;
#endif
default:
/* Don't mess with a user-defined property. */
goto good;
}
}
break;
}
if (!str)
goto bad;
*vp = STRING_TO_JSVAL(str);
good:
LO_UnlockLayout();
return JS_TRUE;
bad:
LO_UnlockLayout();
return JS_FALSE;
}
char *
lm_FixNewlines(JSContext *cx, const char *value, JSBool formElement)
{
size_t size;
const char *cp;
char *tp, *new_value;
#if defined XP_PC
size = 1;
for (cp = value; *cp != '\0'; cp++) {
switch (*cp) {
case '\r':
if (cp[1] != '\n')
size++;
break;
case '\n':
if (cp > value && cp[-1] != '\r')
size++;
break;
}
}
size += cp - value;
#else
size = XP_STRLEN(value) + 1;
#endif
new_value = JS_malloc(cx, size);
if (!new_value)
return NULL;
for (cp = value, tp = new_value; *cp != '\0'; cp++) {
#if defined XP_MAC
if (*cp == '\n') {
if (cp > value && cp[-1] != '\r')
*tp++ = '\r';
} else {
*tp++ = *cp;
}
#elif defined XP_PC
switch (*cp) {
case '\r':
*tp++ = '\r';
if (cp[1] != '\n' && formElement)
*tp++ = '\n';
break;
case '\n':
if (cp > value && cp[-1] != '\r' && formElement)
*tp++ = '\r';
*tp++ = '\n';
break;
default:
*tp++ = *cp;
break;
}
#else /* XP_UNIX */
if (*cp == '\r') {
if (cp[1] != '\n')
*tp++ = '\n';
} else {
*tp++ = *cp;
}
#endif
}
*tp = '\0';
return new_value;
}
PR_STATIC_CALLBACK(JSBool)
input_setProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
JSInput *input;
enum input_slot input_slot;
const char *prop_name;
char *value = NULL;
LO_FormElementStruct *form_element;
MochaDecoder *decoder;
MWContext *context;
int32 intval;
jsint slot;
input = JS_GetInstancePrivate(cx, obj, &lm_input_class, NULL);
if (!input)
return JS_TRUE;
/* If the property is seting a key handler we find out now so
* that we can tell the front end to send the event. */
if (JSVAL_IS_STRING(id)) {
prop_name = JS_GetStringBytes(JSVAL_TO_STRING(id));
/* XXX use lm_onKeyDown_str etc. initialized by PARAM_ONKEYDOWN */
if (XP_STRCASECMP(prop_name, "onkeydown") == 0 ||
XP_STRCASECMP(prop_name, "onkeyup") == 0 ||
XP_STRCASECMP(prop_name, "onkeypress") == 0) {
form_element = lm_GetFormElementByIndex(cx, JS_GetParent(cx, obj),
input->index);
form_element->event_handler_present = TRUE;
}
return JS_TRUE;
}
XP_ASSERT(JSVAL_IS_INT(id));
slot = JSVAL_TO_INT(id);
decoder = input->input_decoder;
context = decoder->window_context;
input_slot = slot;
switch (input_slot) {
case INPUT_TYPE:
case INPUT_FORM:
case INPUT_OPTIONS:
/* These are immutable. */
break;
case INPUT_NAME:
case INPUT_VALUE:
case INPUT_DEFAULT_VALUE:
/* These are string-valued. */
if (!JSVAL_IS_STRING(*vp) &&
!JS_ConvertValue(cx, *vp, JSTYPE_STRING, vp)) {
return JS_FALSE;
}
value = lm_StrToLocalEncoding(context, JSVAL_TO_STRING(*vp));
break;
case INPUT_STATUS:
case INPUT_DEFAULT_STATUS:
#if DISABLED_READONLY_SUPPORT
case INPUT_READONLY:
case INPUT_DISABLED:
#endif
/* These must be Booleans. */
if (!JSVAL_IS_BOOLEAN(*vp) &&
!JS_ConvertValue(cx, *vp, JSTYPE_BOOLEAN, vp)) {
return JS_FALSE;
}
break;
case INPUT_LENGTH:
case INPUT_SELECTED_INDEX:
/* These should be integers. */
if (JSVAL_IS_INT(*vp))
intval = JSVAL_TO_INT(*vp);
else if (!JS_ValueToInt32(cx, *vp, &intval)) {
return JS_FALSE;
}
break;
}
LO_LockLayout();
form_element = lm_GetFormElementByIndex(cx, JS_GetParent(cx, obj),
input->index);
if (!form_element)
goto good;
switch (form_element->element_data->type) {
case FORM_TYPE_FILE:
/* if we try to set a file upload widget we better be a signed script */
if (!lm_CanAccessTarget(cx, JSTARGET_UNIVERSAL_FILE_READ))
break;
/* else fall through... */
case FORM_TYPE_TEXT:
case FORM_TYPE_TEXTAREA: /* XXX we ASSUME common struct prefixes */
case FORM_TYPE_PASSWORD:
{
lo_FormElementTextData *text;
JSBool ok;
char * fixed_string;
text = &form_element->element_data->ele_text;
switch (input_slot) {
case INPUT_NAME:
if (!lm_SaveParamString(cx, &text->name, value))
goto bad;
break;
case INPUT_VALUE:
case INPUT_DEFAULT_VALUE:
fixed_string = lm_FixNewlines(cx, value, JS_TRUE);
if (!fixed_string)
goto bad;
ok = (input_slot == INPUT_VALUE)
? lm_SaveParamString(cx, &text->current_text, fixed_string)
: lm_SaveParamString(cx, &text->default_text, fixed_string);
JS_free(cx, (char *)fixed_string);
if (!ok)
goto bad;
if (input_slot == INPUT_VALUE && context) {
ET_PostManipulateForm(context, (LO_Element *)form_element,
EVENT_CHANGE);
}
break;
#if DISABLED_READONLY_SUPPORT
case INPUT_DISABLED:
text->disabled = JSVAL_TO_BOOLEAN(*vp);
if (context) {
ET_PostManipulateForm(context, (LO_Element *)form_element,
EVENT_CHANGE);
}
break;
case INPUT_READONLY:
if (form_element->element_data->type == FORM_TYPE_FILE)
break;
text->readonly = JSVAL_TO_BOOLEAN(*vp);
if (context) {
ET_PostManipulateForm(context, (LO_Element *)form_element,
EVENT_CHANGE);
}
break;
#endif
default:
/* Don't mess with option or user-defined property. */
goto good;
}
}
break;
case FORM_TYPE_SELECT_ONE:
case FORM_TYPE_SELECT_MULT:
{
lo_FormElementSelectData *selectData;
lo_FormElementOptionData *optionData;
JSSelectOption *option;
int32 i, new_option_cnt, old_option_cnt;
selectData = &form_element->element_data->ele_select;
switch (slot) {
case INPUT_NAME:
if (!lm_SaveParamString(cx, &selectData->name, value))
goto bad;
break;
case INPUT_LENGTH:
new_option_cnt = intval;
old_option_cnt = selectData->option_cnt;
optionData = (lo_FormElementOptionData *) selectData->options;
/* Remove truncated slots, or clear extended element data. */
if (new_ayer(MWContext *context, int32 wrap_width, int32 parent_layer_id);
extern void
lm_RestoreLayerState(MWContext *context, int32 layer_id,
LO_BlockInitializeStruct *param);
extern PRHashNumber
lm_KeyHash(const void *key);
extern JSBool
lm_jsval_to_rgb(JSContext *cx, jsval *vp, LO_Color **rgbp);
extern JSBool
layer_setBgColorProperty(JSContext *cx, JSObject *obj, jsval *vp);
extern JSObject *
lm_GetActiveContainer(MochaDecoder *decoder);
extern JSBool
lm_GetPrincipalsCompromise(JSContext *cx, JSObject *obj);
extern char *
lm_FixNewlines(JSContext *cx, const char *value, JSBool formElement);
extern JSBool PR_CALLBACK
win_open(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval);
/* defined in libmocha.h */
#ifdef JSDEBUGGER
extern void
lm_InitJSDebug(JSRuntime *jsruntime);
extern void
lm_ExitJSDebug(JSRuntime *jsruntime);
#endif
#define IS_MESSAGE_WINDOW(context) \
(((context)->type == MWContextMail) || \
((context)->type == MWContextNews) || \
((context)->type == MWContextMailMsg) || \
((context)->type == MWContextNewsMsg))
/* INTL support */
extern char *
lm_StrToLocalEncoding(MWContext * context, JSString * str);
extern JSString *
lm_LocalEncodingToStr(MWContext * context, char * bytes);
/* end INTL support */
/* MLM */
typedef struct lm_lock_waiter {
JSLockReleaseFunc fn;
void * data;
struct lm_lock_waiter * next;
} lm_lock_waiter;
typedef struct ContextListStr ContextList;
typedef struct WindowGroup LMWindowGroup;
struct WindowGroup {
LMWindowGroup *next;
LMWindowGroup *prev;
/* XXXMLM - this entry is currently unused; it should eventually hold
* a shared JSContext for the thread group.
*/
JSContext *js_context;
PRBool interruptCurrentOp;
PRMonitor *owner_monitor;
PRThread *thread;
PRThread *owner;
lm_lock_waiter *waiting_list;
int32 current_count;
PRBool mozWantsLock;
PRBool mozGotLock;
PRBool hasLock;
JSContext *lock_context;
JSTimeout **js_timeout_insertion_point;
JSTimeout *js_timeout_running;
uint inputRecurring;
PREventQueue *interpret_queue;
QueueStackElement *queue_stack;
uint queue_depth;
uint queue_count;
PRMonitor *queue_monitor;
ContextList *mw_contexts;
MWContext *current_context;
PRBool done;
};
extern void lm_InitWindowGroups(void);
extern LMWindowGroup *lm_NewWindowGroup(void);
extern void lm_StartWindowGroup(LMWindowGroup *grp);
extern void lm_DestroyWindowGroup(LMWindowGroup *grp);
extern LMWindowGroup *LM_GetDefaultWindowGroup(MWContext *mwc);
extern LMWindowGroup *lm_MWContextToGroup(MWContext *mwc);
extern LMWindowGroup *lm_QueueStackToGroup(QueueStackElement *qse);
extern PREventQueue *LM_MWContextToQueue(MWContext *mwc);
extern PREventQueue *LM_WindowGroupToQueue(LMWindowGroup *lmg);
extern ContextList *lm_GetEntryForContext(LMWindowGroup *grp, MWContext *cx);
extern void LM_AddContextToGroup(LMWindowGroup *grp, MWContext *cx);
extern void LM_RemoveContextFromGroup(MWContext *cx);
extern PRBool LM_IsLocked(LMWindowGroup *grp);
extern void LM_BeginRequest(LMWindowGroup *grp, JSContext *jsc);
extern void LM_EndRequest(LMWindowGroup *grp, JSContext *jsc);
extern void LM_LockJSByGroup(LMWindowGroup *grp);
extern void LM_UnlockJSByGroup(LMWindowGroup *grp);
extern JSBool lm_inited(void);
extern JSContext *LM_GetCrippledContext(void);
extern MochaDecoder *LM_GetCrippledDecoder(void);
extern void LM_SetCrippledDecoder(MochaDecoder *md);
extern JSBool LM_ShouldRunGC(JSContext *cx, JSGCStatus status);
/* MLM */
#endif /* lm_h___ */

View File

@@ -0,0 +1,675 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*
* JS reflection of Navigator Components.
*
* Created: Tom Pixley, 4/22/97
*
*/
#include "lm.h"
#include "prmem.h"
#include "np.h"
#include "net.h"
#include "fe_proto.h"
/*
* -----------------------------------------------------------------------
*
* Data types
*
* -----------------------------------------------------------------------
*/
typedef struct JSComponent
{
MochaDecoder *decoder;
JSObject *obj;
JSString *name;
ETBoolPtrFunc active_callback;
ETVoidPtrFunc startup_callback;
} JSComponent;
typedef struct JSComponentArray
{
MochaDecoder *decoder;
JSObject *obj;
jsint length;
} JSComponentArray;
typedef struct JSPreDefComponent
{
const char *name;
ETVerifyComponentFunc func;
} JSPreDefComponent;
static JSPreDefComponent predef_components[] =
{
{0}
};
/*
* -----------------------------------------------------------------------
*
* Reflection of an installed component.
*
* -----------------------------------------------------------------------
*/
enum component_slot
{
COMPONENT_NAME = -1,
COMPONENT_ACTIVE = -2
};
static JSPropertySpec component_props[] =
{
{"name", COMPONENT_NAME, JSPROP_ENUMERATE | JSPROP_READONLY},
{"active", COMPONENT_ACTIVE, JSPROP_ENUMERATE | JSPROP_READONLY},
{0}
};
extern JSClass lm_component_class;
PR_STATIC_CALLBACK(JSBool)
component_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
JSComponent *component;
JSString *str;
jsint slot;
if (!JSVAL_IS_INT(id))
return JS_TRUE;
slot = JSVAL_TO_INT(id);
component = JS_GetInstancePrivate(cx, obj, &lm_component_class, NULL);
if (!component)
return JS_TRUE;
switch (slot) {
case COMPONENT_NAME:
str = component->name;
if (str)
*vp = STRING_TO_JSVAL(str);
else
*vp = JS_GetEmptyStringValue(cx);
break;
case COMPONENT_ACTIVE:
*vp = JSVAL_FALSE;
if (ET_moz_CallFunctionBool((ETBoolPtrFunc)component->active_callback, NULL))
*vp = JSVAL_TRUE;
break;
default:
break;
}
return JS_TRUE;
}
PR_STATIC_CALLBACK(JSBool)
component_mozilla_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
char *name, *type_str, *get_str;
jsval type, func;
if (!JSVAL_IS_STRING(id))
return JS_TRUE;
name = JS_GetStringBytes(JSVAL_TO_STRING(id));
type_str = JS_malloc(cx, XP_STRLEN(lm_typePrefix_str) + XP_STRLEN(name) + 1);
get_str = JS_malloc(cx, XP_STRLEN(lm_getPrefix_str) + XP_STRLEN(name) + 1);
if (!type_str || !get_str)
return JS_TRUE;
XP_STRCPY(type_str, lm_typePrefix_str);
XP_STRCAT(type_str, name);
XP_STRCPY(get_str, lm_getPrefix_str);
XP_STRCAT(get_str, name);
if (!JS_GetProperty(cx, obj, type_str, &type) ||
!JSVAL_IS_INT(type) ||
!JS_GetProperty(cx, obj, get_str, &func))
return JS_TRUE;
JS_free(cx, type_str);
JS_free(cx, get_str);
switch(JSVAL_TO_INT(type)) {
case ARGTYPE_INT32:
*vp = INT_TO_JSVAL((int32)ET_moz_CompGetterFunction((ETCompPropGetterFunc)JSVAL_TO_INT(func), name));
break;
case ARGTYPE_BOOL:
*vp = BOOLEAN_TO_JSVAL((JSBool)ET_moz_CompGetterFunction((ETCompPropGetterFunc)JSVAL_TO_INT(func), name));
break;
case ARGTYPE_STRING:
*vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,
(char*)ET_moz_CompGetterFunction((ETCompPropGetterFunc)JSVAL_TO_INT(func), name)));
break;
}
return JS_TRUE;
}
PR_STATIC_CALLBACK(JSBool)
component_mozilla_setProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
char *name, *type_str, *set_str, *prop_val;
jsval type, func;
if (!JSVAL_IS_STRING(id))
return JS_TRUE;
name = JS_GetStringBytes(JSVAL_TO_STRING(id));
type_str = JS_malloc(cx, XP_STRLEN(lm_typePrefix_str) + XP_STRLEN(name) + 1);
set_str = JS_malloc(cx, XP_STRLEN(lm_setPrefix_str) + XP_STRLEN(name) + 1);
if (!type_str || !set_str)
return JS_TRUE;
XP_STRCPY(type_str, lm_typePrefix_str);
XP_STRCAT(type_str, name);
XP_STRCPY(set_str, lm_setPrefix_str);
XP_STRCAT(set_str, name);
if (!JS_GetProperty(cx, obj, type_str, &type) ||
!JSVAL_IS_INT(type) ||
!JS_GetProperty(cx, obj, set_str, &func))
return JS_TRUE;
JS_free(cx, type_str);
JS_free(cx, set_str);
switch(JSVAL_TO_INT(type)) {
case ARGTYPE_INT32:
if (JSVAL_IS_INT(*vp))
ET_moz_CompSetterFunction((ETCompPropSetterFunc)JSVAL_TO_INT(func), name, (void*)JSVAL_TO_INT(*vp));
break;
case ARGTYPE_BOOL:
if (JSVAL_IS_BOOLEAN(*vp))
ET_moz_CompSetterFunction((ETCompPropSetterFunc)JSVAL_TO_INT(func), name, (void*)JSVAL_TO_BOOLEAN(*vp));
break;
case ARGTYPE_STRING:
if (JSVAL_IS_STRING(*vp)) {
prop_val = JS_GetStringBytes(JSVAL_TO_STRING(*vp));
ET_moz_CompSetterFunction((ETCompPropSetterFunc)JSVAL_TO_INT(func), name, (void*)prop_val);
}
break;
}
return JS_TRUE;
}
void
lm_RegisterComponentProp(const char *comp, const char *targetName,
uint8 retType, ETCompPropSetterFunc setter,
ETCompPropGetterFunc getter)
{
JSContext *cx;
JSObject *arrayObj, *obj;
jsval val;
char *type, *set, *get;
MochaDecoder *cd = LM_GetCrippledDecoder();
if (!comp || !targetName || !(cx = cd->js_context))
return;
arrayObj = lm_DefineComponents(cd);
if (!arrayObj)
return;
if (!JS_GetProperty(cx, arrayObj, comp, &val) ||
!JSVAL_IS_OBJECT(val))
return;
obj = JSVAL_TO_OBJECT(val);
if (!JS_DefineProperty(cx, obj, targetName, JSVAL_VOID, component_mozilla_getProperty,
component_mozilla_setProperty, 0)) {
}
type = JS_malloc(cx, XP_STRLEN(lm_typePrefix_str) + XP_STRLEN(targetName) + 1);
if (type) {
XP_STRCPY(type, lm_typePrefix_str);
XP_STRCAT(type, targetName);
if (!JS_DefineProperty(cx, obj, type,
INT_TO_JSVAL((int32)retType), 0, 0, JSPROP_READONLY)) {
}
JS_free(cx, type);
}
get = JS_malloc(cx, XP_STRLEN(lm_getPrefix_str) + XP_STRLEN(targetName) + 1);
if (get) {
XP_STRCPY(get, lm_getPrefix_str);
XP_STRCAT(get, targetName);
if (!JS_DefineProperty(cx, obj, get,
INT_TO_JSVAL(getter), 0, 0, JSPROP_READONLY)) {
}
JS_free(cx, get);
}
set = JS_malloc(cx, XP_STRLEN(lm_setPrefix_str) + XP_STRLEN(targetName) + 1);
if (set) {
XP_STRCPY(set, lm_setPrefix_str);
XP_STRCAT(set, targetName);
if (!JS_DefineProperty(cx, obj, set,
INT_TO_JSVAL(setter), 0, 0, JSPROP_READONLY)) {
}
JS_free(cx, set);
}
}
PR_STATIC_CALLBACK(JSBool)
component_resolve_name(JSContext *cx, JSObject *obj, jsval id)
{
return JS_TRUE;
}
PR_STATIC_CALLBACK(void)
component_finalize(JSContext *cx, JSObject *obj)
{
JSComponent* component;
component = JS_GetPrivate(cx, obj);
if (!component)
return;
JS_UnlockGCThing(cx, component->name);
DROP_BACK_COUNT(component->decoder);
JS_free(cx, component);
}
JSClass lm_component_class =
{
"Component", JSCLASS_HAS_PRIVATE,
JS_PropertyStub, JS_PropertyStub,
component_getProperty, component_getProperty, JS_EnumerateStub,
component_resolve_name, JS_ConvertStub, component_finalize
};
PR_STATIC_CALLBACK(JSBool)
component_activate(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval)
{
JSComponent *component;
component = JS_GetInstancePrivate(cx, obj, &lm_component_class, argv);
if (!component)
return JS_FALSE;
ET_moz_CallFunctionAsync((ETVoidPtrFunc)component->startup_callback, NULL);
return JS_TRUE;
}
static JSFunctionSpec component_methods[] =
{
{"activate", component_activate, 0},
{0}
};
PR_STATIC_CALLBACK(JSBool)
component_mozilla_method_stub(JSContext *cx, JSObject *obj, uint argc,
jsval *argv, jsval *rval)
{
JSFunction *func;
JSObject *func_obj;
jsval type, native;
uint i;
JSCompArg *comp_argv;
func = JS_ValueToFunction(cx, argv[-2]);
func_obj = JS_GetFunctionObject(func);
if (!JS_GetProperty(cx, func_obj, lm_typePrefix_str, &type) ||
!JSVAL_IS_INT(type) ||
!JS_GetProperty(cx, func_obj, lm_methodPrefix_str, &native) ||
!(comp_argv = JS_malloc(cx, argc * sizeof(JSCompArg))))
return JS_TRUE;
for (i=0; i<argc; i++) {
if (JSVAL_IS_INT(argv[i])) {
comp_argv[i].type = ARGTYPE_INT32;
comp_argv[i].value.intArg = JSVAL_TO_INT(argv[i]);
}
else if (JSVAL_IS_BOOLEAN(argv[i])) {
comp_argv[i].type = ARGTYPE_BOOL;
comp_argv[i].value.boolArg = JSVAL_TO_BOOLEAN(argv[i]);
}
else if (JSVAL_IS_STRING(argv[i])) {
comp_argv[i].type = ARGTYPE_STRING;
comp_argv[i].value.stringArg = JS_GetStringBytes(JSVAL_TO_STRING(argv[i]));
}
else {
comp_argv[i].type = ARGTYPE_NULL;
comp_argv[i].value.intArg = 0;
}
}
switch(JSVAL_TO_INT(type)) {
case ARGTYPE_NULL:
ET_moz_CompMethodFunction((ETCompMethodFunc)JSVAL_TO_INT(native), argc, NULL);
*rval = 0;
break;
case ARGTYPE_INT32:
*rval = INT_TO_JSVAL((int32)ET_moz_CompMethodFunction((ETCompMethodFunc)JSVAL_TO_INT(native), argc, comp_argv));
break;
case ARGTYPE_BOOL:
*rval = BOOLEAN_TO_JSVAL((JSBool)ET_moz_CompMethodFunction((ETCompMethodFunc)JSVAL_TO_INT(native), argc, comp_argv));
break;
case ARGTYPE_STRING:
*rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,
(char*)ET_moz_CompMethodFunction((ETCompMethodFunc)JSVAL_TO_INT(native), argc, comp_argv)));
break;
}
return JS_TRUE;
}
void
lm_RegisterComponentMethod(const char *comp, const char *targetName,
uint8 retType, ETCompMethodFunc method, int32 argc)
{
JSContext *cx;
JSObject *arrayObj, *obj, *func_obj;
JSFunction *func;
jsval val;
MochaDecoder *cd = LM_GetCrippledDecoder();
if (!comp || !targetName || !(cx = cd->js_context))
return;
arrayObj = lm_DefineComponents(cd);
if (!arrayObj)
return;
if (!JS_GetProperty(cx, arrayObj, comp, &val) ||
!JSVAL_IS_OBJECT(val))
return;
obj = JSVAL_TO_OBJECT(val);
if (!(func = JS_DefineFunction(cx, obj, targetName, component_mozilla_method_stub, argc, 0))){
}
func_obj = JS_GetFunctionObject(func);
if (!JS_DefineProperty(cx, func_obj, lm_typePrefix_str,
INT_TO_JSVAL((int32)retType), 0, 0, JSPROP_READONLY))
return;
if (!JS_DefineProperty(cx, func_obj, lm_methodPrefix_str,
INT_TO_JSVAL(method), 0, 0, JSPROP_READONLY))
return;
if (!JS_DefineProperty(cx, func_obj, lm_methodArgc_str,
INT_TO_JSVAL(argc), 0, 0, JSPROP_READONLY))
return;
}
/* Constructor method for a JSComponent object */
static JSComponent*
component_create_self(JSContext *cx, MochaDecoder* decoder, JSComponent *component, const char *name)
{
JSObject *obj;
/* JSComponent may be malloc'd previous to this to make it easier
* to fill in the struct with data from the Mozilla thread
*/
if (!component) {
component = JS_malloc(cx, sizeof(JSComponent));
if (!component)
return NULL;
}
obj = JS_NewObject(cx, &lm_component_class, NULL, NULL);
if (!obj || !JS_SetPrivate(cx, obj, component)) {
JS_free(cx, component);
return NULL;
}
if (!JS_DefineProperties(cx, obj, component_props))
return NULL;
if (!JS_DefineFunctions(cx, obj, component_methods))
return NULL;
/* Fill out static property fields */
component->decoder = HOLD_BACK_COUNT(decoder);
component->obj = obj;
component->name = JS_NewStringCopyZ(cx, name);
if (!component->name || !JS_LockGCThing(cx, component->name))
return NULL;
return component;
}
/*
* -----------------------------------------------------------------------
*
* Reflection of the list of installed components.
* The only static property is the array length;
* the array elements (JSComponents) are added
* lazily when referenced.
*
* -----------------------------------------------------------------------
*/
enum componentarray_slot
{
COMPONENTLIST_ARRAY_LENGTH = -1
};
static JSPropertySpec componentarray_props[] =
{
{"length", COMPONENTLIST_ARRAY_LENGTH, JSPROP_READONLY},
{0}
};
/* Look up the component for the specified slot of the plug-in list */
static JSComponent*
componentarray_create_component(JSContext *cx, JSComponentArray *array,
JSComponent *component, const char *targetName, jsint targetSlot)
{
component = component_create_self(cx, array->decoder, component, targetName);
if (component) {
char *name;
jsval val;
name = JS_GetStringBytes(component->name);
val = OBJECT_TO_JSVAL(component->obj);
JS_DefineProperty(cx, array->obj, name, val, NULL, NULL,
JSPROP_ENUMERATE);
JS_AliasElement(cx, array->obj, name, targetSlot);
array->length++;
return component;
}
return NULL;
}
extern JSClass lm_component_array_class;
void
lm_RegisterComponent(const char *targetName, ETBoolPtrFunc active_callback,
ETVoidPtrFunc startup_callback)
{
JSContext *cx;
JSObject *arrayObj;
JSComponentArray *array;
JSComponent *component;
jsval val;
MochaDecoder *cd = LM_GetCrippledDecoder();
if (!(cx = cd->js_context) || !targetName)
return;
arrayObj = lm_DefineComponents(cd);
if (!arrayObj)
return;
array = JS_GetInstancePrivate(cx, arrayObj, &lm_component_array_class, NULL);
if (!array)
return;
if (JS_GetProperty(cx, arrayObj, targetName, &val) && JSVAL_IS_OBJECT(val)) {
/* We already have a component by this name. Update the active and
* startup callback funcs in case ours are out of date
*/
component = JS_GetPrivate(cx, JSVAL_TO_OBJECT(val));
if (!component)
return;
component->active_callback = active_callback;
component->startup_callback = startup_callback;
return;
}
component = JS_malloc(cx, sizeof(JSComponent));
if (!component)
return;
component->active_callback = active_callback;
component->startup_callback = startup_callback;
componentarray_create_component(cx, array, component, targetName, array->length);
}
PR_STATIC_CALLBACK(JSBool)
componentarray_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
JSComponentArray *array;
jsint slot;
if (!JSVAL_IS_INT(id))
return JS_TRUE;
slot = JSVAL_TO_INT(id);
array = JS_GetInstancePrivate(cx, obj, &lm_component_array_class, NULL);
if (!array)
return JS_TRUE;
switch (slot) {
case COMPONENTLIST_ARRAY_LENGTH:
*vp = INT_TO_JSVAL(array->length);
break;
default:
/* Don't mess with a user-defined property. */
if (slot >= 0 && slot < (jsint) array->length) {
/* Search for an existing JSComponent for this slot */
JSObject* componentObj = NULL;
jsval val = *vp;
if (JSVAL_IS_OBJECT(val)) {
componentObj = JSVAL_TO_OBJECT(val);
}
else {
JSComponent* component;
component = componentarray_create_component(cx, array, NULL,
NULL, slot);
if (component)
componentObj = component->obj;
}
*vp = OBJECT_TO_JSVAL(componentObj);
break;
}
}
return JS_TRUE;
}
PR_STATIC_CALLBACK(void)
componentarray_finalize(JSContext *cx, JSObject *obj)
{
JSComponentArray* array;
array = JS_GetPrivate(cx, obj);
if (!array)
return;
DROP_BACK_COUNT(array->decoder);
JS_free(cx, array);
}
JSClass lm_component_array_class =
{
"ComponentArray", JSCLASS_HAS_PRIVATE,
JS_PropertyStub, JS_PropertyStub,
componentarray_getProperty, componentarray_getProperty, JS_EnumerateStub,
JS_ResolveStub, JS_ConvertStub, componentarray_finalize
};
JSObject*
lm_DefineComponents(MochaDecoder *decoder)
{
JSObject *obj;
JSComponentArray *array;
JSContext *cx = decoder->js_context;
JSPreDefComponent def_comps;
JSComponent *component;
jsint slot;
obj = decoder->components;
if (obj)
return obj;
array = JS_malloc(cx, sizeof(JSComponentArray));
if (!array)
return NULL;
XP_BZERO(array, sizeof *array);
obj = JS_NewObject(cx, &lm_component_array_class, NULL,
decoder->window_object);
if (!obj || !JS_SetPrivate(cx, obj, array)) {
JS_free(cx, array);
return NULL;
}
if (!JS_DefineProperties(cx, obj, componentarray_props))
return NULL;
array->decoder = HOLD_BACK_COUNT(decoder);
array->obj = obj;
/* Components can be added dynamically but some are predefined */
slot = 0;
array->length = 0;
def_comps = predef_components[slot];
while (def_comps.name) {
component = JS_malloc(cx, sizeof(JSComponent));
if (!component)
return NULL;
if (ET_moz_VerifyComponentFunction(def_comps.func, &(component->active_callback),
&(component->startup_callback))) {
componentarray_create_component(cx, array, component, def_comps.name, array->length);
}
else {
/*Component call failed somewhere.*/
JS_free(cx, component);
}
def_comps = predef_components[++slot];
}
return obj;
}

View File

@@ -0,0 +1,854 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*
* Image reflection and event notification
*
* Scott Furman, 3/30/96
*/
#include "lm.h"
#include "lo_ele.h"
#include "prtypes.h"
#include "pa_tags.h"
#include "layout.h"
#define IL_CLIENT
#include "libimg.h" /* Image Library public API. */
enum image_array_slot {
IMAGE_ARRAY_LENGTH = -1
};
static JSPropertySpec image_array_props[] = {
{lm_length_str, IMAGE_ARRAY_LENGTH,
JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT},
{0}
};
extern JSClass lm_image_array_class;
PR_STATIC_CALLBACK(JSBool)
image_array_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
JSObjectArray *array;
MochaDecoder *decoder;
MWContext *context;
jsint count, slot;
LO_ImageStruct *image;
int32 active_layer_id;
if (!JSVAL_IS_INT(id))
return JS_TRUE;
slot = JSVAL_TO_INT(id);
array = JS_GetInstancePrivate(cx, obj, &lm_image_array_class, NULL);
if (!array)
return JS_TRUE;
decoder = array->decoder;
context = decoder->window_context;
if (!context)
return JS_TRUE;
LO_LockLayout();
switch (slot) {
case IMAGE_ARRAY_LENGTH:
active_layer_id = LM_GetActiveLayer(context);
LM_SetActiveLayer(context, array->layer_id);
count = LO_EnumerateImages(context, array->layer_id);
LM_SetActiveLayer(context, active_layer_id);
if (count > array->length)
array->length = count;
*vp = INT_TO_JSVAL(count);
break;
default:
if (slot < 0) {
/* Don't mess with user-defined or method properties. */
LO_UnlockLayout();
return JS_TRUE;
}
if (slot >= array->length)
array->length = slot + 1;
image = LO_GetImageByIndex(context, array->layer_id, (uint)slot);
if (image) {
*vp = OBJECT_TO_JSVAL(LM_ReflectImage(context, image, NULL,
array->layer_id,
(uint)slot));
}
break;
}
LO_UnlockLayout();
return JS_TRUE;
}
PR_STATIC_CALLBACK(void)
image_array_finalize(JSContext *cx, JSObject *obj)
{
JSObjectArray *array;
array = JS_GetPrivate(cx, obj);
if (!array)
return;
DROP_BACK_COUNT(array->decoder);
JS_free(cx, array);
}
JSClass lm_image_array_class = {
"ImageArray", JSCLASS_HAS_PRIVATE,
JS_PropertyStub, JS_PropertyStub,
image_array_getProperty, image_array_getProperty, JS_EnumerateStub,
JS_ResolveStub, JS_ConvertStub, image_array_finalize
};
enum image_slot {
IMAGE_NAME = -2,
IMAGE_SRC = -3,
IMAGE_LOWSRC = -4,
IMAGE_X = -5,
IMAGE_Y = -6,
IMAGE_HEIGHT = -7,
IMAGE_WIDTH = -8,
IMAGE_BORDER = -9,
IMAGE_VSPACE = -10,
IMAGE_HSPACE = -11,
IMAGE_COMPLETE = -12
};
static JSPropertySpec image_props[] = {
{"name", IMAGE_NAME, JSPROP_ENUMERATE | JSPROP_READONLY},
{"src", IMAGE_SRC, JSPROP_ENUMERATE},
{"lowsrc", IMAGE_LOWSRC, JSPROP_ENUMERATE},
{"x", IMAGE_X, JSPROP_ENUMERATE | JSPROP_READONLY},
{"y", IMAGE_Y, JSPROP_ENUMERATE | JSPROP_READONLY},
{"height", IMAGE_HEIGHT, JSPROP_ENUMERATE | JSPROP_READONLY},
{"width", IMAGE_WIDTH, JSPROP_ENUMERATE | JSPROP_READONLY},
{"border", IMAGE_BORDER, JSPROP_ENUMERATE | JSPROP_READONLY},
{"vspace", IMAGE_VSPACE, JSPROP_ENUMERATE | JSPROP_READONLY},
{"hspace", IMAGE_HSPACE, JSPROP_ENUMERATE | JSPROP_READONLY},
{"complete", IMAGE_COMPLETE, JSPROP_ENUMERATE | JSPROP_READONLY},
{0}
};
/*
* Base image element type.
*/
typedef struct JSImage {
JSEventReceiver receiver;
MochaDecoder *decoder;
LO_ImageStruct *image_data; /* 0 unless made by new Image() */
uint8 pending_events;
int32 layer_id;
uint index;
JSBool complete; /* Finished loading or aborted */
JSString *name;
} JSImage;
#define GET_IMAGE_DATA(context, image) \
((image)->image_data ? (image)->image_data \
: LO_GetImageByIndex((context), (image)->layer_id, (image)->index))
extern JSClass lm_image_class;
/*
* Force the mozilla event queue to flush to make sure any image-set-src
* events have been processed
*/
PR_STATIC_CALLBACK(void)
lm_img_src_sync(void * data)
{
}
PR_STATIC_CALLBACK(JSBool)
image_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
JSImage *image;
LO_ImageStruct *image_data;
enum image_slot image_slot;
JSString *str;
jsint slot;
if (!JSVAL_IS_INT(id))
return JS_TRUE;
slot = JSVAL_TO_INT(id);
image = JS_GetInstancePrivate(cx, obj, &lm_image_class, NULL);
if (!image)
return JS_TRUE;
image_data = GET_IMAGE_DATA(image->decoder->window_context, image);
if (!image_data)
return JS_TRUE; /* Try to handle this case gracefully. */
image_slot = slot;
if (image_slot == IMAGE_SRC || image_slot == IMAGE_LOWSRC) {
if (!lm_CheckPermissions(cx, obj, JSTARGET_UNIVERSAL_BROWSER_READ))
return JS_FALSE;
}
switch (image_slot) {
case IMAGE_NAME:
if (image->name)
*vp = STRING_TO_JSVAL(image->name);
else
*vp = JSVAL_NULL;
break;
case IMAGE_SRC:
if (image_data->pending_mocha_event) {
ET_moz_CallFunction(lm_img_src_sync, NULL);
image_data->pending_mocha_event = PR_FALSE;
}
str = JS_NewStringCopyZ(cx, (char*)image_data->image_url);
if (!str)
return JS_FALSE;
*vp = STRING_TO_JSVAL(str);
break;
case IMAGE_LOWSRC:
if (image_data->pending_mocha_event) {
ET_moz_CallFunction(lm_img_src_sync, NULL);
image_data->pending_mocha_event = PR_FALSE;
}
str = JS_NewStringCopyZ(cx, (char*)image_data->lowres_image_url);
if (!str)
return JS_FALSE;
*vp = STRING_TO_JSVAL(str);
break;
case IMAGE_X:
*vp = INT_TO_JSVAL(image_data->x + image_data->x_offset);
break;
case IMAGE_Y:
*vp = INT_TO_JSVAL(image_data->y + image_data->y_offset);
break;
case IMAGE_HEIGHT:
*vp = INT_TO_JSVAL(image_data->height);
break;
case IMAGE_WIDTH:
*vp = INT_TO_JSVAL(image_data->width);
break;
case IMAGE_BORDER:
*vp = INT_TO_JSVAL(image_data->border_width);
break;
case IMAGE_HSPACE:
*vp = INT_TO_JSVAL(image_data->border_horiz_space);
break;
case IMAGE_VSPACE:
*vp = INT_TO_JSVAL(image_data->border_vert_space);
break;
case IMAGE_COMPLETE:
*vp = BOOLEAN_TO_JSVAL(image->complete);
break;
default:
/* Don't mess with a user-defined or method property. */
return JS_TRUE;
}
return JS_TRUE;
}
static JSBool
image_set_src(JSImage *image, const char *str, LO_ImageStruct *image_data)
{
MochaDecoder *decoder;
MWContext *context;
IL_GroupContext *img_cx;
decoder = image->decoder;
context = decoder->window_context;
img_cx = decoder->image_context;
if (!context) return JS_TRUE;
image_data->pending_mocha_event = PR_TRUE;
image_data->image_attr->attrmask |= LO_ATTR_MOCHA_IMAGE;
ET_il_GetImage(str, context, img_cx, image_data, NET_DONT_RELOAD);
return JS_TRUE;
}
PR_STATIC_CALLBACK(JSBool)
image_setProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
JSBool ok;
JSImage *image;
MochaDecoder *decoder;
MWContext *context;
LO_ImageStruct *image_data;
enum image_slot image_slot;
const char *url;
jsint slot;
image = JS_GetInstancePrivate(cx, obj, &lm_image_class, NULL);
if (!image)
return JS_TRUE;
decoder = image->decoder;
context = decoder->window_context;
if (!context)
return JS_TRUE;
if (!JSVAL_IS_INT(id))
return JS_TRUE;
slot = JSVAL_TO_INT(id);
image_data = GET_IMAGE_DATA(context, image);
if (!image_data)
return JS_TRUE; /* Try to handle this case gracefully. */
image_slot = slot;
switch (image_slot) {
case IMAGE_SRC:
case IMAGE_LOWSRC:
if (!lm_CheckPermissions(cx, obj, JSTARGET_UNIVERSAL_BROWSER_WRITE))
return JS_FALSE;
if (JSVAL_IS_NULL(*vp)) {
url = NULL;
} else {
if (!JSVAL_IS_STRING(*vp) &&
!JS_ConvertValue(cx, *vp, JSTYPE_STRING, vp))
return JS_FALSE;
url = JS_GetStringBytes(JSVAL_TO_STRING(*vp));
url = lm_CheckURL(cx, url, JS_TRUE); /* will allocate new string */
if (!url)
return JS_FALSE;
}
if (image_slot == IMAGE_SRC) {
ok = image_set_src(image, url, image_data);
} else if (url) {
ok = lm_SaveParamString(cx, &image_data->lowres_image_url, url);
}
if (url)
XP_FREE((void *) url);
if (!ok)
return JS_FALSE;
/*
* don't call image_getProperty so that we don't immediately
* turn around and block
*/
return JS_TRUE;
break;
case IMAGE_NAME:
case IMAGE_X:
case IMAGE_Y:
case IMAGE_HEIGHT:
case IMAGE_WIDTH:
case IMAGE_BORDER:
case IMAGE_VSPACE:
case IMAGE_HSPACE:
case IMAGE_COMPLETE:
/* These are immutable. */
break;
}
return image_getProperty(cx, obj, id, vp);
}
PR_STATIC_CALLBACK(void)
image_finalize(JSContext *cx, JSObject *obj)
{
JSImage *image;
LO_ImageStruct *image_data;
MochaDecoder *decoder;
MWContext *context;
image = JS_GetPrivate(cx, obj);
if (!image)
return;
image_data = image->image_data;
decoder = image->decoder;
context = decoder->window_context;
if (image_data) {
/* If this is a layer background image or a reflection of an
existing layout image, then layout will take care of
destroying the image. For anonymous images, however,
we need to handle destruction here. */
if (!image_data->layer) {
ET_PostFreeImageElement(context, image_data);
XP_FREE(image_data->image_attr);
XP_FREE(image_data);
}
} else {
if (context) {
LO_LockLayout();
image_data = LO_GetImageByIndex(context, image->layer_id,
image->index);
if (image_data && image_data->mocha_object == obj)
image_data->mocha_object = NULL;
LO_UnlockLayout();
}
}
DROP_BACK_COUNT(decoder);
JS_UnlockGCThing(cx, image->name);
JS_free(cx, image);
}
JSClass lm_image_class = {
"Image", JSCLASS_HAS_PRIVATE,
JS_PropertyStub, JS_PropertyStub, image_getProperty, image_setProperty,
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, image_finalize
};
/* Fill in native, private part of JS image */
static JSImage *
init_image_object(JSContext *cx, JSObject *obj, LO_ImageStruct *image_data)
{
JSImage *image;
MochaDecoder *decoder;
image = JS_malloc(cx, sizeof *image);
if (!image)
return NULL;
XP_BZERO(image, sizeof *image);
image->image_data = image_data;
decoder = JS_GetPrivate(cx, JS_GetGlobalObject(cx));
image->decoder = HOLD_BACK_COUNT(decoder);
image_data->mocha_object = obj;
/* Events are never blocked for anonymous images
since there is no associated layout. */
image->pending_events = PR_BIT(LM_IMGUNBLOCK);
if (!JS_SetPrivate(cx, obj, image))
return NULL;
return image;
}
JSObject *
lm_NewImage(JSContext *cx,
LO_ImageStruct *image_data)
{
JSObject *obj, *outer_obj;
MochaDecoder *decoder;
decoder = JS_GetPrivate(cx, JS_GetGlobalObject(cx));
outer_obj = lm_GetOuterObject(decoder);
obj = JS_NewObject(cx, &lm_image_class, decoder->image_prototype,
outer_obj);
if (!init_image_object(cx, obj, image_data))
return NULL;
return obj;
}
PR_STATIC_CALLBACK(JSBool)
Image(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval)
{
jsint width, height;
LO_ImageStruct *image_data;
XP_ASSERT(JS_InstanceOf(cx, obj, &lm_image_class, NULL));
height = width = 0;
if (argc > 0) {
if (argc != 2) {
JS_ReportError(cx, lm_argc_err_str);
return JS_FALSE;
}
if (!JSVAL_IS_INT(argv[0]) ||
!JSVAL_IS_INT(argv[1])) {
return JS_FALSE;
}
width = JSVAL_TO_INT(argv[0]);
height = JSVAL_TO_INT(argv[1]);
}
/* Allocate dummy layout structure. This is not really
used by layout, but the front-ends and the imagelib
need it as a handle on an image instance. */
image_data = XP_NEW_ZAP(LO_ImageStruct);
if (!image_data) {
JS_ReportOutOfMemory(cx);
return JS_FALSE;
}
image_data->image_attr = XP_NEW_ZAP(LO_ImageAttr);
if (!image_data->image_attr) {
XP_FREE(image_data);
JS_ReportOutOfMemory(cx);
return JS_FALSE;
}
image_data->type = LO_IMAGE;
/* Fake layout ID, guaranteed not to match any real layout element */
image_data->ele_id = -1;
if (!init_image_object(cx, obj, image_data)) {
XP_FREE(image_data->image_attr);
XP_FREE(image_data);
return JS_FALSE;
}
/* Process arguments */
/* Width & Height */
if (argc == 2) {
image_data->width = (int)width;
image_data->height = (int)height;
}
return JS_TRUE;
}
static JSObject *
reflect_image_array(MochaDecoder *decoder, JSObject *document)
{
JSContext *cx;
JSObjectArray *array;
JSObject *obj;
JSDocument *doc;
cx = decoder->js_context;
doc = JS_GetPrivate(cx, document);
if (!doc)
return NULL;
array = JS_malloc(cx, sizeof *array);
if (!array)
return NULL;
XP_BZERO(array, sizeof *array);
obj = JS_NewObject(cx, &lm_image_array_class, NULL, document);
if (!obj || !JS_SetPrivate(cx, obj, array)) {
LM_PutMochaDecoder(decoder);
return NULL;
}
if (!JS_DefineProperties(cx, obj, image_array_props))
return NULL;
array->decoder = HOLD_BACK_COUNT(decoder);
array->layer_id = doc->layer_id;
return obj;
}
JSObject *
lm_GetImageArray(MochaDecoder *decoder, JSObject *document)
{
JSObject *obj;
JSDocument *doc;
doc = JS_GetPrivate(decoder->js_context, document);
if (!doc)
return NULL;
obj = doc->images;
if (obj)
return obj;
obj = reflect_image_array(decoder, document);
doc->images = obj;
return obj;
}
JSObject *
LM_ReflectImage(MWContext *context, LO_ImageStruct *image_data,
PA_Tag * tag, int32 layer_id, uint index)
{
JSObject *obj, *array_obj, *outer_obj, *document;
MochaDecoder *decoder;
JSContext *cx;
JSImage *image;
PA_Block name = NULL;
lo_TopState *top_state;
PRHashTable *map;
image_data = LO_GetImageByIndex(context, layer_id, index);
XP_ASSERT(image_data);
if (! image_data)
return NULL;
obj = image_data->mocha_object;
if (obj)
return obj;
decoder = LM_GetMochaDecoder(context);
if (!decoder)
return NULL;
cx = decoder->js_context;
top_state = lo_GetMochaTopState(context);
if (top_state->resize_reload) {
map = lm_GetIdToObjectMap(decoder);
if (map)
obj = (JSObject *)PR_HashTableLookup(map,
LM_GET_MAPPING_KEY(LM_IMAGES, layer_id, index));
if (obj) {
image_data->mocha_object = obj;
goto done;
}
}
/* Get the document object that will hold this link */
document = lm_GetDocumentFromLayerId(decoder, layer_id);
if (!document)
goto done;
array_obj = lm_GetImageArray(decoder, document);
if (!array_obj)
goto done;
image = JS_malloc(cx, sizeof *image);
if (!image)
goto done;
XP_BZERO(image, sizeof *image);
/* if we got a tag passed in try to get the name out of there */
name = lo_FetchParamValue(context, tag, PARAM_NAME);
outer_obj = lm_GetOuterObject(decoder);
obj = JS_NewObject(cx, &lm_image_class, decoder->image_prototype,
outer_obj);
if (!obj || !JS_SetPrivate(cx, obj, image)) {
JS_free(cx, image);
goto done;
}
if (name) {
JSObject *doc_obj;
extern JSClass lm_form_class;
if (!JS_DefineProperty(cx, outer_obj, (const char *) name,
OBJECT_TO_JSVAL(obj), NULL, NULL,
JSPROP_ENUMERATE|JSPROP_READONLY)) {
obj = NULL;
goto done;
}
/* XXX backward compatibility with 3.0 bug: lo_BlockedImageLayout
would eagerly reflect images outside of any active form, so
they'd end up in document scope. */
if (JS_GetClass(cx, outer_obj) == &lm_form_class &&
(doc_obj = JS_GetParent(cx, outer_obj)) != NULL &&
!JS_DefineProperty(cx, doc_obj, (const char *) name,
OBJECT_TO_JSVAL(obj), NULL, NULL,
JSPROP_ENUMERATE|JSPROP_READONLY)) {
obj = NULL;
goto done;
}
}
image->decoder = HOLD_BACK_COUNT(decoder);
image->index = index;
image->layer_id = layer_id;
image->name = JS_NewStringCopyZ(cx, (const char *) name);
if (!JS_LockGCThing(cx, image->name)) {
obj = NULL;
goto done;
}
image_data->mocha_object = obj;
if (!lm_AddObjectToArray(cx, array_obj, (const char *) name,
index, obj)) {
obj = NULL;
goto done;
}
/* Put it in the index to object hash table */
map = lm_GetIdToObjectMap(decoder);
if (map)
PR_HashTableAdd(map,
LM_GET_MAPPING_KEY(LM_IMAGES, layer_id, index),
obj);
/* OK, we've got our image, see if there are any event handlers
* defined with it
*/
if(tag) {
PA_Block onload = lo_FetchParamValue(context, tag, PARAM_ONLOAD);
PA_Block onabort = lo_FetchParamValue(context, tag, PARAM_ONABORT);
PA_Block onerror = lo_FetchParamValue(context, tag, PARAM_ONERROR);
PA_Block onmousedown = lo_FetchParamValue(context, tag, PARAM_ONMOUSEDOWN);
PA_Block onmouseup = lo_FetchParamValue(context, tag, PARAM_ONMOUSEUP);
PA_Block id = lo_FetchParamValue(context, tag, PARAM_ID);
/* don't hold the layout lock across compiles */
LO_UnlockLayout();
if (onload != NULL) {
(void) lm_CompileEventHandler(decoder, id, tag->data,
tag->newline_count, obj,
PARAM_ONLOAD, onload);
PA_FREE(onload);
}
if (onabort != NULL) {
(void) lm_CompileEventHandler(decoder, id, tag->data,
tag->newline_count, obj,
PARAM_ONABORT, onabort);
PA_FREE(onabort);
}
if (onerror != NULL) {
(void) lm_CompileEventHandler(decoder, id, tag->data,
tag->newline_count, obj,
PARAM_ONERROR, onerror);
PA_FREE(onerror);
}
if (onmousedown != NULL) {
(void) lm_CompileEventHandler(decoder, id, tag->data,
tag->newline_count, obj,
PARAM_ONMOUSEDOWN, onmousedown);
PA_FREE(onmousedown);
}
if (onmouseup != NULL) {
(void) lm_CompileEventHandler(decoder, id, tag->data,
tag->newline_count, obj,
PARAM_ONMOUSEUP, onmouseup);
PA_FREE(onmouseup);
}
if (id)
PA_FREE(id);
LO_LockLayout();
}
done:
if(name)
PA_FREE(name);
LM_PutMochaDecoder(decoder);
return obj;
}
void
lm_ProcessImageEvent(MWContext *context, JSObject *obj,
LM_ImageEvent event)
{
uint event_mask;
jsval result;
JSImage *image;
image = JS_GetPrivate(context->mocha_context, obj);
if (!image)
return;
image->pending_events |= PR_BIT(event);
/* Special event used to trigger deferred events */
if (! (image->pending_events & PR_BIT(LM_IMGUNBLOCK)))
return;
for (event = LM_IMGLOAD; event <= LM_LASTEVENT; event++) {
event_mask = PR_BIT(event);
if (image->pending_events & event_mask) {
JSEvent *pEvent;
pEvent=XP_NEW_ZAP(JSEvent);
image->pending_events &= ~event_mask;
switch (event) {
case LM_IMGLOAD:
pEvent->type = EVENT_LOAD;
image->complete = JS_TRUE;
break;
case LM_IMGABORT:
pEvent->type = EVENT_ABORT;
image->complete = JS_TRUE;
break;
case LM_IMGERROR:
pEvent->type = EVENT_ERROR;
image->complete = JS_TRUE;
break;
default:
XP_ABORT(("Unknown image event"));
}
lm_SendEvent(context, obj, pEvent, &result);
}
}
}
JSBool
lm_InitImageClass(MochaDecoder *decoder)
{
JSContext *cx;
JSObject *prototype;
cx = decoder->js_context;
prototype = JS_InitClass(cx, decoder->window_object,
decoder->event_receiver_prototype, &lm_image_class,
Image, 0, image_props, NULL, NULL, NULL);
if (!prototype)
return JS_FALSE;
decoder->image_prototype = prototype;
return JS_TRUE;
}
/* Create an image context for anonymous images and attach it to the specified
mocha decoder. */
JSBool
lm_NewImageContext(MWContext *context, MochaDecoder *decoder)
{
IL_GroupContext *img_cx;
IMGCB* img_cb;
JMCException *exc = NULL;
if (!decoder->image_context) {
img_cb = IMGCBFactory_Create(&exc); /* JMC Module */
if (exc) {
JMC_DELETE_EXCEPTION(&exc); /* XXX Should really return
exception */
JS_ReportOutOfMemory(decoder->js_context);
return JS_FALSE;
}
/* Create an Image Group Context. IL_NewGroupContext augments the
reference count for the JMC callback interface. The opaque argument
to IL_NewGroupContext is the Front End's display context, which will
be passed back to all the Image Library's FE callbacks. */
img_cx = IL_NewGroupContext((void*)context, (IMGCBIF *)img_cb);
if (!img_cx) {
JS_ReportOutOfMemory(decoder->js_context);
return JS_FALSE;
}
/* Attach the IL_GroupContext to the mocha decoder. */
decoder->image_context = img_cx;
/* Allow the context to observe the decoder's image context. */
ET_il_SetGroupObserver(context, decoder->image_context, context, JS_TRUE);
}
return JS_TRUE;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,287 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*
* lm_trggr.c
*
* Reflects AutoInstall trigger methods
* into the global JavaScript config object.
*
* See Trigger.java for related functions.
*/
#include "lm.h"
#include "prefapi.h"
#include "VerReg.h"
#include "softupdt.h"
#include "gui.h" /* XP_AppPlatform */
JSBool PR_CALLBACK asd_Version(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval);
JSBool PR_CALLBACK asd_get_version(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval);
JSBool PR_CALLBACK asd_start_update(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval);
JSBool PR_CALLBACK asd_conditional_update(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval);
JSBool PR_CALLBACK asd_alert(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval);
JSBool PR_CALLBACK asd_platform(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval);
PRIVATE JSFunctionSpec autoinstall_methods[] = {
{ "getVersion", asd_get_version, 2 },
{ "startUpdate", asd_start_update, 2 },
{ "conditionalUpdate", asd_conditional_update, 4 },
{ "startUpdateComponent", asd_conditional_update, 4 }, /* old name */
{ NULL, NULL, 0 }
};
PRIVATE JSFunctionSpec globalconfig_methods[] = {
{ "alert", asd_alert, 1 },
{ "getPlatform", asd_platform, 0 },
{ NULL, NULL, 0 }
};
PRIVATE JSClass autoinstall_class = {
"AutoInstall", 0,
JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub
};
PRIVATE JSClass version_class = {
"VersionInfo", 0,
JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub
};
JSBool lm_DefineTriggers()
{
JSContext *globalContext = NULL;
JSObject *globalObject = NULL;
JSObject *autoInstallObject, *versionObject;
JSBool ans;
/* get global mocha context and object */
PREF_GetConfigContext(&globalContext);
PREF_GetGlobalConfigObject(&globalObject);
if (globalContext == NULL || globalObject == NULL) {
return JS_FALSE;
}
JS_BeginRequest(globalContext);
/* define AutoInstall object in global object */
autoInstallObject = JS_DefineObject(globalContext, globalObject,
"AutoInstall",
&autoinstall_class,
NULL,
JSPROP_ENUMERATE|JSPROP_READONLY);
if (!autoInstallObject) {
JS_EndRequest(globalContext);
return JS_FALSE;
}
/* define Version class in AutoInstall */
versionObject = JS_InitClass(globalContext, autoInstallObject, NULL,
&version_class, asd_Version, 0, NULL, NULL, NULL, NULL);
if (!versionObject) {
JS_EndRequest(globalContext);
return JS_FALSE;
}
/* define some global config utility functions */
JS_DefineFunctions(globalContext, globalObject, globalconfig_methods);
ans = JS_DefineFunctions(globalContext, autoInstallObject,
autoinstall_methods);
JS_EndRequest(globalContext);
return ans;
}
/* Convert VERSION type to Version JS object */
static void asd_versToObj(JSContext *cx, VERSION* vers, JSObject* versObj)
{
jsval val = INT_TO_JSVAL(vers->major);
JS_SetProperty(cx, versObj, "major", &val);
val = INT_TO_JSVAL(vers->minor);
JS_SetProperty(cx, versObj, "minor", &val);
val = INT_TO_JSVAL(vers->release);
JS_SetProperty(cx, versObj, "release", &val);
val = INT_TO_JSVAL(vers->build);
JS_SetProperty(cx, versObj, "build", &val);
}
/* Convert Version JS object to VERSION type */
static void asd_objToVers(JSContext *cx, JSObject* versObj, VERSION* vers)
{
jsval val;
JS_GetProperty(cx, versObj, "major", &val);
vers->major = JSVAL_TO_INT(val);
JS_GetProperty(cx, versObj, "minor", &val);
vers->minor = JSVAL_TO_INT(val);
JS_GetProperty(cx, versObj, "release", &val);
vers->release = JSVAL_TO_INT(val);
JS_GetProperty(cx, versObj, "build", &val);
vers->build = JSVAL_TO_INT(val);
}
/*
* ?? -- move this to VR?
* Returns 0 if versions are equal; < 0 if vers2 is newer; > 0 if vers1 is newer
*/
static int asd_compareVersion(VERSION* vers1, VERSION* vers2)
{
int diff;
if (vers1 == NULL)
diff = -4;
else if (vers2 == NULL)
diff = 4;
else if (vers1->major == vers2->major) {
if (vers1->minor == vers2->minor) {
if (vers1->release == vers2->release) {
if (vers1->build == vers2->build)
diff = 0;
else diff = (vers1->build > vers2->build) ? 1 : -1;
}
else diff = (vers1->release > vers2->release) ? 2 : -2;
}
else diff = (vers1->minor > vers2->minor) ? 3 : -3;
}
else diff = (vers1->major > vers2->major) ? 4 : -4;
return diff;
}
/* Version constructor
(accepts up to four int params to initialize fields) */
JSBool PR_CALLBACK asd_Version
(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval)
{
VERSION vers;
vers.major = (argc >= 1 && JSVAL_IS_INT(argv[0])) ? JSVAL_TO_INT(argv[0]) : 0;
vers.minor = (argc >= 2 && JSVAL_IS_INT(argv[1])) ? JSVAL_TO_INT(argv[1]) : 0;
vers.release = (argc >= 3 && JSVAL_IS_INT(argv[2])) ? JSVAL_TO_INT(argv[2]) : 0;
vers.build = (argc >= 4 && JSVAL_IS_INT(argv[3])) ? JSVAL_TO_INT(argv[3]) : 0;
asd_versToObj(cx, &vers, obj);
return JS_TRUE;
}
/* arguments:
0. component name
1. version no. to fill in
return:
error status */
JSBool PR_CALLBACK asd_get_version
(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval)
{
REGERR status = 0;
if (argc >= 2 && JSVAL_IS_STRING(argv[0])
&& JSVAL_IS_OBJECT(argv[1]))
{
VERSION vers;
char* component_path = JS_GetStringBytes(JSVAL_TO_STRING(argv[0]));
status = VR_GetVersion(component_path, &vers);
if (status == REGERR_OK) {
JSObject* versObj = JSVAL_TO_OBJECT(argv[1]);
asd_versToObj(cx, &vers, versObj);
}
}
*rval = INT_TO_JSVAL(status);
return JS_TRUE;
}
/* arguments:
0. url
1. flags
return:
true if no errors */
JSBool PR_CALLBACK asd_start_update
(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval)
{
if (argc >= 2 && JSVAL_IS_STRING(argv[0]) &&
JSVAL_IS_INT(argv[1])) {
char* url = JS_GetStringBytes(JSVAL_TO_STRING(argv[0]));
/* Bookmarks is a hack, you should really get some SmartUpdate context */
MWContext* cx = XP_FindContextOfType(NULL, MWContextBookmarks);
XP_Bool result = SU_StartSoftwareUpdate( cx, url,
NULL, NULL, NULL, JSVAL_TO_INT(argv[1]) );
*rval = BOOLEAN_TO_JSVAL(result);
return JS_TRUE;
}
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
return JS_TRUE;
}
/* arguments:
0. url
1. component name
2. version no. to compare
3. flags
return:
true if update triggered and no errors */
JSBool PR_CALLBACK asd_conditional_update
(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval)
{
REGERR status = 0;
if (argc >= 4 && JSVAL_IS_STRING(argv[0]) &&
JSVAL_IS_STRING(argv[1]) &&
JSVAL_IS_OBJECT(argv[2]) &&
JSVAL_IS_INT(argv[3]))
{
VERSION curr_vers;
char* component_path = JS_GetStringBytes(JSVAL_TO_STRING(argv[1]));
status = VR_GetVersion(component_path, &curr_vers);
if (status == REGERR_OK) {
JSObject* versObj = JSVAL_TO_OBJECT(argv[2]);
VERSION req_vers;
asd_objToVers(cx, versObj, &req_vers);
if ( asd_compareVersion(&req_vers, &curr_vers) > 0 ) {
char* url = JS_GetStringBytes(JSVAL_TO_STRING(argv[0]));
MWContext* cx = XP_FindContextOfType(NULL, MWContextBookmarks);
XP_Bool result = SU_StartSoftwareUpdate( cx, url,
NULL, NULL, NULL, JSVAL_TO_INT(argv[3]) );
*rval = BOOLEAN_TO_JSVAL(result);
return JS_TRUE;
}
}
}
*rval = BOOLEAN_TO_JSVAL(JS_FALSE); /*INT_TO_JSVAL(status);*/
return JS_TRUE;
}
JSBool PR_CALLBACK asd_alert
(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval)
{
if (argc >= 1 && JSVAL_IS_STRING(argv[0])) {
char* msg = JS_GetStringBytes(JSVAL_TO_STRING(argv[0]));
MWContext* ctx = XP_FindSomeContext();
if (ctx)
FE_Alert(ctx, msg);
}
return JS_TRUE;
}
JSBool PR_CALLBACK asd_platform
(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval)
{
*rval = STRING_TO_JSVAL( JS_NewStringCopyZ(cx, XP_AppPlatform) );
return JS_TRUE;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,425 @@
/*
* lm_wngrp.c: Structures and functions to deal with new LM window groups
* and multiple LM threads and what not.
*
* All blame to Mike McCool (mlm@netscape.com) 2/17/98
*/
#include "lm.h"
#include "xp.h"
#include "prclist.h"
#include "prthread.h"
#include "prmon.h"
#ifdef XP_MAC
#include "pprthred.h" /* for PR_CreateThreadGCAble */
#else
#include "private/pprthred.h"
#endif
/*
* Notes to self
*
* - lm_window_count: do we care that there's only one?
* - do we need to add a limit to number of threads we spawn()?
* - JRIEnv: do we need multiple?
* - JSRuntime: do we need multiple?
* - Threading changes: impact on debugger?
* - JS_SetGlobalObject(JSContext) will be important
* - If the global structure is on the mozilla thread, can other threads
* creating a new thread group access, or do I have to post an event?
*
* ? Rename "MochaDecoder" to "LMWindow"
* ? Change so that there is only one JSContext
*/
PRMonitor *wingroups_mon;
LMWindowGroup *wingroups;
PRMonitor *request_mon;
struct ContextListStr {
ContextList *next;
ContextList *prev;
MWContext *context;
};
LMWindowGroup *_lm_NewWindowGroup(int priority);
/* Initialize my globals, from the Mozilla thread
*/
void lm_InitWindowGroups(void)
{
int priority;
/* run at slightly lower priority than the mozilla thread */
priority = PR_GetThreadPriority(PR_CurrentThread());
PR_ASSERT(priority >= PR_PRIORITY_FIRST && priority <= PR_PRIORITY_LAST);
if (priority == PR_PRIORITY_NORMAL)
priority = PR_PRIORITY_LOW;
else if (priority == PR_PRIORITY_HIGH)
priority = PR_PRIORITY_NORMAL;
else if (priority == PR_PRIORITY_URGENT)
priority = PR_PRIORITY_HIGH;
else
priority = PR_PRIORITY_LOW;
wingroups_mon = PR_NewMonitor();
request_mon = PR_NewMonitor();
wingroups = NULL;
wingroups = _lm_NewWindowGroup(priority);
if(wingroups != NULL) {
PR_INIT_CLIST(wingroups);
lm_StartWindowGroup(wingroups);
} /* else huh?! */
}
/* Create a new window group. Create new context, create new monitor, create
* new thread, event queue, queue stack, empty context list.
*/
LMWindowGroup *lm_NewWindowGroup(void)
{
int priority;
/* Run at same priority as current thread (which should be a JS
* thread.
*/
priority = PR_GetThreadPriority(PR_CurrentThread());
PR_ASSERT(priority>=PR_PRIORITY_FIRST && priority<=PR_PRIORITY_LAST);
return _lm_NewWindowGroup(priority);
}
LMWindowGroup *_lm_NewWindowGroup(int priority)
{
LMWindowGroup *newgrp = XP_NEW_ZAP(LMWindowGroup);
if(newgrp != NULL) {
newgrp->done = PR_FALSE;
newgrp->hasLock = PR_FALSE;
/* Create a new JS Context for this set of windows.
* Note: Need to get global runtime lm_runtime from somewhere,
* and perhaps the LM_STACK_SIZE?
*/
/**************************************************** MLM *
newgrp->js_context = JS_NewContext(lm_runtime, LM_STACK_SIZE);
if(newgrp->js_context == NULL) {
XP_DELETE(newgrp);
return NULL;
}
**************************************************** MLM */
newgrp->js_context = NULL;
/* JS_SetGCCallback(newgrp->js_context, LM_ShouldRunGC); */
newgrp->mw_contexts = XP_NEW_ZAP(ContextList);
if(newgrp->mw_contexts == NULL) {
JS_DestroyContext(newgrp->js_context);
XP_DELETE(newgrp);
return NULL;
}
PR_INIT_CLIST(newgrp->mw_contexts);
newgrp->mw_contexts->context = NULL;
newgrp->current_context = NULL;
newgrp->queue_stack = XP_NEW_ZAP(QueueStackElement);
if(!newgrp->queue_stack) {
JS_DestroyContext(newgrp->js_context);
XP_DELETE(newgrp->mw_contexts);
XP_DELETE(newgrp);
return NULL;
}
/* Do this here so we don't race ourselves in lm_wait_for_events */
PR_EnterMonitor(wingroups_mon);
if(wingroups != NULL) {
PR_APPEND_LINK(newgrp, wingroups);
}
PR_ExitMonitor(wingroups_mon);
newgrp->waiting_list = NULL;
newgrp->owner_monitor = PR_NewMonitor();
newgrp->queue_monitor = PR_NewMonitor();
PR_EnterMonitor(newgrp->owner_monitor);
newgrp->thread = PR_CreateThreadGCAble(PR_USER_THREAD,
lm_wait_for_events, newgrp,
priority, PR_LOCAL_THREAD,
PR_UNJOINABLE_THREAD, 0);
newgrp->owner = newgrp->thread;
newgrp->current_count = 0;
newgrp->mozWantsLock = PR_FALSE;
newgrp->mozGotLock = PR_FALSE;
newgrp->interruptCurrentOp = PR_FALSE;
newgrp->queue_depth = 0;
newgrp->queue_count = 0;
/* Note: Need a unique identifier for this queue?
*/
newgrp->interpret_queue = PR_CreateEventQueue("new_event_queue",
newgrp->thread);
newgrp->queue_stack->queue = newgrp->interpret_queue;
newgrp->lock_context = NULL;
newgrp->js_timeout_insertion_point = NULL;
newgrp->js_timeout_running = NULL;
newgrp->inputRecurring = 0;
}
return newgrp;
}
void lm_StartWindowGroup(LMWindowGroup *grp)
{
PR_Notify(grp->owner_monitor);
PR_ExitMonitor(grp->owner_monitor);
}
void lm_DestroyWindowGroup(LMWindowGroup *grp)
{
PR_EnterMonitor(wingroups_mon);
/* Note: Thread terminates when the thread's main function (in
* this case, lm_wait_for_events) exits.
*/
/************************************ MLM *
* JS_DestroyContext(grp->js_context);
************************************ MLM */
PR_DestroyMonitor(grp->owner_monitor);
PR_DestroyMonitor(grp->queue_monitor);
/* Note: How to destroy an event queue or two?
*/
/* Note: Context list should already be null
*/
PR_REMOVE_LINK(grp);
XP_DELETE(grp);
PR_ExitMonitor(wingroups_mon);
}
LMWindowGroup *LM_GetDefaultWindowGroup(MWContext *mwc)
{
LMWindowGroup *ans;
/* Check to see if this is a frame context. If so, check its parent. */
if((mwc != NULL) && (mwc->is_grid_cell)) {
MWContext *grid_parent, *grid_child;
grid_child = mwc;
grid_parent = mwc->grid_parent;
/* Find the root parent. I wonder if I need to add cycle checking. */
while(grid_parent != NULL) {
grid_child = grid_parent;
grid_parent = grid_child->grid_parent;
}
if( (ans = lm_MWContextToGroup(grid_child)) != NULL) {
/* The parent's been found, return its group. */
return ans;
} else { /* Else add the parent to the default group,
* and return that. */
PR_EnterMonitor(wingroups_mon);
LM_AddContextToGroup(wingroups, grid_child);
ans = wingroups;
PR_ExitMonitor(wingroups_mon);
return ans;
}
}
PR_EnterMonitor(wingroups_mon);
ans = wingroups;
PR_ExitMonitor(wingroups_mon);
return ans;
}
LMWindowGroup *lm_MWContextToGroup(MWContext *mwc)
{
LMWindowGroup *ptr = NULL;
LMWindowGroup *ans = NULL;
PR_EnterMonitor(wingroups_mon);
ptr = wingroups;
if(lm_GetEntryForContext(wingroups, mwc) != NULL) {
ans = wingroups;
PR_ExitMonitor(wingroups_mon);
return ans;
}
ptr = PR_NEXT_LINK(ptr);
while(ptr != wingroups) {
if(lm_GetEntryForContext(ptr, mwc) != NULL) {
ans = ptr;
PR_ExitMonitor(wingroups_mon);
return ans;
}
ptr = PR_NEXT_LINK(ptr);
}
PR_ExitMonitor(wingroups_mon);
return NULL;
}
LMWindowGroup *lm_QueueStackToGroup(QueueStackElement *qse)
{
LMWindowGroup *ptr = NULL;
LMWindowGroup *ans = NULL;
PR_EnterMonitor(wingroups_mon);
ptr = wingroups;
if(wingroups->queue_stack == qse) {
ans = wingroups;
PR_ExitMonitor(wingroups_mon);
return ans;
}
ptr = PR_NEXT_LINK(ptr);
while(ptr != wingroups) {
if(ptr->queue_stack == qse) {
ans = ptr;
PR_ExitMonitor(wingroups_mon);
return ans;
}
ptr = PR_NEXT_LINK(ptr);
}
PR_ExitMonitor(wingroups_mon);
return NULL;
}
PREventQueue *LM_MWContextToQueue(MWContext *mwc)
{
/* Note: This gets the interpret queue, need to get top queue as well
*/
LMWindowGroup *grp = lm_MWContextToGroup(mwc);
if(grp != NULL) {
return LM_WindowGroupToQueue(grp);
}
return NULL;
}
PREventQueue *LM_WindowGroupToQueue(LMWindowGroup *lmg)
{
return lmg->interpret_queue;
}
ContextList *lm_GetEntryForContext(LMWindowGroup *grp, MWContext *cx)
{
ContextList *cxl = grp->mw_contexts;
ContextList *ans = NULL;
if(PR_CLIST_IS_EMPTY(cxl)) {
return NULL;
} else {
ContextList *ptr = PR_NEXT_LINK(cxl);
while(ptr != cxl) {
if(ptr->context == cx) {
ans = ptr;
break;
}
ptr = PR_NEXT_LINK(ptr);
}
}
return ans;
}
void LM_AddContextToGroup(LMWindowGroup *grp, MWContext *cx)
{
ContextList *cxl;
if(lm_MWContextToGroup(cx) != NULL) {
/* Hey, why are we adding this stuff twice? */
XP_ASSERT(0);
}
cxl = XP_NEW_ZAP(ContextList);
/* Note: failure?!?!?!
*/
cxl->context = cx;
PR_APPEND_LINK(cxl, grp->mw_contexts);
}
void lm_RemoveContextFromGroup(LMWindowGroup *grp, MWContext *cx);
void LM_RemoveContextFromGroup(MWContext *cx)
{
LMWindowGroup *grp = lm_MWContextToGroup(cx);
if(grp) {
lm_RemoveContextFromGroup(grp, cx);
}
}
void lm_RemoveContextFromGroup(LMWindowGroup *grp, MWContext *cx)
{
if(!PR_CLIST_IS_EMPTY(grp->mw_contexts)) {
ContextList *entry = lm_GetEntryForContext(grp, cx);
if(entry != NULL) {
PR_REMOVE_LINK(entry);
XP_DELETE(entry);
}
}
if(PR_CLIST_IS_EMPTY(grp->mw_contexts) && (grp != wingroups)) {
grp->done = PR_TRUE;
}
}
PRBool LM_IsLocked(LMWindowGroup *grp)
{
PRBool ans;
PR_EnterMonitor(request_mon);
ans = grp->hasLock;
PR_ExitMonitor(request_mon);
return ans;
}
void LM_BeginRequest(LMWindowGroup *grp, JSContext *jsc)
{
PR_EnterMonitor(request_mon);
grp->hasLock = PR_TRUE;
grp->lock_context = jsc;
if((JS_GetContextThread(jsc)) != ((intN) grp->thread)) {
JS_SetContextThread(jsc);
}
PR_ExitMonitor(request_mon);
JS_BeginRequest(jsc);
}
void LM_EndRequest(LMWindowGroup *grp, JSContext *jsc)
{
JS_EndRequest(jsc);
PR_EnterMonitor(request_mon);
grp->lock_context = NULL;
grp->hasLock = PR_FALSE;
PR_ExitMonitor(request_mon);
}
JSBool LM_ShouldRunGC(JSContext *cx, JSGCStatus status)
{
JSBool ans = JS_TRUE;
JSContext *active;
LMWindowGroup *ptr;
if(status != JSGC_BEGIN) {
return JS_TRUE;
}
PR_EnterMonitor(request_mon);
if(wingroups->hasLock) {
active = wingroups->lock_context;
if(active != cx) {
ans=JS_FALSE;
goto bye;
}
}
ptr = PR_NEXT_LINK(wingroups);
while(ptr != wingroups) {
if(ptr->hasLock) {
active = ptr->lock_context;
if(active != cx) {
ans=JS_FALSE;
goto bye;
}
}
ptr = PR_NEXT_LINK(ptr);
}
bye:
PR_ExitMonitor(request_mon);
return ans;
}

View File

@@ -0,0 +1,617 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*
jscookie.c -- javascript reflection of cookies for filters.
Created: Frederick G.M. Roeber <roeber@netscape.com>, 12-Jul-97.
Adopted: Judson Valeski, 1997.
Large chunks of this were stolen from jsmsg.c.
*/
#include "mkutils.h"
#include "mkutils.h"
#include "mkparse.h"
#include "mkaccess.h"
#include "prefapi.h"
#include "jsapi.h"
#include "xp_core.h"
#include "xp_mcom.h"
#include "jscookie.h"
#include "ds.h"
#include "htmldlgs.h"
#include "xpgetstr.h"
extern int MK_ACCESS_JAVASCRIPT_COOKIE_FILTER;
static JSObject *filter_obj = NULL;
static JSContext *filter_context = NULL;
static JSBool error_reporter_installed = JS_FALSE;
static JSErrorReporter previous_error_reporter;
/* tells us when we should recompile the file. */
static JSBool need_compile = JS_TRUE;
/* This is the private instance data associated with a cookie */
typedef struct JSCookieData {
JSContext *js_context;
JSObject *js_object;
JSCFCookieData *data;
PRPackedBool property_changed, rejected, accepted, ask, decision_made;
} JSCookieData;
/* The properties of a cookie that we reflect */
enum cookie_slot {
COOKIE_PATH = -1,
COOKIE_DOMAIN = -2,
COOKIE_NAME = -3,
COOKIE_VALUE = -4,
COOKIE_EXPIRES = -5,
COOKIE_URL = -6,
COOKIE_IS_SECURE = -7,
COOKIE_IS_DOMAIN = -8,
COOKIE_PROMPT_PREF = -9,
COOKIE_PREF = -10
};
/*
* Should more of these be readonly? What does it mean for a cookie
* to de secure? -chouck
*/
static JSPropertySpec cookie_props[] = {
{ "path", COOKIE_PATH, JSPROP_ENUMERATE },
{ "domain", COOKIE_DOMAIN, JSPROP_ENUMERATE },
{ "name", COOKIE_NAME, JSPROP_ENUMERATE },
{ "value", COOKIE_VALUE, JSPROP_ENUMERATE },
{ "expires", COOKIE_EXPIRES, JSPROP_ENUMERATE },
{ "url", COOKIE_URL, JSPROP_ENUMERATE|JSPROP_READONLY },
{ "isSecure", COOKIE_IS_SECURE, JSPROP_ENUMERATE },
{ "isDomain", COOKIE_IS_DOMAIN, JSPROP_ENUMERATE },
{ "prompt", COOKIE_PROMPT_PREF, JSPROP_ENUMERATE|JSPROP_READONLY },
{ "preference", COOKIE_PREF, JSPROP_ENUMERATE|JSPROP_READONLY },
{ 0 }
};
PR_STATIC_CALLBACK(JSBool)
cookie_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
JSCookieData *data;
JSString *str;
jsint slot;
data = (JSCookieData *)JS_GetPrivate(cx, obj);
if (!data)
return JS_TRUE;
if (!JSVAL_IS_INT(id))
return JS_TRUE;
slot = JSVAL_TO_INT(id);
switch (slot) {
case COOKIE_PATH:
str = JS_NewStringCopyZ(cx, (const char *)data->data->path_from_header);
if( (JSString *)0 == str )
return JS_FALSE;
*vp = STRING_TO_JSVAL(str);
break;
case COOKIE_DOMAIN:
str = JS_NewStringCopyZ(cx, (const char *)data->data->host_from_header);
if( (JSString *)0 == str )
return JS_FALSE;
*vp = STRING_TO_JSVAL(str);
break;
case COOKIE_NAME:
str = JS_NewStringCopyZ(cx, (const char *)data->data->name_from_header);
if( (JSString *)0 == str )
return JS_FALSE;
*vp = STRING_TO_JSVAL(str);
break;
case COOKIE_VALUE:
str = JS_NewStringCopyZ(cx, (const char *)data->data->cookie_from_header);
if( (JSString *)0 == str )
return JS_FALSE;
*vp = STRING_TO_JSVAL(str);
break;
case COOKIE_EXPIRES:
*vp = INT_TO_JSVAL(data->data->expires);
break;
case COOKIE_URL:
str = JS_NewStringCopyZ(cx, (const char *)data->data->url);
if( (JSString *)0 == str )
return JS_FALSE;
*vp = STRING_TO_JSVAL(str);
break;
case COOKIE_IS_SECURE:
*vp = BOOLEAN_TO_JSVAL(data->data->secure);
break;
case COOKIE_IS_DOMAIN:
*vp = BOOLEAN_TO_JSVAL(data->data->domain);
break;
case COOKIE_PROMPT_PREF:
*vp = BOOLEAN_TO_JSVAL(data->data->prompt);
break;
case COOKIE_PREF:
*vp = INT_TO_JSVAL(data->data->preference);
break;
}
return JS_TRUE;
}
PR_STATIC_CALLBACK(JSBool)
cookie_setProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
JSCookieData *data;
jsint slot;
PRInt32 i;
JSBool b;
data = (JSCookieData *)JS_GetPrivate(cx, obj);
if (!data)
return JS_TRUE;
if (!JSVAL_IS_INT(id))
return JS_TRUE;
slot = JSVAL_TO_INT(id);
if (slot == COOKIE_PATH) {
data->data->path_from_header = JS_GetStringBytes(JSVAL_TO_STRING(*vp));
}
else if (slot == COOKIE_DOMAIN) {
data->data->host_from_header = JS_GetStringBytes(JSVAL_TO_STRING(*vp));
}
else if (slot == COOKIE_NAME) {
data->data->name_from_header = JS_GetStringBytes(JSVAL_TO_STRING(*vp));
}
else if (slot == COOKIE_VALUE) {
data->data->cookie_from_header = JS_GetStringBytes(JSVAL_TO_STRING(*vp));
}
else if (slot == COOKIE_EXPIRES) {
if( !JS_ValueToInt32(cx, *vp, (long *)&i) )
return JS_FALSE;
data->data->expires = i;
}
else if (slot == COOKIE_IS_SECURE) {
if( !JS_ValueToBoolean(cx, *vp, &b) )
return JS_FALSE;
data->data->secure = b;
}
else if (slot == COOKIE_IS_DOMAIN) {
if( !JS_ValueToBoolean(cx, *vp, &b) )
return JS_FALSE;
data->data->domain = b;
}
data->property_changed = TRUE;
return JS_TRUE;
}
PR_STATIC_CALLBACK(void)
cookie_finalize(JSContext *cx, JSObject *obj)
{
JSCookieData *cookie;
cookie = JS_GetPrivate(cx, obj);
FREEIF(cookie);
}
/* So we can possibly add functions "global" to filters... */
static JSClass global_class = {
"CookieFilters", 0 /* no private data */,
JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub
};
static JSClass js_cookie_class = {
"Cookie", JSCLASS_HAS_PRIVATE,
JS_PropertyStub, JS_PropertyStub, cookie_getProperty, cookie_setProperty,
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, cookie_finalize
};
/* cookie.accept() -- mark it okay */
PR_STATIC_CALLBACK(JSBool)
cookie_accept(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval * rval)
{
JSCookieData *data;
if (!(data = (JSCookieData*)JS_GetInstancePrivate(cx, obj, &js_cookie_class, argv)))
return JS_FALSE;
data->accepted = TRUE;
data->rejected = FALSE;
data->ask = FALSE;
data->decision_made = TRUE;
return JS_TRUE;
}
/* cookie.reject() -- reject it out of hand */
PR_STATIC_CALLBACK(JSBool)
cookie_reject(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval * rval)
{
JSCookieData *data;
if (!(data = (JSCookieData*)JS_GetInstancePrivate(cx, obj, &js_cookie_class, argv)))
return JS_FALSE;
data->accepted = FALSE;
data->rejected = TRUE;
data->ask = FALSE;
data->decision_made = TRUE;
return JS_TRUE;
}
/* cookie.ask() -- ask the luser, even if that pref is off */
PR_STATIC_CALLBACK(JSBool)
cookie_ask(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval * rval)
{
JSCookieData *data;
if (!(data = (JSCookieData*)JS_GetInstancePrivate(cx, obj, &js_cookie_class, argv)))
return JS_FALSE;
data->accepted = FALSE;
data->rejected = FALSE;
data->ask = TRUE;
data->decision_made = TRUE;
return JS_TRUE;
}
/* cookie.confirm() -- pop up a confirmation box */
PR_STATIC_CALLBACK(JSBool)
cookie_confirm(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval * rval)
{
JSCookieData *data;
JSString *str;
char *msg = (char *)0;
Bool result;
MWContext * context = XP_FindSomeContext();
if (argc < 1 || !context)
return JS_FALSE;
if (!(data = (JSCookieData*)JS_GetInstancePrivate(cx, obj, &js_cookie_class, argv)))
return JS_FALSE;
str = JS_ValueToString(cx, argv[0]);
if (!str)
return JS_FALSE;
StrAllocCopy(msg, XP_GetString(MK_ACCESS_JAVASCRIPT_COOKIE_FILTER));
StrAllocCat(msg, JS_GetStringBytes(str));
if (!msg)
return JS_FALSE;
result = FE_Confirm(context, msg);
FREEIF(msg);
*rval = BOOLEAN_TO_JSVAL(result);
return JS_TRUE;
}
#if DEBUG
/* trace() -- outputs spew to stderr. Actually, this (or something like it
that perhaps outputs to the same file that the rest of the filter logging code
writes to) would probably be very useful in the normal course of writing filters. */
PR_STATIC_CALLBACK(JSBool)
cookie_filter_trace(JSContext *cx, JSObject * obj, uint argc, jsval *argv, jsval * rval)
{
if (argc > 0)
{
JSString *str;
const char *trace_str;
if (!(str = JS_ValueToString(cx, argv[0])))
return JS_FALSE;
trace_str = JS_GetStringBytes(str);
if (*trace_str != '\0')
{
fprintf (stderr, "cookie filter trace: %s\n", trace_str);
}
return JS_TRUE;
}
return JS_FALSE;
}
#endif
static JSFunctionSpec cookie_methods[] = {
{ "accept", cookie_accept, 0 },
{ "reject", cookie_reject, 0 },
{ "ask", cookie_ask, 0 },
{ "confirm", cookie_confirm, 1 },
{ 0 }
};
static JSFunctionSpec filter_methods[] = {
#ifdef DEBUG
{ "trace", cookie_filter_trace, 1 },
#endif
{ 0 }
};
PRIVATE void
destroyJSCookieFilterStuff(void)
{
filter_obj = NULL;
}
/*
* This function used to take an MWContext and store it as the private data
* of the filter object. That is a no-no since the filter_obj is going to
* be around until the end of time but there is no guarentee that the
* context won't get free'd out from under us. The solution is to not
* hold onto any particular context but just call XP_FindSomeContext() or
* some derivative of it when we need to.
*/
PRIVATE JSContext *
initializeJSCookieFilterStuff()
{
/* Only bother initializing once */
if (filter_obj)
return filter_context;
/* If we can't get the mozilla-thread global context just bail */
PREF_GetConfigContext(&filter_context);
if (!filter_context)
return NULL;
JS_BeginRequest(filter_context);
/* create our "global" object. We make the message object a child of this */
filter_obj = JS_NewObject(filter_context, &global_class, NULL, NULL);
/* MLM - don't do JS_InitStandardClasses() twice */
if (!filter_obj
|| !JS_DefineFunctions(filter_context, filter_obj, filter_methods))
{
JS_EndRequest(filter_context);
destroyJSCookieFilterStuff();
return NULL;
}
JS_EndRequest(filter_context);
return filter_context;
}
PRIVATE JSObject *
newCookieObject(void)
{
JSObject *rv;
JSCookieData *cookie_data;
rv = JS_DefineObject(filter_context, filter_obj,
"cookie", &js_cookie_class,
NULL, JSPROP_ENUMERATE);
if( (JSObject *)0 == rv )
return (JSObject *)0;
cookie_data = XP_NEW_ZAP(JSCookieData);
if( (JSCookieData *)0 == cookie_data )
return (JSObject *)0;
if( !JS_SetPrivate(filter_context, rv, cookie_data)
|| !JS_DefineProperties(filter_context, rv, cookie_props)
|| !JS_DefineFunctions(filter_context, rv, cookie_methods)) {
return (JSObject *)0;
}
return rv;
}
PR_STATIC_CALLBACK(void)
jscookie_ErrorReporter(JSContext *cx, const char *message, JSErrorReport *report)
{
char *msg = NULL;
MWContext *context;
context = XP_FindSomeContext();
if(!context || !report)
return;
/*XXX: i18n-ise this */
msg = PR_sprintf_append(NULL,
"JavaScript Cookie Filter Error:\n"
"You will be prompted manually to accept or reject this cookie.\n"
"Filename: %s\n"
"Line #: %u\n"
"%s\n"
"%.*s\n",
report->filename,
report->lineno,
report->linebuf,
(int)(report->tokenptr - report->linebuf) + 1,
"^"
);
if (!msg)
return;
FE_Alert(context, msg);
XP_FREE(msg);
return;
}
PRIVATE JSBool
compileJSCookieFilters(void)
{
static time_t m_time = 0; /* the last modification time of filters.js */
static JSBool ret_val = JS_FALSE;
char *filename;
XP_File fp;
XP_StatStruct stats;
if (!need_compile)
return ret_val;
filename = WH_FileName("", xpJSCookieFilters);
XP_Trace("+Filename for script filter is %s\n", filename);
/* If we can't get to the file, get the hell outa dodge. */
if(XP_Stat(filename, &stats, xpJSCookieFilters))
return ret_val;
if (stats.st_mtime > m_time || need_compile)
{
long fileLength;
char *buffer;
jsval rval;
m_time = stats.st_mtime;
fileLength = stats.st_size;
if (fileLength <= 1)
{
ret_val = JS_FALSE;
return ret_val;
}
if( !(fp = XP_FileOpen(filename, xpJSCookieFilters, "r")) ) {
ret_val = JS_FALSE;
return ret_val;
}
buffer = (char*)malloc(fileLength);
if (!buffer) {
XP_FileClose(fp);
ret_val = JS_FALSE;
return ret_val;
}
fileLength = XP_FileRead(buffer, fileLength, fp);
XP_FileClose(fp);
XP_Trace("+Compiling filters.js...\n");
ret_val = JS_EvaluateScript(filter_context, filter_obj, buffer, fileLength,
filename, 1, &rval);
XP_Trace("+Done.\n");
XP_FREE(buffer);
need_compile = JS_FALSE;
}
return ret_val;
}
PUBLIC JSCFResult
JSCF_Execute(
MWContext *mwcontext,
const char *script_name,
JSCFCookieData *data,
Bool *data_changed
)
{
jsval result;
jsval filter_arg; /* we will this in with the message object we create. */
JSObject *cookie_obj;
JSCookieData *cookie_data;
if (!script_name)
return JSCF_error;
/* initialize the filter stuff, and bomb out early if it fails */
if (!initializeJSCookieFilterStuff())
return JSCF_error;
JS_BeginRequest(filter_context);
/*
* try loading (reloading if necessary) the filter file before bothering
* to create any JS-objects
*/
if (!compileJSCookieFilters()) {
JS_EndRequest(filter_context);
return JSCF_error;
}
if (!error_reporter_installed)
{
error_reporter_installed = JS_TRUE;
previous_error_reporter = JS_SetErrorReporter(filter_context,
jscookie_ErrorReporter);
}
cookie_obj = newCookieObject();
if( (JSObject *)0 == cookie_obj ) {
JS_EndRequest(filter_context);
return JSCF_error;
}
cookie_data = (JSCookieData *)JS_GetPrivate(filter_context, cookie_obj);
cookie_data->js_context = filter_context;
cookie_data->js_object = cookie_obj;
cookie_data->data = data;
cookie_data->property_changed = FALSE;
cookie_data->rejected = FALSE;
cookie_data->accepted = FALSE;
cookie_data->decision_made = FALSE;
filter_arg = OBJECT_TO_JSVAL(cookie_obj);
JS_CallFunctionName(filter_context, filter_obj, script_name, 1,
&filter_arg, &result);
JS_EndRequest(filter_context);
*data_changed = cookie_data->property_changed;
if( cookie_data->decision_made ) {
if( cookie_data->rejected )
return JSCF_reject;
else if( cookie_data->accepted )
return JSCF_accept;
else if( cookie_data->ask )
return JSCF_ask;
}
return JSCF_whatever;
}
PUBLIC void
JSCF_Cleanup(void)
{
TRACEMSG(("+Cleaning up JS Cookie Filters"));
need_compile = JS_TRUE;
if (filter_context)
{
JS_BeginRequest(filter_context);
if (error_reporter_installed)
{
error_reporter_installed = JS_FALSE;
JS_SetErrorReporter(filter_context, previous_error_reporter);
}
JS_GC(filter_context);
destroyJSCookieFilterStuff();
JS_EndRequest(filter_context);
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,751 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/* Please leave at the top for windows precompiled headers */
#include "mkutils.h"
#include <stddef.h>
#include <memory.h>
#include <time.h>
#include "net.h"
#include "xp.h"
#include "libmocha.h"
#include "mkgeturl.h"
#include "mkmocha.h"
#include "libevent.h"
#include "fe_proto.h"
#include "pa_tags.h" /* included via -I../libparse */
#include "libi18n.h" /* unicode */
#include "layout.h" /* for lo_ContextToCell only */
extern char lm_unknown_origin_str[];
extern int MK_OUT_OF_MEMORY;
extern int MK_MALFORMED_URL_ERROR;
typedef struct {
char * buffer;
size_t offset;
size_t length;
MWContext * context;
char * content_type;
int16 char_set;
} MochaStream;
typedef struct {
int32 ref_count;
ActiveEntry * active_entry;
PRPackedBool is_valid;
PRPackedBool eval_what;
PRPackedBool single_shot;
PRPackedBool polling;
char * str;
size_t len;
MWContext * context;
int status;
char * wysiwyg_url;
char * base_href;
NET_StreamClass * stream;
} MochaConData;
#define HOLD_CON_DATA(con_data) ((con_data)->ref_count++)
#define DROP_CON_DATA(con_data) { \
if (--(con_data)->ref_count == 0) \
free_con_data(con_data); \
}
static void
free_con_data(MochaConData * con_data)
{
XP_FREEIF(con_data->str);
XP_FREEIF(con_data->wysiwyg_url);
XP_FREEIF(con_data->base_href);
XP_FREE(con_data);
}
#define START_POLLING(ae, con_data) { \
(con_data)->polling = TRUE; \
NET_SetCallNetlibAllTheTime((ae)->window_id, "mkmocha"); \
}
#define STOP_POLLING(ae, con_data) { \
NET_ClearCallNetlibAllTheTime((ae)->window_id, "mkmocha"); \
(con_data)->polling = FALSE; \
}
/* forward decl */
PRIVATE int32 net_ProcessMocha(ActiveEntry * ae);
/*
* Add the new bits to our buffer
*/
PRIVATE int
mocha_process(NET_StreamClass *stream, const char *str, int32 len)
{
MochaStream * mocha_stream = (MochaStream *) stream->data_object;
mocha_stream->length += len;
if (!mocha_stream->buffer) {
mocha_stream->buffer = (char *)XP_ALLOC(mocha_stream->length);
}
else {
mocha_stream->buffer = (char *)XP_REALLOC(mocha_stream->buffer,
mocha_stream->length);
}
if (!mocha_stream->buffer) {
return MK_OUT_OF_MEMORY;
}
memcpy(mocha_stream->buffer + mocha_stream->offset, str, len);
mocha_stream->offset += len;
return len;
}
PRIVATE unsigned int
mocha_ready(NET_StreamClass *stream)
{
return MAX_WRITE_READY; /* always ready for writing */
}
/*
* All of the processing for this needs to be done in the mocha thread
*/
PRIVATE void
mocha_complete(NET_StreamClass *stream)
{
void * data;
JSBool isUnicode = JS_FALSE;
MochaStream * mocha_stream = (MochaStream *) stream->data_object;
if (mocha_stream->char_set != CS_DEFAULT) {
uint32 len;
INTL_Unicode * unicode;
/* find out how many unicode characters we'll end up with */
len = INTL_TextToUnicodeLen(mocha_stream->char_set,
(unsigned char *) mocha_stream->buffer,
mocha_stream->length);
unicode = XP_ALLOC(sizeof(INTL_Unicode) * len);
if (!unicode)
return;
/* do the conversion */
mocha_stream->length = INTL_TextToUnicode(mocha_stream->char_set,
(unsigned char *) mocha_stream->buffer,
mocha_stream->length,
unicode,
len);
data = unicode;
isUnicode = JS_TRUE;
XP_FREE(mocha_stream->buffer);
mocha_stream->buffer = NULL;
}
else {
data = mocha_stream->buffer;
}
/* this will grab ownership of data */
ET_MochaStreamComplete(mocha_stream->context, data,
mocha_stream->length,
mocha_stream->content_type,
isUnicode);
XP_FREEIF(mocha_stream->content_type);
XP_FREE(mocha_stream);
}
PRIVATE void
mocha_abort(NET_StreamClass *stream, int status)
{
MochaStream * mocha_stream = (MochaStream *) stream->data_object;
ET_MochaStreamAbort(mocha_stream->context, status);
XP_FREE(mocha_stream->buffer);
XP_FREEIF(mocha_stream->content_type);
XP_FREE(mocha_stream);
}
int16
net_check_for_charset(URL_Struct *url_struct)
{
int i, max;
char *key, *value;
static char charset[] = "charset=";
int len = XP_STRLEN(charset);
max = url_struct->all_headers.empty_index;
for (i = 0; i < max; i++) {
key = url_struct->all_headers.key[i];
/* keep looking until we find the content type one */
if (XP_STRCASECMP(key, "Content-type"))
continue;
value = url_struct->all_headers.value[i];
/* don't bother unless this is a JS file to begin with */
if (!strcasestr(value, APPLICATION_JAVASCRIPT))
return CS_DEFAULT;
value = XP_STRTOK(value, ";");
while (value) {
value = XP_StripLine(value);
if (!strncasecomp(value, charset, len)) {
value += len;
value = XP_StripLine(value);
return (INTL_CharSetNameToID(value));
}
/* move to next arg */
value = XP_STRTOK(NULL, ";");
}
/* found content-type but no charset */
return CS_DEFAULT;
}
/* didn't find content-type */
return CS_DEFAULT;
}
static char *
getOriginFromURLStruct(MWContext *context, URL_Struct *url_struct)
{
char *referer;
/*
* Look in url_struct->origin_url for this javascript: URL's
* original referrer.
*
* In the basis case, a javascript: or *.js URL targets a context
* from a (the same, or not) context loaded with a non-javascript URL.
* The referring document's URL is in url_struct->referer and we
* duplicate it as origin_url. If we find a non-null origin_url
* later, we know by induction where it came from.
*/
referer = url_struct->origin_url;
if (referer == NULL) {
/*
* url_struct->referer (sic) tells the URL of the page in
* which a javascript: or *.js link or form was clicked or submitted.
* If it's non-null, but the context is a frame cell that's
* being (re-)created for this load, don't use referer as the
* decoder's source URL for the evaluation, because the FE has
* arbitrarily set it to the top frameset's URL. Instead, use
* the immediate parent frameset context's wysiwyg URL to get
* the origin of the generator (or the parent's address URL if
* not wysiwyg).
*
* If referer is null, the user typed this javascript: URL or
* its frameset's URL directly into the Location toolbar.
*/
referer = url_struct->referer;
if (referer) {
lo_GridRec *grid = NULL;
if (context->is_grid_cell &&
!lo_ContextToCell(context, FALSE, &grid)) {
/*
* Context is a frame being (re)created: veto referer.
* The javascript: or *.js URL can't be a LAYER SRC= URL in a
* frame because the frame's cell must point to its
* context by the time the first tag (even LAYER) is
* processed by layout.
*/
referer = NULL;
}
}
if (!referer) {
History_entry *he;
if (context->grid_parent) {
/*
* If grid parent, use its history entry to get the
* wysiwyg or real URL, which tells the subject origin
* of (any code in it that may have generated) this
* javascript: or *.js URL open. If no grid parent, this must
* be a javascript: or *.js URL that was typed directly into
* Location.
*/
context = context->grid_parent;
}
he = SHIST_GetCurrent(&context->hist);
if (!he) {
referer = lm_unknown_origin_str;
} else {
referer = he->wysiwyg_url;
if (!referer)
referer = he->address;
}
}
}
XP_ASSERT(referer);
referer = XP_STRDUP(referer);
if (!referer) {
return NULL;
}
url_struct->origin_url = referer;
return referer;
}
NET_StreamClass *
NET_CreateMochaConverter(FO_Present_Types format_out,
void *data_object,
URL_Struct *url_struct,
MWContext *context)
{
MochaStream * mocha_stream;
NET_StreamClass *stream;
char *origin;
mocha_stream = (MochaStream *) XP_NEW_ZAP(MochaStream);
if (!mocha_stream)
return NULL;
mocha_stream->context = context;
mocha_stream->content_type = XP_STRDUP(url_struct->content_type);
mocha_stream->char_set = net_check_for_charset(url_struct);
/* Get the origin from the URL struct. We don't have to free origin
* here because url_struct->origin_url owns it.
*/
origin = getOriginFromURLStruct(context, url_struct);
if (origin == NULL)
return NULL;
if (NET_URL_Type(url_struct->address) == FILE_TYPE_URL &&
NET_URL_Type(origin) != FILE_TYPE_URL)
{
/*
* Don't allow loading a file: URL from a non-file URL to
* prevent privacy attacks against the local machine from
* web pages.
*/
return NULL;
}
stream = NET_NewStream("mocha", mocha_process, mocha_complete,
mocha_abort, mocha_ready, mocha_stream,
context);
return stream;
}
PRIVATE void
mk_mocha_eval_exit_fn(void * data, char * str, size_t len, char * wysiwyg_url,
char * base_href, Bool valid)
{
MochaConData * con_data = (MochaConData *) data;
if (!valid) {
con_data->status = MK_MALFORMED_URL_ERROR;
con_data->is_valid = TRUE;
return;
}
if (str == NULL) {
con_data->status = MK_DATA_LOADED;
con_data->is_valid = TRUE;
return;
}
con_data->base_href = base_href;
con_data->wysiwyg_url = wysiwyg_url;
con_data->str = str;
con_data->len = len;
con_data->is_valid = TRUE;
}
/*
* Handle both 'mocha:<stuff>' urls and the mocha type-in widget
*/
MODULE_PRIVATE int32
net_MochaLoad(ActiveEntry *ae)
{
MWContext *context;
URL_Struct *url_struct;
char *what;
Bool eval_what, single_shot;
MochaConData * con_data;
context = ae->window_id;
url_struct = ae->URL_s;
what = XP_STRCHR(url_struct->address, ':');
XP_ASSERT(what);
what++;
eval_what = FALSE;
single_shot = (*what != '?');
if (single_shot) {
/* Don't use an existing Mocha output window's stream. */
if (*what == '\0') {
/* Generate two grid cells, one for output and one for input. */
what = PR_smprintf("<frameset rows=\"75%%,25%%\">\n"
"<frame name=MochaOutput src=about:blank>\n"
"<frame name=MochaInput src=%.*s#input>\n"
"</frameset>",
what - url_struct->address,
url_struct->address);
} else if (!XP_STRCMP(what, "#input")) {
/* The input cell contains a form with one magic isindex field. */
what = PR_smprintf("<b>%.*s typein</b>\n"
"<form action=%.*s target=MochaOutput"
" onsubmit='this.isindex.focus()'>\n"
"<input name=isindex size=60>\n"
"</form>",
what - url_struct->address - 1,
url_struct->address,
what - url_struct->address,
url_struct->address);
url_struct->internal_url = TRUE;
} else {
eval_what = TRUE;
}
} else {
/* Use the Mocha output window if it exists. */
url_struct->auto_scroll = 1000;
/* Skip the leading question-mark and clean up the string. */
what++;
NET_PlusToSpace(what);
NET_UnEscape(what);
eval_what = TRUE;
}
/* something got hosed. bail */
if (!what) {
ae->status = MK_OUT_OF_MEMORY;
return -1;
}
/* make space for the connection data */
con_data = XP_NEW_ZAP(MochaConData);
if (!con_data) {
ae->status = MK_OUT_OF_MEMORY;
return -1;
}
/* remember for next time */
con_data->ref_count = 1;
con_data->active_entry = ae;
ae->con_data = con_data;
/* set up some state so we remember where we are */
con_data->eval_what = eval_what;
con_data->single_shot = single_shot;
con_data->context = context;
/* fake out netlib so we don't select on the socket id */
ae->socket = NULL;
ae->local_file = TRUE;
if (eval_what) {
char *referer;
JSPrincipals *principals;
ETEvalStuff *stuff;
referer = getOriginFromURLStruct(context, url_struct);
if (!referer) {
ae->status = MK_OUT_OF_MEMORY;
return -1;
}
principals = LM_NewJSPrincipals(NULL, NULL, referer);
if (!principals) {
ae->status = MK_OUT_OF_MEMORY;
return -1;
}
/*
* send the buffer off to be evaluated
*/
stuff = (ETEvalStuff *) XP_NEW_ZAP(ETEvalStuff);
if (!stuff) {
ae->status = MK_OUT_OF_MEMORY;
return -1;
}
stuff->len = XP_STRLEN(what);
stuff->line_no = 0;
stuff->scope_to = NULL;
stuff->want_result = JS_TRUE;
stuff->data = con_data;
stuff->version = JSVERSION_UNKNOWN;
stuff->principals = principals;
ET_EvaluateScript(context, what, stuff, mk_mocha_eval_exit_fn);
}
else {
/* allocated above, don't need to free */
con_data->str = what;
con_data->len = XP_STRLEN(what);
con_data->is_valid = TRUE;
}
/* make sure netlib gets called so we know when our data gets back */
START_POLLING(ae, con_data);
/* ya'll come back now, ya'hear? */
return net_ProcessMocha(ae);
}
PRIVATE int
net_process_mocha(MochaConData * con_data)
{
int32 ref_count;
ref_count = con_data->ref_count;
DROP_CON_DATA(con_data);
if (ref_count == 1 || !con_data->active_entry)
return -1;
return net_ProcessMocha(con_data->active_entry);
}
static char nscp_open_tag[] = "<" PT_NSCP_OPEN ">";
/*
* If the mocha has finished evaluation shove the result
* down the stream and continue else just wait
*/
PRIVATE int32
net_ProcessMocha(ActiveEntry * ae)
{
FO_Present_Types output_format;
Bool to_layout;
Bool first_time;
NET_StreamClass *stream = NULL;
MochaConData * con_data = (MochaConData *) ae->con_data;
MWContext * context;
int status;
/* if we haven't gotten our data yet just return and wait */
if (!con_data || !con_data->is_valid)
return 0;
context = ae->window_id;
/*
* Race with the mocha thread until we can grab the JSLock
*/
if (!con_data->single_shot) {
MochaDecoder * decoder;
HOLD_CON_DATA(con_data);
if (!LM_AttemptLockJS(context,
(JSLockReleaseFunc)net_process_mocha, con_data))
return 0;
DROP_CON_DATA(con_data);
decoder = LM_GetMochaDecoder(context);
if (!decoder) {
LM_UnlockJS(context);
ae->status = MK_OUT_OF_MEMORY;
goto done;
}
stream = decoder->stream;
LM_PutMochaDecoder(decoder);
LM_UnlockJS(context);
}
else {
stream = con_data->stream;
}
/* we've gotten valid data, clear the callme all the time flag */
STOP_POLLING(ae, con_data);
/* see if there were any problems */
if (con_data->status < 0 || con_data->str == NULL) {
ET_SendLoadEvent(context, EVENT_LOAD, NULL, NULL,
LO_DOCUMENT_LAYER_ID, FALSE);
ae->status = con_data->status;
goto done;
}
/*
* If we don't already have a stream to take our output create one now
*/
first_time = !stream;
if (first_time) {
StrAllocCopy(ae->URL_s->content_type, TEXT_HTML);
ae->format_out = CLEAR_CACHE_BIT(ae->format_out);
stream = NET_StreamBuilder(ae->format_out, ae->URL_s, ae->window_id);
if (!stream) {
ae->status = MK_UNABLE_TO_CONVERT;
goto done;
}
}
/*
* If the stream we just created isn't ready for writing just
* hold onto the stream and try again later
*/
if (!stream->is_write_ready(stream)) {
con_data->stream = stream;
START_POLLING(ae, con_data);
return 0;
}
/* XXX this condition is fairly bogus */
output_format = CLEAR_CACHE_BIT(ae->format_out);
to_layout = (output_format != FO_INTERNAL_IMAGE &&
output_format != FO_MULTIPART_IMAGE &&
output_format != FO_EMBED &&
output_format != FO_PLUGIN);
if (to_layout) {
/* The string must end in a newline so the parser will flush it. */
if (con_data->len != 0 && con_data->str[con_data->len-1] != '\n') {
size_t new_len = con_data->len + 1;
char * new_str = XP_ALLOC((new_len + 1) * sizeof(char));
if (!new_str) {
ae->status = MK_OUT_OF_MEMORY;
goto done;
}
XP_MEMCPY(new_str, con_data->str, con_data->len);
new_str[new_len-1] = '\n';
new_str[new_len] = '\0';
con_data->str = new_str;
con_data->len = new_len;
}
}
/*
* If this is the first time do some initial setup. We'll set
* the window title and maybe shove out a <BASE> tag
*/
status = 0;
if (to_layout && first_time && con_data->eval_what) {
/* Feed layout an internal tag so it will create a new top state. */
stream->put_block(stream, nscp_open_tag,
sizeof nscp_open_tag - 1);
(void) LM_WysiwygCacheConverter(context, ae->URL_s,
con_data->wysiwyg_url,
con_data->base_href);
if (*con_data->str != '<') {
char * prefix = NULL;
StrAllocCopy(prefix, "<TITLE>");
StrAllocCat(prefix, ae->URL_s->address);
StrAllocCat(prefix, "</TITLE><PLAINTEXT>");
if (!prefix) {
ae->status = MK_OUT_OF_MEMORY;
goto done;
}
status = (*stream->put_block)(stream, prefix,
XP_STRLEN(prefix));
XP_FREE(prefix);
}
else {
if (con_data->base_href) {
status = (*stream->put_block)(stream,
con_data->base_href,
XP_STRLEN(con_data->base_href));
}
}
}
if (status >= 0) {
status = (*stream->put_block)(stream, con_data->str,
(int32)con_data->len);
}
if (con_data->single_shot && status >= 0)
(*stream->complete)(stream);
if (!con_data->single_shot && status >= 0) {
if (first_time) {
ET_SetDecoderStream(context, stream, ae->URL_s, JS_TRUE);
goto done;
}
} else {
if (status < 0)
(*stream->abort)(stream, status);
if (first_time)
XP_DELETE(stream);
}
ae->status = MK_DATA_LOADED;
done:
ae->con_data = NULL;
con_data->active_entry = NULL;
DROP_CON_DATA(con_data);
return -1;
}
PRIVATE int32
net_InterruptMocha(ActiveEntry *ae)
{
MochaConData * con_data = (MochaConData *) ae->con_data;
if (!con_data)
return MK_INTERRUPTED;
/* do we need to decrement the callme all the time flag? */
if (con_data->polling) {
STOP_POLLING(ae, con_data);
}
/* ae is about to go away, break its connection with con_data */
ae->con_data = NULL;
con_data->active_entry = NULL;
/* ae is about to go away, better get it off the JS lock waiters list */
if (LM_ClearAttemptLockJS(con_data->context,
(JSLockReleaseFunc)net_process_mocha, con_data))
DROP_CON_DATA(con_data);
return ae->status = MK_INTERRUPTED;
}
PRIVATE void
net_CleanupMocha(void)
{
/* nothing so far needs freeing */
return;
}
MODULE_PRIVATE void
NET_InitMochaProtocol(void)
{
static NET_ProtoImpl mocha_proto_impl;
mocha_proto_impl.init = net_MochaLoad;
mocha_proto_impl.process = net_ProcessMocha;
mocha_proto_impl.interrupt = net_InterruptMocha;
mocha_proto_impl.cleanup = net_CleanupMocha;
NET_RegisterProtocolImplementation(&mocha_proto_impl, MOCHA_TYPE_URL);
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,187 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "xp_core.h"
#include "xp_mcom.h"
#include "jsapi.h"
#include "prefapi.h"
#include "hk_funcs.h"
#include "hk_private.h"
static JSObject *HookObject = NULL;
JSObject *
hk_GetHookObject(void)
{
return HookObject;
}
void
hk_SetHookObject(JSObject *hook_obj)
{
HookObject = hook_obj;
}
/*
* Some hooks have dynamic names and can't be in the
* fast hook array lookup, this covers looking up those
* hooks. For example, if I invented a <BLURT> tag,
* this would look for a BLURT_hook function.
*/
intn
hk_IsUnknownTagHook(void *extra)
{
const char *hook_func;
jsval tmp_val;
JSContext *j_context;
hook_func = HK_GetFunctionName(HK_TAG, extra);
if (hook_func == NULL)
{
return 0;
}
if (!PREF_GetConfigContext(&j_context))
{
return 0;
}
if ((j_context == NULL)||(HookObject == NULL))
{
return 0;
}
JS_BeginRequest(j_context);
if ((JS_GetProperty(j_context, HookObject, hook_func, &tmp_val))&&
(JS_TypeOfValue(j_context, tmp_val) == JSTYPE_FUNCTION))
{
JS_EndRequest(j_context);
return 1;
}
JS_EndRequest(j_context);
return 0;
}
/*
* There is no guarantee that someone has checked the existence of the
* hook before calling it, so we check again here. We don't use the
* fast array lookup since it can't catch all hooks anyway, and we
* may well have to fall back to the slow method.
*/
intn
HK_CallHook(int32 hook_id, void *extra, int32 window_id,
char *hook_str, char **hook_ret)
{
const char *hook_func;
intn ok;
jsval tmp_val;
jsval argv[2];
JSContext *j_context;
JSString *str;
const char *result_str;
char *return_str;
*hook_ret = NULL;
if (hook_str == NULL)
{
return 0;
}
/*
* Make a function name form the hook_is and possibly the PA_Tag
* pointed to by extra.
*/
hook_func = HK_GetFunctionName(hook_id, extra);
if (hook_func == NULL)
{
return 0;
}
/*
* Make sure you have a javascript context and object.
*/
if (!PREF_GetConfigContext(&j_context))
{
return 0;
}
if ((j_context == NULL)||(HookObject == NULL))
{
return 0;
}
JS_BeginRequest(j_context);
/*
* Check that there is a function to call.
*/
if ((!JS_GetProperty(j_context, HookObject, hook_func, &tmp_val))||
(JS_TypeOfValue(j_context, tmp_val) != JSTYPE_FUNCTION))
{
JS_EndRequest(j_context);
return 0;
}
/*
* Create the argument/parameter list, and call the function.
*/
str = JS_NewStringCopyZ(j_context, hook_str);
if (str == NULL)
{
JS_EndRequest(j_context);
return 0;
}
argv[0] = STRING_TO_JSVAL(str);
argv[1] = INT_TO_JSVAL(window_id);
if (!JS_CallFunctionName(j_context, HookObject, hook_func, 2, argv,
&tmp_val))
{
JS_EndRequest(j_context);
return 0;
}
/*
* A false return from the function means leave the
* passed string unchanged.
*/
if (tmp_val != JSVAL_FALSE)
{
str = JS_ValueToString(j_context, tmp_val);
if (str == NULL)
{
JS_EndRequest(j_context);
return 0;
}
result_str = JS_GetStringBytes(str);
return_str = XP_STRDUP(result_str);
if (return_str == NULL)
{
JS_EndRequest(j_context);
return 0;
}
*hook_ret = return_str;
}
JS_EndRequest(j_context);
return 1;
}

View File

@@ -0,0 +1,414 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "xp_core.h"
#include "xp_mcom.h"
#include "hk_types.h"
#include "jsapi.h"
#include "prefapi.h"
#include "ntypes.h"
#include "structs.h"
#include "pa_tags.h"
#include "hk_private.h"
#ifdef XP_MAC
#include "hk_funcs.h"
#endif
static hk_FunctionRec **FunctionList = NULL;
static int32 FunctionCount = 0;
static char *hk_FunctionStrings[HK_MAX] = {
NULL,
"location_hook",
"_hook",
"document_start_hook"};
static JSClass autoconf_class = {
"HookConfig", 0,
hk_HookObjectAddProperty, hk_HookObjectDeleteProperty,
JS_PropertyStub, hk_HookObjectSetProperty,
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub
};
/*******************************************
* This function really bugs me! It needs to
* be super fast since it will be called for every
* HTML tag ever processed. This means it should be
* self-contained, and not call off to other functions.
* Making it do that means it can't call off into
* hk_tag.c to get inside the PA_Tag structure in extra,
* and thus makes me include ntypes.h, structs.h, and pa_tags.h.
********************************************/
/*
* A FAST function existence lookup, using an array set up in
* the initialization process.
*/
intn
HK_IsHook(int32 hook_id, void *extra)
{
int32 func_id;
hk_FunctionRec *rec_ptr;
/*
* The no hook case never exists.
*/
if (hook_id == HK_NONE)
{
return 0;
}
/*
* Tag hooks map to the tag types, or alternatly
* unknown tags which are handled elsewhere.
*/
else if (hook_id == HK_TAG)
{
PA_Tag *tag;
tag = (PA_Tag *)extra;
if (tag->type != P_UNKNOWN)
{
func_id = HK_MAX - 1 + tag->type;
}
/*
* P_UNKNOWN tags must be looked up the slow
* dynamic way.
*/
else
{
return(hk_IsUnknownTagHook(extra));
}
}
else
{
func_id = hook_id - 1;
}
/*
* If we are outside the known funtion array, fail.
*/
if ((func_id < 0)||(func_id >= FunctionCount))
{
return 0;
}
/*
* If no function is registered, fail.
*/
rec_ptr = FunctionList[func_id];
if (rec_ptr == NULL)
{
return 0;
}
if (rec_ptr->func_exists == FALSE)
{
return 0;
}
else
{
return 1;
}
}
/*
* Set the existence state of a particular index in the array.
*/
static void
hk_set_function_existence(int32 indx, XP_Bool exists)
{
if ((indx < 0)||(indx >= FunctionCount))
{
return;
}
if (FunctionList[indx] != NULL)
{
FunctionList[indx]->func_exists = exists;
}
}
void
hk_SetFunctionExistence(char *func_name, XP_Bool exists)
{
int32 i, len;
char *tptr;
char *up_str;
char *ptr1, *ptr2;
int32 indx;
/*
* A NULL function one too short for the hook suffix
* cannot be a hook function.
*/
if (func_name == NULL)
{
return;
}
len = XP_STRLEN(func_name);
if (len < XP_STRLEN("_hook"))
{
return;
}
/*
* If the function has no hook suffix we just don't care.
*/
tptr = func_name + len - XP_STRLEN("_hook");
if (XP_STRCMP(tptr, "_hook") != 0)
{
return;
}
/*
* Make an all upper-case copy of the prefix.
*/
*tptr = '\0';
up_str = XP_ALLOC(XP_STRLEN(func_name) + 1);
/*
* If allocation fails, restore original and return.
*/
if (up_str == NULL)
{
*tptr = '_';
return;
}
ptr1 = func_name;
ptr2 = up_str;
while (*ptr1 != '\0')
{
*ptr2 = (char)(XP_TO_UPPER(*ptr1));
ptr1++;
ptr2++;
}
*ptr2 = '\0';
*tptr = '_';
/*
* Check if the prefix is a known TAG name.
*/
indx = hk_TagStringToIndex(up_str);
XP_FREE(up_str);
if (indx >= 0)
{
indx = HK_MAX - 1 + indx;
hk_set_function_existence(indx, exists);
return;
}
/*
* Special check for the TEXT_hook which is a tag hook but
* won't be caught by the hk_TagStringToIndex test.
*/
if (XP_STRCMP(func_name, "TEXT_hook") == 0)
{
indx = HK_MAX - 1 + 0;
hk_set_function_existence(indx, exists);
return;
}
/*
* Finally, check the array of known tag hooks.
*/
for (i=1; i<HK_MAX; i++)
{
if ((hk_FunctionStrings[i] != NULL)&&
(XP_STRCMP(func_name, hk_FunctionStrings[i]) == 0))
{
indx = i - 1;
hk_set_function_existence(indx, exists);
return;
}
}
}
/*
* Free all members of the function list array up to
* the passed index.
*/
static void
hk_free_function_list(int32 indx)
{
int32 i;
for (i=0; i<indx; i++)
{
if (FunctionList[i] != NULL)
{
if (FunctionList[i]->func_name != NULL)
{
XP_FREE(FunctionList[i]->func_name);
FunctionList[i]->func_name = NULL;
}
XP_FREE(FunctionList[i]);
FunctionList[i] = NULL;
}
}
XP_FREE(FunctionList);
FunctionList = NULL;
FunctionCount = 0;
}
/*
* Initialize the function list array to contain all the known tags
* plus all the known special hook functions.
*/
static intn
hk_initialize_function_list(void)
{
int32 i, indx;
int32 tag_cnt;
/*
* Subtract one from HK_MAX because it includes the unknown
* at 0. For the tag count, unknown is -1, so we can just
* use it as is.
*/
tag_cnt = hk_NumKnownTags();
FunctionCount = HK_MAX - 1 + tag_cnt;
FunctionList = (hk_FunctionRec **)XP_ALLOC(FunctionCount *
sizeof(hk_FunctionRec *));
if (FunctionList == NULL)
{
return 0;
}
indx = 0;
/*
* First allocate all the known special hooks.
*/
for (i=1; i < HK_MAX; i++)
{
hk_FunctionRec *rec_ptr;
rec_ptr = XP_NEW(hk_FunctionRec);
if (rec_ptr == NULL)
{
hk_free_function_list(indx);
return 0;
}
rec_ptr->func_exists = FALSE;
rec_ptr->func_name = hk_FunctionStrings[i];
FunctionList[indx] = rec_ptr;
indx++;
}
/*
* Now do all known tags.
*/
for (i=0; i < tag_cnt; i++)
{
hk_FunctionRec *rec_ptr;
rec_ptr = XP_NEW(hk_FunctionRec);
if (rec_ptr == NULL)
{
hk_free_function_list(indx);
return 0;
}
rec_ptr->func_exists = FALSE;
rec_ptr->func_name = hk_TagIndexToFunctionString(i);
FunctionList[indx] = rec_ptr;
indx++;
}
return 1;
}
/*
* Initialize all the libhook stuff. SHould only be called once.
* Usually just before reading hook.js.
*/
intn
HK_Init(void)
{
intn ret;
JSContext *j_context;
JSObject *j_object;
JSObject *hook_obj;
/*
* If a hook object does not already exist, create
* one. If you cannot create one, then return failure.
*/
hook_obj = hk_GetHookObject();
if (hook_obj == NULL)
{
if ((!PREF_GetConfigContext(&j_context))||
(!PREF_GetGlobalConfigObject(&j_object)))
{
return 0;
}
JS_BeginRequest(j_context);
hook_obj = JS_DefineObject(j_context, j_object,
"HookConfig",
&autoconf_class,
NULL,
JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT);
JS_EndRequest(j_context);
}
if (hook_obj == NULL)
{
return 0;
}
hk_SetHookObject(hook_obj);
ret = hk_initialize_function_list();
return ret;
}
/*
* Get the hook know for the passed hook id.
*/
const char *
HK_GetFunctionName(int32 hook_id, void *extra)
{
if ((hook_id < 0)||(hook_id >= HK_MAX))
{
return NULL;
}
/*
* Special name creation for tag hooks.
*/
if (hook_id == HK_TAG)
{
const char *ret_str;
ret_str = (const char *)hk_TagFunctionString(
hk_FunctionStrings[hook_id], extra);
return ret_str;
}
else
{
return hk_FunctionStrings[hook_id];
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,29 +0,0 @@
#!nmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
DEPTH=..
include <$(DEPTH)/config/config.mak>
DIRS = nss \
manager \
$(NULL)
include <$(DEPTH)\config\rules.mak>

View File

@@ -1,109 +0,0 @@
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
# Brian Ryner <bryner@netscape.com>
#
DEPTH = ../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
ifeq (,$(filter-out OS2 WINNT,$(OS_ARCH)))
LOADABLE_ROOT_MODULE = nssckbi$(DLL_SUFFIX)
NSS3_LIB = nss3$(DLL_SUFFIX)
SMIME3_LIB = smime3$(DLL_SUFFIX)
SSL3_LIB = ssl3$(DLL_SUFFIX)
SOFTOKEN3_LIB = softokn3$(DLL_SUFFIX)
else
LOADABLE_ROOT_MODULE = libnssckbi$(DLL_SUFFIX)
NSS3_LIB = libnss3$(DLL_SUFFIX)
SMIME3_LIB = libsmime3$(DLL_SUFFIX)
SSL3_LIB = libssl3$(DLL_SUFFIX)
SOFTOKEN3_LIB = libsoftokn3$(DLL_SUFFIX)
endif
FREEBL_PURE32_MODULE = libfreebl_pure32_3$(DLL_SUFFIX)
FREEBL_HYBRID_MODULE = libfreebl_hybrid_3$(DLL_SUFFIX)
# NSS makefiles are not safe for parallel execution.
DEFAULT_GMAKE_FLAGS = MAKE="$(MAKE) -j1" -j1
DEFAULT_GMAKE_FLAGS += MOZILLA_INCLUDES="-I$(MOZ_BUILD_ROOT)/dist/include/nspr -I$(MOZ_BUILD_ROOT)/dist/include/dbm"
DEFAULT_GMAKE_FLAGS += SOURCE_MD_DIR=$(MOZ_BUILD_ROOT)/dist
DEFAULT_GMAKE_FLAGS += DIST=$(MOZ_BUILD_ROOT)/dist
DEFAULT_GMAKE_FLAGS += MOZILLA_CLIENT=1
DEFAULT_GMAKE_FLAGS += NO_MDUPDATE=1
ABS_topsrcdir := $(shell cd $(topsrcdir); pwd)
ifneq ($(ABS_topsrcdir),$(MOZ_BUILD_ROOT))
DEFAULT_GMAKE_FLAGS += BUILD_TREE=$(MOZ_BUILD_ROOT)
endif
ifndef MOZ_DEBUG
DEFAULT_GMAKE_FLAGS += BUILD_OPT=1
endif
ifdef GNU_CC
DEFAULT_GMAKE_FLAGS += NS_USE_GCC=1 NS_USE_NATIVE=
else
DEFAULT_GMAKE_FLAGS += NS_USE_GCC= NS_USE_NATIVE=1
endif
ifdef USE_N32
# It is not really necessary to specify USE_PTHREADS=1. USE_PTHREADS
# merely adds _PTH to coreconf's OBJDIR name.
DEFAULT_GMAKE_FLAGS += USE_N32=1 USE_PTHREADS=1
endif
ifdef HAVE_64BIT_OS
DEFAULT_GMAKE_FLAGS += USE_64=1
endif
SUBMAKEFILES = boot/Makefile ssl/Makefile pki/Makefile
include $(topsrcdir)/config/rules.mk
depend dependclean export::
$(MAKE) -C boot $@
$(MAKE) -C ssl $@
$(MAKE) -C pki $@
libs::
$(MAKE) -C $(topsrcdir)/security/coreconf $(DEFAULT_GMAKE_FLAGS)
cd $(DIST)/lib; cp -f libmozdbm_s.$(LIB_SUFFIX) libdbm.$(LIB_SUFFIX)
$(MAKE) -C $(topsrcdir)/security/nss/lib $(DEFAULT_GMAKE_FLAGS)
$(INSTALL) -m 755 $(DIST)/lib/$(LOADABLE_ROOT_MODULE) $(DIST)/bin
$(INSTALL) -m 755 $(DIST)/lib/$(SOFTOKEN3_LIB) $(DIST)/bin
$(INSTALL) -m 755 $(DIST)/lib/$(NSS3_LIB) $(DIST)/bin
$(INSTALL) -m 755 $(DIST)/lib/$(SSL3_LIB) $(DIST)/bin
$(INSTALL) -m 755 $(DIST)/lib/$(SMIME3_LIB) $(DIST)/bin
ifneq (,$(filter SunOS HP-UX,$(OS_ARCH)))
ifneq ($(OS_TEST),i86pc)
ifndef HAVE_64BIT_OS
$(INSTALL) -m 755 $(DIST)/lib/$(FREEBL_PURE32_MODULE) $(DIST)/bin
$(INSTALL) -m 755 $(DIST)/lib/$(FREEBL_HYBRID_MODULE) $(DIST)/bin
endif
endif
endif
$(MAKE) -C boot $@
$(MAKE) -C ssl $@
$(MAKE) -C pki $@
clean clobber clobber_all realclean distclean::
$(MAKE) -C boot $@
$(MAKE) -C ssl $@
$(MAKE) -C pki $@
$(MAKE) -C $(topsrcdir)/security/coreconf $(DEFAULT_GMAKE_FLAGS) clean
$(MAKE) -C $(topsrcdir)/security/nss/lib $(DEFAULT_GMAKE_FLAGS) clean

View File

@@ -1,45 +0,0 @@
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Kai Engert <kaie@netscape.com>
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
DEPTH = ../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
DIRS = public src
include $(topsrcdir)/config/rules.mk

View File

@@ -1,44 +0,0 @@
#!nmake
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Kai Engert <kaie@netscape.com>
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
DEPTH=..\..\..
include <$(DEPTH)/config/config.mak>
DIRS = public src
include <$(DEPTH)\config\rules.mak>

View File

@@ -1,53 +0,0 @@
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Kai Engert <kaie@netscape.com>
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
MODULE = pipboot
DEPTH = ../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
XPIDLSRCS = \
nsISSLStatusProvider.idl \
nsISecurityWarningDialogs.idl \
nsIBufEntropyCollector.idl \
$(NULL)
include $(topsrcdir)/config/rules.mk

View File

@@ -1,55 +0,0 @@
#!nmake
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Kai Engert <kaie@netscape.com>
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
MODULE = pipboot
DEPTH=..\..\..\..
IGNORE_MANIFEST=1
include <$(DEPTH)/config/config.mak>
XPIDL_INCLUDES=-I$(DEPTH)\dist\idl
XPIDLSRCS= \
.\nsISSLStatusProvider.idl \
.\nsISecurityWarningDialogs.idl \
.\nsIBufEntropyCollector.idl \
$(NULL)
include <$(DEPTH)\config\rules.mak>

View File

@@ -1,57 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* L. David Baron <dbaron@fas.harvard.edu> (original author)
* Kai Engert <kaie@netscape.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsISupports.idl"
#include "nsIEntropyCollector.idl"
[uuid(485b87a8-5dd7-4b8d-8ea8-dee53201f899)]
interface nsIBufEntropyCollector : nsIEntropyCollector
{
/**
* Forward the entropy collected so far to |collector| and then
* continue forwarding new entropy as it arrives.
*/
void forwardTo(in nsIEntropyCollector collector);
/**
* No longer forward to a (possibly) previously remembered collector.
* Do buffering again.
*/
void dontForward();
};

View File

@@ -1,44 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Terry Hayes <thayes@netscape.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsISupports.idl"
[scriptable, uuid(8de811f0-1dd2-11b2-8bf1-e9aa324984b2)]
interface nsISSLStatusProvider : nsISupports {
readonly attribute nsISupports SSLStatus;
};

View File

@@ -1,69 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Terry Hayes <thayes@netscape.com>
*
* ***** END LICENSE BLOCK ***** */
#include "nsISupports.idl"
interface nsIInterfaceRequestor;
/**
* nsISecurityWarningDialogs - functions that
* display warnings for transitions between secure
* and insecure pages, posts to insecure servers etc.
*/
[scriptable, uuid(1c399d06-1dd2-11b2-bc58-c87cbcacdb78)]
interface nsISecurityWarningDialogs : nsISupports
{
/**
* alertEnteringSecure
*/
void alertEnteringSecure(in nsIInterfaceRequestor ctx);
/**
* alertEnteringWeak
*/
void alertEnteringWeak(in nsIInterfaceRequestor ctx);
/**
* alertLeavingSecure
*/
void alertLeavingSecure(in nsIInterfaceRequestor ctx);
/**
* alertMixedMode
*/
void alertMixedMode(in nsIInterfaceRequestor ctx);
/**
* confirmPostToInsecure
*/
boolean confirmPostToInsecure(in nsIInterfaceRequestor ctx);
/**
* confirmPostToInsecureFromSecure
*/
boolean confirmPostToInsecureFromSecure(in nsIInterfaceRequestor ctx);
};

View File

@@ -1,99 +0,0 @@
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Javier Delgadillo <javi@netscape.com>
# Terry Hayes <thayes@netscape.com>
# Kai Engert <kaie@netscape.com>
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
DEPTH = ../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = pipboot
LIBRARY_NAME = pipboot
IS_COMPONENT = 1
MODULE_NAME = BOOT
EXPORT_LIBRARY = 1
META_COMPONENT = crypto
EXPORTS = \
$(NULL)
CPPSRCS = \
nsEntropyCollector.cpp \
nsSecureBrowserUIImpl.cpp \
nsBOOTModule.cpp \
$(NULL)
REQUIRES = nspr \
xpcom \
string \
necko \
uriloader \
pref \
caps \
dom \
intl \
locale \
profile \
windowwatcher \
js \
docshell \
widget \
layout \
content \
pippki \
xpconnect \
jar \
unicharutil \
pipnss \
$(NULL)
include $(topsrcdir)/config/rules.mk
INCLUDES += \
-I$(DIST)/public/security \
$(NULL)
EXTRA_DSO_LDOPTS += \
$(MOZ_COMPONENT_LIBS) \
$(MOZ_JS_LIBS) \
$(NULL)
EXTRA_LIBS += \
$(NULL)

View File

@@ -1,86 +0,0 @@
#!nmake
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Terry Hayes <thayes@netscape.com>
# Kai Engert <kaie@netscape.com>
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
MODULE = pipboot
DEPTH=..\..\..\..
IGNORE_MANIFEST=1
LIBRARY_NAME = pipboot
PDBFILE = $(LIBRARY_NAME).pdb
MAPFILE = $(LIBRARY_NAME).map
MODULE_NAME = BOOT
META_COMPONENT = crypto
REQUIRES = \
xpcom \
string \
dom \
pref \
intl \
locale \
windowwatcher \
necko \
pipnss \
layout \
layout_xul \
uriloader \
docshell \
widget \
content \
$(NULL)
include <$(DEPTH)/config/config.mak>
LLIBS = \
$(DIST)/lib/js3250.lib \
$(LIBNSPR) \
$(DIST)\lib\xpcom.lib \
$(NULL)
EXPORTS = \
$(NULL)
OBJS = \
.\$(OBJDIR)\nsEntropyCollector.obj \
.\$(OBJDIR)\nsSecureBrowserUIImpl.obj \
.\$(OBJDIR)\nsBOOTModule.obj \
$(NULL)
include <$(DEPTH)\config\rules.mak>

View File

@@ -1,53 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Terry Hayes <thayes@netscape.com>
*
* ***** END LICENSE BLOCK ***** */
#include "nsIModule.h"
#include "nsIGenericFactory.h"
#include "nsEntropyCollector.h"
#include "nsSecureBrowserUIImpl.h"
NS_GENERIC_FACTORY_CONSTRUCTOR(nsEntropyCollector)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSecureBrowserUIImpl)
static nsModuleComponentInfo components[] =
{
{
"Entropy Collector",
NS_ENTROPYCOLLECTOR_CID,
NS_ENTROPYCOLLECTOR_CONTRACTID,
nsEntropyCollectorConstructor
},
{
NS_SECURE_BROWSER_UI_CLASSNAME,
NS_SECURE_BROWSER_UI_CID,
NS_SECURE_BROWSER_UI_CONTRACTID,
nsSecureBrowserUIImplConstructor
}
};
NS_IMPL_NSGETMODULE(BOOT, components)

View File

@@ -1,131 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* L. David Baron <dbaron@fas.harvard.edu> (original author)
* Kai Engert <kaie@netscape.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "prlog.h"
#include "nsEntropyCollector.h"
#include "nsMemory.h"
nsEntropyCollector::nsEntropyCollector()
:mBytesCollected(0), mWritePointer(mEntropyCache)
{
NS_INIT_ISUPPORTS();
}
nsEntropyCollector::~nsEntropyCollector()
{
}
NS_IMPL_THREADSAFE_ISUPPORTS2(nsEntropyCollector,
nsIEntropyCollector,
nsIBufEntropyCollector)
NS_IMETHODIMP
nsEntropyCollector::RandomUpdate(void *new_entropy, PRInt32 bufLen)
{
if (bufLen > 0) {
if (mForwardTarget) {
return mForwardTarget->RandomUpdate(new_entropy, bufLen);
}
else {
const unsigned char *InputPointer = (const unsigned char *)new_entropy;
const unsigned char *PastEndPointer = mEntropyCache + entropy_buffer_size;
// if the input is large, we only take as much as we can store
PRInt32 bytes_wanted = PR_MIN(bufLen, entropy_buffer_size);
// remember the number of bytes we will have after storing new_entropy
mBytesCollected = PR_MIN(entropy_buffer_size, mBytesCollected + bytes_wanted);
// as the above statements limit bytes_wanted to the entropy_buffer_size,
// this loop will iterate at most twice.
while (bytes_wanted > 0) {
// how many bytes to end of cyclic buffer?
const PRInt32 space_to_end = PastEndPointer - mWritePointer;
// how many bytes can we copy, not reaching the end of the buffer?
const PRInt32 this_time = PR_MIN(space_to_end, bytes_wanted);
// copy at most to the end of the cyclic buffer
for (PRInt32 i = 0; i < this_time; ++i) {
// accept the fact that we use our buffer's random uninitialized content
unsigned int old = *mWritePointer;
// combine new and old value already stored in buffer
// this logic comes from PSM 1
*mWritePointer++ = ((old << 1) | (old >> 7)) ^ *InputPointer++;
}
PR_ASSERT(mWritePointer <= PastEndPointer);
PR_ASSERT(mWritePointer >= mEntropyCache);
// have we arrived at the end of the buffer?
if (PastEndPointer == mWritePointer) {
// reset write pointer back to begining of our buffer
mWritePointer = mEntropyCache;
}
// subtract the number of bytes we have already copied
bytes_wanted -= this_time;
}
}
}
return NS_OK;
}
NS_IMETHODIMP
nsEntropyCollector::ForwardTo(nsIEntropyCollector *aCollector)
{
NS_PRECONDITION(!mForwardTarget, "|ForwardTo| should only be called once.");
mForwardTarget = aCollector;
mForwardTarget->RandomUpdate(mEntropyCache, mBytesCollected);
mBytesCollected = 0;
return NS_OK;
}
NS_IMETHODIMP
nsEntropyCollector::DontForward()
{
mForwardTarget = nsnull;
return NS_OK;
}

View File

@@ -1,70 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* L. David Baron <dbaron@fas.harvard.edu> (original author)
* Kai Engert <kaie@netscape.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef nsEntropyCollector_h___
#define nsEntropyCollector_h___
#include "nsIEntropyCollector.h"
#include "nsIBufEntropyCollector.h"
#include "nsCOMPtr.h"
#define NS_ENTROPYCOLLECTOR_CID \
{ /* 34587f4a-be18-43c0-9112-b782b08c0add */ \
0x34587f4a, 0xbe18, 0x43c0, \
{0x91, 0x12, 0xb7, 0x82, 0xb0, 0x8c, 0x0a, 0xdd} }
class nsEntropyCollector : public nsIBufEntropyCollector
{
public:
nsEntropyCollector();
virtual ~nsEntropyCollector();
NS_DECL_ISUPPORTS
NS_DECL_NSIENTROPYCOLLECTOR
NS_DECL_NSIBUFENTROPYCOLLECTOR
enum { entropy_buffer_size = 1024 };
protected:
unsigned char mEntropyCache[entropy_buffer_size];
PRInt32 mBytesCollected;
unsigned char *mWritePointer;
nsCOMPtr<nsIEntropyCollector> mForwardTarget;
};
#endif /* !defined nsEntropyCollector_h__ */

View File

@@ -1,834 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998-2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Hubbie Shaw
* Doug Turner <dougt@netscape.com>
* Stuart Parmenter <pavlov@netscape.com>
* Brian Ryner <bryner@netscape.com>
* Terry Hayes <thayes@netscape.com>
* Kai Engert <kaie@netscape.com>
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_LOGGING
#define FORCE_PR_LOG
#endif
#include "nspr.h"
#include "prlog.h"
#include "prmem.h"
#include "nsISecureBrowserUI.h"
#include "nsSecureBrowserUIImpl.h"
#include "nsCOMPtr.h"
#include "nsIInterfaceRequestor.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsIServiceManager.h"
#include "nsIScriptGlobalObject.h"
#include "nsIObserverService.h"
#include "nsIDocumentLoader.h"
#include "nsCURILoader.h"
#include "nsIDocShell.h"
#include "nsIDocumentViewer.h"
#include "nsIDocument.h"
#include "nsIDOMElement.h"
#include "nsIDOMWindowInternal.h"
#include "nsIContent.h"
#include "nsIWebProgress.h"
#include "nsIChannel.h"
#include "nsIHttpChannel.h"
#include "nsIFileChannel.h"
#include "nsITransportSecurityInfo.h"
#include "nsIURI.h"
#include "nsISecurityEventSink.h"
#include "nsIPrompt.h"
#include "nsIFormSubmitObserver.h"
#include "nsISecurityWarningDialogs.h"
#include "nsIProxyObjectManager.h"
#include "nsINSSDialogs.h"
#define SECURITY_STRING_BUNDLE_URL "chrome://communicator/locale/security.properties"
static NS_DEFINE_CID(kCStringBundleServiceCID, NS_STRINGBUNDLESERVICE_CID);
static const char *kNSSDialogsContractId = NS_NSSDIALOGS_CONTRACTID;
#define IS_SECURE(state) ((state & 0xFFFF) == STATE_IS_SECURE)
#if defined(PR_LOGGING)
//
// Log module for nsSecureBroswerUI logging...
//
// To enable logging (see prlog.h for full details):
//
// set NSPR_LOG_MODULES=nsSecureBroswerUI:5
// set NSPR_LOG_FILE=nspr.log
//
// this enables PR_LOG_DEBUG level information and places all output in
// the file nspr.log
//
PRLogModuleInfo* gSecureDocLog = nsnull;
#endif /* PR_LOGGING */
nsSecureBrowserUIImpl::nsSecureBrowserUIImpl()
: mMixContentAlertShown(PR_FALSE),
mSecurityState(STATE_IS_INSECURE)
{
NS_INIT_ISUPPORTS();
#if defined(PR_LOGGING)
if (!gSecureDocLog)
gSecureDocLog = PR_NewLogModule("nsSecureBrowserUI");
#endif /* PR_LOGGING */
}
nsSecureBrowserUIImpl::~nsSecureBrowserUIImpl()
{
nsresult rv;
// remove self from form post notifications:
nsCOMPtr<nsIObserverService> svc(do_GetService("@mozilla.org/observer-service;1", &rv));
if (NS_SUCCEEDED(rv)) {
svc->RemoveObserver(this, NS_FORMSUBMIT_SUBJECT);
}
}
NS_IMPL_ISUPPORTS6(nsSecureBrowserUIImpl,
nsISecureBrowserUI,
nsIWebProgressListener,
nsIFormSubmitObserver,
nsIObserver,
nsISupportsWeakReference,
nsISSLStatusProvider);
NS_IMETHODIMP
nsSecureBrowserUIImpl::Init(nsIDOMWindow *window,
nsIDOMElement *button)
{
nsresult rv = NS_OK;
mSecurityButton = button; /* may be null */
mWindow = window;
nsCOMPtr<nsIStringBundleService> service(do_GetService(kCStringBundleServiceCID, &rv));
if (NS_FAILED(rv)) return rv;
rv = service->CreateBundle(SECURITY_STRING_BUNDLE_URL,
getter_AddRefs(mStringBundle));
if (NS_FAILED(rv)) return rv;
// hook up to the form post notifications:
nsCOMPtr<nsIObserverService> svc(do_GetService("@mozilla.org/observer-service;1", &rv));
if (NS_SUCCEEDED(rv)) {
rv = svc->AddObserver(this, NS_FORMSUBMIT_SUBJECT, PR_TRUE);
}
/* GetWebProgress(mWindow) */
// hook up to the webprogress notifications.
nsCOMPtr<nsIScriptGlobalObject> sgo(do_QueryInterface(mWindow));
if (!sgo) return NS_ERROR_FAILURE;
nsCOMPtr<nsIDocShell> docShell;
sgo->GetDocShell(getter_AddRefs(docShell));
if (!docShell) return NS_ERROR_FAILURE;
nsCOMPtr<nsIWebProgress> wp(do_GetInterface(docShell));
if (!wp) return NS_ERROR_FAILURE;
/* end GetWebProgress */
wp->AddProgressListener(NS_STATIC_CAST(nsIWebProgressListener*,this));
return NS_OK;
}
NS_IMETHODIMP
nsSecureBrowserUIImpl::DisplayPageInfoUI()
{
#if 0
nsresult res = NS_OK;
nsCOMPtr<nsISecurityManagerComponent> psm(do_GetService(PSM_COMPONENT_CONTRACTID,
&res));
if (NS_FAILED(res))
return res;
nsXPIDLCString host;
if (mCurrentURI)
mCurrentURI->GetHost(getter_Copies(host));
// return psm->DisplayPSMAdvisor(mLastPSMStatus, host);
#endif
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsSecureBrowserUIImpl::Observe(nsISupports*, const char*,
const PRUnichar*)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
static nsresult IsChildOfDomWindow(nsIDOMWindow *parent, nsIDOMWindow *child,
PRBool* value)
{
*value = PR_FALSE;
if (parent == child) {
*value = PR_TRUE;
return NS_OK;
}
nsCOMPtr<nsIDOMWindow> childsParent;
child->GetParent(getter_AddRefs(childsParent));
if (childsParent && childsParent.get() != child)
IsChildOfDomWindow(parent, childsParent, value);
return NS_OK;
}
static PRInt32 GetSecurityStateFromChannel(nsIChannel* aChannel)
{
nsresult res;
PRInt32 securityState;
// qi for the psm information about this channel load.
nsCOMPtr<nsISupports> info;
aChannel->GetSecurityInfo(getter_AddRefs(info));
nsCOMPtr<nsITransportSecurityInfo> psmInfo(do_QueryInterface(info));
if (!psmInfo) {
PR_LOG(gSecureDocLog, PR_LOG_DEBUG, ("SecureUI: GetSecurityState:%p - no nsITransportSecurityInfo for %p\n",
aChannel, (nsISupports *)info));
return nsIWebProgressListener::STATE_IS_INSECURE;
}
PR_LOG(gSecureDocLog, PR_LOG_DEBUG, ("SecureUI: GetSecurityState:%p - info is %p\n", aChannel,
(nsISupports *)info));
res = psmInfo->GetSecurityState(&securityState);
if (!NS_SUCCEEDED(res)) {
PR_LOG(gSecureDocLog, PR_LOG_DEBUG, ("SecureUI: GetSecurityState:%p - GetSecurityState failed: %d\n",
aChannel, res));
securityState = nsIWebProgressListener::STATE_IS_BROKEN;
}
PR_LOG(gSecureDocLog, PR_LOG_DEBUG, ("SecureUI: GetSecurityState:%p - Returning %d\n", aChannel,
securityState));
return securityState;
}
NS_IMETHODIMP
nsSecureBrowserUIImpl::Notify(nsIContent* formNode,
nsIDOMWindowInternal* window, nsIURI* actionURL,
PRBool* cancelSubmit)
{
// Return NS_OK unless we want to prevent this form from submitting.
*cancelSubmit = PR_FALSE;
if (!window || !actionURL || !formNode)
return NS_OK;
nsCOMPtr<nsIDocument> document;
formNode->GetDocument(*getter_AddRefs(document));
if (!document) return NS_OK;
nsCOMPtr<nsIURI> formURL;
document->GetBaseURL(*getter_AddRefs(formURL));
nsCOMPtr<nsIScriptGlobalObject> globalObject;
document->GetScriptGlobalObject(getter_AddRefs(globalObject));
nsCOMPtr<nsIDOMWindow> postingWindow(do_QueryInterface(globalObject));
PRBool isChild;
IsChildOfDomWindow(mWindow, postingWindow, &isChild);
// This notify call is not for our window, ignore it.
if (!isChild)
return NS_OK;
PRBool okayToPost;
nsresult res = CheckPost(formURL, actionURL, &okayToPost);
if (NS_SUCCEEDED(res) && !okayToPost)
*cancelSubmit = PR_TRUE;
return res;
}
// nsIWebProgressListener
NS_IMETHODIMP
nsSecureBrowserUIImpl::OnProgressChange(nsIWebProgress* aWebProgress,
nsIRequest* aRequest,
PRInt32 aCurSelfProgress,
PRInt32 aMaxSelfProgress,
PRInt32 aCurTotalProgress,
PRInt32 aMaxTotalProgress)
{
return NS_OK;
}
NS_IMETHODIMP
nsSecureBrowserUIImpl::OnStateChange(nsIWebProgress* aWebProgress,
nsIRequest* aRequest,
PRInt32 aProgressStateFlags,
nsresult aStatus)
{
nsresult res = NS_OK;
if (!aRequest)
return NS_ERROR_NULL_POINTER;
// Get the channel from the request...
// If the request is not network based, then ignore it.
nsCOMPtr<nsIChannel> channel(do_QueryInterface(aRequest, &res));
if (NS_FAILED(res))
return NS_OK;
// We are only interested in HTTP and file requests.
nsCOMPtr<nsIHttpChannel> httpRequest(do_QueryInterface(aRequest));
nsCOMPtr<nsIFileChannel> fileRequest(do_QueryInterface(aRequest));
if (!httpRequest && !fileRequest) {
return NS_OK;
}
nsCOMPtr<nsIInterfaceRequestor> requestor;
nsCOMPtr<nsISecurityEventSink> eventSink;
channel->GetNotificationCallbacks(getter_AddRefs(requestor));
if (requestor)
eventSink = do_GetInterface(requestor);
#if defined(DEBUG)
nsCOMPtr<nsIURI> loadingURI;
res = channel->GetURI(getter_AddRefs(loadingURI));
NS_ASSERTION(NS_SUCCEEDED(res), "GetURI failed");
if (loadingURI) {
nsXPIDLCString temp;
loadingURI->GetSpec(getter_Copies(temp));
PR_LOG(gSecureDocLog, PR_LOG_DEBUG,
("SecureUI:%p: OnStateChange: %x :%s\n", this,
aProgressStateFlags,(const char*)temp));
}
#endif
// First event when loading doc
if (aProgressStateFlags & STATE_START) {
if (aProgressStateFlags & STATE_IS_NETWORK) {
// Reset state variables used per doc loading
mMixContentAlertShown = PR_FALSE;
mFirstRequest = PR_TRUE;
mSSLStatus = nsnull;
}
}
// A Document is starting to load...
if ((aProgressStateFlags & (STATE_STOP)) &&
(aProgressStateFlags & STATE_IS_REQUEST)) {
// work-around for bug 48515.
nsCOMPtr<nsIURI> aURI;
channel->GetURI(getter_AddRefs(aURI));
// Sometimes URI is null, so ignore.
if (aURI == nsnull) {
return NS_OK;
}
// If this is the first request, then do a protocol check
if (mFirstRequest) {
mFirstRequest = PR_FALSE;
return CheckProtocolContextSwitch(eventSink, aRequest, channel);
}
// Check that the request does not have mixed content.
return CheckMixedContext(eventSink, aRequest, channel);
}
// A document has finished loading
if ((aProgressStateFlags & STATE_STOP) &&
(aProgressStateFlags & STATE_IS_NETWORK)) {
// Get SSL Status information if possible
nsCOMPtr<nsISupports> info;
channel->GetSecurityInfo(getter_AddRefs(info));
nsCOMPtr<nsISSLStatusProvider> sp = do_QueryInterface(info);
if (sp) {
// Ignore result
sp->GetSSLStatus(getter_AddRefs(mSSLStatus));
}
if (eventSink)
eventSink->OnSecurityChange(aRequest, mSecurityState);
if (!mSecurityButton)
return res;
/* TNH - need event for changing the tooltip */
// Do we really need to look at res here? What happens if there's an error?
// We should still set the certificate authority display.
nsXPIDLString tooltip;
if (info) {
nsCOMPtr<nsITransportSecurityInfo> secInfo(do_QueryInterface(info));
if (secInfo &&
NS_SUCCEEDED(secInfo->GetShortSecurityDescription(getter_Copies(tooltip))) &&
tooltip) {
res = mSecurityButton->SetAttribute(NS_LITERAL_STRING("tooltiptext"),
nsString(tooltip));
}
}
}
return res;
}
NS_IMETHODIMP
nsSecureBrowserUIImpl::OnLocationChange(nsIWebProgress* aWebProgress,
nsIRequest* aRequest,
nsIURI* aLocation)
{
mCurrentURI = aLocation;
return NS_OK;
}
NS_IMETHODIMP
nsSecureBrowserUIImpl::OnStatusChange(nsIWebProgress* aWebProgress,
nsIRequest* aRequest,
nsresult aStatus,
const PRUnichar* aMessage)
{
return NS_OK;
}
nsresult
nsSecureBrowserUIImpl::OnSecurityChange(nsIWebProgress *aWebProgress,
nsIRequest *aRequest,
PRInt32 state)
{
nsresult res = NS_OK;
#if defined(DEBUG_dougt)
nsCOMPtr<nsIChannel> channel(do_QueryInterface(aRequest));
if (!channel)
return NS_ERROR_FAILURE;
nsCOMPtr<nsIURI> aURI;
channel->GetURI(getter_AddRefs(aURI));
nsXPIDLCString temp;
aURI->GetSpec(getter_Copies(temp));
printf("OnSecurityChange: (%x) %s\n", state, (const char*)temp);
#endif
/* Deprecated support for mSecurityButton */
if (mSecurityButton) {
NS_NAMED_LITERAL_STRING(level, "level");
if (state == (STATE_IS_SECURE|STATE_SECURE_HIGH)) {
res = mSecurityButton->SetAttribute(level, NS_LITERAL_STRING("high"));
} else if (state == (STATE_IS_SECURE|STATE_SECURE_LOW)) {
res = mSecurityButton->SetAttribute(level, NS_LITERAL_STRING("low"));
} else if (state == STATE_IS_BROKEN) {
res = mSecurityButton->SetAttribute(level, NS_LITERAL_STRING("broken"));
} else {
res = mSecurityButton->RemoveAttribute(level);
}
}
return res;
}
// nsISSLStatusProvider methods
NS_IMETHODIMP
nsSecureBrowserUIImpl::GetSSLStatus(nsISupports** _result)
{
NS_ASSERTION(_result, "non-NULL destination required");
*_result = mSSLStatus;
NS_IF_ADDREF(*_result);
return NS_OK;
}
nsresult
nsSecureBrowserUIImpl::IsURLHTTPS(nsIURI* aURL, PRBool* value)
{
*value = PR_FALSE;
if (!aURL)
return NS_OK;
char* scheme;
aURL->GetScheme(&scheme);
// If no scheme, it's not an https url - not necessarily an error.
// See bugs 54845 and 54966
if (!scheme)
return NS_OK;
if (!PL_strncasecmp(scheme, "https", 5))
*value = PR_TRUE;
nsMemory::Free(scheme);
return NS_OK;
}
void
nsSecureBrowserUIImpl::GetBundleString(const PRUnichar* name,
nsString &outString)
{
if (mStringBundle && name) {
PRUnichar *ptrv = nsnull;
if (NS_SUCCEEDED(mStringBundle->GetStringFromName(name,
&ptrv)))
outString = ptrv;
else
outString.SetLength(0);
nsMemory::Free(ptrv);
} else {
outString.SetLength(0);
}
}
nsresult
nsSecureBrowserUIImpl::CheckProtocolContextSwitch(nsISecurityEventSink* eventSink,
nsIRequest* aRequest,
nsIChannel* aChannel)
{
PRInt32 newSecurityState, oldSecurityState = mSecurityState;
newSecurityState = GetSecurityStateFromChannel(aChannel);
mSecurityState = newSecurityState;
// Check to see if we are going from a secure page to an insecure page
if (newSecurityState == STATE_IS_INSECURE &&
(IS_SECURE(oldSecurityState) ||
oldSecurityState == STATE_IS_BROKEN)) {
SetBrokenLockIcon(eventSink, aRequest, PR_TRUE);
AlertLeavingSecure();
}
// check to see if we are going from an insecure page to a secure one.
else if ((newSecurityState == (STATE_IS_SECURE|STATE_SECURE_HIGH) ||
newSecurityState == STATE_IS_BROKEN) &&
oldSecurityState == STATE_IS_INSECURE) {
AlertEnteringSecure();
}
// check to see if we are going from a strong or insecure page to a
// weak one.
else if ((IS_SECURE(newSecurityState) &&
newSecurityState != (STATE_IS_SECURE|STATE_SECURE_HIGH)) &&
(oldSecurityState == STATE_IS_INSECURE ||
oldSecurityState == (STATE_IS_SECURE|STATE_SECURE_HIGH))) {
AlertEnteringWeak();
}
mSecurityState = newSecurityState;
return NS_OK;
}
nsresult
nsSecureBrowserUIImpl::CheckMixedContext(nsISecurityEventSink *eventSink,
nsIRequest* aRequest, nsIChannel* aChannel)
{
PRInt32 newSecurityState;
newSecurityState = GetSecurityStateFromChannel(aChannel);
// Deal with http redirect to https //
if (mSecurityState == STATE_IS_INSECURE && newSecurityState != STATE_IS_INSECURE) {
return CheckProtocolContextSwitch(eventSink, aRequest, aChannel);
}
if ((newSecurityState == STATE_IS_INSECURE ||
newSecurityState == STATE_IS_BROKEN) &&
IS_SECURE(mSecurityState)) {
// work-around for bug 48515
nsCOMPtr<nsIURI> aURI;
aChannel->GetURI(getter_AddRefs(aURI));
nsXPIDLCString temp;
aURI->GetSpec(getter_Copies(temp));
if (!nsCRT::strncmp((const char*) temp, "file:", 5) ||
!nsCRT::strcmp((const char*) temp, "about:layout-dummy-request")) {
return NS_OK;
}
mSecurityState = STATE_IS_BROKEN;
SetBrokenLockIcon(eventSink, aRequest);
// Show alert to user (first time only)
// NOTE: doesn't mSecurityState provide the correct
// one-time checking?? Why have mMixContentAlertShown
// as well?
if (!mMixContentAlertShown) {
AlertMixedMode();
mMixContentAlertShown = PR_TRUE;
}
}
return NS_OK;
}
nsresult
nsSecureBrowserUIImpl::CheckPost(nsIURI *formURL, nsIURI *actionURL, PRBool *okayToPost)
{
PRBool formSecure,actionSecure;
*okayToPost = PR_TRUE;
nsresult rv = IsURLHTTPS(formURL, &formSecure);
if (NS_FAILED(rv))
return rv;
rv = IsURLHTTPS(actionURL, &actionSecure);
if (NS_FAILED(rv))
return rv;
// if we are posting to a secure link from a secure page, all is okay.
if (actionSecure && formSecure) {
return NS_OK;
}
// posting to insecure webpage from a secure webpage.
if (!actionSecure && formSecure) {
*okayToPost = ConfirmPostToInsecureFromSecure();
} else {
*okayToPost = ConfirmPostToInsecure();
}
return NS_OK;
}
nsresult
nsSecureBrowserUIImpl::SetBrokenLockIcon(nsISecurityEventSink *eventSink,
nsIRequest* aRequest,
PRBool removeValue)
{
nsresult rv = NS_OK;
if (removeValue) {
if (eventSink)
(void) eventSink->OnSecurityChange(aRequest, STATE_IS_INSECURE);
} else {
if (eventSink)
(void) eventSink->OnSecurityChange(aRequest, (STATE_IS_BROKEN));
}
nsAutoString tooltiptext;
GetBundleString(NS_LITERAL_STRING("SecurityButtonTooltipText").get(),
tooltiptext);
/* TNH - need tooltip notification here */
if (mSecurityButton)
rv = mSecurityButton->SetAttribute(NS_LITERAL_STRING("tooltiptext"),
tooltiptext);
return rv;
}
//
// Implementation of an nsIInterfaceRequestor for use
// as context for NSS calls
//
class nsUIContext : public nsIInterfaceRequestor
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIINTERFACEREQUESTOR
nsUIContext(nsIDOMWindow *window);
virtual ~nsUIContext();
private:
nsCOMPtr<nsIDOMWindow> mWindow;
};
NS_IMPL_ISUPPORTS1(nsUIContext, nsIInterfaceRequestor)
nsUIContext::nsUIContext(nsIDOMWindow *aWindow)
: mWindow(aWindow)
{
NS_INIT_ISUPPORTS();
}
nsUIContext::~nsUIContext()
{
}
/* void getInterface (in nsIIDRef uuid, [iid_is (uuid), retval] out nsQIResult result); */
NS_IMETHODIMP nsUIContext::GetInterface(const nsIID & uuid, void * *result)
{
nsresult rv;
if (uuid.Equals(NS_GET_IID(nsIPrompt))) {
nsCOMPtr<nsIDOMWindowInternal> internal = do_QueryInterface(mWindow, &rv);
if (NS_FAILED(rv)) return rv;
nsIPrompt *prompt;
rv = internal->GetPrompter(&prompt);
*result = prompt;
} else {
rv = NS_ERROR_NO_INTERFACE;
}
return rv;
}
nsresult nsSecureBrowserUIImpl::
GetNSSDialogs(nsISecurityWarningDialogs **result)
{
nsresult rv;
nsCOMPtr<nsISecurityWarningDialogs> my_result(do_GetService(kNSSDialogsContractId, &rv));
if (NS_FAILED(rv))
return rv;
nsCOMPtr<nsIProxyObjectManager> proxyman(do_GetService(NS_XPCOMPROXY_CONTRACTID));
if (!proxyman)
return NS_ERROR_FAILURE;
nsCOMPtr<nsISupports> proxiedResult;
proxyman->GetProxyForObject(NS_UI_THREAD_EVENTQ,
NS_GET_IID(nsISecurityWarningDialogs),
my_result, PROXY_SYNC,
getter_AddRefs(proxiedResult));
if (!proxiedResult) {
return NS_ERROR_FAILURE;
}
return CallQueryInterface(proxiedResult, result);
}
void nsSecureBrowserUIImpl::
AlertEnteringSecure()
{
nsCOMPtr<nsISecurityWarningDialogs> dialogs;
GetNSSDialogs(getter_AddRefs(dialogs));
if (!dialogs) return;
nsCOMPtr<nsIInterfaceRequestor> ctx = new nsUIContext(mWindow);
dialogs->AlertEnteringSecure(ctx);
return;
}
void nsSecureBrowserUIImpl::
AlertEnteringWeak()
{
nsCOMPtr<nsISecurityWarningDialogs> dialogs;
GetNSSDialogs(getter_AddRefs(dialogs));
if (!dialogs) return;
nsCOMPtr<nsIInterfaceRequestor> ctx = new nsUIContext(mWindow);
dialogs->AlertEnteringWeak(ctx);
return;
}
void nsSecureBrowserUIImpl::
AlertLeavingSecure()
{
nsCOMPtr<nsISecurityWarningDialogs> dialogs;
GetNSSDialogs(getter_AddRefs(dialogs));
if (!dialogs) return;
nsCOMPtr<nsIInterfaceRequestor> ctx = new nsUIContext(mWindow);
dialogs->AlertLeavingSecure(ctx);
return;
}
void nsSecureBrowserUIImpl::
AlertMixedMode()
{
nsCOMPtr<nsISecurityWarningDialogs> dialogs;
GetNSSDialogs(getter_AddRefs(dialogs));
if (!dialogs) return;
nsCOMPtr<nsIInterfaceRequestor> ctx = new nsUIContext(mWindow);
dialogs->AlertMixedMode(ctx);
return;
}
/**
* ConfirmPostToInsecure - returns PR_TRUE if
* the user approves the submit (or doesn't care).
* returns PR_FALSE on errors.
*/
PRBool nsSecureBrowserUIImpl::
ConfirmPostToInsecure()
{
nsresult rv;
nsCOMPtr<nsISecurityWarningDialogs> dialogs;
GetNSSDialogs(getter_AddRefs(dialogs));
if (!dialogs) return PR_FALSE; // Should this allow PR_TRUE for unimplemented?
nsCOMPtr<nsIInterfaceRequestor> ctx = new nsUIContext(mWindow);
PRBool result;
rv = dialogs->ConfirmPostToInsecure(ctx, &result);
if (NS_FAILED(rv)) return PR_FALSE;
return result;
}
/**
* ConfirmPostToInsecureFromSecure - returns PR_TRUE if
* the user approves the submit (or doesn't care).
* returns PR_FALSE on errors.
*/
PRBool nsSecureBrowserUIImpl::
ConfirmPostToInsecureFromSecure()
{
nsresult rv;
nsCOMPtr<nsISecurityWarningDialogs> dialogs;
GetNSSDialogs(getter_AddRefs(dialogs));
if (!dialogs) return PR_FALSE; // Should this allow PR_TRUE for unimplemented?
nsCOMPtr<nsIInterfaceRequestor> ctx = new nsUIContext(mWindow);
PRBool result;
rv = dialogs->ConfirmPostToInsecureFromSecure(ctx, &result);
if (NS_FAILED(rv)) return PR_FALSE;
return result;
}

View File

@@ -1,117 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998-2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Hubbie Shaw
* Doug Turner <dougt@netscape.com>
* Brian Ryner <bryner@netscape.com>
* Kai Engert <kaie@netscape.com>
*
* ***** END LICENSE BLOCK ***** */
#ifndef nsSecureBrowserUIImpl_h_
#define nsSecureBrowserUIImpl_h_
#include "nsCOMPtr.h"
#include "nsXPIDLString.h"
#include "nsString.h"
#include "nsIObserver.h"
#include "nsIDOMElement.h"
#include "nsIDOMWindow.h"
#include "nsIStringBundle.h"
#include "nsISecureBrowserUI.h"
#include "nsIDocShell.h"
#include "nsIWebProgressListener.h"
#include "nsIFormSubmitObserver.h"
#include "nsIURI.h"
#include "nsISecurityEventSink.h"
#include "nsWeakReference.h"
#include "nsISSLStatusProvider.h"
class nsITransportSecurityInfo;
class nsISecurityWarningDialogs;
#define NS_SECURE_BROWSER_UI_CID \
{ 0xcc75499a, 0x1dd1, 0x11b2, {0x8a, 0x82, 0xca, 0x41, 0x0a, 0xc9, 0x07, 0xb8}}
class nsSecureBrowserUIImpl : public nsISecureBrowserUI,
public nsIWebProgressListener,
public nsIFormSubmitObserver,
public nsIObserver,
public nsSupportsWeakReference,
public nsISSLStatusProvider
{
public:
nsSecureBrowserUIImpl();
virtual ~nsSecureBrowserUIImpl();
NS_DECL_ISUPPORTS
NS_DECL_NSIWEBPROGRESSLISTENER
NS_DECL_NSISECUREBROWSERUI
// nsIObserver
NS_DECL_NSIOBSERVER
NS_DECL_NSISSLSTATUSPROVIDER
NS_IMETHOD Notify(nsIContent* formNode, nsIDOMWindowInternal* window,
nsIURI *actionURL, PRBool* cancelSubmit);
protected:
nsCOMPtr<nsIDOMWindow> mWindow;
nsCOMPtr<nsIDOMElement> mSecurityButton;
nsCOMPtr<nsIStringBundle> mStringBundle;
nsCOMPtr<nsIURI> mCurrentURI;
PRBool mMixContentAlertShown;
PRInt32 mSecurityState;
PRBool mFirstRequest;
nsCOMPtr<nsISupports> mSSLStatus;
void GetBundleString(const PRUnichar* name, nsString &outString);
nsresult CheckProtocolContextSwitch(nsISecurityEventSink* sink,
nsIRequest* request, nsIChannel* aChannel);
nsresult CheckMixedContext(nsISecurityEventSink* sink, nsIRequest* request,
nsIChannel* aChannel);
nsresult CheckPost(nsIURI *formURI, nsIURI *actionURL, PRBool *okayToPost);
nsresult IsURLHTTPS(nsIURI* aURL, PRBool *value);
nsresult SetBrokenLockIcon(nsISecurityEventSink* sink, nsIRequest* request,
PRBool removeValue = PR_FALSE);
// Alerts for security transitions
void AlertEnteringSecure();
void AlertEnteringWeak();
void AlertLeavingSecure();
void AlertMixedMode();
PRBool ConfirmPostToInsecure();
PRBool ConfirmPostToInsecureFromSecure();
// Support functions
nsresult GetNSSDialogs(nsISecurityWarningDialogs **);
};
#endif /* nsSecureBrowserUIImpl_h_ */

View File

@@ -1,41 +0,0 @@
#!nmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
# Javier Delgadillo
#
# Alternatively, the contents of this file may be used under the
# terms of the GNU General Public License Version 2 or later (the
# "GPL"), in which case the provisions of the GPL are applicable
# instead of those above. If you wish to allow use of your
# version of this file only under the terms of the GPL and not to
# allow others to use your version of this file under the MPL,
# indicate your decision by deleting the provisions above and
# replace them with the notice and other provisions required by
# the GPL. If you do not delete the provisions above, a recipient
# may use your version of this file under either the MPL or the
# GPL.
#
DEPTH=..\..
include <$(DEPTH)/config/config.mak>
DIRS = boot ssl pki
include <$(DEPTH)\config\rules.mak>

View File

@@ -1,30 +0,0 @@
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
# Terry Hayes <thayes@netscape.com>
#
DEPTH = ../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
DIRS = public resources src
include $(topsrcdir)/config/rules.mk

View File

@@ -1,41 +0,0 @@
#!nmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
# Terry Hayes <thayes@netscape.com>
#
# Alternatively, the contents of this file may be used under the
# terms of the GNU General Public License Version 2 or later (the
# "GPL"), in which case the provisions of the GPL are applicable
# instead of those above. If you wish to allow use of your
# version of this file only under the terms of the GPL and not to
# allow others to use your version of this file under the MPL,
# indicate your decision by deleting the provisions above and
# replace them with the notice and other provisions required by
# the GPL. If you do not delete the provisions above, a recipient
# may use your version of this file under either the MPL or the
# GPL.
#
DEPTH=..\..\..
include <$(DEPTH)/config/config.mak>
DIRS = public src resources
include <$(DEPTH)\config\rules.mak>

View File

@@ -1,49 +0,0 @@
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
# Javier Delgadillo <javi@netscape.com>
#
# Alternatively, the contents of this file may be used under the
# terms of the GNU General Public License Version 2 or later (the
# "GPL"), in which case the provisions of the GPL are applicable
# instead of those above. If you wish to allow use of your
# version of this file only under the terms of the GPL and not to
# allow others to use your version of this file under the MPL,
# indicate your decision by deleting the provisions above and
# replace them with the notice and other provisions required by
# the GPL. If you do not delete the provisions above, a recipient
# may use your version of this file under either the MPL or the
# GPL.
#
MODULE = pippki
DEPTH = ../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
XPIDLSRCS = \
nsIPKIParamBlock.idl \
nsIASN1Outliner.idl \
$(NULL)
include $(topsrcdir)/config/rules.mk

View File

@@ -1,51 +0,0 @@
#!nmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
# Javier Delgadillo
#
# Alternatively, the contents of this file may be used under the
# terms of the GNU General Public License Version 2 or later (the
# "GPL"), in which case the provisions of the GPL are applicable
# instead of those above. If you wish to allow use of your
# version of this file only under the terms of the GPL and not to
# allow others to use your version of this file under the MPL,
# indicate your decision by deleting the provisions above and
# replace them with the notice and other provisions required by
# the GPL. If you do not delete the provisions above, a recipient
# may use your version of this file under either the MPL or the
# GPL.
#
MODULE = pippki
DEPTH=..\..\..\..
IGNORE_MANIFEST=1
include <$(DEPTH)/config/config.mak>
XPIDL_INCLUDES=-I$(DEPTH)\dist\idl
XPIDLSRCS= \
.\nsIPKIParamBlock.idl \
.\nsIASN1Outliner.idl \
$(NULL)
include <$(DEPTH)\config\rules.mak>

View File

@@ -1,54 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Ian McGreer <mcgreer@netscape.com>
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License Version 2 or later (the
* "GPL"), in which case the provisions of the GPL are applicable
* instead of those above. If you wish to allow use of your
* version of this file only under the terms of the GPL and not to
* allow others to use your version of this file under the MPL,
* indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by
* the GPL. If you do not delete the provisions above, a recipient
* may use your version of this file under either the MPL or the
* GPL.
*/
#include "nsISupports.idl"
#include "nsIOutlinerView.idl"
#include "nsIX509Cert.idl"
[scriptable, uuid(c727b2f2-1dd1-11b2-95df-f63c15b4cd35)]
interface nsIASN1Outliner : nsIOutlinerView {
void loadASN1Structure(in nsIASN1Object asn1Object);
wstring getDisplayData(in unsigned long index);
};
%{C++
#define NS_ASN1OUTLINER_CONTRACTID "@mozilla.org/security/nsASN1Outliner;1"
%}

View File

@@ -1,54 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Ian McGreer <mcgreer@netscape.com>
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License Version 2 or later (the
* "GPL"), in which case the provisions of the GPL are applicable
* instead of those above. If you wish to allow use of your
* version of this file only under the terms of the GPL and not to
* allow others to use your version of this file under the MPL,
* indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by
* the GPL. If you do not delete the provisions above, a recipient
* may use your version of this file under either the MPL or the
* GPL.
*/
#include "nsISupports.idl"
#include "nsIOutlinerView.idl"
#include "nsIX509Cert.idl"
[scriptable, uuid(c727b2f2-1dd1-11b2-95df-f63c15b4cd35)]
interface nsIASN1Outliner : nsIOutlinerView {
void loadASN1Structure(in nsIASN1Object asn1Object);
wstring getDisplayData(in unsigned long index);
};
%{C++
#define NS_ASN1OUTLINER_CONTRACTID "@mozilla.org/security/nsASN1Outliner;1"
%}

View File

@@ -1,43 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Javier Delgadillo <javi@netscape.com>
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License Version 2 or later (the
* "GPL"), in which case the provisions of the GPL are applicable
* instead of those above. If you wish to allow use of your
* version of this file only under the terms of the GPL and not to
* allow others to use your version of this file under the MPL,
* indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by
* the GPL. If you do not delete the provisions above, a recipient
* may use your version of this file under either the MPL or the
* GPL.
*/
#include "nsISupports.idl"
[scriptable, uuid(b6fe3d78-1dd1-11b2-9058-ced9016984c8)]
interface nsIPKIParamBlock : nsISupports {
void setISupportAtIndex(in PRInt32 index, in nsISupports object);
nsISupports getISupportAtIndex(in PRInt32 index);
};

View File

@@ -1,33 +0,0 @@
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
# Terry Hayes <thayes@netscape.com>
#
DEPTH = ../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
include $(topsrcdir)/config/rules.mk
libs::
$(REGCHROME) content pippki pippki.jar
$(REGCHROME) locale en-US/pippki en-US.jar

View File

@@ -1,66 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Ian McGreer <mcgreer@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/certManager.dtd">
<overlay id="CAOverlay"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cert="http://netscape.com/rdf-cert#"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<vbox id="CACerts">
<description>&certmgr.cas;</description>
<separator class="thin"/>
<outliner id="ca-outliner" multiple="true" enableColumnDrag="true"
onselect="ca_enableButtons()" flex="1">
<outlinercol id="certcol" label="&certmgr.certname;" primary="true"
class="outlinercol-header outlinercell-inset-header"
persist="hidden width ordinal" flex="1"/>
<splitter class="tree-splitter"/>
<outlinercol id="tokencol" label="&certmgr.tokenname;"
class="outlinercol-header outlinercell-inset-header"
persist="hidden width ordinal" flex="1"/>
<!-- <outlinercol id="certdbkeycol" collapsed="true" flex="1"/> -->
<outlinerbody flex="1" ondblclick="viewCerts();"/>
</outliner>
<hbox>
<button id="ca_viewButton"
label="&certmgr.view.label;"
disabled="true" oncommand="viewCerts();"/>
<button id="ca_editButton"
label="&certmgr.edit.label;"
disabled="true" oncommand="editCerts();"/>
<!-- future - import a DER cert?
<button id="ca_addButton"
label="&certmgr.add.label;"
oncommand="addCerts();"/>
-->
<button id="ca_deleteButton"
label="&certmgr.delete.label;"
disabled="true" oncommand="deleteCerts();"/>
</hbox>
</vbox>
</overlay>

View File

@@ -1,87 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Ian McGreer <mcgreer@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/certManager.dtd">
<overlay id="MineOverlay"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cert="http://netscape.com/rdf-cert#"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<vbox id="myCerts">
<description>&certmgr.mine;</description>
<separator class="thin"/>
<outliner id="user-outliner" multiple="true" enableColumnDrag="true"
onselect="mine_enableButtons()" flex="1">
<outlinercol id="certcol" label="&certmgr.certname;" primary="true"
class="outlinercol-header outlinercell-inset-header"
persist="hidden width ordinal" flex="1"/>
<splitter class="tree-splitter"/>
<outlinercol id="tokencol" label="&certmgr.tokenname;"
class="outlinercol-header outlinercell-inset-header"
persist="hidden width ordinal" flex="1"/>
<splitter class="tree-splitter"/>
<outlinercol id="verifiedcol"
class="outlinercol-header outlinercell-inset-header"
persist="hidden width ordinal" flex="1"/>
<splitter class="tree-splitter"/>
<outlinercol id="purposecol" label="&certmgr.purpose;"
class="outlinercol-header outlinercell-inset-header"
persist="hidden width ordinal" flex="1"/>
<splitter class="tree-splitter"/>
<outlinercol id="serialnumcol" label="&certmgr.serial;"
class="outlinercol-header outlinercell-inset-header"
persist="hidden width ordinal" flex="1"/>
<splitter class="tree-splitter"/>
<outlinercol id="issuedcol" label="&certmgr.issued;"
class="outlinercol-header outlinercell-inset-header"
hidden="true" persist="hidden width ordinal" flex="1"/>
<splitter class="tree-splitter"/>
<outlinercol id="expiredcol" label="&certmgr.expires;"
class="outlinercol-header outlinercell-inset-header"
persist="hidden width ordinal" flex="1"/>
<!-- <outlinercol id="certdbkeycol" collapsed="true" flex="1"/> -->
<outlinerbody flex="1" ondblclick="viewCerts();"/>
</outliner>
<hbox>
<button id="mine_viewButton" class="normal"
label="&certmgr.view.label;"
disabled="true" oncommand="viewCerts();"/>
<button id="mine_backupButton" class="normal"
label="&certmgr.backup.label;"
disabled="true" oncommand="backupCerts();"/>
<button id="mine_backupAllButton" class="normal"
label="&certmgr.backupall.label;"
oncommand="backupAllCerts();"/>
<button id="mine_restoreButton" class="normal"
label="&certmgr.restore.label;"
oncommand="restoreCerts();"/>
<button id="mine_deleteButton" class="normal"
label="&certmgr.delete.label;"
disabled="true" oncommand="deleteCerts();"/>
</hbox>
</vbox>
</overlay>

View File

@@ -1,83 +0,0 @@
<?xml version="1.0"?>
<!-- ***** BEGIN LICENSE BLOCK *****
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
-
- The contents of this file are subject to the Mozilla Public License Version
- 1.1 (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS IS" basis,
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- for the specific language governing rights and limitations under the
- License.
-
- The Original Code is Mozilla Communicator
-
- The Initial Developer of the Original Code is
- Netscape Communications Corp..
- Portions created by the Initial Developer are Copyright (C) 2001
- the Initial Developer. All Rights Reserved.
-
- Contributor(s): Kai Engert <kaie@netscape.com>
-
- Alternatively, the contents of this file may be used under the terms of
- either the GNU General Public License Version 2 or later (the "GPL"), or
- the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- in which case the provisions of the GPL or the LGPL are applicable instead
- of those above. If you wish to allow use of your version of this file only
- under the terms of either the GPL or the LGPL, and not to allow others to
- use your version of this file under the terms of the MPL, indicate your
- decision by deleting the provisions above and replace them with the notice
- and other provisions required by the LGPL or the GPL. If you do not delete
- the provisions above, a recipient may use your version of this file under
- the terms of any one of the MPL, the GPL or the LGPL.
-
- ***** END LICENSE BLOCK ***** -->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/certManager.dtd">
<overlay id="WebSitesOverlay"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cert="http://netscape.com/rdf-cert#"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<vbox id="othersCerts">
<description>&certmgr.others;</description>
<separator class="thin"/>
<outliner id="email-outliner" multiple="true"
onselect="email_enableButtons()" flex="1">
<outlinercol id="certcol" label="&certmgr.certname;" primary="true"
class="outlinercol-header outlinercell-inset-header"
flex="1"/>
<splitter class="tree-splitter"/>
<outlinercol id="emailcol" label="&certmgr.email;"
class="outlinercol-header outlinercell-inset-header"
flex="1"/>
<splitter class="tree-splitter"/>
<outlinercol id="tokencol" label="&certmgr.tokenname;"
class="outlinercol-header outlinercell-inset-header"
flex="1"/>
<!-- <outlinercol id="certdbkeycol" collapsed="true" flex="1"/> -->
<outlinerbody flex="1" ondblclick="viewCerts();"/>
</outliner>
<hbox>
<button id="email_viewButton"
label="&certmgr.view.label;"
disabled="true" oncommand="viewCerts();"/>
<button id="email_editButton"
label="&certmgr.edit.label;"
disabled="true" oncommand="editCerts();"/>
<!-- future - import a DER cert?
<button id="email_addButton"
label="&certmgr.add.label;"
oncommand="addCerts();"/>
-->
<button id="email_deleteButton"
label="&certmgr.delete.label;"
disabled="true" oncommand="deleteCerts();"/>
</hbox>
</vbox>
</overlay>

View File

@@ -1,210 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Terry Hayes <thayes@netscape.com>
-->
<!-- This file extends "chrome://navigator/content/pageInfo.xul" -->
<!DOCTYPE overlay SYSTEM "chrome://pippki/locale/PageInfoOverlay.dtd">
<overlay id="pipPageInfoOverlayID"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/pippki.js"/>
<script type="application/x-javascript">
<![CDATA[
var security = {
// Display the server certificate (static)
viewCert : function () {
var cert = security._cert;
if (cert) cert.view();
},
_getSecurityInfo : function() {
const nsIX509Cert = Components.interfaces.nsIX509Cert;
const nsIX509CertDB = Components.interfaces.nsIX509CertDB;
const nsX509CertDB = "@mozilla.org/security/x509certdb;1";
const nsISSLStatusProvider = Components.interfaces.nsISSLStatusProvider;
const nsISSLStatus = Components.interfaces.nsISSLStatus;
// Get the window for this information
var w;
if ("arguments" in window && window.arguments.length > 1 && window.arguments[0])
w = window.arguments[0];
else
w = window.opener.frames[0];
var hName = null;
try
{
hName = w.location.host;
} catch(exception){}
var ui = security._getSecurityUI();
var sp = ui.QueryInterface(nsISSLStatusProvider);
var status = sp.SSLStatus;
if (status) {
status = status.QueryInterface(nsISSLStatus);
}
if (status) {
var cert = status.serverCert;
var issuerName;
issuerName = this.mapIssuerOrganization(cert.issuerOrganization);
if (!issuerName) issuerName = cert.issuerName;
return {
hostName : hName,
cAName : issuerName,
encryptionAlgorithm : status.cipherName,
encryptionStrength : status.secretKeyLength,
cert : cert
};
} else {
return {
hostName : hName,
cAName : "",
encryptionAlgorithm : "",
encryptionStrength : 0,
cert : null
};
}
},
// Find the secureBrowserUI object (if present)
_getSecurityUI : function() {
return window.opener.gBrowser.boxObject.getPropertyAsSupports("secureBrowserUI");
},
// Interface for mapping a certificate issuer organization to
// the value to be displayed.
// Bug 82017 - this implementation should be moved to pipnss C++ code
mapIssuerOrganization: function(name) {
if (!name) return null;
if (name == "RSA Data Security, Inc.") return "Verisign, Inc.";
// No mapping required
return name;
},
_cert : null
};
function securityOnLoad() {
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var info = security._getSecurityInfo();
var idHdr;
var message1;
var message2;
/* Set the identification messages */
if (info.cert)
{
idHdr = bundle.GetStringFromName("pageInfo_WebSiteVerified");
document.getElementById("security-identity").setAttribute("value", idHdr);
message1 = bundle.formatStringFromName("pageInfo_Identity_Verified",
[ info.hostName, info.cAName ],
2);
setText("security-identity-text", message1);
var viewText = bundle.GetStringFromName("pageInfo_ViewCertificate");
setText("security-view-text", viewText);
security._cert = info.cert;
} else {
idHdr = bundle.GetStringFromName("pageInfo_SiteNotVerified");
document.getElementById("security-identity").setAttribute("value", idHdr);
document.getElementById("security-view-cert").setAttribute("disabled", "true");
document.getElementById("security-view-cert").setAttribute("hidden", "true");
}
var hdr;
var msg1;
var msg2;
/* Set the encryption messages */
if (info.encryptionStrength >= 90) {
hdr = bundle.formatStringFromName("pageInfo_StrongEncryption",
[ info.encryptionAlgorithm, info.encryptionStrength+"" ], 2);
document.getElementById("security-privacy").setAttribute("value", hdr);
msg1 = bundle.GetStringFromName("pageInfo_Privacy_Strong1");
setText("security-privacy-msg1", msg1);
msg2 = bundle.GetStringFromName("pageInfo_Privacy_Strong2");
setText("security-privacy-msg2", msg2);
security._cert = info.cert;
} else if (info.encryptionStrength > 0) {
hdr = bundle.formatStringFromName("pageInfo_WeakEncryption",
[ info.encryptionAlgorithm, info.encryptionStrength+"" ], 2);
document.getElementById("security-privacy").setAttribute("value", hdr);
msg1 = bundle.formatStringFromName("pageInfo_Privacy_Weak1",
[ info.hostName ], 1);
setText("security-privacy-msg1", msg1);
msg2 = bundle.GetStringFromName("pageInfo_Privacy_Weak2");
setText("security-privacy-msg2", msg2);
} else {
hdr = bundle.GetStringFromName("pageInfo_NoEncryption");
document.getElementById("security-privacy").setAttribute("value", hdr);
if(info.hostName != null)
msg1 = bundle.formatStringFromName("pageInfo_Privacy_None1", [ info.hostName ], 1);
else
msg1 = bundle.GetStringFromName("pageInfo_Privacy_None3");
setText("security-privacy-msg1", msg1);
msg2 = bundle.GetStringFromName("pageInfo_Privacy_None2");
setText("security-privacy-msg2", msg2);
}
}
/* Register for pageInfo onload calls */
onLoadRegistry.push(securityOnLoad);
]]>
</script>
<tabs id="tabs">
<tab id="securityTab" label="&pageInfo.securityTab;"/>
</tabs>
<tabpanels id="tabpanels">
<vbox id="securityPanel" flex="1">
<label id="security-identity" class="header"/>
<description id="security-identity-text" flex="1"/>
<hbox>
<button id="security-view-cert" label="&pageInfo.view.label;"
oncommand="security.viewCert();"/>
<description id="security-view-text" flex="1"/>
</hbox>
<separator class="groove"/>
<label id="security-privacy" class="header"/>
<vbox flex="1">
<description id="security-privacy-msg1"/>
<description id="security-privacy-msg2"/>
</vbox>
</vbox>
</tabpanels>
</overlay>

View File

@@ -1,57 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Terry Hayes <thayes@netscape.com>
-->
<!-- This file overlays "chrome://communicator/content/pref/preftree.xul" -->
<!DOCTYPE overlay SYSTEM "chrome://pippki/locale/PrefOverlay.dtd">
<overlay id="pipPrefOverlayID"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<treechildren id="securityChildren">
<treeitem id="masterpassItem">
<treerow>
<treecell class="treecell-indent" url="chrome://pippki/content/pref-masterpass.xul"
label="&masterpass.label;"/>
</treerow>
</treeitem>
<treeitem id="sslItem">
<treerow>
<treecell class="treecell-indent" url="chrome://pippki/content/pref-ssl.xul"
label="&ssl.label;"/>
</treerow>
</treeitem>
<treeitem id="certItem">
<treerow>
<treecell class="treecell-indent" url="chrome://pippki/content/pref-certs.xul"
label="&certs.label;"/>
</treerow>
</treeitem>
<treeitem id="validationItem">
<treerow>
<treecell class="treecell-indent" url="chrome://pippki/content/pref-validation.xul"
label="&validation.label;"/>
</treerow>
</treeitem>
</treechildren>
</overlay>

View File

@@ -1,66 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Ian McGreer <mcgreer@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/certManager.dtd">
<overlay id="WebSitesOverlay"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cert="http://netscape.com/rdf-cert#"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<vbox id="webCerts">
<description>&certmgr.websites;</description>
<separator class="thin"/>
<outliner id="server-outliner" multiple="true" enableColumnDrag="true"
onselect="websites_enableButtons()" flex="1">
<outlinercol id="certcol" label="&certmgr.certname;" primary="true"
class="outlinercol-header outlinercell-inset-header"
persist="hidden width ordinal" flex="1"/>
<splitter class="tree-splitter"/>
<outlinercol id="tokencol" label="&certmgr.tokenname;"
class="outlinercol-header outlinercell-inset-header"
persist="hidden width ordinal" flex="1"/>
<!-- <outlinercol id="certdbkeycol" collapsed="true" flex="1"/> -->
<outlinerbody flex="1" ondblclick="viewCerts();"/>
</outliner>
<hbox>
<button id="websites_viewButton"
label="&certmgr.view.label;"
disabled="true" oncommand="viewCerts();"/>
<button id="websites_editButton"
label="&certmgr.edit.label;"
disabled="true" oncommand="editCerts();"/>
<!-- future - import a DER cert?
<button id="websites_addButton"
label="&certmgr.add.label;"
oncommand="addCerts();"/>
-->
<button id="websites_deleteButton"
label="&certmgr.delete.label;"
disabled="true" oncommand="deleteCerts();"/>
</hbox>
</vbox>
</overlay>

View File

@@ -1,26 +0,0 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Rangan Sen <rangansen@netscape.com>
*/
function doOK()
{
window.close();
}

View File

@@ -1,52 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Rangan Sen <rangansen@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/pippki.dtd">
<window id="cacertexists"
title="&caCertExists.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="setWindowName();">
<script type="application/x-javascript" src="chrome://pippki/content/cacertexists.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<vbox flex="1">
<description>&caCertExists.message;</description>
<separator/>
<hbox align="center">
<button id="ok-button" label="&ok.label;"
oncommand="doOK();"/>
</hbox>
<separator/>
</vbox>
</window>

View File

@@ -1,51 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Ian McGreer <mcgreer@netscape.com>
- Javier Delgadillo <javi@netscape.com>
-->
<!DOCTYPE overlay SYSTEM "chrome://pippki/locale/certManager.dtd">
<overlay id="certDumpOverlay"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cert="http://netscape.com/rdf-cert#"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<vbox class="box-padded" id="certPrettyPrint" flex="1">
<label class="header" value="&certmgr.hierarchy.label;"/>
<tree id="treesetDump" rows="4"
onselect="updateCertDump();">
<treecolgroup>
<treecol flex="1"/>
</treecolgroup>
<treechildren id="chainDump"/>
</tree>
<outliner class="inset" id="prettyDumpOutliner" style="height:150px">
<outlinercol flex ="1" id="certDataCol" label="&certmgr.details.label;"
ignoreincolumnpicker="true" class="header outlinercol-header" primary="true"/>
<splitter/>
<outlinerbody flex="1" onselect="displaySelected();"/>
</outliner>
<label class="header" value="&certmgr.fields.label;"/>
<textbox class="inset" id="certDumpVal" multiline="true" rows="8"
readonly="true" style="font-family: -moz-fixed;"/>
</vbox>
</overlay>

View File

@@ -1,371 +0,0 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Bob Lord <lord@netscape.com>
* Ian McGreer <mcgreer@netscape.com>
*/
const nsIFilePicker = Components.interfaces.nsIFilePicker;
const nsFilePicker = "@mozilla.org/filepicker;1";
const nsIX509CertDB = Components.interfaces.nsIX509CertDB;
const nsX509CertDB = "@mozilla.org/security/x509certdb;1";
const nsIX509Cert = Components.interfaces.nsIX509Cert;
const nsICertOutliner = Components.interfaces.nsICertOutliner;
const nsCertOutliner = "@mozilla.org/security/nsCertOutliner;1";
const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
const nsDialogParamBlock = "@mozilla.org/embedcomp/dialogparam;1";
const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock;
const nsPKIParamBlock = "@mozilla.org/security/pkiparamblock;1";
var helpURL = "chrome://help/content/help.xul";
var key;
var selected_certs = [];
var certdb;
var caOutlinerView;
var serverOutlinerView;
var emailOutlinerView;
var userOutlinerView;
function LoadCerts()
{
certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
caOutlinerView = Components.classes[nsCertOutliner]
.createInstance(nsICertOutliner);
caOutlinerView.loadCerts(nsIX509Cert.CA_CERT);
document.getElementById('ca-outliner')
.outlinerBoxObject.view = caOutlinerView;
serverOutlinerView = Components.classes[nsCertOutliner]
.createInstance(nsICertOutliner);
serverOutlinerView.loadCerts(nsIX509Cert.SERVER_CERT);
document.getElementById('server-outliner')
.outlinerBoxObject.view = serverOutlinerView;
emailOutlinerView = Components.classes[nsCertOutliner]
.createInstance(nsICertOutliner);
emailOutlinerView.loadCerts(nsIX509Cert.EMAIL_CERT);
document.getElementById('email-outliner')
.outlinerBoxObject.view = emailOutlinerView;
userOutlinerView = Components.classes[nsCertOutliner]
.createInstance(nsICertOutliner);
userOutlinerView.loadCerts(nsIX509Cert.USER_CERT);
document.getElementById('user-outliner')
.outlinerBoxObject.view = userOutlinerView;
var rowCnt = userOutlinerView.rowCount;
var enableBackupAllButton=document.getElementById('mine_backupAllButton');
if(rowCnt < 1) {
enableBackupAllButton.setAttribute("disabled",true);
} else {
enableBackupAllButton.setAttribute("enabled",true);
}
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var verifiedColText;
if (certdb.ocspOn) {
verifiedColText = bundle.GetStringFromName("certmgr.verifiedNoOCSP");
} else {
verifiedColText = bundle.GetStringFromName("certmgr.verified");
}
var verifiedCol = document.getElementById('verifiedcol');
verifiedCol.setAttribute('label', verifiedColText);
}
function ReloadCerts()
{
caOutlinerView.loadCerts(nsIX509Cert.CA_CERT);
serverOutlinerView.loadCerts(nsIX509Cert.SERVER_CERT);
emailOutlinerView.loadCerts(nsIX509Cert.EMAIL_CERT);
userOutlinerView.loadCerts(nsIX509Cert.USER_CERT);
}
function getSelectedTab()
{
var selTab = document.getElementById('certMgrTabbox').selectedItem;
var selTabID = selTab.getAttribute('id');
if (selTabID == 'mine_tab') {
key = "?my_certs";
} else if (selTabID == "others_tab") {
key = "?others_certs";
} else if (selTabID == "websites_tab") {
key = "?web_certs";
} else if (selTabID == "ca_tab") {
key = "?ca_certs";
}
var context = helpURL + key;
return context;
}
function doHelpButton() {
var uri = getSelectedTab();
openHelp(uri);
}
function getSelectedCerts()
{
var ca_tab = document.getElementById("ca_tab");
var mine_tab = document.getElementById("mine_tab");
var others_tab = document.getElementById("others_tab");
var websites_tab = document.getElementById("websites_tab");
var items = null;
if (ca_tab.selected) {
items = caOutlinerView.selection;
} else if (mine_tab.selected) {
items = userOutlinerView.selection;
} else if (others_tab.selected) {
items = emailOutlinerView.selection;
} else if (websites_tab.selected) {
items = serverOutlinerView.selection;
}
selected_certs = [];
var cert = null;
var nr = 0;
if (items != null) nr = items.getRangeCount();
if (nr > 0) {
for (var i=0; i<nr; i++) {
var o1 = {};
var o2 = {};
items.getRangeAt(i, o1, o2);
var min = o1.value;
var max = o2.value;
for (var j=min; j<=max; j++) {
if (ca_tab.selected) {
cert = caOutlinerView.getCert(j);
} else if (mine_tab.selected) {
cert = userOutlinerView.getCert(j);
} else if (others_tab.selected) {
cert = emailOutlinerView.getCert(j);
} else if (websites_tab.selected) {
cert = serverOutlinerView.getCert(j);
}
if (cert)
selected_certs[selected_certs.length] = cert;
}
}
}
}
function ca_enableButtons()
{
var items = caOutlinerView.selection;
var nr = items.getRangeCount();
var toggle="false";
if (nr == 0) {
toggle="true";
}
var edit_toggle=toggle;
/*
var edit_toggle="true";
if (nr > 0) {
for (var i=0; i<nr; i++) {
var o1 = {};
var o2 = {};
items.getRangeAt(i, o1, o2);
var min = o1.value;
var max = o2.value;
var stop = false;
for (var j=min; j<=max; j++) {
var tokenName = items.outliner.view.getCellText(j, "tokencol");
if (tokenName == "Builtin Object Token") { stop = true; } break;
}
if (stop) break;
}
if (i == nr) {
edit_toggle="false";
}
}
*/
var enableViewButton=document.getElementById('ca_viewButton');
enableViewButton.setAttribute("disabled",toggle);
var enableEditButton=document.getElementById('ca_editButton');
enableEditButton.setAttribute("disabled",edit_toggle);
var enableDeleteButton=document.getElementById('ca_deleteButton');
enableDeleteButton.setAttribute("disabled",toggle);
}
function mine_enableButtons()
{
var items = userOutlinerView.selection;
var toggle="false";
if (items.getRangeCount() == 0) {
toggle="true";
}
var enableViewButton=document.getElementById('mine_viewButton');
enableViewButton.setAttribute("disabled",toggle);
var enableBackupButton=document.getElementById('mine_backupButton');
enableBackupButton.setAttribute("disabled",toggle);
var enableDeleteButton=document.getElementById('mine_deleteButton');
enableDeleteButton.setAttribute("disabled",toggle);
}
function websites_enableButtons()
{
var items = serverOutlinerView.selection;
var toggle="false";
if (items.getRangeCount() == 0) {
toggle="true";
}
var enableViewButton=document.getElementById('websites_viewButton');
enableViewButton.setAttribute("disabled",toggle);
var enableEditButton=document.getElementById('websites_editButton');
enableEditButton.setAttribute("disabled",toggle);
var enableDeleteButton=document.getElementById('websites_deleteButton');
enableDeleteButton.setAttribute("disabled",toggle);
}
function email_enableButtons()
{
var items = emailOutlinerView.selection;
var toggle="false";
if (items.getRangeCount() == 0) {
toggle="true";
}
var enableViewButton=document.getElementById('email_viewButton');
enableViewButton.setAttribute("disabled",toggle);
var enableEditButton=document.getElementById('email_editButton');
enableEditButton.setAttribute("disabled",toggle);
var enableDeleteButton=document.getElementById('email_deleteButton');
enableDeleteButton.setAttribute("disabled",toggle);
}
function backupCerts()
{
getSelectedCerts();
var numcerts = selected_certs.length;
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
fp.init(window,
bundle.GetStringFromName("chooseP12BackupFileDialog"),
nsIFilePicker.modeSave);
fp.appendFilter("PKCS12 Files", "*.p12");
fp.appendFilters(nsIFilePicker.filterAll);
var rv = fp.show();
if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
certdb.exportPKCS12File(null, fp.file,
selected_certs.length, selected_certs);
}
}
function backupAllCerts()
{
// Select all rows, then call doBackup()
var items = userOutlinerView.selection.selectAll();
backupCerts();
}
function editCerts()
{
getSelectedCerts();
var numcerts = selected_certs.length;
for (var t=0; t<numcerts; t++) {
var cert = selected_certs[t];
var certkey = cert.dbKey;
var ca_tab = document.getElementById("ca_tab");
if (ca_tab.selected) {
window.openDialog('chrome://pippki/content/editcacert.xul', certkey,
'chrome,width=100,resizable=1,modal');
} else {
window.openDialog('chrome://pippki/content/editsslcert.xul', certkey,
'chrome,width=100,resizable=1,modal');
}
}
}
function restoreCerts()
{
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
fp.init(window,
bundle.GetStringFromName("chooseP12RestoreFileDialog"),
nsIFilePicker.modeOpen);
fp.appendFilter("PKCS12 Files", "*.p12;*.pfx");
fp.appendFilters(nsIFilePicker.filterAll);
if (fp.show() == nsIFilePicker.returnOK) {
var certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
certdb.importPKCS12File(null, fp.file);
}
userOutlinerView.loadCerts(nsIX509Cert.USER_CERT);
}
function deleteCerts()
{
getSelectedCerts();
var params = Components.classes[nsDialogParamBlock].createInstance(nsIDialogParamBlock);
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var selTab = document.getElementById('certMgrTabbox').selectedItem;
var selTabID = selTab.getAttribute('id');
if (selTabID == 'mine_tab')
{
params.SetString(1,bundle.GetStringFromName("deleteUserCertFlag"));
}
else if (selTabID == "websites_tab")
{
params.SetString(1,bundle.GetStringFromName("deleteSslCertFlag"));
}
else if (selTabID == "ca_tab")
{
params.SetString(1,bundle.GetStringFromName("deleteCaCertFlag"));
}
else if (selTabID == "others_tab")
{
params.SetString(1,bundle.GetStringFromName("deleteEmailCertFlag"));
}
else
{
return;
}
var numcerts = selected_certs.length;
params.SetInt(2,numcerts);
for (var t=0; t<numcerts; t++)
{
var cert = selected_certs[t];
params.SetString(t+3, cert.dbKey);
}
window.openDialog('chrome://pippki/content/deletecert.xul', "",
'chrome,resizable=1,modal',params);
ReloadCerts();
}
function viewCerts()
{
getSelectedCerts();
var numcerts = selected_certs.length;
for (var t=0; t<numcerts; t++) {
selected_certs[t].view();
}
}
/* XXX future - import a DER cert from a file? */
function addCerts()
{
alert("Add cert chosen");
}

View File

@@ -1,68 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Ian McGreer <mcgreer@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xul-overlay href="chrome://global/content/dialogOverlay.xul"?>
<?xul-overlay href="chrome://pippki/content/MineOverlay.xul"?>
<?xul-overlay href="chrome://pippki/content/OthersOverlay.xul"?>
<?xul-overlay href="chrome://pippki/content/WebSitesOverlay.xul"?>
<?xul-overlay href="chrome://pippki/content/CAOverlay.xul"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/certManager.dtd">
<window id="certmanager"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&certmgr.title;"
onload="LoadCerts();">
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/certManager.js"/>
<vbox flex="1">
<tabbox flex="1">
<tabs id="certMgrTabbox">
<tab id="mine_tab" label="&certmgr.tab.mine;"/>
<tab id="others_tab" label="&certmgr.tab.others;"/>
<tab id="websites_tab" label="&certmgr.tab.websites;"/>
<tab id="ca_tab" label="&certmgr.tab.ca;" selected="true"/>
</tabs>
<tabpanels flex="1">
<vbox id="myCerts" flex="1"/>
<vbox id="othersCerts" flex="1"/>
<vbox id="webCerts" flex="1"/>
<vbox id="CACerts" flex="1"/>
</tabpanels>
</tabbox>
<hbox>
<button id="HelpButton"
label="&certmgr.help.label;"
accesskey="&certmgr.helpButtonAccessKey;"
oncommand="doHelpButton();"/>
</hbox>
</vbox>
</window>

View File

@@ -1,80 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Ian McGreer <mcgreer@netscape.com>
- Javier Delgadillo <javi@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/certManager.dtd">
<?xul-overlay href="chrome://pippki/content/viewCertDetails.xul"?>
<?xul-overlay href="chrome://pippki/content/certDump.xul"?>
<window id="certDetails"
title="&certmgr.certdetail.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="setWindowName();">
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/viewCertDetails.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/pippki.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<keyset id="keys">
<key id="esc-key" keycode="VK_ESCAPE" oncommand="window.close()"/>
</keyset>
<grid flex="1">
<column flex="1"/>
<rows>
<row flex="1">
<tabbox flex="1">
<tabs>
<tab id="general_tab" label="&certmgr.detail.general_tab.title;"/>
<tab id="prettyprint_tab" label="&certmgr.detail.prettyprint_tab.title;"/>
</tabs>
<tabpanels flex="1">
<vbox id="general_info" flex="1"/>
<vbox id="certPrettyPrint" flex="1"/>
</tabpanels>
</tabbox>
</row>
<row>
<separator class="thin"/>
</row>
<row>
<hbox align="right" flex="1">
<button id="HelpButton"
label="&certmgr.help.label;"
accesskey="&certmgr.helpButtonAccessKey;"
oncommand="openHelp('chrome://help/content/help.xul?cert_details');"/>
<button id="closeButton"
label="&certmgr.close.label;"
accesskey="&certmgr.closeWindowAccessKey;"
oncommand="window.close();"/>
</hbox>
</row>
</rows>
</grid>
</window>

View File

@@ -1,96 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corp..
* Portions created by the Initial Developer are Copyright (C) 2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s): Kai Engert <kaie@netscape.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
var dialogParams;
var itemCount = 0;
function onLoad()
{
dialogParams = window.arguments[0].QueryInterface(nsIDialogParamBlock);
var pickerTitle = dialogParams.GetString(1);
var mainwin = document.getElementById("certPicker");
mainwin.setAttribute("title", pickerTitle);
var pickerInfo = dialogParams.GetString(2);
setText("pickerInfo", pickerInfo);
var selectElement = document.getElementById("nicknames");
itemCount = dialogParams.GetInt(1);
for (var i=0; i < itemCount; i++) {
var menuItemNode = document.createElement("menuitem");
var nick = dialogParams.GetString(i+3);
menuItemNode.setAttribute("value", i);
menuItemNode.setAttribute("label", nick); // this is displayed
selectElement.firstChild.appendChild(menuItemNode);
if (i == 0) {
selectElement.selectedItem = menuItemNode;
}
}
dialogParams.SetInt(1,0); // set cancel return value
setDetails();
}
function setDetails()
{
var index = parseInt(document.getElementById("nicknames").value);
details = dialogParams.GetString(index+itemCount+3);
document.getElementById("details").value = details;
}
function onCertSelected()
{
setDetails();
}
function doOK()
{
dialogParams.SetInt(1,1);
var index = parseInt(document.getElementById("nicknames").value);
dialogParams.SetInt(2, index);
window.close();
}
function doCancel()
{
dialogParams.SetInt(1,0);
window.close();
}

View File

@@ -1,81 +0,0 @@
<?xml version="1.0"?>
<!-- ***** BEGIN LICENSE BLOCK *****
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
-
- The contents of this file are subject to the Mozilla Public License Version
- 1.1 (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS IS" basis,
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- for the specific language governing rights and limitations under the
- License.
-
- The Original Code is Mozilla Communicator
-
- The Initial Developer of the Original Code is
- Netscape Communications Corp..
- Portions created by the Initial Developer are Copyright (C) 2001
- the Initial Developer. All Rights Reserved.
-
- Contributor(s): Kai Engert <kaie@netscape.com>
-
- Alternatively, the contents of this file may be used under the terms of
- either the GNU General Public License Version 2 or later (the "GPL"), or
- the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- in which case the provisions of the GPL or the LGPL are applicable instead
- of those above. If you wish to allow use of your version of this file only
- under the terms of either the GPL or the LGPL, and not to allow others to
- use your version of this file under the terms of the MPL, indicate your
- decision by deleting the provisions above and replace them with the notice
- and other provisions required by the LGPL or the GPL. If you do not delete
- the provisions above, a recipient may use your version of this file under
- the terms of any one of the MPL, the GPL or the LGPL.
-
- ***** END LICENSE BLOCK ***** -->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window [
<!ENTITY % pippkiDTD SYSTEM "chrome://pippki/locale/pippki.dtd" >
%pippkiDTD;
]>
<window id="certPicker" title="&certPicker.defaultTitle;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="onLoad();">
<script type="application/x-javascript" src="chrome://pippki/content/pippki.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/certpicker.js"/>
<keyset id="keys">
<key id="enter-key" keycode="VK_ENTER" oncommand="doOK();"/>
<key id="return-key" keycode="VK_RETURN" oncommand="doOK();"/>
<key id="esc-key" keycode="VK_ESCAPE" oncommand="doCancel();"/>
</keyset>
<vbox style="margin: 5px;">
<groupbox>
<description id="pickerInfo" style="font-weight: bold;">&certPicker.defaultInfo;</description>
<broadcaster id="certSelected" oncommand="onCertSelected();"/>
<!-- The items in this menulist must never be sorted,
but remain in the order filled by the application
-->
<menulist id="nicknames" observes="certSelected">
<menupopup/>
</menulist>
<label value="&certPicker.detailsLabel;"/>
<textbox readonly="true" id="details" multiline="true"
style="height: 11em; width=80em;"/>
</groupbox>
<separator class="thin"/>
<hbox>
<button id="ok-button" label="&ok.label;"
oncommand="doOK();"/>
<button id="cancel-button" label="&cancel.label;"
oncommand="doCancel();"/>
</hbox>
</vbox>
</window>

View File

@@ -1,117 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Terry Hayes <thayes@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/pippki.dtd">
<window id="set_password" title="&setPassword.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="onLoad();">
<script type="application/x-javascript" src="chrome://pippki/content/password.js"/>
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<vbox style="margin: 5px;" flex="1">
<hbox align="center">
<label value="&setPassword.tokenName.label;: "/>
<label id="tokenName" />
<menulist id="tokenMenu" oncommand="onMenuChange()">
<menupopup/>
</menulist>
</hbox>
<!--
<menulist id="signerList" disabled="true">
<menupopup>
<menuitem id="token-menu" label="Built-in private key database"/>
<menuitem label="Bob Lord's iButton"/>
</menupopup>
</menulist>
-->
<separator/>
<groupbox>
<grid>
<columns>
<column/>
<column/>
</columns>
<rows>
<row>
<label value="&setPassword.oldPassword.label;"/>
<textbox id="oldpw" type="password"/>
<!-- This textbox is inserted as a workaround to the fact that making the 'type'
& 'disabled' property of the 'oldpw' textbox toggle between ['password' &
'false'] and ['text' & 'true'] - as would be necessary if the menu has more
than one tokens, some initialized and some not - does not work properly. So,
either the textbox 'oldpw' or the textbox 'message' would be displayed,
depending on the state of the token selected
-->
<textbox id="message" disabled="true" />
</row>
<row>
<label value="&setPassword.newPassword.label;"/>
<textbox id="pw1" type="password"
onkeypress="setPasswordStrength(); checkPasswords();"/>
</row>
<row>
<label value="&setPassword.reenterPassword.label;"/>
<textbox id="pw2" type="password" onkeypress="checkPasswords();"/>
</row>
</rows>
</grid>
</groupbox>
<groupbox>
<caption label="&setPassword.meter.label;"/>
<progressmeter id="pwmeter" mode="determined"
value="0"/>
</groupbox>
<separator/>
<keyset id="keys">
<key id="enter-key" keycode="VK_ENTER" oncommand="if (!document.getElementById('ok-button').disabled) setPassword();"/>
<key id="return-key" keycode="VK_RETURN" oncommand="if (!document.getElementById('ok-button').disabled) setPassword();"/>
<key id="esc-key" keycode="VK_ESCAPE" oncommand="window.close();"/>
</keyset>
<hbox>
<button id="ok-button" label="&ok.label;"
oncommand="setPassword();" disabled="true" default="true"/>
<button id="cancel-button" label="&cancel.label;"
oncommand="window.close();"/>
<button id="help-button" label="&help.label;"
oncommand="openHelp('chrome://help/content/help.xul?change_pwd');"/>
</hbox>
</vbox>
</window>

View File

@@ -1,58 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* David Drinan.
*/
const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
var dialogParams;
function onLoad()
{
dialogParams = window.arguments[0].QueryInterface(nsIDialogParamBlock);
var selectElement = document.getElementById("tokens");
for (var i=1; i <= dialogParams.GetInt(1); i++) {
var menuItemNode = document.createElement("menuitem");
var token = dialogParams.GetString(i);
menuItemNode.setAttribute("value", token);
menuItemNode.setAttribute("label", token);
selectElement.firstChild.appendChild(menuItemNode);
if (i == 1) {
selectElement.selectedItem = menuItemNode;
}
}
}
function doOK()
{
var tokenList = document.getElementById("tokens");
var token = tokenList.value;
dialogParams.SetInt(1,1);
dialogParams.SetString(1, token);
window.close();
}
function doCancel()
{
dialogParams.SetInt(1,0);
window.close();
}

View File

@@ -1,66 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corporation. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corporation. All
- Rights Reserved.
-
- Contributor(s):
- David Drinan (ddrinan@netscape.com)
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window [
<!ENTITY % pippkiDTD SYSTEM "chrome://pippki/locale/pippki.dtd" >
%pippkiDTD;
]>
<window id="ssl_warning" title="&chooseToken.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
height="360"
width="400"
onload="onLoad();">
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/pippki.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/choosetoken.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<keyset id="keys">
<key id="enter-key" keycode="VK_ENTER" oncommand="if (!document.getElementById('ok-button').disabled) doOK();"/>
<key id="return-key" keycode="VK_RETURN" oncommand="if (!document.getElementById('ok-button').disabled) doOK();"/>
<key id="esc-key" keycode="VK_ESCAPE" oncommand="doCancel();"/>
</keyset>
<vbox style="margin: 5px;" flex="1">
<groupbox>
<description>&chooseToken.message1;</description>
<menulist id="tokens">
<menupopup/>
</menulist>
</groupbox>
<separator />
<hbox>
<button id="ok-button" label="&ok.label;"
oncommand="doOK();"/>
<button id="cancel-button" label="&cancel.label;"
oncommand="doCancel();"/>
<button id="help-button" label="&help.label;"
oncommand="openHelp('chrome://help/content/help.xul?which_token');"/>
</hbox>
</vbox>
</window>

View File

@@ -1,92 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Javier Delgadillo <javi@netscape.com>
*/
const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
var dialogParams;
var itemCount = 0;
function onLoad()
{
var cn;
var org;
var issuer;
dialogParams = window.arguments[0].QueryInterface(nsIDialogParamBlock);
cn = dialogParams.GetString(1);
org = dialogParams.GetString(2);
issuer = dialogParams.GetString(3);
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var message1 = bundle.formatStringFromName("clientAuthMessage1",
[org],
1);
var message2 = bundle.formatStringFromName("clientAuthMessage2",
[issuer],
1);
setText("hostname", cn);
setText("organization", message1);
setText("issuer", message2);
var selectElement = document.getElementById("nicknames");
itemCount = dialogParams.GetInt(1);
for (var i=0; i < itemCount; i++) {
var menuItemNode = document.createElement("menuitem");
var nick = dialogParams.GetString(i+4);
menuItemNode.setAttribute("value", i);
menuItemNode.setAttribute("label", nick); // this is displayed
selectElement.firstChild.appendChild(menuItemNode);
if (i == 0) {
selectElement.selectedItem = menuItemNode;
}
}
setDetails();
}
function setDetails()
{
var index = parseInt(document.getElementById("nicknames").value);
details = dialogParams.GetString(index+itemCount+4);
document.getElementById("details").value = details;
}
function onCertSelected()
{
setDetails();
}
function doOK()
{
dialogParams.SetInt(1,1);
var index = parseInt(document.getElementById("nicknames").value);
dialogParams.SetInt(2, index);
window.close();
}
function doCancel()
{
dialogParams.SetInt(1,0);
window.close();
}

View File

@@ -1,71 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
-
- Contributor(s):
- David Drinan (ddrinan@netscape.com)
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window [
<!ENTITY % pippkiDTD SYSTEM "chrome://pippki/locale/pippki.dtd" >
%pippkiDTD;
]>
<window id="ssl_warning" title="&clientAuthAsk.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="onLoad();">
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/pippki.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/clientauthask.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js" />
<keyset id="keys">
<key id="enter-key" keycode="VK_ENTER" oncommand="doOK();"/>
<key id="return-key" keycode="VK_RETURN" oncommand="doOK();"/>
<key id="esc-key" keycode="VK_ESCAPE" oncommand="window.close();"/>
</keyset>
<vbox style="margin: 5px;">
<groupbox>
<description style="font-weight: bold;">&clientAuthAsk.message1;</description>
<description id="hostname"/>
<description id="organization"/>
<description id="issuer"/>
</groupbox>
<groupbox>
<description style="font-weight: bold;">&clientAuthAsk.message2;</description>
<broadcaster id="certSelected" oncommand="onCertSelected();"/>
<!-- The items in this menulist must never be sorted,
but remain in the order filled by the application
-->
<menulist id="nicknames" observes="certSelected">
<menupopup/>
</menulist>
<description>&clientAuthAsk.message3;</description>
<textbox readonly="true" id="details" multiline="true"
style="height: 11em; width=80em;"/>
</groupbox>
<separator/>
<hbox>
<button id="ok-button" label="&ok.label;"
oncommand="doOK();"/>
<button id="cancel-button" label="&cancel.label;"
oncommand="doCancel();"/>
<button id="help-button" label="&help.label;"
style="width: 10ex" oncommand="openHelp('chrome://help/content/help.xul?which_cert');" />
</hbox>
</vbox>
</window>

View File

@@ -1,55 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Terry Hayes <thayes@netscape.com>
-->
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
<!-- list all the packages being supplied by this jar -->
<RDF:Seq about="urn:mozilla:package:root">
<RDF:li resource="urn:mozilla:package:pippki"/>
</RDF:Seq>
<!-- package information -->
<RDF:Description about="urn:mozilla:package:pippki"
chrome:displayName="pippki"
chrome:author="PSM Team"
chrome:name="pippki"
chrome:localeVersion="0.9.6">
</RDF:Description>
<!-- Declare overlay points used in this package -->
<RDF:Seq about="urn:mozilla:overlays">
<RDF:li resource="chrome://communicator/content/pref/preftree.xul"/>
<RDF:li resource="chrome://navigator/content/pageInfo.xul"/>
</RDF:Seq>
<!-- Define the local overlay file(s) for each overlay point -->
<RDF:Seq about="chrome://communicator/content/pref/preftree.xul">
<RDF:li>chrome://pippki/content/PrefOverlay.xul</RDF:li>
</RDF:Seq>
<RDF:Seq about="chrome://navigator/content/pageInfo.xul">
<RDF:li>chrome://pippki/content/PageInfoOverlay.xul</RDF:li>
</RDF:Seq>
</RDF:RDF>

View File

@@ -1,43 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*/
var keygenThread;
function onLoad()
{
keygenThread = window.arguments[0].QueryInterface(Components.interfaces.nsIKeygenThread);
if (!keygenThread) {
window.close();
return;
}
setCursor("wait");
keygenThread.startKeyGeneration(window);
}
function onClose()
{
setCursor("default");
var alreadyClosed = new Object();
keygenThread.userCanceled(alreadyClosed);
}

View File

@@ -1,37 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/pippki.dtd">
<window
id="domainMismatch" title="&createCertInfo.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="onLoad();"
onclose="onClose();"
>
<script type="application/x-javascript" src="chrome://global/content/strres.js" />
<script type="application/x-javascript" src="pippki.js" />
<script type="application/x-javascript" src="createCertInfo.js" />
<script type="application/x-javascript" src="chrome://help/content/help.js" />
<vbox style="margin: 5px; max-width: 50em;">
<description>&createCertInfo.msg1;</description>
<separator/>
<description style="font-weight: bold; text-align: center; text-decoration: blink;">&createCertInfo.msg2;</description>
<separator/>
</vbox>
</window>

View File

@@ -1,105 +0,0 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* David Drinan <ddrinan@netscape.com>
*/
const nsIX509CertDB = Components.interfaces.nsIX509CertDB;
const nsX509CertDB = "@mozilla.org/security/x509certdb;1";
const nsICrlEntry = Components.interfaces.nsICrlEntry;
const nsISupportsArray = Components.interfaces.nsISupportsArray;
var certdb;
var crls;
function onLoad()
{
var crlEntry;
var i;
certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
crls = certdb.getCrls();
for (i=0; i<crls.Count(); i++) {
crlEntry = crls.GetElementAt(i).QueryInterface(nsICrlEntry);
var org = crlEntry.org;
var orgUnit = crlEntry.orgUnit;
var lastUpdate = crlEntry.lastUpdate;
var nextUpdate = crlEntry.nextUpdate;
AddItem("crlList", [org, orgUnit, lastUpdate, nextUpdate], "crltree_", i);
}
}
function AddItem(children,cells,prefix,idfier)
{
var kids = document.getElementById(children);
var item = document.createElement("treeitem");
var row = document.createElement("treerow");
for(var i = 0; i < cells.length; i++)
{
var cell = document.createElement("treecell");
cell.setAttribute("class", "propertylist");
cell.setAttribute("label", cells[i])
row.appendChild(cell);
}
item.appendChild(row);
item.setAttribute("id",prefix + idfier);
kids.appendChild(item);
}
function DeleteCrlSelected() {
var crlEntry;
// delete selected item
var crltree = document.getElementById("crltree");
var i = crltree.selectedIndex;
// Delete it
certdb.deleteCrl(i);
DeleteItemSelected("crltree", "crltree_", "crlList");
if( !crltree.selectedItems.length ) {
if( !document.getElementById("deleteCrl").disabled ) {
document.getElementById("deleteCrl").setAttribute("disabled", "true")
}
}
}
function EnableCrlActions() {
document.getElementById("deleteCrl").removeAttribute("disabled", "true");
// document.getElementById("updateCrl").removeAttribute("disabled", "true");
}
function DeleteItemSelected(tree, prefix, kids) {
var i;
var delnarray = [];
var rv = "";
var cookietree = document.getElementById(tree);
var selitems = cookietree.selectedItems;
for(i = 0; i < selitems.length; i++)
{
delnarray[i] = document.getElementById(selitems[i].getAttribute("id"));
var itemid = parseInt(selitems[i].getAttribute("id").substring(prefix.length,selitems[i].getAttribute("id").length));
rv += (itemid + ",");
}
for(i = 0; i < delnarray.length; i++)
{
document.getElementById(kids).removeChild(delnarray[i]);
}
return rv;
}

View File

@@ -1,80 +0,0 @@
<?xml version="1.0"?>
<!--
The contents of this file are subject to the Netscape Public
License Version 1.1 (the "License"); you may not use this file
except in compliance with the License. You may obtain a copy of
the License at http://www.mozilla.org/NPL/
Software distributed under the License is distributed on an "AS
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
implied. See the License for the specific language governing
rights and limitations under the License.
The Original Code is Mozilla Communicator client code, released
March 31, 1998.
The Initial Developer of the Original Code is Netscape
Communications Corporation. Portions created by Netscape are
Copyright (C) 1998-1999 Netscape Communications Corporation. All
Rights Reserved.
Contributor(s):
David Drinan (ddrinan@netscape.com)
-->
<!-- CHANGE THIS WHEN MOVING FILES -->
<?xml-stylesheet href="chrome://communicator/skin/" type="text/css"?>
<?xul-overlay href="chrome://global/content/dialogOverlay.xul"?>
<!-- CHANGE THIS WHEN MOVING FILES -->
<!DOCTYPE window [
<!ENTITY % prefValDTD SYSTEM "chrome://pippki/locale/pref-validation.dtd">
%prefValDTD;
<!ENTITY % prefCertMgrDTD SYSTEM "chrome://pippki/locale/certManager.dtd">
%prefCertMgrDTD;
]>
<window id="crlviewer"
class="dialog"
title="&validation.crlmanager.label;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
style="width: 30em;"
onload="onLoad();">
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/crlManager.js"/>
<description value="&validation.crlmanager.label;"/>
<separator class="thin"/>
<tree id="crltree" style="height: 10em;"
multiple="false" onclick="EnableCrlActions()" flex="1">
<treecolgroup>
<treecol flex="3" width="0"/>
<splitter class="tree-splitter"/>
<treecol flex="5" width="0"/>
<splitter class="tree-splitter"/>
<treecol flex="2" width="0"/>
<splitter class="tree-splitter"/>
<treecol flex="2" width="0"/>
</treecolgroup>
<treehead>
<treerow>
<treecell class="treecell-header sortDirectionIndicator"
label="&certmgr.certdetail.o;"/>
<treecell class="treecell-header sortDirectionIndicator"
label="&certmgr.certdetail.ou;"/>
<treecell class="treecell-header sortDirectionIndicator"
label="&validation.crllastupdate.label;"/>
<treecell class="treecell-header sortDirectionIndicator"
label="&validation.crlnextupdate.label;"/>
</treerow>
</treehead>
<treechildren id="crlList" flex="1"/>
</tree>
<hbox>
<button id="deleteCrl" disabled="true"
label="&validation.deletecrl.label;"
oncommand="DeleteCrlSelected();"/>
</hbox>
<separator class="thin"/>
</window>

View File

@@ -1,126 +0,0 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Ian McGreer <mcgreer@netscape.com>
*/
const nsIX509Cert = Components.interfaces.nsIX509Cert;
const nsX509CertDB = "@mozilla.org/security/x509certdb;1";
const nsIX509CertDB = Components.interfaces.nsIX509CertDB;
const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock;
const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
var certdb;
var certs = [];
var helpUrl;
function setWindowName()
{
var params = window.arguments[0].QueryInterface(nsIDialogParamBlock);
// Get the cert from the cert database
certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
var typeFlag = params.GetString(1);
var numberOfCerts = params.GetInt(2);
var dbkey;
for(var x=0; x<numberOfCerts;x++)
{
dbkey = params.GetString(x+3);
certs[x] = certdb.getCertByDBKey(dbkey , null);
}
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var title;
var confirm;
var impact;
if(typeFlag == bundle.GetStringFromName("deleteUserCertFlag"))
{
title = bundle.GetStringFromName("deleteUserCertTitle");
confirm = bundle.GetStringFromName("deleteUserCertConfirm");
impact = bundle.GetStringFromName("deleteUserCertImpact");
helpUrl = "chrome://help/content/help.xul?delete_my_certs"
}
else if(typeFlag == bundle.GetStringFromName("deleteSslCertFlag"))
{
title = bundle.GetStringFromName("deleteSslCertTitle");
confirm = bundle.GetStringFromName("deleteSslCertConfirm");
impact = bundle.GetStringFromName("deleteSslCertImpact");
helpUrl = "chrome://help/content/help.xul?delete_web_certs"
}
else if(typeFlag == bundle.GetStringFromName("deleteCaCertFlag"))
{
title = bundle.GetStringFromName("deleteCaCertTitle");
confirm = bundle.GetStringFromName("deleteCaCertConfirm");
impact = bundle.GetStringFromName("deleteCaCertImpact");
helpUrl = "chrome://help/content/help.xul?delete_ca_certs"
}
else if(typeFlag == bundle.GetStringFromName("deleteEmailCertFlag"))
{
title = bundle.GetStringFromName("deleteEmailCertTitle");
confirm = bundle.GetStringFromName("deleteEmailCertConfirm");
impact = bundle.GetStringFromName("deleteEmailCertImpact");
helpUrl = "chrome://help/content/help.xul?delete_email_certs"
}
else
{
return;
}
var windowReference = document.getElementById('deleteCertificate');
var confirReference = document.getElementById('confirm');
var impactReference = document.getElementById('impact');
windowReference.setAttribute("title", title);
setText("confirm",confirm);
var box=document.getElementById("certlist");
var text;
for(var x=0;x<certs.length;x++)
{
text = document.createElement("text");
text.setAttribute("value",certs[x].commonName);
box.appendChild(text);
}
setText("impact",impact);
var wdth = window.innerWidth; // THIS IS NEEDED,
window.sizeToContent();
windowReference.setAttribute("width",window.innerWidth + 30);
var hght = window.innerHeight; // THIS IS NEEDED,
window.sizeToContent();
windowReference.setAttribute("height",window.innerHeight + 40);
}
function doOK()
{
for(var i=0;i<certs.length;i++)
{
certdb.deleteCertificate(certs[i]);
}
window.close();
}
function doHelp()
{
openHelp(helpUrl);
}

View File

@@ -1,62 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Ian McGreer <mcgreer@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/certManager.dtd">
<window id="deleteCertificate"
title="&certmgr.deletecert.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="setWindowName();"
style="width:8ex">
<script type="application/x-javascript" src="chrome://pippki/content/deletecert.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<script type="application/x-javascript" src="chrome://global/content/strres.js" />
<script type="application/x-javascript" src="pippki.js" />
<keyset id="keys">
<key id="enter-key" keycode="VK_ENTER" oncommand="doOK();"/>
<key id="return-key" keycode="VK_RETURN" oncommand="doOK();"/>
<key id="esc-key" keycode="VK_ESCAPE" oncommand="window.close();"/>
</keyset>
<vbox flex="1">
<description id="confirm"/>
<separator />
<vbox id="certlist" flex="100%"/>
<description id="impact"/>
<separator />
<hbox align="center">
<button id="ok-button" label="&certmgr.ok.label;"
oncommand="doOK();"/>
<button id="cancel-button" label="&certmgr.cancel.label;"
oncommand="window.close();"/>
<button id="help-button" label="&certmgr.help.label;"
oncommand="doHelp();"/>
</hbox>
</vbox>
</window>

View File

@@ -1,420 +0,0 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Bob Lord <lord@netscape.com>
* Ian McGreer <mcgreer@netscape.com>
*/
const nsIFilePicker = Components.interfaces.nsIFilePicker;
const nsFilePicker = "@mozilla.org/filepicker;1";
const nsIPKCS11Slot = Components.interfaces.nsIPKCS11Slot;
const nsIPKCS11Module = Components.interfaces.nsIPKCS11Module;
const nsPKCS11ModuleDB = "@mozilla.org/security/pkcs11moduledb;1";
const nsIPKCS11ModuleDB = Components.interfaces.nsIPKCS11ModuleDB;
const nsIPK11Token = Components.interfaces.nsIPK11Token;
const nsPK11TokenDB = "@mozilla.org/security/pk11tokendb;1";
const nsIPK11TokenDB = Components.interfaces.nsIPK11TokenDB;
var bundle;
var secmoddb;
/* Do the initial load of all PKCS# modules and list them. */
function LoadModules()
{
bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
secmoddb = Components.classes[nsPKCS11ModuleDB].getService(nsIPKCS11ModuleDB);
var modules = secmoddb.listModules();
var done = false;
try {
modules.isDone();
} catch (e) { done = true; }
while (!done) {
var module = modules.currentItem().QueryInterface(nsIPKCS11Module);
if (module) {
var slotnames = [];
var slots = module.listSlots();
var slots_done = false;
try {
slots.isDone();
} catch (e) { slots_done = true; }
while (!slots_done) {
var slot = null;
try {
slot = slots.currentItem().QueryInterface(nsIPKCS11Slot);
} catch (e) { slot = null; }
// in the ongoing discussion of whether slot names or token names
// are to be shown, I've gone with token names because NSS will
// prefer lookup by token name. However, the token may not be
// present, so maybe slot names should be listed, while token names
// are "remembered" for lookup?
if (slot != null) {
if (slot.tokenName)
slotnames[slotnames.length] = slot.tokenName;
else
slotnames[slotnames.length] = slot.name;
}
try {
slots.next();
} catch (e) { slots_done = true; }
}
AddModule(module.name, slotnames);
}
try {
modules.next();
} catch (e) { done = true; }
}
/* Set the text on the fips button */
SetFIPSButtonText();
}
function SetFIPSButtonText()
{
var fipsButton = document.getElementById("fipsbutton");
var label;
if (secmoddb.isFIPSEnabled) {
label = bundle.GetStringFromName("disable_fips");
} else {
label = bundle.GetStringFromName("enable_fips");
}
fipsButton.setAttribute("label", label);
}
/* Add a module to the tree. slots is the array of slots in the module,
* to be represented as children.
*/
function AddModule(module, slots)
{
var tree = document.getElementById("device_list");
var item = document.createElement("treeitem");
var row = document.createElement("treerow");
var cell = document.createElement("treecell");
cell.setAttribute("class", "propertylist");
cell.setAttribute("label", module);
cell.setAttribute("style", "font-weight: bold");
cell.setAttribute("crop", "never");
row.appendChild(cell);
item.appendChild(row);
var parent = document.createElement("treechildren");
for (var i = 0; i<slots.length; i++) {
var child_item = document.createElement("treeitem");
var child_row = document.createElement("treerow");
var child_cell = document.createElement("treecell");
child_cell.setAttribute("label", slots[i]);
child_cell.setAttribute("class", "treecell-indent");
child_row.appendChild(child_cell);
child_item.appendChild(child_row);
child_item.setAttribute("pk11kind", "slot");
parent.appendChild(child_item);
}
item.appendChild(parent);
item.setAttribute("pk11kind", "module");
item.setAttribute("open", "true");
item.setAttribute("container", "true");
tree.appendChild(item);
}
var selected_slot;
var selected_module;
/* get the slot selected by the user (can only be one-at-a-time) */
function getSelectedItem()
{
var tree = document.getElementById('device_tree');
var items = tree.selectedItems;
selected_slot = null;
selected_module = null;
if (items.length > 0) {
var kind = items[0].getAttribute("pk11kind");
var module_name;
if (kind == "slot") {
// get the module cell for this slot cell
var cell = items[0].parentNode.parentNode.firstChild.firstChild;
module_name = cell.getAttribute("label");
var module = secmoddb.findModuleByName(module_name);
// get the cell for the selected row (the slot to display)
cell = items[0].firstChild.firstChild;
var slot_name = cell.getAttribute("label");
selected_slot = module.findSlotByName(slot_name);
} else { // (kind == "module")
// get the cell for the selected row (the module to display)
cell = items[0].firstChild.firstChild;
module_name = cell.getAttribute("label");
selected_module = secmoddb.findModuleByName(module_name);
}
}
}
function enableButtons()
{
var login_toggle = "true";
var logout_toggle = "true";
var pw_toggle = "true";
var unload_toggle = "true";
getSelectedItem();
if (selected_module) {
unload_toggle = "false";
showModuleInfo();
} else if (selected_slot) {
// here's the workaround - login functions are all with token,
// so grab the token type
var selected_token = selected_slot.getToken();
if (selected_token != null) {
if (selected_token.needsLogin() || !(selected_token.needsUserInit)) {
pw_toggle = "false";
if(selected_token.needsLogin()) {
if (selected_token.isLoggedIn()) {
logout_toggle = "false";
} else {
login_toggle = "false";
}
}
}
}
showSlotInfo();
}
var thebutton = document.getElementById('login_button');
thebutton.setAttribute("disabled", login_toggle);
thebutton = document.getElementById('logout_button');
thebutton.setAttribute("disabled", logout_toggle);
thebutton = document.getElementById('change_pw_button');
thebutton.setAttribute("disabled", pw_toggle);
thebutton = document.getElementById('unload_button');
thebutton.setAttribute("disabled", unload_toggle);
// not implemented
//thebutton = document.getElementById('change_slotname_button');
//thebutton.setAttribute("disabled", toggle);
}
// clear the display of information for the slot
function ClearInfoList()
{
var info_list = document.getElementById("info_list");
while (info_list.firstChild)
info_list.removeChild(info_list.firstChild);
}
// show a list of info about a slot
function showSlotInfo()
{
ClearInfoList();
switch (selected_slot.status) {
case nsIPKCS11Slot.SLOT_DISABLED:
AddInfoRow(bundle.GetStringFromName("devinfo_status"),
bundle.GetStringFromName("devinfo_stat_disabled"),
"tok_status");
break;
case nsIPKCS11Slot.SLOT_NOT_PRESENT:
AddInfoRow(bundle.GetStringFromName("devinfo_status"),
bundle.GetStringFromName("devinfo_stat_notpresent"),
"tok_status");
break;
case nsIPKCS11Slot.SLOT_UNINITIALIZED:
AddInfoRow(bundle.GetStringFromName("devinfo_status"),
bundle.GetStringFromName("devinfo_stat_uninitialized"),
"tok_status");
break;
case nsIPKCS11Slot.SLOT_NOT_LOGGED_IN:
AddInfoRow(bundle.GetStringFromName("devinfo_status"),
bundle.GetStringFromName("devinfo_stat_notloggedin"),
"tok_status");
break;
case nsIPKCS11Slot.SLOT_LOGGED_IN:
AddInfoRow(bundle.GetStringFromName("devinfo_status"),
bundle.GetStringFromName("devinfo_stat_loggedin"),
"tok_status");
break;
case nsIPKCS11Slot.SLOT_READY:
AddInfoRow(bundle.GetStringFromName("devinfo_status"),
bundle.GetStringFromName("devinfo_stat_ready"),
"tok_status");
break;
}
AddInfoRow(bundle.GetStringFromName("devinfo_desc"),
selected_slot.desc, "slot_desc");
AddInfoRow(bundle.GetStringFromName("devinfo_manID"),
selected_slot.manID, "slot_manID");
AddInfoRow(bundle.GetStringFromName("devinfo_hwversion"),
selected_slot.HWVersion, "slot_hwv");
AddInfoRow(bundle.GetStringFromName("devinfo_fwversion"),
selected_slot.FWVersion, "slot_fwv");
}
function showModuleInfo()
{
ClearInfoList();
AddInfoRow(bundle.GetStringFromName("devinfo_modname"),
selected_module.name, "module_name");
AddInfoRow(bundle.GetStringFromName("devinfo_modpath"),
selected_module.libName, "module_path");
}
// add a row to the info list, as [col1 col2] (ex.: ["status" "logged in"])
function AddInfoRow(col1, col2, cell_id)
{
var tree = document.getElementById("info_list");
var item = document.createElement("treeitem");
var row = document.createElement("treerow");
var cell1 = document.createElement("treecell");
cell1.setAttribute("label", col1);
cell1.setAttribute("crop", "never");
row.appendChild(cell1);
var cell2 = document.createElement("treecell");
cell2.setAttribute("label", col2);
cell2.setAttribute("crop", "never");
cell2.setAttribute("id", cell_id);
row.appendChild(cell2);
item.appendChild(row);
tree.appendChild(item);
}
// log in to a slot
function doLogin()
{
getSelectedItem();
// here's the workaround - login functions are with token
var selected_token = selected_slot.getToken();
try {
selected_token.login(false);
var tok_status = document.getElementById("tok_status");
if (selected_token.isLoggedIn()) {
tok_status.setAttribute("label",
bundle.GetStringFromName("devinfo_stat_loggedin"));
} else {
tok_status.setAttribute("label",
bundle.GetStringFromName("devinfo_stat_notloggedin"));
}
} catch (e) {
var alertStr = bundle.GetStringFromName("login_failed");
alert(alertStr);
}
enableButtons();
}
// log out of a slot
function doLogout()
{
getSelectedItem();
// here's the workaround - login functions are with token
var selected_token = selected_slot.getToken();
try {
selected_token.logout(false);
var tok_status = document.getElementById("tok_status");
if (selected_token.isLoggedIn()) {
tok_status.setAttribute("label",
bundle.GetStringFromName("devinfo_stat_loggedin"));
} else {
tok_status.setAttribute("label",
bundle.GetStringFromName("devinfo_stat_notloggedin"));
}
} catch (e) {
}
enableButtons();
}
// load a new device
function doLoad()
{
//device.loaddlg.width=300
//device.loaddlg.height=200
var dlgWidth = bundle.GetStringFromName("device.loaddlg.width");
var dlgHeight = bundle.GetStringFromName("device.loaddlg.height");
//
window.open("load_device.xul", "loaddevice",
"chrome,width=" + dlgWidth + ",height="+ dlgHeight+ ",resizable=1,dialog=1,modal=1");
var device_list = document.getElementById("device_list");
while (device_list.firstChild)
device_list.removeChild(device_list.firstChild);
LoadModules();
}
function doUnload()
{
getSelectedItem();
if (selected_module) {
pkcs11.deletemodule(selected_module.name);
var device_list = document.getElementById("device_list");
while (device_list.firstChild)
device_list.removeChild(device_list.firstChild);
LoadModules();
}
}
function changePassword()
{
getSelectedItem();
token = selected_slot.getToken();
window.open("changepassword.xul",
selected_slot.tokenName,
"chrome,resizable=1,modal=1,dialog=1");
showSlotInfo();
enableButtons();
}
// browse fs for PKCS#11 device
function doBrowseFiles()
{
var srbundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
fp.init(window,
srbundle.GetStringFromName("loadPK11TokenDialog"),
nsIFilePicker.modeOpen);
fp.appendFilters(nsIFilePicker.filterAll);
if (fp.show() == nsIFilePicker.returnOK) {
var pathbox = document.getElementById("device_path");
pathbox.setAttribute("value", fp.file.persistentDescriptor);
}
}
function doLoadDevice()
{
var name_box = document.getElementById("device_name");
var path_box = document.getElementById("device_path");
pkcs11.addmodule(name_box.value, path_box.value, 0,0);
window.close();
}
// ------------------------------------- Old code
function showTokenInfo()
{
ClearInfoList();
getSelectedToken();
AddInfoRow(bundle.GetStringFromName("devinfo_label"),
selected_token.tokenLabel, "tok_label");
AddInfoRow(bundle.GetStringFromName("devinfo_manID"),
selected_token.tokenManID, "tok_manID");
AddInfoRow(bundle.GetStringFromName("devinfo_serialnum"),
selected_token.tokenSerialNumber, "tok_sNum");
AddInfoRow(bundle.GetStringFromName("devinfo_hwversion"),
selected_token.tokenHWVersion, "tok_hwv");
AddInfoRow(bundle.GetStringFromName("devinfo_fwversion"),
selected_token.tokenFWVersion, "tok_fwv");
}
function toggleFIPS()
{
secmoddb.toggleFIPSMode();
//Remove the existing listed modules so that re-fresh doesn't
//display the module that just changed.
var device_list = document.getElementById("device_list");
while (device_list.firstChild)
device_list.removeChild(device_list.firstChild);
LoadModules();
}

View File

@@ -1,120 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Ian McGreer <mcgreer@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window [
<!ENTITY % deviceManangerDTD SYSTEM "chrome://pippki/locale/deviceManager.dtd">
%deviceManangerDTD;
<!ENTITY % pippkiDTD SYSTEM "chrome://pippki/locale/pippki.dtd" >
%pippkiDTD;
]>
<window id="devicemanager"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&devmgr.title;"
persist="screenX screenY width height"
onload="LoadModules();">
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/device_manager.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<grid flex="1">
<columns>
<column flex="1"/>
<column flex="1"/>
<column flex="1"/>
</columns>
<rows>
<row>
<hbox flex="1"> <!-- List of devices -->
<tree id="device_tree" rows="12" multiple="false"
onselect="enableButtons();"
flex="1" style="min-width:15em">
<treecolgroup>
<treecol flex="1"/>
</treecolgroup>
<treehead>
<treerow>
<treecell class="treecell-header"
label="&devmgr.devlist.label;"
flex="1"/>
</treerow>
</treehead>
<treechildren id="device_list"/>
</tree>
</hbox> <!-- / List of devices -->
<hbox flex="1"> <!-- Device status -->
<tree id="info_tree" rows="12" multiple="false"
class="list" flex="1" style="min-width:10em">
<treecolgroup>
<treecol flex="5"/>
<treecol flex="7"/>
</treecolgroup>
<treehead>
<treerow>
<treecell class="treecell-header"
label="&devmgr.details.title;" flex="2"/>
<treecell class="treecell-header"
label="&devmgr.details.title2;" flex="7"/>
</treerow>
</treehead>
<treechildren id="info_list"/>
</tree>
</hbox> <!-- / Device status -->
<vbox> <!-- Buttons for manipulating devices -->
<button id="login_button"
label="&devmgr.button.login.label;"
oncommand="doLogin();" disabled="true"/>
<button id="logout_button"
label="&devmgr.button.logout.label;"
oncommand="doLogout();" disabled="true"/>
<button id="change_pw_button"
label="&devmgr.button.changepw.label;"
oncommand="changePassword();" disabled="true"/>
<button id="load_button"
label="&devmgr.button.load.label;"
oncommand="doLoad();"/>
<button id="unload_button"
label="&devmgr.button.unload.label;"
oncommand="doUnload();" disabled="true"/>
<button id="fipsbutton"
label=""
oncommand="toggleFIPS();"/>
</vbox> <!-- / Buttons for manipulating devices -->
</row>
<row>
<hbox>
<button id="help_button"
label="&help.label;"
oncommand="openHelp('chrome://help/content/help.xul?sec_devices');"/>
<button id="ok_button"
label="&ok.label;"
oncommand="window.close();"/>
</hbox>
</row>
</rows>
</grid>
</window>

View File

@@ -1,80 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Javier Delgadillo <javi@netscape.com>
*/
const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock;
const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
const nsIX509Cert = Components.interfaces.nsIX509Cert;
var pkiParams;
var dialogParams;
var cert;
function onLoad()
{
pkiParams = window.arguments[0].QueryInterface(nsIPKIParamBlock);
var isupport = pkiParams.getISupportAtIndex(1);
cert = isupport.QueryInterface(nsIX509Cert);
dialogParams = pkiParams.QueryInterface(nsIDialogParamBlock);
var connectURL = dialogParams.GetString(1);
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var message1 = bundle.formatStringFromName("mismatchDomainMsg1",
[ connectURL, cert.commonName ],
2);
var message2 = bundle.formatStringFromName("mismatchDomainMsg2",
[ connectURL ],
1);
setText("message1", message1);
setText("message2", message2);
//Set the focus so key press events work
document.getElementById('ok-button').focus();
var xulWindow = document.getElementById("domainMismatch");
var wdth = window.innerWidth; // THIS IS NEEDED,
window.sizeToContent();
xulWindow.setAttribute("width",window.innerWidth + 30);
var hght = window.innerHeight; // THIS IS NEEDED,
window.sizeToContent();
xulWindow.setAttribute("height",window.innerHeight + 40);
}
function viewCert()
{
cert.view();
}
function doOK()
{
dialogParams.SetInt(1,1);
window.close();
}
function doCancel()
{
dialogParams.SetInt(1,0);
window.close();
}

View File

@@ -1,67 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
-
- Contributor(s):
- Javier Delgadillo <javi@netscape.com>
- Bob Lord <lord@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/pippki.dtd">
<window id="domainMismatch" title="&domainMismatch.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
width="320"
onload="onLoad();">
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/pippki.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/domainMismatch.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<keyset id="keys">
<key id="enter-key" keycode="VK_ENTER" oncommand="doOK()" />
<key id="return-key" keycode="VK_RETURN" oncommand="doOK()" />
<key id="esc-key" keycode="VK_ESCAPE" oncommand="doCancel()"/>
</keyset>
<vbox style="margin: 5px;" flex="1">
<description id="message1"/>
<separator/>
<description id="message2" flex="100%"/>
<hbox>
<button id="examineCert-button" label="&examineCert.label;"
oncommand="viewCert();"/>
</hbox>
<separator/>
<keyset id="keys">
<key id="enter-key" keycode="VK_ENTER" oncommand="doOK();"/>
<key id="return-key" keycode="VK_RETURN" oncommand="doOK();"/>
<key id="esc-key" keycode="VK_ESCAPE" oncommand="doCancel();"/>
</keyset>
<hbox>
<button id="ok-button" label="&ok.label;"
oncommand="doOK();"/>
<button id="cancel-button" label="&cancel.label;"
oncommand="doCancel();"/>
<button id="help-button" label="&help.label;"
oncommand="openHelp('chrome://help/content/help.xul?bad_name_web_cert');"/>
</hbox>
</vbox>
</window>

View File

@@ -1,92 +0,0 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Bob Lord <lord@netscape.com>
* Terry Hayes <thayes@netscape.com>
*/
const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock;
const nsIX509Cert = Components.interfaces.nsIX509Cert;
var pkiParams;
var params;
var caName;
var cert;
function onLoad()
{
pkiParams = window.arguments[0].QueryInterface(nsIPKIParamBlock);
params = pkiParams.QueryInterface(nsIDialogParamBlock);
var isupport = pkiParams.getISupportAtIndex(1);
cert = isupport.QueryInterface(nsIX509Cert);
caName = cert.commonName;
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
if (!caName.length)
caName = bundle.GetStringFromName("unnamedCA");
var message2 = bundle.formatStringFromName("newCAMessage1",
[ caName ],
1);
setText("message2", message2);
var xulWindow = document.getElementById("download_cert");
var wdth = window.innerWidth; // THIS IS NEEDED,
window.sizeToContent();
xulWindow.setAttribute("width",window.innerWidth + 30);
var hght = window.innerHeight; // THIS IS NEEDED,
window.sizeToContent();
xulWindow.setAttribute("height",window.innerHeight + 40);
}
function viewCert()
{
cert.view();
}
function doOK()
{
var checkSSL = document.getElementById("trustSSL");
var checkEmail = document.getElementById("trustEmail");
var checkObjSign = document.getElementById("trustObjSign");
if (checkSSL.checked)
params.SetInt(2,1);
else
params.SetInt(2,0);
if (checkEmail.checked)
params.SetInt(3,1);
else
params.SetInt(3,0);
if (checkObjSign.checked)
params.SetInt(4,1);
else
params.SetInt(4,0);
params.SetInt(1,1);
window.close();
}
function doCancel()
{
params.SetInt(1,0);
window.close();
}

View File

@@ -1,107 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Ian McGreer <mcgreer@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/pippki.dtd">
<window id="download_cert" title="&downloadCert.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
height="320"
width="460"
onload="onLoad();">
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/downloadcert.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/pippki.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<vbox style="margin: 5px;" flex="1">
<!-- Let 'em know what they're doing -->
<vbox>
<description>&downloadCert.message1;</description>
</vbox>
<separator/>
<!-- checkboxes for trust bits
- "do you want to?"
- * trust for SSL
- * trust for email
- * trust for object signing
-->
<vbox>
<description id="message2"/>
<checkbox label="&downloadCert.trustSSL;"
id="trustSSL"/>
<checkbox label="&downloadCert.trustEmail;"
id="trustEmail"/>
<checkbox label="&downloadCert.trustObjSign;"
id="trustObjSign"/>
</vbox>
<separator/>
<!-- buttons for viewing cert and policies
- "suggested you view the following:"
- <> view cert
- <> view policy
-->
<vbox>
<description>&downloadCert.message3;</description>
<separator/>
<grid>
<columns>
<column/>
<column/>
</columns>
<rows>
<row>
<button id="viewC-button"
label="&downloadCert.viewCert.label;"
oncommand="viewCert();"/>
<description style="margin: 4px;">&downloadCert.viewCert.text;</description>
</row>
</rows>
</grid>
</vbox>
<separator/>
<!-- usual runaround
- <ok> <cancel> <help>
-->
<hbox align="center">
<button id="ok-button" label="&ok.label;"
oncommand="doOK();"/>
<button id="cancel-button" label="&cancel.label;"
oncommand="doCancel();"/>
<button id="help-button" label="&help.label;"
oncommand="openHelp('chrome://help/content/help.xul?new_ca');"/>
</hbox>
</vbox>
</window>

View File

@@ -1,70 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Ian McGreer <mcgreer@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/certManager.dtd">
<window id="editCaCert"
title="&certmgr.editcacert.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="setWindowName();"
>
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/pippki.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/editcerts.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<vbox flex="1">
<description id="certmsg"/>
<separator />
<description flex="100%">&certmgr.editcert.edittrust;</description>
<vbox flex="100%">
<checkbox label="&certmgr.editcert.trustssl;"
id="trustSSL"/>
<checkbox label="&certmgr.editcert.trustemail;"
id="trustEmail"/>
<checkbox label="&certmgr.editcert.trustobjsign;"
id="trustObjSign"/>
</vbox>
<keyset id="keys">
<key id="enter-key" keycode="VK_ENTER" oncommand="doSSLOK();"/>
<key id="return-key" keycode="VK_RETURN" oncommand="doSSLOK();"/>
<key id="esc-key" keycode="VK_ESCAPE" oncommand="window.close();"/>
</keyset>
<hbox>
<button id="ok-button" label="&certmgr.ok.label;"
oncommand="doOK();"/>
<button id="cancel-button" label="&certmgr.cancel.label;"
oncommand="window.close();"/>
<button id="help-button" label="&certmgr.help.label;"
oncommand="openHelp('chrome://help/content/help.xul?edit_ca_certs');"/>
</hbox>
</vbox>
</window>

View File

@@ -1,209 +0,0 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Bob Lord <lord@netscape.com>
* Ian McGreer <mcgreer@netscape.com>
*/
const nsIX509Cert = Components.interfaces.nsIX509Cert;
const nsX509CertDB = "@mozilla.org/security/x509certdb;1";
const nsIX509CertDB = Components.interfaces.nsIX509CertDB;
const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock;
var certdb;
var cert;
function setWindowName()
{
var dbkey = self.name;
// Get the cert from the cert database
certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
//var pkiParams = window.arguments[0].QueryInterface(nsIPKIParamBlock);
//var isupport = pkiParams.getISupportAtIndex(1);
//cert = isupport.QueryInterface(nsIX509Cert);
cert = certdb.getCertByDBKey(dbkey, null);
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var windowReference = document.getElementById('editCaCert');
var message1 = bundle.formatStringFromName("editTrustCA",
[ cert.commonName ],
1);
setText("certmsg", message1);
var ssl = document.getElementById("trustSSL");
if (certdb.getCertTrust(cert, nsIX509Cert.CA_CERT,
nsIX509CertDB.TRUSTED_SSL)) {
ssl.setAttribute("checked", "true");
} else {
ssl.setAttribute("checked", "false");
}
var email = document.getElementById("trustEmail");
if (certdb.getCertTrust(cert, nsIX509Cert.CA_CERT,
nsIX509CertDB.TRUSTED_EMAIL)) {
email.setAttribute("checked", "true");
} else {
email.setAttribute("checked", "false");
}
var objsign = document.getElementById("trustObjSign");
if (certdb.getCertTrust(cert, nsIX509Cert.CA_CERT,
nsIX509CertDB.TRUSTED_OBJSIGN)) {
objsign.setAttribute("checked", "true");
} else {
objsign.setAttribute("checked", "false");
}
var xulWindow = document.getElementById("editCaCert");
var wdth = window.innerWidth; // THIS IS NEEDED,
window.sizeToContent();
xulWindow.setAttribute("width",window.innerWidth + 30);
var hght = window.innerHeight; // THIS IS NEEDED,
window.sizeToContent();
xulWindow.setAttribute("height",window.innerHeight + 70);
}
function doOK()
{
var ssl = document.getElementById("trustSSL");
var email = document.getElementById("trustEmail");
var objsign = document.getElementById("trustObjSign");
var trustssl = (ssl.checked) ? nsIX509CertDB.TRUSTED_SSL : 0;
var trustemail = (email.checked) ? nsIX509CertDB.TRUSTED_EMAIL : 0;
var trustobjsign = (objsign.checked) ? nsIX509CertDB.TRUSTED_OBJSIGN : 0;
//
// Set the cert trust
//
certdb.setCertTrust(cert, nsIX509Cert.CA_CERT,
trustssl | trustemail | trustobjsign);
window.close();
}
function doLoadForSSLCert()
{
var dbkey = self.name;
// Get the cert from the cert database
certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
cert = certdb.getCertByDBKey(dbkey, null);
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var windowReference = document.getElementById('editWebsiteCert');
var message1 = bundle.formatStringFromName("editTrustSSL",
[ cert.commonName ],
1);
setText("certmsg", message1);
setText("issuer", cert.issuerName);
var cacert = getCaCertForServerCert(cert);
if(cacert == null)
{
setText("explainations",bundle.GetStringFromName("issuerNotKnown"));
}
else if(certdb.getCertTrust(cacert, nsIX509Cert.CA_CERT,
nsIX509CertDB.TRUSTED_SSL))
{
setText("explainations",bundle.GetStringFromName("issuerTrusted"));
}
else
{
setText("explainations",bundle.GetStringFromName("issuerNotTrusted"));
}
/*
if(cacert == null)
{
var editButton = document.getElementById('editca-button');
editButton.setAttribute("disabled","true");
}
*/
var trustssl = document.getElementById("trustSSLCert");
var notrustssl = document.getElementById("dontTrustSSLCert");
if (certdb.getCertTrust(cert, nsIX509Cert.SERVER_CERT,
nsIX509CertDB.TRUSTED_SSL)) {
trustssl.radioGroup.selectedItem = trustssl;
} else {
trustssl.radioGroup.selectedItem = notrustssl;
}
var xulWindow = document.getElementById("editWebsiteCert");
var wdth = window.innerWidth; // THIS IS NEEDED,
window.sizeToContent();
xulWindow.setAttribute("width",window.innerWidth + 30);
var hght = window.innerHeight; // THIS IS NEEDED,
window.sizeToContent();
xulWindow.setAttribute("height",window.innerHeight + 70);
}
function doSSLOK()
{
var ssl = document.getElementById("trustSSLCert");
//var checked = ssl.getAttribute("value");
var trustssl = ssl.selected ? nsIX509CertDB.TRUSTED_SSL : 0;
//
// Set the cert trust
//
certdb.setCertTrust(cert, nsIX509Cert.SERVER_CERT, trustssl);
window.close();
}
function editCaTrust()
{
var cacert = getCaCertForServerCert(cert);
if(cacert != null)
{
window.openDialog('chrome://pippki/content/editcacert.xul', cacert.dbKey,
'chrome,resizable=1,modal');
}
else
{
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
alert(bundle.GetStringFromName("issuerCertNotFound"));
}
}
function getCaCertForServerCert(cert)
{
var i=1;
var nextCertInChain;
nextCertInChain = cert;
var lastSubjectName="";
while(true)
{
if(nextCertInChain == null)
{
return null;
}
if((nextCertInChain.type == nsIX509Cert.CA_CERT) ||
(nextCertInChain.subjectName = lastSubjectName))
{
break;
}
lastSubjectName = nextCertInChain.subjectName;
nextCertInChain = nextCertInChain.issuer;
}
return nextCertInChain;
}

View File

@@ -1,71 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Ian McGreer <mcgreer@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/certManager.dtd">
<window id="editWebsiteCert"
title="&certmgr.editsslcert.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="doLoadForSSLCert();"
>
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/pippki.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/editcerts.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<vbox flex="1">
<description id="certmsg"/>
<description id="issuer"/>
<separator/>
<description id="explainations"/>
<separator />
<description>&certmgr.editsslcert.edittrust;</description>
<vbox>
<radiogroup id="sslTrustGroup" flex="1">
<radio label="&certmgr.editsslcert.dotrust;"
id="trustSSLCert"/>
<radio label="&certmgr.editsslcert.donttrust;"
id="dontTrustSSLCert"/>
</radiogroup>
</vbox>
<hbox>
<button id="editca-button" label="&certmgr.editca.label;"
oncommand="editCaTrust();"/>
</hbox>
<hbox>
<button id="ok-button" label="&certmgr.ok.label;"
oncommand="doSSLOK();"/>
<button id="cancel-button" label="&certmgr.cancel.label;"
oncommand="window.close();"/>
<button id="help-button" label="&certmgr.help.label;"
oncommand="openHelp('chrome://help/content/help.xul?edit_web_certs');"/>
</hbox>
</vbox>
</window>

View File

@@ -1,73 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Javier Delgadillo <javi@netscape.com>
*/
const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock;
const nsIX509Cert = Components.interfaces.nsIX509Cert;
var dialogParams;
var pkiParams;
var cert=null;
function onLoad()
{
pkiParams = window.arguments[0].QueryInterface(nsIPKIParamBlock);
dialogParams = pkiParams.QueryInterface(nsIDialogParamBlock);
var isupports = pkiParams.getISupportAtIndex(1);
cert = isupports.QueryInterface(nsIX509Cert);
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var dispName = cert.commonName;
if (dispName == null)
dispName = cert.windowTitle;
var msg = bundle.formatStringFromName("escrowFinalMessage",
[dispName], 1);
setText("message1",msg);
var wdth = window.innerWidth; // THIS IS NEEDED,
window.sizeToContent();
windowReference.setAttribute("width",window.innerWidth + 30);
var hght = window.innerHeight; // THIS IS NEEDED,
window.sizeToContent();
windowReference.setAttribute("height",window.innerHeight + 30);
}
function doOK()
{
dialogParams.SetInt(1,1);
window.close();
}
function doCancel()
{
dialogParams.SetInt(1,0);
window.close();
}
function viewCert()
{
cert.view();
}

View File

@@ -1,62 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
-
- Contributor(s):
- Javier Delgadillo <javi@netscape.com>
- Bob Lord <lord@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/pippki.dtd">
<window id="escrowWarnDialog" title="&escrowWarn.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
width="400"
onload="onLoad();">
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/pippki.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/escrowWarn.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<keyset id="keys">
<key id="enter-key" keycode="VK_ENTER" oncommand="getPassword();"/>
<key id="return-key" keycode="VK_RETURN" oncommand="getPassword();"/>
<key id="esc-key" keycode="VK_ESCAPE" oncommand="window.close();"/>
</keyset>
<vbox style="margin: 5px;" flex="1">
<description>&escrowWarn.message1;</description>
<separator/>
<description>&escrowWarn.benefit1;</description>
<separator/>
<description>&escrowWarn.message2;</description>
<separator/>
<description id="message1"/>
<hbox>
<button id="examineCert-button" label="&examineCert.label;"
oncommand="viewCert();"/>
</hbox>
<separator/>
<hbox>
<button id="ok-button" label="&ok.label;"
oncommand="doOK();"/>
<button id="cancel-button" label="&cancel.label;"
oncommand="doCancel();"/>
<button id="help-button" label="&help.label;"
oncommand="openHelp('chrome://help/content/help.xul?priv_key_copy');"/>
</hbox>
</vbox>
</window>

View File

@@ -1,67 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Terry Hayes <thayes@netscape.com>
- Ian McGreer <mcgreer@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/pippki.dtd">
<window id="getp12password" title="&pkcs12.getpassword.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
height="200"
width="300"
onload="onP12Load();">
<script type="application/x-javascript" src="chrome://pippki/content/password.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<keyset id="keys">
<key id="enter-key" keycode="VK_ENTER" oncommand="getPassword();"/>
<key id="return-key" keycode="VK_RETURN" oncommand="getPassword();"/>
<key id="esc-key" keycode="VK_ESCAPE" oncommand="window.close();"/>
</keyset>
<vbox style="margin: 5px;" flex="1">
<description>&pkcs12.getpassword.message;</description>
<separator />
<grid>
<columns> <column/> <column/> </columns>
<rows>
<row>
<label value="&getPassword.password.label;"/>
<textbox id="pw1" type="password"/>
</row>
</rows>
</grid>
<hbox>
<button id="ok-button" label="&ok.label;"
oncommand="getPassword();"
default="true" accesskey="&createCertInfo.okButtonAccessKey;"/>
<button id="cancel-button" label="&cancel.label;"
oncommand="window.close();"/>
<button id="help-button" label="&help.label;"
oncommand="openHelp('chrome://help/content/help.xul?my_certs');"/>
</hbox>
</vbox>
</window>

View File

@@ -1,72 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Terry Hayes <thayes@netscape.com>
- Ian McGreer <mcgreer@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://pippki/locale/pippki.dtd">
<window id="getpassword" title="&getPassword.title;"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
height="320"
width="300"
onload="onLoad();">
<script type="application/x-javascript" src="chrome://pippki/content/password.js"/>
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<vbox style="margin: 5px;" flex="1">
<hbox>
<text value="&getPassword.tokenName.label;:"/>
<text id="tokenName"/>
</hbox>
<separator/>
<grid>
<columns> <column/> <column/> </columns>
<rows>
<row>
<text value="&getPassword.password.label;"/>
<textbox id="pw1" type="password"/>
</row>
</rows>
</grid>
<keyset id="keys">
<key id="enter-key" keycode="VK_ENTER" oncommand="doOK();"/>
<key id="return-key" keycode="VK_RETURN" oncommand="doOK();"/>
<key id="esc-key" keycode="VK_ESCAPE" oncommand="doCancel();"/>
</keyset>
<hbox>
<button id="ok-button" class="dialog" label="&ok.label;"
oncommand="getPassword();"
default="true" accesskey="&createCertInfo.okButtonAccessKey;"/>
<button id="cancel-button" class="dialog" label="&cancel.label;"
oncommand="window.close();"/>
<button id="help-button" class="dialog" label="&help.label;"
oncommand="alert('help goes here');"/>
</hbox>
</vbox>
</window>

View File

@@ -1,62 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is mozilla.org code.
-
- The Initial Developer of the Original Code is Netscape
- Communications Corp. Portions created by Netscape are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
- Bob Lord <lord@netscape.com>
- Ian McGreer <mcgreer@netscape.com>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window [
<!ENTITY % deviceManangerDTD SYSTEM "chrome://pippki/locale/deviceManager.dtd">
%deviceManangerDTD;
<!ENTITY % pippkiDTD SYSTEM "chrome://pippki/locale/pippki.dtd" >
%pippkiDTD;
]>
<window id="loaddevice"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&loaddevice.title;">
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/device_manager.js"/>
<vbox>
<description>&loaddevice.info;</description>
<hbox>
<label value="&loaddevice.modname;"/>
<textbox id="device_name" flex="1" value="&loaddevice.modname.default;"/>
</hbox>
<hbox>
<label value="&loaddevice.filename;"/>
<textbox id="device_path" flex="1"/>
<button label="&loaddevice.browse;" flex="1" oncommand="doBrowseFiles();"/>
</hbox>
<hbox>
<button id="ok_button"
label="&ok.label;"
oncommand="doLoadDevice();"/>
<button id="cancel_button"
label="&cancel.label;"
oncommand="window.close();"/>
</hbox>
</vbox>
</window>

View File

@@ -1,103 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Javier Delgadillo <javi@netscape.com>
* Håkan Waara <hwaara@chello.se>
*/
const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock;
const nsIX509Cert = Components.interfaces.nsIX509Cert;
var dialogParams;
var pkiParams;
var cert;
function onLoad()
{
doSetOKCancel(doOK, doCancel, doHelpButton);
pkiParams = window.arguments[0].QueryInterface(nsIPKIParamBlock);
dialogParams = pkiParams.QueryInterface(nsIDialogParamBlock);
var isupport = pkiParams.getISupportAtIndex(1);
cert = isupport.QueryInterface(nsIX509Cert);
var bundle = srGetStrBundle("chrome://pippki/locale/newserver.properties");
var gBundleBrand = srGetStrBundle("chrome://global/locale/brand.properties");
var brandName = gBundleBrand.GetStringFromName("brandShortName");
var continueButton = bundle.GetStringFromName("continueButton");
document.getElementById("ok").label = continueButton;
var message =
bundle.formatStringFromName("newServerMessage",
[cert.commonName],
1);
var notRecognized =
bundle.formatStringFromName("certNotRecognized",
[brandName],
1);
setText("message", message);
setText("notRecognized", notRecognized);
var windowReference = document.getElementById('ssl_warning');
var wdth = window.innerWidth; // THIS IS NEEDED,
window.sizeToContent();
windowReference.setAttribute("width",window.innerWidth + 30);
var hght = window.innerHeight; // THIS IS NEEDED,
window.sizeToContent();
windowReference.setAttribute("height",window.innerHeight + 40);
}
function doHelpButton()
{
openHelp('chrome://help/content/help.xul?new_web_cert');
}
function doOK()
{
// the user pressed OK
dialogParams.SetInt(1,1);
var checkbox = document.getElementById("alwaysAccept");
// 0 = accept perm, 1 = accept for this session - just the opposite
// of the checkbox value.
dialogParams.SetInt(2, !checkbox.checked);
window.close();
}
function doCancel()
{
// the user pressed cancel
dialogParams.SetInt(1,0);
window.close();
}
function viewCert()
{
cert.view();
}

View File

@@ -1,68 +0,0 @@
<?xml version="1.0"?>
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
-
- Contributor(s):
- Javier Delgadillo <javi@netscape.com>
- Bob Lord <lord@netscape.com>
- Håkan Waara <hwaara@chello.se>
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window [
<!ENTITY % newserverDTD SYSTEM "chrome://pippki/locale/newserver.dtd" >
%newserverDTD;
<!ENTITY % pippkiDTD SYSTEM "chrome://pippki/locale/pippki.dtd" >
%pippkiDTD;
]>
<?xul-overlay href="chrome://global/content/dialogOverlay.xul"?>
<window id="ssl_warning" title="&newserver.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
style="width: 30em; height: 16em"
class="dialog"
onload="onLoad();">
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/pippki.js"/>
<script type="application/x-javascript" src="chrome://pippki/content/newserver.js"/>
<script type="application/x-javascript" src="chrome://help/content/help.js"/>
<keyset id="dialogKeys"/>
<vbox flex="1">
<hbox valign="top" align="center">
<image class="alert-icon" style="margin: 5px"/>
<vbox flex="1" valign="middle">
<description id="message"/>
<separator class="thin"/>
<description id="notRecognized"/>
<separator/>
<vbox flex="1" align="start">
<button id="examineCert-button" label="&examineCert.label;"
oncommand="viewCert();"/>
</vbox>
<checkbox id="alwaysAccept" label="&alwaysAccept.label;"/>
</vbox>
</hbox>
<hbox id="okCancelHelpButtonsRight" flex="1"/>
</vbox>
</window>

View File

@@ -1,311 +0,0 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Bob Lord <lord@netscape.com>
* Terry Hayes <thayes@netscape.com>
*/
const nsPK11TokenDB = "@mozilla.org/security/pk11tokendb;1";
const nsIPK11TokenDB = Components.interfaces.nsIPK11TokenDB;
const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
const nsPKCS11ModuleDB = "@mozilla.org/security/pkcs11moduledb;1";
const nsIPKCS11ModuleDB = Components.interfaces.nsIPKCS11ModuleDB;
const nsIPKCS11Slot = Components.interfaces.nsIPKCS11Slot;
const nsIPK11Token = Components.interfaces.nsIPK11Token;
var params;
var tokenName="";
var pw1;
function onLoad()
{
pw1 = document.getElementById("pw1");
try {
params = window.arguments[0].QueryInterface(nsIDialogParamBlock);
tokenName = params.GetString(1);
}catch(exception)
{tokenName = self.name;}
if(tokenName=="" || tokenName=="_blank") {
var sectokdb = Components.classes[nsPK11TokenDB].getService(nsIPK11TokenDB);
var tokenList = sectokdb.listTokens();
var enumElement;
i=0;
var menu = document.getElementById("tokenMenu");
try {
for ( ; !tokenList.isDone(); tokenList.next()) {
enumElement = tokenList.currentItem();
var token = enumElement.QueryInterface(nsIPK11Token);
if(token.needsLogin() || !(token.needsUserInit)) {
var menuItemNode = document.createElement("menuitem");
menuItemNode.setAttribute("value", token.tokenName);
menuItemNode.setAttribute("label", token.tokenName);
menu.firstChild.appendChild(menuItemNode);
if (i == 0) {
menu.selectedItem = menuItemNode;
tokenName = token.tokenName;
}
i++;
}
}
}catch(exception){}
} else {
var sel = document.getElementById("tokenMenu");
sel.setAttribute("hidden", "true");
var tag = document.getElementById("tokenName");
tag.setAttribute("value",tokenName);
}
process();
}
function onMenuChange()
{
//get the selected token
var list = document.getElementById("tokenMenu");
tokenName = list.value;
process();
}
function process()
{
var secmoddb = Components.classes[nsPKCS11ModuleDB].getService(nsIPKCS11ModuleDB);
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
// If the token is unitialized, don't use the old password box.
// Otherwise, do.
var slot = secmoddb.findSlotByName(tokenName);
if (slot) {
var oldpwbox = document.getElementById("oldpw");
var msgBox = document.getElementById("message");
var status = slot.status;
if (status == nsIPKCS11Slot.SLOT_UNINITIALIZED
|| status == nsIPKCS11Slot.SLOT_READY) {
oldpwbox.setAttribute("hidden", "true");
msgBox.setAttribute("value", bundle.GetStringFromName("password_not_set"));
msgBox.setAttribute("hidden", "false");
if (status == nsIPKCS11Slot.SLOT_READY) {
oldpwbox.setAttribute("inited", "empty");
} else {
oldpwbox.setAttribute("inited", "true");
}
// Select first password field
document.getElementById('pw1').focus();
} else {
// Select old password field
oldpwbox.setAttribute("hidden", "false");
msgBox.setAttribute("hidden", "true");
oldpwbox.setAttribute("inited", "false");
oldpwbox.focus();
}
}
if (params) {
// Return value 0 means "canceled"
params.SetInt(1, 0);
}
checkPasswords();
}
function onP12Load()
{
pw1 = document.getElementById("pw1");
params = window.arguments[0].QueryInterface(nsIDialogParamBlock);
// Select first password field
document.getElementById('pw1').focus();
}
function setPassword()
{
var pk11db = Components.classes[nsPK11TokenDB].getService(nsIPK11TokenDB);
var token = pk11db.findTokenByName(tokenName);
var oldpwbox = document.getElementById("oldpw");
var initpw = oldpwbox.getAttribute("inited");
var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
var success = false;
if (initpw == "false" || initpw == "empty") {
try {
var oldpw = "";
var passok = 0;
if (initpw == "empty") {
passok = 1;
} else {
oldpw = oldpwbox.value;
passok = token.checkPassword(oldpw);
}
if (passok) {
if (initpw == "empty" && pw1.value == "") {
// This makes no sense that we arrive here,
// we reached a case that should have been prevented by checkPasswords.
} else {
token.changePassword(oldpw, pw1.value);
if (pw1.value == "") {
alert(bundle.GetStringFromName("pw_erased_ok")
+ " "
+ bundle.GetStringFromName("pw_empty_warning"));
} else {
alert(bundle.GetStringFromName("pw_change_ok"));
}
}
success = true;
} else {
oldpwbox.focus();
oldpwbox.setAttribute("value", "");
alert(bundle.GetStringFromName("incorrect_pw"));
}
} catch (e) {
alert(bundle.GetStringFromName("failed_pw_change"));
}
} else {
token.initPassword(pw1.value);
if (pw1.value == "") {
alert(bundle.GetStringFromName("pw_not_wanted")
+ " "
+ bundle.GetStringFromName("pw_empty_warning"));
}
success = true;
}
// Terminate dialog
if (success) {
if (params) {
// Return value 1 means "successfully executed ok"
params.SetInt(1, 1);
}
window.close();
}
}
function getPassword()
{
// grab what was entered
params.SetString(2, pw1.value);
// Return value
params.SetInt(1, 1);
// Terminate dialog
window.close();
}
function setP12Password()
{
// grab what was entered
params.SetString(2, pw1.value);
// Return value
params.SetInt(1, 1);
// Terminate dialog
window.close();
}
function setPasswordStrength()
{
// Here is how we weigh the quality of the password
// number of characters
// numbers
// non-alpha-numeric chars
// upper and lower case characters
var pw=document.getElementById('pw1').value;
// alert("password='" + pw +"'");
//length of the password
var pwlength=(pw.length);
if (pwlength>5)
pwlength=5;
//use of numbers in the password
var numnumeric = pw.replace (/[0-9]/g, "");
var numeric=(pw.length - numnumeric.length);
if (numeric>3)
numeric=3;
//use of symbols in the password
var symbols = pw.replace (/\W/g, "");
var numsymbols=(pw.length - symbols.length);
if (numsymbols>3)
numsymbols=3;
//use of uppercase in the password
var numupper = pw.replace (/[A-Z]/g, "");
var upper=(pw.length - numupper.length);
if (upper>3)
upper=3;
var pwstrength=((pwlength*10)-20) + (numeric*10) + (numsymbols*15) + (upper*10);
// make sure we're give a value between 0 and 100
if ( pwstrength < 0 ) {
pwstrength = 0;
}
if ( pwstrength > 100 ) {
pwstrength = 100;
}
var mymeter=document.getElementById('pwmeter');
mymeter.setAttribute("value",pwstrength);
return;
}
function checkPasswords()
{
var pw1=document.getElementById('pw1').value;
var pw2=document.getElementById('pw2').value;
var ok=document.getElementById('ok-button');
var oldpwbox = document.getElementById("oldpw");
if (oldpwbox) {
var initpw = oldpwbox.getAttribute("inited");
if (initpw == "empty" && pw1 == "") {
// The token has already been initialized, therefore this dialog
// was called with the intention to change the password.
// The token currently uses an empty password.
// We will not allow changing the password from empty to empty.
ok.setAttribute("disabled","true");
return;
}
}
if (pw1 == pw2){
ok.setAttribute("disabled","false");
} else
{
ok.setAttribute("disabled","true");
}
}

Some files were not shown because too many files have changed in this diff Show More