static JSDContextWrapper* _jsd_JSDContextWrapperForJSContext(JSDContext* jsdc, JSContext* context) { JSDContextWrapper* w = NULL; JSD_LOCK(); w = (JSDContextWrapper*) PR_HashTableLookup(jsdc->jscontexts, context); JSD_UNLOCK(); return w; }
NSAPI_PUBLIC int ACL_AttrGetterFind(NSErr_t *errp, const char *attr, ACLAttrGetterList_t *getters) { *getters = PR_HashTableLookup(ACLAttrGetterHash, attr); if (*getters) return 0; else return -1; }
JSDContext* jsd_JSDContextForJSContext(JSContext* context) { JSDContext* iter; JSDContext* jsdc = NULL; JSD_LOCK(); for( iter = (JSDContext*)_jsd_context_list.next; iter != (JSDContext*)&_jsd_context_list; iter = (JSDContext*)iter->links.next ) { if( PR_HashTableLookup(iter->jscontexts, context) ) { jsdc = iter; break; } } JSD_UNLOCK(); return jsdc; }
Assertion ldaparg1 (RDF_Resource u) { return (Assertion) PR_HashTableLookup(ldap2rdfHash, u); }
/* this calls MozillaEmbedContext to reflect the embed by * calling into mocha... yow! */ static JSObject * lm_ReallyReflectEmbed(MWContext *context, LO_EmbedStruct *lo_embed, int32 layer_id, uint32 index) { JSObject *obj; MochaDecoder *decoder; JSContext *cx; jref jembed; NPEmbeddedApp* embed; lo_TopState *top_state; PRHashTable *map; PR_LOG(Moja, debug, ("really reflect embed 0x%x\n", lo_embed)); if ((obj = lo_embed->mocha_object) != NULL) 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_EMBEDS, layer_id, index)); if (obj) { lo_embed->mocha_object = obj; return obj; } } /* set the element to something bad if we can't get the java obj */ if (!JSJ_IsEnabled()) { PR_LOG(Moja, debug, ("reflected embed 0x%x as null\n", lo_embed)); return lo_embed->mocha_object = lm_DummyObject; } embed = (NPEmbeddedApp*) lo_embed->FE_Data; if (embed) { np_data *ndata = (np_data*) embed->np_data; np_instance *instance; /* XXX this comes from npglue.c, it should be put * in one of the plugin header files */ extern jref npn_getJavaPeer(NPP npp); if (!ndata || ndata->state == NPDataSaved) { PR_LOG(Moja, warn, ("embed 0x%x is missing or suspended\n", lo_embed)); return NULL; } instance = ndata->instance; if (!instance) return NULL; jembed = npn_getJavaPeer(instance->npp); obj = js_ReflectJObjectToJSObject(decoder->js_context, (HObject *)jembed); PR_LOG(Moja, debug, ("reflected embed 0x%x (java 0x%x) to 0x%x ok\n", lo_embed, jembed, obj)); map = lm_GetIdToObjectMap(decoder); if (map) PR_HashTableAdd(map, LM_GET_MAPPING_KEY(LM_EMBEDS, layer_id, index), obj); return lo_embed->mocha_object = obj; } else { PR_LOG(Moja, warn, ("failed to reflect embed 0x%x\n", lo_embed)); return NULL; } }
JSObject * LM_ReflectNamedAnchor(MWContext *context, lo_NameList *name_rec, PA_Tag * tag, int32 layer_id, uint index) { JSObject *obj, *array_obj, *document; MochaDecoder *decoder; JSContext *cx; JSObjectArray *array; JSAnchor *named_anchor; lo_TopState *top_state; PRHashTable *map; JSString *str; obj = name_rec->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_NAMEDANCHORS, layer_id, index)); if (obj) { name_rec->mocha_object = obj; LM_PutMochaDecoder(decoder); return obj; } } /* Get the document object that will hold this anchor */ document = lm_GetDocumentFromLayerId(decoder, layer_id); if (!document) { LM_PutMochaDecoder(decoder); return NULL; } array_obj = lm_GetNameArray(decoder, document); if (!array_obj) { LM_PutMochaDecoder(decoder); return NULL; } array = JS_GetPrivate(cx, array_obj); if (!array) { LM_PutMochaDecoder(decoder); return NULL; } named_anchor = JS_malloc(cx, sizeof *named_anchor); if (!named_anchor) { LM_PutMochaDecoder(decoder); return NULL; } XP_BZERO(named_anchor, sizeof *named_anchor); obj = JS_NewObject(cx, &lm_anchor_class, decoder->anchor_prototype, document); if (!obj || !JS_SetPrivate(cx, obj, named_anchor)) { JS_free(cx, named_anchor); LM_PutMochaDecoder(decoder); return NULL; } /* Put obj into the document.anchors array. */ JS_DefineProperty(cx, array_obj, (char *) name_rec->name, OBJECT_TO_JSVAL(obj), NULL, NULL, JSPROP_ENUMERATE|JSPROP_READONLY); JS_AliasElement(cx, array_obj, (char *) name_rec->name, index); /* Put it in the index to object hash table */ map = lm_GetIdToObjectMap(decoder); if (map) { PR_HashTableAdd(map, LM_GET_MAPPING_KEY(LM_NAMEDANCHORS, layer_id, index), obj); } if ((jsint) index >= array->length) array->length = index + 1; named_anchor->decoder = HOLD_BACK_COUNT(decoder); named_anchor->layer_id = layer_id; named_anchor->index = index; if (name_rec->element && name_rec->element->type == LO_TEXT) { str = lm_LocalEncodingToStr(context, (char *) name_rec->element->lo_text.text); if (!str || !JS_LockGCThing(cx, str)) { LM_PutMochaDecoder(decoder); return NULL; } named_anchor->text = str; } str = JS_NewStringCopyZ(cx, (char *) name_rec->name); if (!str || !JS_LockGCThing(cx, str)) { LM_PutMochaDecoder(decoder); return NULL; } named_anchor->name = str; name_rec->mocha_object = obj; /* see if there are any attributes for event handlers */ if(tag) { PA_Block onlocate, id; /* don't hold the layout lock across compiles */ LO_UnlockLayout(); onlocate = lo_FetchParamValue(context, tag, PARAM_ONLOCATE); id = lo_FetchParamValue(context, tag, PARAM_ID); if (onlocate) { (void) lm_CompileEventHandler(decoder, id, tag->data, tag->newline_count, obj, PARAM_ONLOCATE, onlocate); PA_FREE(onlocate); } if (id) PA_FREE(id); LO_LockLayout(); } LM_PutMochaDecoder(decoder); return obj; }
JSObject * LM_ReflectLink(MWContext *context, LO_AnchorData *anchor_data, PA_Tag * tag, int32 layer_id, uint index) { JSObject *obj, *array_obj, *document; MochaDecoder *decoder; JSContext *cx; JSURL *url; lo_TopState *top_state; PRHashTable *map; anchor_data = LO_GetLinkByIndex(context, layer_id, index); if (!anchor_data) return NULL; obj = anchor_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_LINKS, layer_id, index)); if (obj) { anchor_data->mocha_object = obj; LM_PutMochaDecoder(decoder); return obj; } } /* Get the document object that will hold this link */ document = lm_GetDocumentFromLayerId(decoder, layer_id); if (!document) { LM_PutMochaDecoder(decoder); return NULL; } array_obj = lm_GetLinkArray(decoder, document); if (!array_obj) { LM_PutMochaDecoder(decoder); return NULL; } url = lm_NewURL(cx, decoder, anchor_data, document); if (!url) { LM_PutMochaDecoder(decoder); return NULL; } url->index = index; url->layer_id = layer_id; obj = url->url_object; /* XXX should find a name/id to pass in */ /* put it in the links array */ if (!lm_AddObjectToArray(cx, array_obj, NULL, index, obj)) { LM_PutMochaDecoder(decoder); return NULL; } /* Put it in the index to object hash table */ map = lm_GetIdToObjectMap(decoder); if (map) PR_HashTableAdd(map, LM_GET_MAPPING_KEY(LM_LINKS, layer_id, index), obj); anchor_data->mocha_object = obj; LM_PutMochaDecoder(decoder); /* see if there are any event handlers we need to reflect */ if(tag) { PA_Block onclick, onmouseover, onmouseout, onmousedown, onmouseup, ondblclick, id; /* don't hold the layout lock across compiles */ LO_UnlockLayout(); onclick = lo_FetchParamValue(context, tag, PARAM_ONCLICK); onmouseover = lo_FetchParamValue(context, tag, PARAM_ONMOUSEOVER); onmouseout = lo_FetchParamValue(context, tag, PARAM_ONMOUSEOUT); onmousedown = lo_FetchParamValue(context, tag, PARAM_ONMOUSEDOWN); onmouseup = lo_FetchParamValue(context, tag, PARAM_ONMOUSEUP); ondblclick = lo_FetchParamValue(context, tag, PARAM_ONDBLCLICK); id = lo_FetchParamValue(context, tag, PARAM_ID); if (onclick) { (void) lm_CompileEventHandler(decoder, id, tag->data, tag->newline_count, url->url_object, PARAM_ONCLICK, onclick); PA_FREE(onclick); anchor_data->event_handler_present = TRUE; } if (onmouseover) { (void) lm_CompileEventHandler(decoder, id, tag->data, tag->newline_count, url->url_object, PARAM_ONMOUSEOVER, onmouseover); PA_FREE(onmouseover); anchor_data->event_handler_present = TRUE; } if (onmouseout) { (void) lm_CompileEventHandler(decoder, id, tag->data, tag->newline_count, url->url_object, PARAM_ONMOUSEOUT, onmouseout); PA_FREE(onmouseout); anchor_data->event_handler_present = TRUE; } if (onmousedown) { (void) lm_CompileEventHandler(decoder, id, tag->data, tag->newline_count, url->url_object, PARAM_ONMOUSEDOWN, onmousedown); PA_FREE(onmousedown); anchor_data->event_handler_present = TRUE; } if (onmouseup) { (void) lm_CompileEventHandler(decoder, id, tag->data, tag->newline_count, url->url_object, PARAM_ONMOUSEUP, onmouseup); PA_FREE(onmouseup); anchor_data->event_handler_present = TRUE; } if (ondblclick) { (void) lm_CompileEventHandler(decoder, id, tag->data, tag->newline_count, url->url_object, PARAM_ONDBLCLICK, ondblclick); PA_FREE(ondblclick); anchor_data->event_handler_present = TRUE; } if (id) PA_FREE(id); LO_LockLayout(); } return obj; }