nsresult JNICALL EmbedEventListener::takeActionOnNode(nsCOMPtr<nsIDOMNode> currentNode, void *myObject) { nsresult rv = NS_OK; nsString nodeInfo, nodeName, nodeValue; //, nodeDepth; jstring jNodeName, jNodeValue; PRUint32 depth = 0; EmbedEventListener *curThis = nsnull; //const PRUint32 depthStrLen = 20; // char depthStr[depthStrLen]; JNIEnv *env = (JNIEnv *) JNU_GetEnv(gVm, JNI_VERSION); PR_ASSERT(nsnull != myObject); curThis = (EmbedEventListener *) myObject; depth = curThis->mInverseDepth++; if (!(curThis->mProperties)) { return rv; } // encode the depth of the node // PR_snprintf(depthStr, depthStrLen, "depthFromLeaf:%d", depth); // nodeDepth = (const char *) depthStr; // Store the name and the value of this node { // get the name and prepend the depth rv = currentNode->GetNodeName(nodeInfo); if (NS_FAILED(rv)) { return rv; } // nodeName = nodeDepth; // nodeName += nodeInfo; nodeName = nodeInfo; if (prLogModuleInfo) { char * nodeInfoCStr = ToNewCString(nodeName); PR_LOG(prLogModuleInfo, 4, ("%s", nodeInfoCStr)); nsMemory::Free(nodeInfoCStr); } rv = currentNode->GetNodeValue(nodeInfo); if (NS_FAILED(rv)) { return rv; } // nodeValue = nodeDepth; // nodeValue += nodeInfo; nodeValue = nodeInfo; if (prLogModuleInfo) { char * nodeInfoCStr = ToNewCString(nodeName); PR_LOG(prLogModuleInfo, 4, ("%s", (const char *)nodeInfoCStr)); nsMemory::Free(nodeInfoCStr); } jNodeName = ::util_NewString(env, nodeName.get(), nodeName.Length()); jNodeValue = ::util_NewString(env, nodeValue.get(), nodeValue.Length()); util_StoreIntoPropertiesObject(env, (jobject) curThis->mProperties, (jobject) jNodeName, (jobject) jNodeValue, (jobject) &(curThis->mOwner->GetWrapperFactory()->shareContext)); if (jNodeName) { ::util_DeleteString(env, jNodeName); } if (jNodeValue) { ::util_DeleteString(env, jNodeValue); } } // end of Storing the name and value of this node // store any attributes of this node { nsCOMPtr<nsIDOMNamedNodeMap> nodeMap; rv = currentNode->GetAttributes(getter_AddRefs(nodeMap)); if (NS_FAILED(rv) || !nodeMap) { return rv; } PRUint32 length, i; rv = nodeMap->GetLength(&length); if (NS_FAILED(rv)) { return rv; } for (i = 0; i < length; i++) { rv = nodeMap->Item(i, getter_AddRefs(currentNode)); if (nsnull == currentNode) { return rv; } rv = currentNode->GetNodeName(nodeInfo); if (NS_FAILED(rv)) { return rv; } // nodeName = nodeDepth; // nodeName += nodeInfo; nodeName = nodeInfo; if (prLogModuleInfo) { char * nodeInfoCStr = ToNewCString(nodeName); PR_LOG(prLogModuleInfo, 4, ("attribute[%d], %s", i, (const char *)nodeInfoCStr)); nsMemory::Free(nodeInfoCStr); } rv = currentNode->GetNodeValue(nodeInfo); if (NS_FAILED(rv)) { return rv; } // nodeValue = nodeDepth; // nodeValue += nodeInfo; nodeValue = nodeInfo; if (prLogModuleInfo) { char * nodeInfoCStr = ToNewCString(nodeName); PR_LOG(prLogModuleInfo, 4, ("attribute[%d] %s", i,(const char *)nodeInfoCStr)); nsMemory::Free(nodeInfoCStr); } jNodeName = ::util_NewString(env, nodeName.get(), nodeName.Length()); jNodeValue = ::util_NewString(env, nodeValue.get(), nodeValue.Length()); util_StoreIntoPropertiesObject(env, (jobject) curThis->mProperties, (jobject) jNodeName, (jobject) jNodeValue, (jobject) &(curThis->mOwner->GetWrapperFactory()->shareContext)); if (jNodeName) { ::util_DeleteString(env, jNodeName); } if (jNodeValue) { ::util_DeleteString(env, jNodeValue); } } } // end of storing the attributes return rv; }