mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 12:25:53 +00:00
Complete the thread safety changes. Ready to attempt alpha 6 release again.
M logging.properties - Do not append. Create a new file each time. - Do not specify a limit. M dom/classes/org/mozilla/dom/AttrImpl.java M dom/classes/org/mozilla/dom/CharacterDataImpl.java M dom/classes/org/mozilla/dom/DOMAccessor.java M dom/classes/org/mozilla/dom/DOMImplementationImpl.java M dom/classes/org/mozilla/dom/DocumentImpl.java M dom/classes/org/mozilla/dom/DocumentTypeImpl.java M dom/classes/org/mozilla/dom/ElementImpl.java M dom/classes/org/mozilla/dom/EntityImpl.java M dom/classes/org/mozilla/dom/NamedNodeMapImpl.java M dom/classes/org/mozilla/dom/NodeImpl.java M dom/classes/org/mozilla/dom/NodeListImpl.java M dom/classes/org/mozilla/dom/NotationImpl.java M dom/classes/org/mozilla/dom/ProcessingInstructionImpl.java M dom/classes/org/mozilla/dom/events/EventImpl.java M dom/classes/org/mozilla/dom/events/MouseEventImpl.java M dom/classes/org/mozilla/dom/events/UIEventImpl.java - Use the new ReturnRunnable and RunnableRunner mechanism to ensure all DOM calls happen on the NativeEventThread M dom/jni/org_mozilla_dom_DocumentImpl.cpp - If the element is not found, make sure the exception thrown is a DOM Exception. M webclient/build-tests.xml - pass a test browser url. M webclient/classes_spec/org/mozilla/mcp/MCP.java - Use the CountDownLatch instead of wait/notify M webclient/classes_spec/org/mozilla/webclient/impl/WrapperFactory.java - public int loadNativeLibraryIfNecessary(); + public int loadNativeLibrariesIfNecessary(); M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java - Fix error in log string M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/NativeEventThread.java - Clean up log messages a bit. - Use CountDownLatch instead of wait/notify for synchronization M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImpl.java
This commit is contained in:
parent
0580605f63
commit
94ae7a6a49
@ -26,28 +26,72 @@ import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.TypeInfo;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
|
||||
public class AttrImpl extends NodeImpl implements Attr {
|
||||
|
||||
// instantiated from JNI or Document.createAttribute()
|
||||
private AttrImpl() {}
|
||||
|
||||
public String getName() {
|
||||
return nativeGetName();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
|
||||
return nativeGetName();
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMAccessor.register";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
native String nativeGetName();
|
||||
|
||||
public boolean getSpecified() {
|
||||
return nativeGetSpecified();
|
||||
Boolean boolResult = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return new Boolean(nativeGetSpecified());
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMAccessor.register";
|
||||
}
|
||||
});
|
||||
return boolResult.booleanValue();
|
||||
}
|
||||
native boolean nativeGetSpecified();
|
||||
|
||||
public String getValue() {
|
||||
return nativeGetValue();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetValue();
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMAccessor.register";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
native String nativeGetValue();
|
||||
|
||||
public void setValue(String value) {
|
||||
nativeSetValue(value);
|
||||
final String finalValue = value;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeSetValue(finalValue);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "Attr.setValue";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
native void nativeSetValue(String value);
|
||||
|
||||
@ -57,7 +101,17 @@ public class AttrImpl extends NodeImpl implements Attr {
|
||||
* @since DOM Level 2
|
||||
*/
|
||||
public Element getOwnerElement() {
|
||||
return nativeGetOwnerElement();
|
||||
Element result = (Element)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetOwnerElement();
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMAccessor.register";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
native Element nativeGetOwnerElement();
|
||||
|
||||
|
@ -23,49 +23,147 @@ package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.CharacterData;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
|
||||
public class CharacterDataImpl extends NodeImpl implements CharacterData {
|
||||
|
||||
// instantiated from JNI only
|
||||
protected CharacterDataImpl() {}
|
||||
|
||||
public void appendData(String arg) {
|
||||
nativeAppendData(arg);
|
||||
final String finalArg = arg;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeAppendData(finalArg);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "CharacterData.appendData";
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
native void nativeAppendData(String arg);
|
||||
|
||||
public void deleteData(int offset, int count) {
|
||||
nativeDeleteData(offset, count);
|
||||
final int finalOffset = offset;
|
||||
final int finalCount = count;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeDeleteData(finalOffset, finalCount);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "CharacterData.deleteData";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
native void nativeDeleteData(int offset, int count);
|
||||
|
||||
|
||||
public String getData() {
|
||||
return nativeGetData();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetData();
|
||||
}
|
||||
public String toString() {
|
||||
return "CharacterData.getData";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
native String nativeGetData();
|
||||
|
||||
public int getLength() {
|
||||
return nativeGetLength();
|
||||
int result;
|
||||
Integer integerResult = (Integer)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetLength();
|
||||
}
|
||||
public String toString() {
|
||||
return "CharacterData.getLength";
|
||||
}
|
||||
});
|
||||
result = integerResult.intValue();
|
||||
return result;
|
||||
}
|
||||
native int nativeGetLength();
|
||||
|
||||
public void insertData(int offset, String arg) {
|
||||
nativeInsertData(offset, arg);
|
||||
final int finalOffset = offset;
|
||||
final String finalArg = arg;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeInsertData(finalOffset, finalArg);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "CharacterData.insertData";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
native void nativeInsertData(int offset, String arg);
|
||||
|
||||
public void replaceData(int offset, int count, String arg) {
|
||||
nativeReplaceData(offset, count, arg);
|
||||
final int finalOffset = offset;
|
||||
final int finalCount = count;
|
||||
final String finalArg = arg;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeReplaceData(finalOffset, finalCount, finalArg);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "CharacterData.replaceData";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
native void nativeReplaceData(int offset, int count, String arg);
|
||||
|
||||
public void setData(String data) {
|
||||
nativeSetData(data);
|
||||
final String finalData = data;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeSetData(finalData);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "CharacterData.setData";
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
native void nativeSetData(String data);
|
||||
|
||||
public String substringData(int offset, int count) {
|
||||
return nativeSubstringData(offset, count);
|
||||
final int finalOffset = offset;
|
||||
final int finalCount = count;
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeSubstringData(finalOffset, finalCount);
|
||||
}
|
||||
public String toString() {
|
||||
return "CharacterData.substringData";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeSubstringData(int offset, int count);
|
||||
}
|
||||
|
@ -134,9 +134,6 @@ public final class DOMAccessor {
|
||||
}
|
||||
|
||||
private void DOMAccessorImpl() {
|
||||
if (null == runnableRunner) {
|
||||
runnableRunner = new SameThreadRunnableRunner();
|
||||
}
|
||||
}
|
||||
|
||||
public static void setRunner(RunnableRunner runner) {
|
||||
@ -144,31 +141,84 @@ public final class DOMAccessor {
|
||||
}
|
||||
|
||||
public static RunnableRunner getRunner() {
|
||||
if (null == runnableRunner) {
|
||||
runnableRunner = new SameThreadRunnableRunner();
|
||||
}
|
||||
return runnableRunner;
|
||||
}
|
||||
|
||||
private static void register() {
|
||||
nativeRegister();
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeRegister();
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMAccessor.register";
|
||||
}
|
||||
});
|
||||
}
|
||||
private static native void nativeRegister();
|
||||
|
||||
private static void unregister() {
|
||||
nativeUnregister();
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeUnregister();
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMAccessor.register";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
private static native void nativeUnregister();
|
||||
|
||||
public static Node getNodeByHandle(long p) {
|
||||
return nativeGetNodeByHandle(p);
|
||||
final long finalP = p;
|
||||
Node result = (Node) DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetNodeByHandle(finalP);
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMAccessor.register";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
static native Node nativeGetNodeByHandle(long p);
|
||||
|
||||
private static void doGC() {
|
||||
nativeDoGC();
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeDoGC();
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMAccessor.register";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
private static native void nativeDoGC();
|
||||
|
||||
public static void initialize() {
|
||||
nativeInitialize();
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeInitialize();
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMAccessor.register";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
public static native void nativeInitialize();
|
||||
|
||||
@ -280,7 +330,7 @@ class SameThreadRunnableRunner implements RunnableRunner {
|
||||
}
|
||||
|
||||
public Object pushBlockingReturnRunnable(ReturnRunnable toInvoke) throws RuntimeException {
|
||||
toInvoke.run();
|
||||
toInvoke.setResult(toInvoke.run());
|
||||
return toInvoke.getResult();
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,8 @@ import org.w3c.dom.Document;
|
||||
import org.w3c.dom.DocumentType;
|
||||
import org.w3c.dom.DOMException;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
|
||||
public class DOMImplementationImpl implements DOMImplementation {
|
||||
|
||||
private long p_nsIDOMDOMImplementation = 0;
|
||||
@ -45,34 +47,112 @@ public class DOMImplementationImpl implements DOMImplementation {
|
||||
}
|
||||
|
||||
public boolean hasFeature(String feature, String version) {
|
||||
return nativeHasFeature(feature, version);
|
||||
final String finalFeature = feature;
|
||||
final String finalVersion = version;
|
||||
Boolean bool = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult =
|
||||
nativeHasFeature(finalFeature, finalVersion);
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMImplementation.hasFeature";
|
||||
}
|
||||
});
|
||||
return bool.booleanValue();
|
||||
|
||||
}
|
||||
native boolean nativeHasFeature(String feature, String version);
|
||||
|
||||
protected void finalize() {
|
||||
nativeFinalize();
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeFinalize();
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMImplementation.finalize";
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected native void nativeFinalize();
|
||||
|
||||
private boolean XPCOM_equals(Object o) {
|
||||
return nativeXPCOM_equals(o);
|
||||
final Object finalO = o;
|
||||
Boolean bool = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult = nativeXPCOM_equals(finalO);
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMImplementation.XPCOM_equals";
|
||||
}
|
||||
});
|
||||
return bool.booleanValue();
|
||||
|
||||
}
|
||||
native boolean nativeXPCOM_equals(Object o);
|
||||
|
||||
private int XPCOM_hashCode() {
|
||||
return nativeXPCOM_hashCode();
|
||||
Integer result = (Integer)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
int intResult = nativeXPCOM_hashCode();
|
||||
return Integer.valueOf(intResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMImplementation.XPCOM_hashCode";
|
||||
}
|
||||
});
|
||||
return result.intValue();
|
||||
|
||||
}
|
||||
private native int nativeXPCOM_hashCode();
|
||||
|
||||
//since DOM2
|
||||
public DocumentType createDocumentType(String qualifiedName, String publicID, String systemID) {
|
||||
return nativeCreateDocumentType(qualifiedName, publicID, systemID);
|
||||
final String finalQualifiedName = qualifiedName;
|
||||
final String finalPublicID = publicID;
|
||||
final String finalSystemID = systemID;
|
||||
DocumentType result = (DocumentType)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
|
||||
return nativeCreateDocumentType(finalQualifiedName, finalPublicID, finalSystemID);
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMImplementation.createDocumentType";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native DocumentType nativeCreateDocumentType(String qualifiedName, String publicID, String systemID);
|
||||
|
||||
public Document createDocument(String namespaceURI, String qualifiedName, DocumentType doctype) {
|
||||
return nativeCreateDocument(namespaceURI, qualifiedName, doctype);
|
||||
final String finalNamespaceURI = namespaceURI;
|
||||
final String finalQualifiedName = qualifiedName;
|
||||
final DocumentType finalDoctype = doctype;
|
||||
Document result = (Document)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeCreateDocument(finalNamespaceURI, finalQualifiedName, finalDoctype);
|
||||
}
|
||||
public String toString() {
|
||||
return "DOMImplementation.createDocument";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Document nativeCreateDocument(String namespaceURI, String qualifiedName, DocumentType doctype);
|
||||
|
||||
|
@ -39,90 +39,277 @@ import org.w3c.dom.events.DocumentEvent;
|
||||
import org.w3c.dom.events.Event;
|
||||
import org.w3c.dom.DOMException;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
|
||||
public class DocumentImpl extends NodeImpl implements Document, DocumentEvent {
|
||||
|
||||
// instantiated from JNI only
|
||||
private DocumentImpl() {}
|
||||
|
||||
public Attr createAttribute(String name) {
|
||||
return nativeCreateAttribute(name);
|
||||
final String finalName = name;
|
||||
Attr result = (Attr)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeCreateAttribute(finalName);
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.createAttribute";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Attr nativeCreateAttribute(String name);
|
||||
|
||||
public CDATASection createCDATASection(String data) {
|
||||
return nativeCreateCDATASection(data);
|
||||
final String finalData = data;
|
||||
CDATASection result = (CDATASection)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeCreateCDATASection(finalData);
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.createCDATASection";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native CDATASection nativeCreateCDATASection(String data);
|
||||
|
||||
public Comment createComment(String data) {
|
||||
return nativeCreateComment(data);
|
||||
final String finalData = data;
|
||||
Comment result = (Comment)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeCreateComment(finalData);
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.createComment";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Comment nativeCreateComment(String data);
|
||||
|
||||
public DocumentFragment createDocumentFragment() {
|
||||
return nativeCreateDocumentFragment();
|
||||
DocumentFragment result = (DocumentFragment)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeCreateDocumentFragment();
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.createDocumentFragment";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
native DocumentFragment nativeCreateDocumentFragment();
|
||||
|
||||
public Element createElement(String tagName) {
|
||||
return nativeCreateElement(tagName);
|
||||
final String finalTagName = tagName;
|
||||
Element result = (Element)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeCreateElement(finalTagName);
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.createElement";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Element nativeCreateElement(String tagName);
|
||||
|
||||
public EntityReference createEntityReference(String name) {
|
||||
return nativeCreateEntityReference(name);
|
||||
final String finalName = name;
|
||||
EntityReference result = (EntityReference)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeCreateEntityReference(finalName);
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.createEntityReference";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native EntityReference nativeCreateEntityReference(String name);
|
||||
|
||||
public ProcessingInstruction createProcessingInstruction(String target, String data) {
|
||||
return nativeCreateProcessingInstruction(target, data);
|
||||
final String finalTarget = target;
|
||||
final String finalData = data;
|
||||
ProcessingInstruction result = (ProcessingInstruction)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeCreateProcessingInstruction(finalTarget, finalData);
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.createProcessingInstruction";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native ProcessingInstruction nativeCreateProcessingInstruction(String target, String data);
|
||||
|
||||
public Text createTextNode(String data) {
|
||||
return nativeCreateTextNode(data);
|
||||
final String finalData = data;
|
||||
Text result = (Text)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeCreateTextNode(finalData);
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.createTextNode";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Text nativeCreateTextNode(String data);
|
||||
|
||||
public DocumentType getDoctype() {
|
||||
return nativeGetDoctype();
|
||||
DocumentType result = (DocumentType)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetDoctype();
|
||||
}
|
||||
public String toString() {
|
||||
return "Document";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
native DocumentType nativeGetDoctype();
|
||||
|
||||
public Element getDocumentElement() {
|
||||
return nativeGetDocumentElement();
|
||||
Element result = (Element)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetDocumentElement();
|
||||
}
|
||||
public String toString() {
|
||||
return "Document";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
native Element nativeGetDocumentElement();
|
||||
|
||||
public NodeList getElementsByTagName(String tagName) {
|
||||
return nativeGetElementsByTagName(tagName);
|
||||
final String finalTagName = tagName;
|
||||
NodeList result = (NodeList)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetElementsByTagName(finalTagName);
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.getElementsByTagName";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native NodeList nativeGetElementsByTagName(String tagName);
|
||||
|
||||
public DOMImplementation getImplementation() {
|
||||
return nativeGetImplementation();
|
||||
DOMImplementation result = (DOMImplementation)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetImplementation();
|
||||
}
|
||||
public String toString() {
|
||||
return "Document";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
native DOMImplementation nativeGetImplementation();
|
||||
|
||||
public Event createEvent(String type) {
|
||||
return nativeCreateEvent(type);
|
||||
final String finalType = type;
|
||||
Event result = (Event)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeCreateEvent(finalType);
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.createEvent";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Event nativeCreateEvent(String type);
|
||||
|
||||
public NodeList getElementsByTagNameNS(String namespaceURI, String localName) {
|
||||
return nativeGetElementsByTagNameNS(namespaceURI, localName);
|
||||
final String finalNamespaceURI = namespaceURI;
|
||||
final String finalLocalName = localName;
|
||||
NodeList result = (NodeList)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetElementsByTagNameNS(finalNamespaceURI, finalLocalName);
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.getElementsByTagNameNS";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native NodeList nativeGetElementsByTagNameNS(String namespaceURI, String localName);
|
||||
|
||||
public Element getElementById(String elementId) {
|
||||
return nativeGetElementById(elementId);
|
||||
final String finalElementId = elementId;
|
||||
Element result = (Element)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetElementById(finalElementId);
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.getElementById";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Element nativeGetElementById(String elementId);
|
||||
|
||||
public String getDocumentURI() {
|
||||
return nativeGetDocumentURI();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetDocumentURI();
|
||||
}
|
||||
public String toString() {
|
||||
return "Document.getDocumentURI";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
native String nativeGetDocumentURI();
|
||||
|
||||
|
||||
public Node importNode(Node importedNode, boolean deep) throws DOMException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
@ -23,6 +23,8 @@ package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.DocumentType;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
|
||||
|
||||
public class DocumentTypeImpl extends NodeImpl implements DocumentType {
|
||||
|
||||
@ -30,34 +32,100 @@ public class DocumentTypeImpl extends NodeImpl implements DocumentType {
|
||||
private DocumentTypeImpl() {}
|
||||
|
||||
public String getName() {
|
||||
return nativeGetName();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetName();
|
||||
}
|
||||
public String toString() {
|
||||
return "DocumentType.getName";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetName();
|
||||
|
||||
public NamedNodeMap getEntities() {
|
||||
return nativeGetEntities();
|
||||
NamedNodeMap result = (NamedNodeMap)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetEntities();
|
||||
}
|
||||
public String toString() {
|
||||
return "DocumentType.getEntities";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native NamedNodeMap nativeGetEntities();
|
||||
|
||||
public NamedNodeMap getNotations() {
|
||||
return nativeGetNotations();
|
||||
NamedNodeMap result = (NamedNodeMap)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetNotations();
|
||||
}
|
||||
public String toString() {
|
||||
return "DocumentType.getNotations";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native NamedNodeMap nativeGetNotations();
|
||||
|
||||
|
||||
//since DOM level 2
|
||||
public String getPublicId() {
|
||||
return nativeGetPublicId();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetPublicId();
|
||||
}
|
||||
public String toString() {
|
||||
return "DocumentType.getPublicId";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetPublicId();
|
||||
|
||||
public String getSystemId() {
|
||||
return nativeGetSystemId();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetSystemId();
|
||||
}
|
||||
public String toString() {
|
||||
return "DocumentType.getSystemId";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetSystemId();
|
||||
|
||||
public String getInternalSubset() {
|
||||
return nativeGetInternalSubset();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetInternalSubset();
|
||||
}
|
||||
public String toString() {
|
||||
return "DocumentType.getInternalSubset";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetInternalSubset();
|
||||
|
||||
|
@ -27,95 +27,307 @@ import org.w3c.dom.NodeList;
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.TypeInfo;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
|
||||
|
||||
public class ElementImpl extends NodeImpl implements Element {
|
||||
|
||||
// instantiated from JNI or Document.createElement()
|
||||
private ElementImpl() {}
|
||||
|
||||
public String getAttribute(String name) {
|
||||
return nativeGetAttribute(name);
|
||||
final String finalName = name;
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetAttribute(finalName);
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.getAttribute";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetAttribute(String name);
|
||||
|
||||
public Attr getAttributeNode(String name) {
|
||||
return nativeGetAttributeNode(name);
|
||||
final String finalName = name;
|
||||
Attr result = (Attr)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetAttributeNode(finalName);
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.getAttributeNode";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Attr nativeGetAttributeNode(String name);
|
||||
|
||||
public NodeList getElementsByTagName(String name) {
|
||||
return nativeGetElementsByTagName(name);
|
||||
final String finalName = name;
|
||||
NodeList result = (NodeList)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetElementsByTagName(finalName);
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.getElementsByTagName";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native NodeList nativeGetElementsByTagName(String name);
|
||||
|
||||
public String getTagName() {
|
||||
return nativeGetTagName();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetTagName();
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.getTagName";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetTagName();
|
||||
|
||||
public void normalize() {
|
||||
nativeNormalize();
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeNormalize();
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.normalize";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
native void nativeNormalize();
|
||||
|
||||
public void removeAttribute(String name) {
|
||||
nativeRemoveAttribute(name);
|
||||
final String finalName = name;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeRemoveAttribute(finalName);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.removeAttribute";
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
native void nativeRemoveAttribute(String name);
|
||||
|
||||
public Attr removeAttributeNode(Attr oldAttr) {
|
||||
return nativeRemoveAttributeNode(oldAttr);
|
||||
final Attr finalOldAttr = oldAttr;
|
||||
Attr result = (Attr)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeRemoveAttributeNode(finalOldAttr);
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.removeAttributeNode";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Attr nativeRemoveAttributeNode(Attr oldAttr);
|
||||
|
||||
public void setAttribute(String name, String value) {
|
||||
nativeSetAttribute(name, value);
|
||||
final String finalName = name;
|
||||
final String finalValue = value;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeSetAttribute(finalName, finalValue);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.setAttribute";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
native void nativeSetAttribute(String name, String value);
|
||||
|
||||
public Attr setAttributeNode(Attr newAttr) {
|
||||
return nativeSetAttributeNode(newAttr);
|
||||
final Attr finalNewAttr = newAttr;
|
||||
Attr result = (Attr)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeSetAttributeNode(finalNewAttr);
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.setAttributeNode";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Attr nativeSetAttributeNode(Attr newAttr);
|
||||
|
||||
|
||||
//since DOM2
|
||||
public String getAttributeNS(String namespaceURI, String localName) {
|
||||
return nativeGetAttributeNS(namespaceURI, localName);
|
||||
final String finalNamespaceURI = namespaceURI;
|
||||
final String finalLocalName = localName;
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetAttributeNS(finalNamespaceURI, finalLocalName);
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.getAttributeNS";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetAttributeNS(String namespaceURI, String localName);
|
||||
|
||||
public void setAttributeNS(String namespaceURI, String qualifiedName, String value) {
|
||||
nativeSetAttributeNS(namespaceURI, qualifiedName, value);
|
||||
final String finalNamespaceURI = namespaceURI;
|
||||
final String finalQualifiedName = qualifiedName;
|
||||
final String finalValue = value;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeSetAttributeNS(finalNamespaceURI, finalQualifiedName, finalValue);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.setAttributeNS";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
native void nativeSetAttributeNS(String namespaceURI, String qualifiedName, String value);
|
||||
|
||||
public void removeAttributeNS(String namespacURI, String localName) {
|
||||
nativeRemoveAttributeNS(namespacURI, localName);
|
||||
final String finalNamespacURI = namespacURI;
|
||||
final String finalLocalName = localName;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeRemoveAttributeNS(finalNamespacURI, finalLocalName);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.removeAttributeNS";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
native void nativeRemoveAttributeNS(String namespacURI, String localName);
|
||||
|
||||
public Attr getAttributeNodeNS(String namespaceURI, String localName) {
|
||||
return nativeGetAttributeNodeNS(namespaceURI, localName);
|
||||
final String finalNamespaceURI = namespaceURI;
|
||||
final String finalLocalName = localName;
|
||||
Attr result = (Attr)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetAttributeNodeNS(finalNamespaceURI, finalLocalName);
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.getAttributeNodeNS";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Attr nativeGetAttributeNodeNS(String namespaceURI, String localName);
|
||||
|
||||
public Attr setAttributeNodeNS(Attr newAttr) {
|
||||
return nativeSetAttributeNodeNS(newAttr);
|
||||
final Attr finalNewAttr = newAttr;
|
||||
Attr result = (Attr)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeSetAttributeNodeNS(finalNewAttr);
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.setAttributeNodeNS";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Attr nativeSetAttributeNodeNS(Attr newAttr);
|
||||
|
||||
public NodeList getElementsByTagNameNS(String namespaceURI, String localName) {
|
||||
return nativeGetElementsByTagNameNS(namespaceURI, localName);
|
||||
final String finalNamespaceURI = namespaceURI;
|
||||
final String finalLocalName = localName;
|
||||
NodeList result = (NodeList)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetElementsByTagNameNS(finalNamespaceURI, finalLocalName);
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.getElementsByTagNameNS";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native NodeList nativeGetElementsByTagNameNS(String namespaceURI, String localName);
|
||||
|
||||
public boolean hasAttribute(String name) {
|
||||
return nativeHasAttribute(name);
|
||||
final String finalName = name;
|
||||
Boolean result = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult = nativeHasAttribute(finalName);
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.hasAttribute";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native boolean nativeHasAttribute(String name);
|
||||
|
||||
public boolean hasAttributeNS(String namespaceURI, String localName) {
|
||||
return nativeHasAttributeNS(namespaceURI, localName);
|
||||
final String finalNamespaceURI = namespaceURI;
|
||||
final String finalLocalName = localName;
|
||||
Boolean result = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult =
|
||||
nativeHasAttributeNS(finalNamespaceURI, finalLocalName);
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "Element.hasAttributeNS";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native boolean nativeHasAttributeNS(String namespaceURI, String localName);
|
||||
|
||||
|
@ -23,23 +23,58 @@ package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.Entity;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
|
||||
public class EntityImpl extends NodeImpl implements Entity {
|
||||
|
||||
// instantiated from JNI only
|
||||
private EntityImpl() {}
|
||||
|
||||
public String getPublicId() {
|
||||
return nativeGetPublicId();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetPublicId();
|
||||
}
|
||||
public String toString() {
|
||||
return "Entity.getPublicId";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetPublicId();
|
||||
|
||||
public String getSystemId() {
|
||||
return nativeGetSystemId();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetSystemId();
|
||||
}
|
||||
public String toString() {
|
||||
return "Entity.getSystemId";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetSystemId();
|
||||
|
||||
public String getNotationName() {
|
||||
return nativeGetNotationName();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetNotationName();
|
||||
}
|
||||
public String toString() {
|
||||
return "Entity.getNotationName";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetNotationName();
|
||||
|
||||
|
@ -25,6 +25,8 @@ import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.DOMException;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
|
||||
public class NamedNodeMapImpl implements NamedNodeMap {
|
||||
|
||||
private long p_nsIDOMNamedNodeMap = 0;
|
||||
@ -32,32 +34,90 @@ public class NamedNodeMapImpl implements NamedNodeMap {
|
||||
private NamedNodeMapImpl() {}
|
||||
|
||||
public int getLength() {
|
||||
return nativeGetLength();
|
||||
Integer result = (Integer)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
int intResult = nativeGetLength();
|
||||
return Integer.valueOf(intResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "NamedNodeMap.getLength";
|
||||
}
|
||||
});
|
||||
return result.intValue();
|
||||
|
||||
}
|
||||
native int nativeGetLength();
|
||||
|
||||
public Node getNamedItem(String name) {
|
||||
return nativeGetNamedItem(name);
|
||||
final String finalName = name;
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetNamedItem(finalName);
|
||||
}
|
||||
public String toString() {
|
||||
return "NamedNodeMap.getNamedItem";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeGetNamedItem(String name);
|
||||
|
||||
public Node item(int index) {
|
||||
return nativeItem(index);
|
||||
final int finalIndex = index;
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeItem(finalIndex);
|
||||
}
|
||||
public String toString() {
|
||||
return "NamedNodeMap.item";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeItem(int index);
|
||||
|
||||
public Node removeNamedItem(String name) {
|
||||
return nativeRemoveNamedItem(name);
|
||||
final String finalName = name;
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeRemoveNamedItem(finalName);
|
||||
}
|
||||
public String toString() {
|
||||
return "NamedNodeMap.removeNamedItem";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeRemoveNamedItem(String name);
|
||||
|
||||
public Node setNamedItem(Node arg) {
|
||||
return nativeSetNamedItem(arg);
|
||||
final Node finalArg = arg;
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeSetNamedItem(finalArg);
|
||||
}
|
||||
public String toString() {
|
||||
return "NamedNodeMap.setNamedItem";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeSetNamedItem(Node arg);
|
||||
|
||||
|
||||
|
||||
public Node getNamedItemNS(String namespaceURI, String localName) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
@ -33,6 +33,8 @@ import org.w3c.dom.events.EventListener;
|
||||
import java.util.Vector;
|
||||
import java.util.Hashtable;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
|
||||
class NodeEventListener {
|
||||
EventListener listener = null;
|
||||
String type = null;
|
||||
@ -118,200 +120,566 @@ public class NodeImpl implements Node, EventTarget {
|
||||
}
|
||||
|
||||
public boolean isSupported(String feature, String version) {
|
||||
return nativeIsSupported(feature, version);
|
||||
final String finalFeature = feature;
|
||||
final String finalVersion = version;
|
||||
Boolean result = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult = nativeIsSupported(finalFeature, finalVersion);
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.isSupported";
|
||||
}
|
||||
});
|
||||
return result.booleanValue();
|
||||
|
||||
}
|
||||
native boolean nativeIsSupported(String feature, String version);
|
||||
|
||||
public boolean hasAttributes() {
|
||||
return nativeHasAttributes();
|
||||
Boolean result = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult = nativeHasAttributes();
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.hasAttributes";
|
||||
}
|
||||
});
|
||||
return result.booleanValue();
|
||||
|
||||
}
|
||||
native boolean nativeHasAttributes();
|
||||
|
||||
public Node appendChild(Node newChild) throws DOMException {
|
||||
return nativeAppendChild(newChild);
|
||||
final Node finalNewChild = newChild;
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeAppendChild(finalNewChild);
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.appendChild";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeAppendChild(Node newChild) throws DOMException;
|
||||
|
||||
public Node cloneNode(boolean deep) {
|
||||
return nativeCloneNode(deep);
|
||||
final boolean finalDeep = deep;
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeCloneNode(finalDeep);
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.cloneNode";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeCloneNode(boolean deep);
|
||||
|
||||
public NamedNodeMap getAttributes() {
|
||||
return nativeGetAttributes();
|
||||
NamedNodeMap result = (NamedNodeMap)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetAttributes();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getAttributes";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native NamedNodeMap nativeGetAttributes();
|
||||
|
||||
public NodeList getChildNodes() {
|
||||
return nativeGetChildNodes();
|
||||
NodeList result = (NodeList)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetChildNodes();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getChildNodes";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native NodeList nativeGetChildNodes();
|
||||
|
||||
public Node getFirstChild() {
|
||||
return nativeGetFirstChild();
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetFirstChild();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getFirstChild";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeGetFirstChild();
|
||||
|
||||
public Node getLastChild() {
|
||||
return nativeGetLastChild();
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetLastChild();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getLastChild";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeGetLastChild();
|
||||
|
||||
public Node getNextSibling() {
|
||||
return nativeGetNextSibling();
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetNextSibling();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getNextSibling";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeGetNextSibling();
|
||||
|
||||
public String getNodeName() {
|
||||
return nativeGetNodeName();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetNodeName();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getNodeName";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetNodeName();
|
||||
|
||||
public short getNodeType() {
|
||||
return nativeGetNodeType();
|
||||
Short result = (Short)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
short shortResult = nativeGetNodeType();
|
||||
return Short.valueOf(shortResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getNodeType";
|
||||
}
|
||||
});
|
||||
return result.shortValue();
|
||||
|
||||
}
|
||||
native short nativeGetNodeType();
|
||||
|
||||
public String getNodeValue() {
|
||||
return nativeGetNodeValue();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetNodeValue();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getNodeValue";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetNodeValue();
|
||||
|
||||
public Document getOwnerDocument() {
|
||||
return nativeGetOwnerDocument();
|
||||
Document result = (Document)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetOwnerDocument();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getOwnerDocument";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Document nativeGetOwnerDocument();
|
||||
|
||||
public Node getParentNode() {
|
||||
return nativeGetParentNode();
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetParentNode();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getParentNode";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeGetParentNode();
|
||||
|
||||
public Node getPreviousSibling() {
|
||||
return nativeGetPreviousSibling();
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetPreviousSibling();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getPreviousSibling";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeGetPreviousSibling();
|
||||
|
||||
public boolean hasChildNodes() {
|
||||
return nativeHasChildNodes();
|
||||
Boolean result = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult = nativeHasChildNodes();
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.hasChildNodes";
|
||||
}
|
||||
});
|
||||
return result.booleanValue();
|
||||
|
||||
}
|
||||
native boolean nativeHasChildNodes();
|
||||
|
||||
public Node insertBefore(Node newChild, Node refChild) throws DOMException {
|
||||
return nativeInsertBefore(newChild, refChild);
|
||||
final Node finalNewChild = newChild;
|
||||
final Node finalRefChild = refChild;
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeInsertBefore(finalNewChild, finalRefChild);
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.insertBefore";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeInsertBefore(Node newChild, Node refChild) throws DOMException;
|
||||
|
||||
public Node removeChild(Node oldChild) throws DOMException {
|
||||
return nativeRemoveChild(oldChild);
|
||||
final Node finalOldChild = oldChild;
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeRemoveChild(finalOldChild);
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.removeChild";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeRemoveChild(Node oldChild) throws DOMException;
|
||||
|
||||
public Node replaceChild(Node newChild, Node oldChild) throws DOMException {
|
||||
return nativeReplaceChild(newChild, oldChild);
|
||||
final Node finalNewChild = newChild;
|
||||
final Node finalOldChild = oldChild;
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeReplaceChild(finalNewChild, finalOldChild);
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.replaceChild";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeReplaceChild(Node newChild, Node oldChild) throws DOMException;
|
||||
|
||||
public void setNodeValue(String nodeValue) {
|
||||
nativeSetNodeValue(nodeValue);
|
||||
final String finalNodeValue = nodeValue;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeSetNodeValue(finalNodeValue);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.setNodeValue";
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
native void nativeSetNodeValue(String nodeValue);
|
||||
|
||||
public String getTextContent() throws DOMException {
|
||||
return nativeGetTextContent();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetTextContent();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getTextContent";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetTextContent() throws DOMException;
|
||||
|
||||
protected void finalize() {
|
||||
nativeFinalize();
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeFinalize();
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.finalize";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
protected native void nativeFinalize();
|
||||
|
||||
private boolean XPCOM_equals(Object o) {
|
||||
return nativeXPCOM_equals(o);
|
||||
final Object finalO = o;
|
||||
Boolean bool = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult = nativeXPCOM_equals(finalO);
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.XPCOM_equals";
|
||||
}
|
||||
});
|
||||
return bool.booleanValue();
|
||||
|
||||
}
|
||||
native boolean nativeXPCOM_equals(Object o);
|
||||
|
||||
private int XPCOM_hashCode() {
|
||||
return nativeXPCOM_hashCode();
|
||||
Integer result = (Integer)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
int intResult = nativeXPCOM_hashCode();
|
||||
return Integer.valueOf(intResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.XPCOM_hashCode";
|
||||
}
|
||||
});
|
||||
return result.intValue();
|
||||
|
||||
}
|
||||
private native int nativeXPCOM_hashCode();
|
||||
|
||||
//since DOM level 2
|
||||
public boolean supports(String feature, String version) {
|
||||
return nativeSupports(feature, version);
|
||||
final String finalFeature = feature;
|
||||
final String finalVersion = version;
|
||||
Boolean result = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult =
|
||||
nativeSupports(finalFeature, finalVersion);
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.supports";
|
||||
}
|
||||
});
|
||||
return result.booleanValue();
|
||||
|
||||
}
|
||||
native boolean nativeSupports(String feature, String version);
|
||||
|
||||
public String getNamespaceURI() {
|
||||
return nativeGetNamespaceURI();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetNamespaceURI();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getNamespaceURI";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetNamespaceURI();
|
||||
|
||||
public String getPrefix() {
|
||||
return nativeGetPrefix();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetPrefix();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getPrefix";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetPrefix();
|
||||
|
||||
public void setPrefix(String prefix) {
|
||||
nativeSetPrefix(prefix);
|
||||
final String finalPrefix = prefix;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeSetPrefix(finalPrefix);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.setPrefix";
|
||||
}
|
||||
});
|
||||
}
|
||||
native void nativeSetPrefix(String prefix);
|
||||
|
||||
public String getLocalName() {
|
||||
return nativeGetLocalName();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetLocalName();
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.getLocalName";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetLocalName();
|
||||
|
||||
|
||||
public void addEventListener(String type,
|
||||
EventListener listener,
|
||||
boolean useCapture) {
|
||||
public void addEventListener(String type, EventListener listener, boolean useCapture) {
|
||||
final String finalType = type;
|
||||
final EventListener finalListener = listener;
|
||||
final boolean finalUseCapture = useCapture;
|
||||
|
||||
long nativeListener = addNativeEventListener(type, listener, useCapture);
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
long nativeListener =
|
||||
addNativeEventListener(finalType, finalListener,
|
||||
finalUseCapture);
|
||||
Long lnode = new Long(p_nsIDOMNode);
|
||||
|
||||
Vector listeners;
|
||||
|
||||
//in conjunction with internal synchronization of Hashtable and Vector
|
||||
// this should be enough for safe concurrent access
|
||||
synchronized (javaDOMlisteners) {
|
||||
listeners = (Vector) javaDOMlisteners.get(lnode);
|
||||
|
||||
if (listeners == null) {
|
||||
listeners = new Vector();
|
||||
javaDOMlisteners.put(lnode, listeners);
|
||||
}
|
||||
}
|
||||
|
||||
if (nativeListener != 0) {
|
||||
|
||||
NodeEventListener l = new NodeEventListener(finalType,
|
||||
finalListener,
|
||||
finalUseCapture,
|
||||
nativeListener);
|
||||
listeners.add(l);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.addEventListener";
|
||||
}
|
||||
});
|
||||
|
||||
Long lnode = new Long(p_nsIDOMNode);
|
||||
|
||||
Vector listeners;
|
||||
|
||||
//in conjunction with internal synchronization of Hashtable and Vector
|
||||
// this should be enough for safe concurrent access
|
||||
synchronized (javaDOMlisteners) {
|
||||
listeners = (Vector) javaDOMlisteners.get(lnode);
|
||||
|
||||
if (listeners == null) {
|
||||
listeners = new Vector();
|
||||
javaDOMlisteners.put(lnode, listeners);
|
||||
}
|
||||
}
|
||||
|
||||
if (nativeListener != 0) {
|
||||
|
||||
NodeEventListener l = new NodeEventListener(type,
|
||||
listener,
|
||||
useCapture,
|
||||
nativeListener);
|
||||
listeners.add(l);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeEventListener(String type,
|
||||
EventListener listener,
|
||||
boolean useCapture) {
|
||||
public void removeEventListener(String type, EventListener listener, boolean useCapture) {
|
||||
final String finalType = type;
|
||||
final EventListener finalListener = listener;
|
||||
final boolean finalUseCapture = useCapture;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
Vector listeners = (Vector) javaDOMlisteners.get(new Long(p_nsIDOMNode));
|
||||
|
||||
if (listeners == null)
|
||||
return null;
|
||||
|
||||
NodeEventListener l = new NodeEventListener(finalType,
|
||||
finalListener,
|
||||
finalUseCapture, 0);
|
||||
|
||||
Vector listeners = (Vector) javaDOMlisteners.get(new Long(p_nsIDOMNode));
|
||||
int idx = listeners.indexOf(l);
|
||||
|
||||
//if trying to remove non-existing listener then return
|
||||
if (idx == -1)
|
||||
return null;
|
||||
|
||||
if (listeners == null)
|
||||
return;
|
||||
l = (NodeEventListener) listeners.remove(idx);
|
||||
|
||||
removeNativeEventListener(finalType, l.nativeListener,
|
||||
finalUseCapture);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.removeEventListener";
|
||||
}
|
||||
});
|
||||
|
||||
NodeEventListener l = new NodeEventListener(type,
|
||||
listener, useCapture, 0);
|
||||
|
||||
int idx = listeners.indexOf(l);
|
||||
|
||||
//if trying to remove non-existing listener then return
|
||||
if (idx == -1)
|
||||
return;
|
||||
|
||||
l = (NodeEventListener) listeners.remove(idx);
|
||||
|
||||
removeNativeEventListener(type, l.nativeListener, useCapture);
|
||||
}
|
||||
|
||||
public boolean dispatchEvent(Event evt) throws DOMException {
|
||||
@ -319,12 +687,45 @@ public class NodeImpl implements Node, EventTarget {
|
||||
}
|
||||
|
||||
private long addNativeEventListener(String type, EventListener listener, boolean useCapture) {
|
||||
return nativeAddNativeEventListener(type, listener, useCapture);
|
||||
final String finalType = type;
|
||||
final EventListener finalListener = listener;
|
||||
final boolean finalUseCapture = useCapture;
|
||||
Long result = (Long)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
long longResult =
|
||||
nativeAddNativeEventListener(finalType,
|
||||
finalListener,
|
||||
finalUseCapture);
|
||||
return Long.valueOf(longResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.addNativeEventListener";
|
||||
}
|
||||
});
|
||||
return result.longValue();
|
||||
|
||||
}
|
||||
private native long nativeAddNativeEventListener(String type, EventListener listener, boolean useCapture);
|
||||
|
||||
private void removeNativeEventListener(String type, long nativeListener, boolean useCapture) {
|
||||
nativeRemoveNativeEventListener(type, nativeListener, useCapture);
|
||||
final String finalType = type;
|
||||
final long finalNativeListener = nativeListener;
|
||||
final boolean finalUseCapture = useCapture;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeRemoveNativeEventListener(finalType,
|
||||
finalNativeListener,
|
||||
finalUseCapture);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "Node.removeNativeEventListener";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
private native void nativeRemoveNativeEventListener(String type, long nativeListener, boolean useCapture);
|
||||
|
||||
|
@ -24,6 +24,9 @@ package org.mozilla.dom;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
|
||||
|
||||
public class NodeListImpl implements NodeList {
|
||||
|
||||
private long p_nsIDOMNodeList = 0;
|
||||
@ -43,27 +46,73 @@ public class NodeListImpl implements NodeList {
|
||||
}
|
||||
|
||||
public int getLength() {
|
||||
return nativeGetLength();
|
||||
Integer result = (Integer)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
int intResult = nativeGetLength();
|
||||
return Integer.valueOf(intResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "NodeList.getLength";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native int nativeGetLength();
|
||||
|
||||
public Node item(int index) {
|
||||
return nativeItem(index);
|
||||
final int finalIndex = index;
|
||||
Node result = (Node)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeItem(finalIndex);
|
||||
}
|
||||
public String toString() {
|
||||
return "NodeList.item";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native Node nativeItem(int index);
|
||||
|
||||
protected void finalize() {
|
||||
nativeFinalize();
|
||||
}
|
||||
protected native void nativeFinalize();
|
||||
|
||||
private boolean XPCOM_equals(Object o) {
|
||||
return nativeXPCOM_equals(o);
|
||||
final Object finalO = o;
|
||||
Boolean bool = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult = nativeXPCOM_equals(finalO);
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "NodeList.XPCOM_equals";
|
||||
}
|
||||
});
|
||||
return bool.booleanValue();
|
||||
|
||||
}
|
||||
native boolean nativeXPCOM_equals(Object o);
|
||||
|
||||
private int XPCOM_hashCode() {
|
||||
return nativeXPCOM_hashCode();
|
||||
Integer result = (Integer)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
int intResult = nativeXPCOM_hashCode();
|
||||
return Integer.valueOf(intResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "NodeList.XPCOM_hashCode";
|
||||
}
|
||||
});
|
||||
return result.intValue();
|
||||
|
||||
}
|
||||
private native int nativeXPCOM_hashCode();
|
||||
}
|
||||
|
@ -23,18 +23,43 @@ package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.Notation;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
|
||||
|
||||
public class NotationImpl extends NodeImpl implements Notation {
|
||||
|
||||
// instantiated from JNI only
|
||||
private NotationImpl() {}
|
||||
|
||||
public String getPublicId() {
|
||||
return nativeGetPublicId();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetPublicId();
|
||||
}
|
||||
public String toString() {
|
||||
return "Notation.getPublicId";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetPublicId();
|
||||
|
||||
public String getSystemId() {
|
||||
return nativeGetSystemId();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetSystemId();
|
||||
}
|
||||
public String toString() {
|
||||
return "Notation.getSystemId";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetSystemId();
|
||||
|
||||
|
@ -23,23 +23,58 @@ package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.ProcessingInstruction;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
|
||||
public class ProcessingInstructionImpl extends NodeImpl implements ProcessingInstruction {
|
||||
|
||||
// instantiated from JNI or Document.createProcessingInstruction()
|
||||
private ProcessingInstructionImpl() {}
|
||||
|
||||
public String getData() {
|
||||
return nativeGetData();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetData();
|
||||
}
|
||||
public String toString() {
|
||||
return "ProcessingInstruction.getData";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetData();
|
||||
|
||||
public String getTarget() {
|
||||
return nativeGetTarget();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetTarget();
|
||||
}
|
||||
public String toString() {
|
||||
return "ProcessingInstruction.getTarget";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetTarget();
|
||||
|
||||
public void setData(String data) {
|
||||
nativeSetData(data);
|
||||
final String finalData = data;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeSetData(finalData);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "ProcessingInstruction.setData";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
native void nativeSetData(String data);
|
||||
|
||||
|
@ -24,6 +24,9 @@ package org.mozilla.dom.events;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.events.Event;
|
||||
import org.w3c.dom.events.EventTarget;
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
import org.mozilla.dom.DOMAccessor;
|
||||
|
||||
|
||||
/**
|
||||
* The <code>Event</code> interface is used to provide contextual information
|
||||
@ -55,7 +58,18 @@ public class EventImpl implements Event {
|
||||
* property.
|
||||
*/
|
||||
public String getType() {
|
||||
return nativeGetType();
|
||||
String result = (String)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetType();
|
||||
}
|
||||
public String toString() {
|
||||
return "Event.getType";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native String nativeGetType();
|
||||
|
||||
@ -65,7 +79,18 @@ public class EventImpl implements Event {
|
||||
* to which the event was originally dispatched.
|
||||
*/
|
||||
public EventTarget getTarget() {
|
||||
return nativeGetTarget();
|
||||
EventTarget result = (EventTarget)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetTarget();
|
||||
}
|
||||
public String toString() {
|
||||
return "Event.getTarget";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native EventTarget nativeGetTarget();
|
||||
|
||||
@ -76,7 +101,18 @@ public class EventImpl implements Event {
|
||||
* is particularly useful during capturing and bubbling.
|
||||
*/
|
||||
public EventTarget getCurrentTarget() {
|
||||
return nativeGetCurrentTarget();
|
||||
EventTarget result = (EventTarget)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetCurrentTarget();
|
||||
}
|
||||
public String toString() {
|
||||
return "Event.getCurrentTarget";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native EventTarget nativeGetCurrentTarget();
|
||||
|
||||
@ -86,7 +122,19 @@ public class EventImpl implements Event {
|
||||
* is currently being evaluated.
|
||||
*/
|
||||
public short getEventPhase() {
|
||||
return nativeGetEventPhase();
|
||||
Short result = (Short)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
short shortValue = nativeGetEventPhase();
|
||||
return Short.valueOf(shortValue);
|
||||
}
|
||||
public String toString() {
|
||||
return "Event.getEventPhase";
|
||||
}
|
||||
});
|
||||
return result.shortValue();
|
||||
|
||||
}
|
||||
native short nativeGetEventPhase();
|
||||
|
||||
|
@ -26,6 +26,9 @@ import org.w3c.dom.views.AbstractView;
|
||||
import org.w3c.dom.events.MouseEvent;
|
||||
import org.w3c.dom.events.EventTarget;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
import org.mozilla.dom.DOMAccessor;
|
||||
|
||||
/**
|
||||
* The <code>MouseEvent</code> interface provides specific contextual
|
||||
* information associated with Mouse events.
|
||||
@ -59,7 +62,19 @@ public class MouseEventImpl extends UIEventImpl implements MouseEvent {
|
||||
* event occurred in relative to the origin of the screen coordinate system.
|
||||
*/
|
||||
public int getScreenX() {
|
||||
return nativeGetScreenX();
|
||||
Integer result = (Integer)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
int intResult = nativeGetScreenX();
|
||||
return Integer.valueOf(intResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "MouseEvent.getScreenX";
|
||||
}
|
||||
});
|
||||
return result.intValue();
|
||||
|
||||
}
|
||||
native int nativeGetScreenX();
|
||||
|
||||
@ -69,7 +84,19 @@ public class MouseEventImpl extends UIEventImpl implements MouseEvent {
|
||||
* occurred relative to the origin of the screen coordinate system.
|
||||
*/
|
||||
public int getScreenY() {
|
||||
return nativeGetScreenY();
|
||||
Integer result = (Integer)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
int intResult = nativeGetScreenY();
|
||||
return Integer.valueOf(intResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "MouseEvent.getScreenY";
|
||||
}
|
||||
});
|
||||
return result.intValue();
|
||||
|
||||
}
|
||||
native int nativeGetScreenY();
|
||||
|
||||
@ -79,7 +106,19 @@ public class MouseEventImpl extends UIEventImpl implements MouseEvent {
|
||||
* event occurred relative to the DOM implementation's client area.
|
||||
*/
|
||||
public int getClientX() {
|
||||
return nativeGetClientX();
|
||||
Integer result = (Integer)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
int intResult = nativeGetClientX();
|
||||
return Integer.valueOf(intResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "MouseEvent.getClientX";
|
||||
}
|
||||
});
|
||||
return result.intValue();
|
||||
|
||||
}
|
||||
native int nativeGetClientX();
|
||||
|
||||
@ -89,7 +128,19 @@ public class MouseEventImpl extends UIEventImpl implements MouseEvent {
|
||||
* occurred relative to the DOM implementation's client area.
|
||||
*/
|
||||
public int getClientY() {
|
||||
return nativeGetClientY();
|
||||
Integer result = (Integer)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
int intResult = nativeGetClientY();
|
||||
return Integer.valueOf(intResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "MouseEvent.getClientY";
|
||||
}
|
||||
});
|
||||
return result.intValue();
|
||||
|
||||
}
|
||||
native int nativeGetClientY();
|
||||
|
||||
@ -99,7 +150,19 @@ public class MouseEventImpl extends UIEventImpl implements MouseEvent {
|
||||
* during the firing of the event.
|
||||
*/
|
||||
public boolean getCtrlKey() {
|
||||
return nativeGetCtrlKey();
|
||||
Boolean result = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult = nativeGetCtrlKey();
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "MouseEvent.getCtrlKey";
|
||||
}
|
||||
});
|
||||
return result.booleanValue();
|
||||
|
||||
}
|
||||
native boolean nativeGetCtrlKey();
|
||||
|
||||
@ -109,7 +172,19 @@ public class MouseEventImpl extends UIEventImpl implements MouseEvent {
|
||||
* during the firing of the event.
|
||||
*/
|
||||
public boolean getShiftKey() {
|
||||
return nativeGetShiftKey();
|
||||
Boolean result = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult = nativeGetShiftKey();
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "MouseEvent.getShiftKey";
|
||||
}
|
||||
});
|
||||
return result.booleanValue();
|
||||
|
||||
}
|
||||
native boolean nativeGetShiftKey();
|
||||
|
||||
@ -120,7 +195,19 @@ public class MouseEventImpl extends UIEventImpl implements MouseEvent {
|
||||
* alternative key name.
|
||||
*/
|
||||
public boolean getAltKey() {
|
||||
return nativeGetAltKey();
|
||||
Boolean result = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult = nativeGetAltKey();
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "MouseEvent.getAltKey";
|
||||
}
|
||||
});
|
||||
return result.booleanValue();
|
||||
|
||||
}
|
||||
native boolean nativeGetAltKey();
|
||||
|
||||
@ -131,7 +218,19 @@ public class MouseEventImpl extends UIEventImpl implements MouseEvent {
|
||||
* an alternative key name.
|
||||
*/
|
||||
public boolean getMetaKey() {
|
||||
return nativeGetMetaKey();
|
||||
Boolean result = (Boolean)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
boolean booleanResult = nativeGetMetaKey();
|
||||
return booleanResult ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
public String toString() {
|
||||
return "MouseEvent.getMetaKey";
|
||||
}
|
||||
});
|
||||
return result.booleanValue();
|
||||
|
||||
}
|
||||
native boolean nativeGetMetaKey();
|
||||
|
||||
@ -142,7 +241,19 @@ public class MouseEventImpl extends UIEventImpl implements MouseEvent {
|
||||
* changed state.
|
||||
*/
|
||||
public short getButton() {
|
||||
return nativeGetButton();
|
||||
Short result = (Short)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
short shortResult = nativeGetButton();
|
||||
return Short.valueOf(shortResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "MouseEvent.getButton";
|
||||
}
|
||||
});
|
||||
return result.shortValue();
|
||||
|
||||
}
|
||||
native short nativeGetButton();
|
||||
|
||||
@ -152,7 +263,18 @@ public class MouseEventImpl extends UIEventImpl implements MouseEvent {
|
||||
* a UI event.
|
||||
*/
|
||||
public EventTarget getRelatedTarget() {
|
||||
return nativeGetRelatedTarget();
|
||||
EventTarget result = (EventTarget)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetRelatedTarget();
|
||||
}
|
||||
public String toString() {
|
||||
return "MouseEvent.getRelatedTarget";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
native EventTarget nativeGetRelatedTarget();
|
||||
|
||||
@ -196,10 +318,46 @@ public class MouseEventImpl extends UIEventImpl implements MouseEvent {
|
||||
boolean metaKeyArg,
|
||||
short buttonArg,
|
||||
EventTarget relatedTargetArg) {
|
||||
nativeInitMouseEvent(typeArg, canBubbleArg, cancelableArg, viewArg,
|
||||
detailArg, screenXArg, screenYArg, clientXArg,
|
||||
clientYArg, ctrlKeyArg, altKeyArg, shiftKeyArg,
|
||||
metaKeyArg, buttonArg, relatedTargetArg);
|
||||
final String finalTypeArg = typeArg;
|
||||
final boolean finalCanBubbleArg = canBubbleArg;
|
||||
final boolean finalCancelableArg = cancelableArg;
|
||||
final AbstractView finalViewArg = viewArg;
|
||||
final int finalDetailArg = detailArg;
|
||||
final int finalScreenXArg = screenXArg;
|
||||
final int finalScreenYArg = screenYArg;
|
||||
final int finalClientXArg = clientXArg;
|
||||
final int finalClientYArg = clientYArg;
|
||||
final boolean finalCtrlKeyArg = ctrlKeyArg;
|
||||
final boolean finalAltKeyArg = altKeyArg;
|
||||
final boolean finalShiftKeyArg = shiftKeyArg;
|
||||
final boolean finalMetaKeyArg = metaKeyArg;
|
||||
final short finalButtonArg = buttonArg;
|
||||
final EventTarget finalRelatedTargetArg = relatedTargetArg;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeInitMouseEvent(finalTypeArg,
|
||||
finalCanBubbleArg,
|
||||
finalCancelableArg,
|
||||
finalViewArg,
|
||||
finalDetailArg,
|
||||
finalScreenXArg,
|
||||
finalScreenYArg,
|
||||
finalClientXArg,
|
||||
finalClientYArg,
|
||||
finalCtrlKeyArg,
|
||||
finalAltKeyArg,
|
||||
finalShiftKeyArg,
|
||||
finalMetaKeyArg,
|
||||
finalButtonArg,
|
||||
finalRelatedTargetArg);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "MouseEvent.initMouseEvent";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
native void nativeInitMouseEvent(String typeArg,
|
||||
boolean canBubbleArg,
|
||||
|
@ -25,6 +25,10 @@ import org.w3c.dom.events.UIEvent;
|
||||
import org.w3c.dom.views.AbstractView;
|
||||
import org.mozilla.dom.events.EventImpl;
|
||||
|
||||
import org.mozilla.util.ReturnRunnable;
|
||||
import org.mozilla.dom.DOMAccessor;
|
||||
|
||||
|
||||
/**
|
||||
* The <code>UIEvent</code> interface provides specific contextual
|
||||
* information associated with User Interface events.
|
||||
@ -48,7 +52,18 @@ public class UIEventImpl extends EventImpl implements UIEvent {
|
||||
* from which the event was generated.
|
||||
*/
|
||||
public AbstractView getView() {
|
||||
return nativeGetView();
|
||||
AbstractView result = (AbstractView)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
return nativeGetView();
|
||||
}
|
||||
public String toString() {
|
||||
return "UIEvent.getView";
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
||||
}
|
||||
public native AbstractView nativeGetView();
|
||||
|
||||
@ -58,7 +73,19 @@ public class UIEventImpl extends EventImpl implements UIEvent {
|
||||
* on the type of event.
|
||||
*/
|
||||
public int getDetail() {
|
||||
return nativeGetDetail();
|
||||
Integer result = (Integer)
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
int intResult = nativeGetDetail();
|
||||
return Integer.valueOf(intResult);
|
||||
}
|
||||
public String toString() {
|
||||
return "UIEvent.getDetail";
|
||||
}
|
||||
});
|
||||
return result.intValue();
|
||||
|
||||
}
|
||||
public native int nativeGetDetail();
|
||||
|
||||
@ -78,8 +105,26 @@ public class UIEventImpl extends EventImpl implements UIEvent {
|
||||
boolean cancelableArg,
|
||||
AbstractView viewArg,
|
||||
int detailArg) {
|
||||
nativeInitUIEvent(typeArg, canBubbleArg, cancelableArg, viewArg,
|
||||
detailArg);
|
||||
final String finalTypeArg = typeArg;
|
||||
final boolean finalCanBubbleArg = canBubbleArg;
|
||||
final boolean finalCancelableArg = cancelableArg;
|
||||
final AbstractView finalViewArg = viewArg;
|
||||
final int finalDetailArg = detailArg;
|
||||
DOMAccessor.getRunner().
|
||||
pushBlockingReturnRunnable(new ReturnRunnable() {
|
||||
public Object run() {
|
||||
nativeInitUIEvent(finalTypeArg,
|
||||
finalCanBubbleArg,
|
||||
finalCancelableArg,
|
||||
finalViewArg,
|
||||
finalDetailArg);
|
||||
return null;
|
||||
}
|
||||
public String toString() {
|
||||
return "UIEvent.initUIEvent";
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
native void nativeInitUIEvent(String typeArg,
|
||||
boolean canBubbleArg,
|
||||
|
@ -753,7 +753,8 @@ JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_nativeGetElementById
|
||||
|
||||
if (NS_FAILED(rv) || !element) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getElementById: failed", rv);
|
||||
"Document.getElementById: failed", rv,
|
||||
JavaDOMGlobals::EXCEPTION_DOM);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,7 @@
|
||||
handlers= java.util.logging.FileHandler
|
||||
|
||||
java.util.logging.FileHandler.pattern = %h/moz-java-log.xml
|
||||
java.util.logging.FileHandler.limit = 50000
|
||||
java.util.logging.FileHandler.append = true
|
||||
java.util.logging.FileHandler.append = false
|
||||
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
|
||||
|
||||
org.mozilla.webclient.level=INFO
|
||||
|
@ -82,6 +82,9 @@
|
||||
<pathelement location="${out.test.dir}/classes"/>
|
||||
</path>
|
||||
|
||||
<property name="test.browser.url"
|
||||
value="http://developers.sun.com/ajax/" />
|
||||
|
||||
|
||||
<!-- ========== Executable Targets ======================================== -->
|
||||
|
||||
@ -230,6 +233,7 @@ PENDING(edburns): 20070130 XULRunner has no bookmarks
|
||||
<jvmarg line="-Djava.util.logging.config.file=${basedir}${FILE_PATH_SEP}..${FILE_PATH_SEP}logging.properties"/>
|
||||
|
||||
<classpath refid="test.classpath"/>
|
||||
<arg value="${test.browser.url}" />
|
||||
</java>
|
||||
|
||||
</target>
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: MCP.java,v 1.6 2007/03/09 04:34:24 edburns%acm.org Exp $
|
||||
* $Id: MCP.java,v 1.7 2007/03/13 06:21:44 edburns%acm.org Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -34,6 +34,7 @@ import java.awt.event.KeyListener;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import org.mozilla.dom.util.DOMTreeDumper;
|
||||
@ -81,6 +82,37 @@ public class MCP {
|
||||
private boolean initialized = false;
|
||||
private Robot robot;
|
||||
private DOMTreeDumper treeDumper = null;
|
||||
private CountDownLatch latch = null;
|
||||
|
||||
private void createLatch() {
|
||||
if (null != latch) {
|
||||
IllegalStateException ise = new IllegalStateException("Trying to set latch when latch is already set!");
|
||||
if (LOGGER.isLoggable(Level.WARNING)) {
|
||||
LOGGER.throwing("org.mozilla.mcp.MCP", "createLatch", ise);
|
||||
}
|
||||
throw ise;
|
||||
}
|
||||
latch = new CountDownLatch(1);
|
||||
}
|
||||
|
||||
private void lockLatch() throws InterruptedException {
|
||||
if (null == latch) {
|
||||
IllegalStateException ise = new IllegalStateException("Trying to lock latch before it has been created!");
|
||||
if (LOGGER.isLoggable(Level.WARNING)) {
|
||||
LOGGER.throwing("org.mozilla.mcp.MCP", "lockLatch", ise);
|
||||
}
|
||||
throw ise;
|
||||
}
|
||||
latch.await();
|
||||
}
|
||||
|
||||
private void openLatch() {
|
||||
if (null != latch || 1 != latch.getCount()) {
|
||||
latch.countDown();
|
||||
latch = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void setAppData(String absolutePathToNativeBrowserBinDir)
|
||||
throws FileNotFoundException,
|
||||
@ -296,6 +328,7 @@ public class MCP {
|
||||
x = Integer.valueOf(clientX).intValue();
|
||||
y = Integer.valueOf(clientY).intValue();
|
||||
Robot robot = getRobot();
|
||||
createLatch();
|
||||
robot.mouseMove(x, y);
|
||||
robot.mousePress(InputEvent.BUTTON1_MASK);
|
||||
robot.mouseRelease(InputEvent.BUTTON1_MASK);
|
||||
@ -317,15 +350,12 @@ public class MCP {
|
||||
synchronized (this) {
|
||||
try {
|
||||
clickElement(idOrName);
|
||||
this.wait();
|
||||
}
|
||||
catch (IllegalStateException ise) {
|
||||
LOGGER.throwing(this.getClass().getName(), "blockingClickElementGivenId",
|
||||
ise);
|
||||
lockLatch();
|
||||
}
|
||||
catch (InterruptedException ie) {
|
||||
LOGGER.throwing(this.getClass().getName(), "blockingClickElementGivenId",
|
||||
ie);
|
||||
if (LOGGER.isLoggable(Level.WARNING)) {
|
||||
LOGGER.log(Level.WARNING, "blockingClickElementGivenId", ie);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -334,12 +364,13 @@ public class MCP {
|
||||
Navigation2 nav = getNavigation();
|
||||
synchronized (this) {
|
||||
nav.loadURL(url);
|
||||
createLatch();
|
||||
try {
|
||||
this.wait();
|
||||
lockLatch();
|
||||
} catch (InterruptedException ex) {
|
||||
LOGGER.throwing(this.getClass().getName(), "blockingLoad",
|
||||
ex);
|
||||
ex.printStackTrace();
|
||||
if (LOGGER.isLoggable(Level.WARNING)) {
|
||||
LOGGER.log(Level.WARNING, "blockingLoad", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -372,9 +403,7 @@ public class MCP {
|
||||
switch ((int)type) {
|
||||
case ((int) DocumentLoadEvent.END_AJAX_EVENT_MASK):
|
||||
case ((int) DocumentLoadEvent.END_DOCUMENT_LOAD_EVENT_MASK):
|
||||
synchronized (owner) {
|
||||
owner.notifyAll();
|
||||
}
|
||||
openLatch();
|
||||
break;
|
||||
case ((int) DocumentLoadEvent.START_URL_LOAD_EVENT_MASK):
|
||||
String method = (String) eventData.get("method");
|
||||
|
@ -63,7 +63,7 @@ public interface WrapperFactory {
|
||||
* @return implmentation specific native int.
|
||||
*
|
||||
*/
|
||||
public int loadNativeLibraryIfNecessary();
|
||||
public int loadNativeLibrariesIfNecessary();
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -60,7 +60,7 @@ public class CurrentPageImpl extends ImplObjectNative implements CurrentPage2,
|
||||
// Class Variables
|
||||
//
|
||||
|
||||
public static final String LOG = "org.mozilla.impl.wrapper_native.CurrentPageImpl";
|
||||
public static final String LOG = "org.mozilla.webclient.impl.wrapper_native.CurrentPageImpl";
|
||||
|
||||
public static final Logger LOGGER = Log.getLogger(LOG);
|
||||
|
||||
@ -310,7 +310,7 @@ public Document getDOM()
|
||||
public Object run() {
|
||||
Document result = nativeGetDOM(getNativeBrowserControl());
|
||||
if (LOGGER.isLoggable((Level.INFO))) {
|
||||
LOGGER.info("CurrentPageImpl.getDOM(): getting DOM with URI: " +
|
||||
LOGGER.info("Getting DOM with URI: " +
|
||||
result.getDocumentURI());
|
||||
}
|
||||
resultHolder[0] = result;
|
||||
|
@ -26,6 +26,7 @@ package org.mozilla.webclient.impl.wrapper_native;
|
||||
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import org.mozilla.util.Assert;
|
||||
@ -35,10 +36,11 @@ import org.mozilla.util.ReturnRunnable;
|
||||
import org.mozilla.util.RunnableRunner;
|
||||
|
||||
import org.mozilla.webclient.impl.WrapperFactory;
|
||||
import org.w3c.dom.DOMException;
|
||||
|
||||
/**
|
||||
* <p>This is a singleton class. All native events pass thru this class
|
||||
* by virtue of the {@link #pushRunnable} or {@link pushBlockingWCRunnable}
|
||||
* by virtue of the {@link #pushRunnable} or {@link pushBlockingreturnRunnable}
|
||||
* methods.</p>
|
||||
*/
|
||||
|
||||
@ -65,7 +67,7 @@ public class NativeEventThread extends Thread implements RunnableRunner {
|
||||
private WrapperFactory wrapperFactory;
|
||||
private int nativeWrapperFactory;
|
||||
|
||||
private Queue<ReturnRunnable> blockingRunnables;
|
||||
private Queue<ReturnRunnableCountDownLatch> blockingRunnables;
|
||||
private Queue<Runnable> runnables;
|
||||
|
||||
|
||||
@ -87,7 +89,7 @@ public class NativeEventThread extends Thread implements RunnableRunner {
|
||||
ParameterCheck.nonNull(yourFactory);
|
||||
|
||||
wrapperFactory = yourFactory;
|
||||
blockingRunnables = new ConcurrentLinkedQueue<ReturnRunnable>();
|
||||
blockingRunnables = new ConcurrentLinkedQueue<ReturnRunnableCountDownLatch>();
|
||||
runnables = new ConcurrentLinkedQueue<Runnable>();
|
||||
}
|
||||
|
||||
@ -107,16 +109,19 @@ public class NativeEventThread extends Thread implements RunnableRunner {
|
||||
wrapperFactory = null;
|
||||
try {
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("NativeEventThread.delete: About to wait during delete()");
|
||||
LOGGER.finest("About to wait during delete()");
|
||||
}
|
||||
wait();
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("NativeEventThread.delete: Returned from wait during delete()");
|
||||
LOGGER.finest("Returned from wait during delete()");
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("NativeEventThread.delete: interrupted while waiting\n\t for NativeEventThread to notifyAll() after destruction of initContext: " + e +
|
||||
" " + e.getMessage());
|
||||
if (LOGGER.isLoggable(Level.SEVERE)) {
|
||||
LOGGER.log(Level.SEVERE,
|
||||
"Interrupted while waiting for NativeEventThread " +
|
||||
"to notifyAll() after destruction of initContext",e);
|
||||
}
|
||||
}
|
||||
}
|
||||
wrapperFactory = null;
|
||||
@ -141,7 +146,7 @@ public class NativeEventThread extends Thread implements RunnableRunner {
|
||||
|
||||
public void run()
|
||||
{
|
||||
nativeWrapperFactory = wrapperFactory.loadNativeLibraryIfNecessary();
|
||||
nativeWrapperFactory = wrapperFactory.loadNativeLibrariesIfNecessary();
|
||||
|
||||
// our owner must have put an event in the queue
|
||||
Assert.assert_it(!runnables.isEmpty());
|
||||
@ -151,7 +156,10 @@ public void run()
|
||||
wrapperFactory.notifyAll();
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("NativeEventThread.run: exception trying to send notifyAll() to WrapperFactoryImpl on startup:" + e + " " + e.getMessage());
|
||||
if (LOGGER.isLoggable(Level.SEVERE)) {
|
||||
LOGGER.log(Level.SEVERE,
|
||||
"Exception trying to send notifyAll() to WrapperFactoryImpl on startup", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -163,9 +171,9 @@ public void run()
|
||||
}
|
||||
}
|
||||
|
||||
public void runUntilEventOfType(Class wcRunnableClass) {
|
||||
public void runUntilEventOfType(Class returnRunnableClass) {
|
||||
ReturnRunnable result = null;
|
||||
while (doEventLoopOnce(wcRunnableClass)) {
|
||||
while (doEventLoopOnce(returnRunnableClass)) {
|
||||
}
|
||||
}
|
||||
|
||||
@ -173,9 +181,10 @@ public void runUntilEventOfType(Class wcRunnableClass) {
|
||||
* @return true if the event loop should continue to be executed, false otherwise
|
||||
*/
|
||||
|
||||
private boolean doEventLoopOnce(Class... wcRunnableClass) {
|
||||
private boolean doEventLoopOnce(Class... returnRunnableClass) {
|
||||
Runnable runnable;
|
||||
ReturnRunnable wcRunnable;
|
||||
ReturnRunnableCountDownLatch latch;
|
||||
ReturnRunnable returnRunnable;
|
||||
boolean result = true;
|
||||
try {
|
||||
Thread.sleep(1);
|
||||
@ -185,7 +194,7 @@ public void runUntilEventOfType(Class wcRunnableClass) {
|
||||
" while sleeping: " + e.getMessage());
|
||||
}
|
||||
runnable = runnables.poll();
|
||||
wcRunnable = blockingRunnables.poll();
|
||||
latch = blockingRunnables.poll();
|
||||
synchronized (this) {
|
||||
// if we are have been told to delete ourselves
|
||||
if (null == this.wrapperFactory) {
|
||||
@ -200,44 +209,39 @@ public void runUntilEventOfType(Class wcRunnableClass) {
|
||||
|
||||
if (null!= runnable) {
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("NativeEventThread.run: About to run " +
|
||||
runnable.toString());
|
||||
LOGGER.finest("About to run " + runnable.toString());
|
||||
}
|
||||
runnable.run();
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("NativeEventThread.run: Return from run " +
|
||||
runnable.toString());
|
||||
LOGGER.finest("Return from run " + runnable.toString());
|
||||
}
|
||||
}
|
||||
if (null != wcRunnable) {
|
||||
if (null != latch && null != latch.runnable) {
|
||||
returnRunnable = latch.runnable;
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("NativeEventThread.run: About to run " +
|
||||
wcRunnable.toString());
|
||||
LOGGER.finest("About to run " + returnRunnable.toString());
|
||||
}
|
||||
wcRunnable.setResult(wcRunnable.run());
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("NativeEventThread.run: Return from run " +
|
||||
wcRunnable.toString());
|
||||
try {
|
||||
returnRunnable.setResult(returnRunnable.run());
|
||||
}
|
||||
// notify the pushBlockingWCRunnable() method.
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("NativeEventThread.run: About to enter synchronized block for " +
|
||||
wcRunnable.toString());
|
||||
}
|
||||
synchronized (wcRunnable) {
|
||||
try {
|
||||
wcRunnable.notifyAll();
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("NativeEventThread.run: Exception: trying to notify for blocking result:" + e + " " + e.getMessage());
|
||||
}
|
||||
catch (Throwable e) {
|
||||
returnRunnable.setResult(e);
|
||||
}
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("NativeEventThread.run: Exited synchronized block for " +
|
||||
wcRunnable.toString());
|
||||
LOGGER.finest("Return from run " + returnRunnable.toString());
|
||||
}
|
||||
if (0 < wcRunnableClass.length &&
|
||||
wcRunnable.getClass() == wcRunnableClass[0]) {
|
||||
// notify the pushBlockingReturnRunnable() method.
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("About to notify User thread that " +
|
||||
returnRunnable.toString() + " has returned.");
|
||||
}
|
||||
latch.latch.countDown();
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("Successfully notified User thread that " +
|
||||
returnRunnable.toString() + " has returned.");
|
||||
}
|
||||
if (0 < returnRunnableClass.length &&
|
||||
returnRunnable.getClass() == returnRunnableClass[0]) {
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
@ -272,34 +276,22 @@ public void runUntilEventOfType(Class wcRunnableClass) {
|
||||
return result;
|
||||
}
|
||||
|
||||
blockingRunnables.add(toInvoke);
|
||||
ReturnRunnableCountDownLatch latch = new ReturnRunnableCountDownLatch(toInvoke);
|
||||
blockingRunnables.add(latch);
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("NativeEventThread.pushBlockingWCRunnable:" +
|
||||
" About to enter synchronized block for " +
|
||||
toInvoke.toString());
|
||||
LOGGER.finest("User thread: About to wait for " +
|
||||
toInvoke.toString() + " to complete.");
|
||||
}
|
||||
synchronized (toInvoke) {
|
||||
try {
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("NativeEventThread.pushBlockingWCRunnable:" +
|
||||
" About to wait for NativeEventThread to run " +
|
||||
toInvoke.toString());
|
||||
}
|
||||
toInvoke.wait();
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("NativeEventThread.pushBlockingWCRunnable:" +
|
||||
" Return from wait for NativeEventThread to run " +
|
||||
toInvoke.toString());
|
||||
}
|
||||
}
|
||||
catch (Exception se) {
|
||||
System.out.println("NativeEventThread.pushBlockingWCRunnable: Exception: while waiting for blocking result: " + se + " " + se.getMessage());
|
||||
}
|
||||
try {
|
||||
latch.latch.await();
|
||||
} catch (InterruptedException ex) {
|
||||
if (LOGGER.isLoggable(Level.SEVERE)) {
|
||||
LOGGER.log(Level.SEVERE, "User thread: Interrupted while waiting for " +
|
||||
latch.runnable.toString() + " to complete.", ex);
|
||||
}
|
||||
}
|
||||
if (LOGGER.isLoggable(Level.FINEST)) {
|
||||
LOGGER.finest("NativeEventThread.pushBlockingWCRunnable:" +
|
||||
" Exited synchronized block for " +
|
||||
toInvoke.toString());
|
||||
LOGGER.finest("User thread: " + toInvoke.toString() + " returned.");
|
||||
}
|
||||
result = toInvoke.getResult();
|
||||
if (result instanceof RuntimeException) {
|
||||
@ -308,6 +300,15 @@ public void runUntilEventOfType(Class wcRunnableClass) {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private class ReturnRunnableCountDownLatch {
|
||||
ReturnRunnable runnable = null;
|
||||
CountDownLatch latch = null;
|
||||
ReturnRunnableCountDownLatch(ReturnRunnable runnable) {
|
||||
this.runnable = runnable;
|
||||
this.latch = new CountDownLatch(1);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Native methods
|
||||
|
@ -283,11 +283,12 @@ public class WrapperFactoryImpl extends Object implements WrapperFactory {
|
||||
return profileName;
|
||||
}
|
||||
|
||||
public int loadNativeLibraryIfNecessary() {
|
||||
public int loadNativeLibrariesIfNecessary() {
|
||||
System.loadLibrary("webclient");
|
||||
System.setProperty(JAVADOM_LOADED_PROPERTY_NAME, "true");
|
||||
try {
|
||||
System.loadLibrary("javadomjni");
|
||||
DOMAccessor.setRunner(NativeEventThread.instance);
|
||||
DOMAccessor.setNativeLibraryLoaded(true);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
|
Loading…
Reference in New Issue
Block a user