diff --git a/mozilla/java/dom/DocumentImpl.java.patch b/mozilla/java/dom/DocumentImpl.java.patch new file mode 100644 index 00000000000..02d2c84d31d --- /dev/null +++ b/mozilla/java/dom/DocumentImpl.java.patch @@ -0,0 +1,12 @@ +Index: DocumentImpl.java +=================================================================== +RCS file: /cvsroot/mozilla/java/dom/jni/DocumentImpl.java,v +retrieving revision 1.4 +diff -r1.4 DocumentImpl.java +40a41,42 +> import org.mozilla.dom.tests.TestDocLoadListener; +> +64d65 +< +71a73 +> DOMAccessorImpl.getInstance().addDocumentLoadListener(new TestDocLoadListener()); diff --git a/mozilla/java/dom/Makefile b/mozilla/java/dom/Makefile index 75275be010e..4e02fc4cf14 100644 --- a/mozilla/java/dom/Makefile +++ b/mozilla/java/dom/Makefile @@ -31,7 +31,7 @@ IS_COMPONENT = 1 CPPSRCS = \ nsJavaDOMImpl.cpp \ - nsJavaDOMFactory.cpp + nsJavaDOMModule.cpp include $(topsrcdir)/config/config.mk @@ -46,7 +46,6 @@ DSO_LDOPTS += \ -ljvm -lhpi EXPORTS = \ - nsJavaDOMCID.h \ nsIJavaDOM.h EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS)) diff --git a/mozilla/java/dom/Makefile.in b/mozilla/java/dom/Makefile.in index 279a1bd13e5..6840e7545a2 100644 --- a/mozilla/java/dom/Makefile.in +++ b/mozilla/java/dom/Makefile.in @@ -31,7 +31,7 @@ IS_COMPONENT = 1 CPPSRCS = \ nsJavaDOMImpl.cpp \ - nsJavaDOMFactory.cpp + nsJavaDOMModule.cpp include $(topsrcdir)/config/config.mk @@ -46,7 +46,6 @@ DSO_LDOPTS += \ -ljvm -lhpi -lsunwjit EXPORTS = \ - nsJavaDOMCID.h \ nsIJavaDOM.h EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS)) diff --git a/mozilla/java/dom/Makefile.linux b/mozilla/java/dom/Makefile.linux index 9b0bb5041b5..a2afccf7867 100644 --- a/mozilla/java/dom/Makefile.linux +++ b/mozilla/java/dom/Makefile.linux @@ -31,7 +31,7 @@ IS_COMPONENT = 1 CPPSRCS = \ nsJavaDOMImpl.cpp \ - nsJavaDOMFactory.cpp + nsJavaDOMModule.cpp include $(topsrcdir)/config/config.mk @@ -47,7 +47,6 @@ DSO_LDOPTS += \ -ljvm -lhpi -lsunwjit EXPORTS = \ - nsJavaDOMCID.h \ nsIJavaDOM.h EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS)) diff --git a/mozilla/java/dom/README b/mozilla/java/dom/README index 8a97f169c3c..c0f8530583e 100644 --- a/mozilla/java/dom/README +++ b/mozilla/java/dom/README @@ -5,17 +5,18 @@ A Java component obtains a org.w3c.dom.Document by registering for Document load notifications. The Document is passed in along with the notifications. The preferred way for a Java component to register for Document load notifications is to register via the DOMAccessor -class. However, currently this does not work and one has to apply a -patch to webshell/src/nsWebShell.cpp. See the section on Building for -instructions on how to apply the patch. +class. However until OJI is used to obtain JNIEnv one has to apply +two patches -The nsJavaDOM component by means of this patch registers itself as a -DocumentLoadObserver with the DocumentLoader service. It then loads a -class called DOMFactory, asks it for a Java DocumentLoadListener and -starts sending all document load notifications that it recieves to the -Java listener. + webshell/src/nsWebShell.cpp.patch + java/dom/jni/DocumentImpl.java.patch -So the first place to start hacking would be DOMFactory.java. +The first one inits nsJavaDOM component and starts jvm. The second one +registers a document load listener via DOMAccessor. +Note: + any class that implements the DocumentLoadListener interface may + stand for TestDocLoadListener. +See the section on Building for instructions on how to apply the patches. Makefiles @@ -43,7 +44,10 @@ apply the patch to nsWebShell.cpp by executing `patch nsWebShell.cpp FindClass("org/mozilla/dom/DOMFactory"); - if (!factoryClass) return; - factoryClass = (jclass) env->NewGlobalRef(factoryClass); - if (!factoryClass) return; + domAccessorClass = env->FindClass("org/mozilla/dom/DOMAccessorImpl"); + if (!domAccessorClass) return; + domAccessorClass = (jclass) env->NewGlobalRef(domAccessorClass); + if (!domAccessorClass) return; - factory = env->AllocObject(factoryClass); - if (!factory) return; - factory = (jclass) env->NewGlobalRef(factory); - if (!factory) return; - - getListenerMID = - env->GetMethodID(factoryClass, - "getDocumentLoadListener", - "()Lorg/mozilla/dom/DocumentLoadListener;"); - if (!getListenerMID) return; + getInstanceMID = + env->GetStaticMethodID(domAccessorClass, + "getInstance", + "()Lorg/mozilla/dom/DOMAccessor;"); + if (!getInstanceMID) return; docListener = - env->CallObjectMethod(factory, getListenerMID); + env->CallStaticObjectMethod(domAccessorClass, getInstanceMID); if (!docListener) return; docListener = (jclass) env->NewGlobalRef(docListener); if (!docListener) return; @@ -244,13 +238,13 @@ PRBool nsJavaDOMImpl::Cleanup() nsIDOMDocument* nsJavaDOMImpl::GetDocument(nsIDocumentLoader* loader) { - nsIContentViewerContainer* container = nsnull; + nsIWebShell* container = nsnull; nsIContentViewer* contentv = nsnull; nsIDocumentViewer* docv = nsnull; nsIDocument* document = nsnull; nsIDOMDocument* domDoc = nsnull; - nsresult rv = loader->GetContainer(&container); + nsresult rv = loader->GetContainer((nsISupports**)&container); if (NS_SUCCEEDED(rv) && container) rv = container->GetContentViewer(&contentv); @@ -313,24 +307,14 @@ NS_IMETHODIMP nsJavaDOMImpl::OnStartDocumentLoad(nsIDocumentLoader* loader, } NS_IMETHODIMP nsJavaDOMImpl::OnEndDocumentLoad(nsIDocumentLoader* loader, -#ifdef NECKO nsIChannel* channel, nsresult aStatus, -#else - nsIURI* aURL, - PRInt32 aStatus, -#endif nsIDocumentLoaderObserver* aObserver) { char* urlSpec = (char*) ""; -#ifdef NECKO nsIURI* url = nsnull; if (channel && NS_SUCCEEDED(channel->GetURI(&url))) url->GetSpec(&urlSpec); -#else - if (aURL) - aURL->GetSpec(&urlSpec); -#endif jstring jURL = env->NewStringUTF(urlSpec); if (!jURL) return NS_ERROR_FAILURE; @@ -350,34 +334,19 @@ NS_IMETHODIMP nsJavaDOMImpl::OnEndDocumentLoad(nsIDocumentLoader* loader, } NS_IMETHODIMP nsJavaDOMImpl::OnStartURLLoad(nsIDocumentLoader* loader, -#ifdef NECKO nsIChannel* channel, -#else - nsIURI* aURL, - const char* aContentType, -#endif nsIContentViewer* aViewer) { char* urlSpec = (char*) ""; -#ifdef NECKO nsIURI* url = nsnull; if (channel && NS_SUCCEEDED(channel->GetURI(&url))) url->GetSpec(&urlSpec); -#else - if (aURL) - aURL->GetSpec(&urlSpec); -#endif jstring jURL = env->NewStringUTF(urlSpec); if (!jURL) return NS_ERROR_FAILURE; char* contentType = (char*) ""; -#ifdef NECKO if (channel) channel->GetContentType(&contentType); -#else - if (aContentType) - contentType = aContentType; -#endif jstring jContentType = env->NewStringUTF(contentType); if (!jContentType) return NS_ERROR_FAILURE; @@ -397,23 +366,14 @@ NS_IMETHODIMP nsJavaDOMImpl::OnStartURLLoad(nsIDocumentLoader* loader, } NS_IMETHODIMP nsJavaDOMImpl::OnProgressURLLoad(nsIDocumentLoader* loader, -#ifdef NECKO nsIChannel* channel, -#else - nsIURI* aURL, -#endif PRUint32 aProgress, PRUint32 aProgressMax) { char* urlSpec = (char*) ""; -#ifdef NECKO nsIURI* url = nsnull; if (channel && NS_SUCCEEDED(channel->GetURI(&url))) url->GetSpec(&urlSpec); -#else - if (aURL) - aURL->GetSpec(&urlSpec); -#endif jstring jURL = env->NewStringUTF(urlSpec); if (!jURL) return NS_ERROR_FAILURE; @@ -434,22 +394,13 @@ NS_IMETHODIMP nsJavaDOMImpl::OnProgressURLLoad(nsIDocumentLoader* loader, } NS_IMETHODIMP nsJavaDOMImpl::OnStatusURLLoad(nsIDocumentLoader* loader, -#ifdef NECKO nsIChannel* channel, -#else - nsIURI* aURL, -#endif nsString& aMsg) { char* urlSpec = (char*) ""; -#ifdef NECKO nsIURI* url = nsnull; if (channel && NS_SUCCEEDED(channel->GetURI(&url))) url->GetSpec(&urlSpec); -#else - if (aURL) - aURL->GetSpec(&urlSpec); -#endif jstring jURL = env->NewStringUTF(urlSpec); if (!jURL) return NS_ERROR_FAILURE; @@ -473,23 +424,13 @@ NS_IMETHODIMP nsJavaDOMImpl::OnStatusURLLoad(nsIDocumentLoader* loader, } NS_IMETHODIMP nsJavaDOMImpl::OnEndURLLoad(nsIDocumentLoader* loader, -#ifdef NECKO nsIChannel* channel, nsresult aStatus) -#else - nsIURI* aURL, - PRInt32 aStatus) -#endif { char* urlSpec = (char*) ""; -#ifdef NECKO nsIURI* url = nsnull; if (channel && NS_SUCCEEDED(channel->GetURI(&url))) url->GetSpec(&urlSpec); -#else - if (aURL) - aURL->GetSpec(&urlSpec); -#endif jstring jURL = env->NewStringUTF(urlSpec); if (!jURL) return NS_ERROR_FAILURE; @@ -513,11 +454,7 @@ NS_IMETHODIMP nsJavaDOMImpl::OnEndURLLoad(nsIDocumentLoader* loader, } NS_IMETHODIMP nsJavaDOMImpl::HandleUnknownContentType(nsIDocumentLoader* loader, -#ifdef NECKO nsIChannel* channel, -#else - nsIURI* aURL, -#endif const char *aContentType, const char *aCommand) { @@ -672,3 +609,17 @@ static const char* describe_type(int type) return "ERROR"; } #endif + +nsresult NS_NewJavaDOM(nsIJavaDOM** aJavaDOM) +{ + if (! aJavaDOM) + return NS_ERROR_NULL_POINTER; + + *aJavaDOM = new nsJavaDOMImpl(); + if (! *aJavaDOM) + return NS_ERROR_OUT_OF_MEMORY; + + NS_ADDREF(*aJavaDOM); + + return NS_OK; +} diff --git a/mozilla/java/dom/nsJavaDOMImpl.h b/mozilla/java/dom/nsJavaDOMImpl.h index d97e5563df9..7cc5a272020 100644 --- a/mozilla/java/dom/nsJavaDOMImpl.h +++ b/mozilla/java/dom/nsJavaDOMImpl.h @@ -21,56 +21,29 @@ class nsJavaDOMImpl : public nsIJavaDOM { const char* aCommand); NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, -#ifdef NECKO nsIChannel* channel, nsresult aStatus, -#else - nsIURI* aURL, - PRInt32 aStatus, -#endif nsIDocumentLoaderObserver* aObserver); NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, -#ifdef NECKO nsIChannel* channel, -#else - nsIURI* aURL, - const char* aContentType, -#endif nsIContentViewer* aViewer); NS_IMETHOD OnProgressURLLoad(nsIDocumentLoader* loader, -#ifdef NECKO nsIChannel* channel, -#else - nsIURI* aURL, -#endif PRUint32 aProgress, PRUint32 aProgressMax); NS_IMETHOD OnStatusURLLoad(nsIDocumentLoader* loader, -#ifdef NECKO nsIChannel* channel, -#else - nsIURI* aURL, -#endif nsString& aMsg); NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, -#ifdef NECKO nsIChannel* channel, nsresult aStatus); -#else - nsIURI* aURL, - PRInt32 aStatus); -#endif NS_IMETHOD HandleUnknownContentType(nsIDocumentLoader* loader, -#ifdef NECKO nsIChannel* channel, -#else - nsIURI* aURL, -#endif const char *aContentType, const char *aCommand); @@ -78,17 +51,16 @@ class nsJavaDOMImpl : public nsIJavaDOM { static JavaVM* jvm; static JNIEnv* env; - static jclass factoryClass; + static jclass domAccessorClass; static jclass documentClass; static jclass listenerClass; static jclass gcClass; - static jobject factory; static jobject docListener; static jfieldID documentPtrFID; - static jmethodID getListenerMID; + static jmethodID getInstanceMID; static jmethodID startURLLoadMID; static jmethodID endURLLoadMID; static jmethodID progressURLLoadMID; diff --git a/mozilla/java/dom/nsWebShell.cpp.patch b/mozilla/java/dom/nsWebShell.cpp.patch index 79b2571411d..efef780fdcf 100644 --- a/mozilla/java/dom/nsWebShell.cpp.patch +++ b/mozilla/java/dom/nsWebShell.cpp.patch @@ -1,38 +1,28 @@ Index: nsWebShell.cpp =================================================================== RCS file: /cvsroot/mozilla/webshell/src/nsWebShell.cpp,v -retrieving revision 1.260 -diff -r1.260 nsWebShell.cpp -70a71,75 +retrieving revision 1.308 +diff -r1.308 nsWebShell.cpp +70a71,74 > #ifdef JAVA_DOM > #include "nsIJavaDOM.h" -> #include "nsJavaDOMCID.h" > #endif // JAVA_DOM > -554a560,564 +554a559,563 > #ifdef JAVA_DOM -> static NS_DEFINE_IID(kJavaDOMFactoryCID, NS_JAVADOMFACTORY_CID); +> static NS_DEFINE_IID(kJavaDOMCID, NS_JAVADOM_CID); > static NS_DEFINE_IID(kIJavaDOMIID, NS_IJAVADOM_IID); > #endif // JAVA_DOM > -566a577 +566a576 > -999a1011,1028 +958a969,977 > #ifdef JAVA_DOM -> nsISupports* javaDOM = nsnull; -> nsresult jrv = nsServiceManager::GetService(kJavaDOMFactoryCID, -> kIJavaDOMIID, -> (nsISupports**) &javaDOM); -> if (NS_FAILED(jrv) || !javaDOM) { -> fprintf(stderr, -> "nsWebShell::Init: GetService of JavaDOM failed (error %x)\n", -> jrv); -> } else { -> jrv = docLoaderService->AddObserver((nsIDocumentLoaderObserver*)javaDOM); -> if (NS_FAILED(jrv)) { -> fprintf(stderr, -> "nsWebShell::Init: AddObserver of JavaDOM failed (error %x)\n", -> jrv); -> } -> } +> nsresult jrv = NS_OK; +> NS_WITH_SERVICE(nsISupports, javaDOM, kJavaDOMCID, &jrv); +> if (NS_FAILED(jrv) || !javaDOM) { +> fprintf(stderr, +> "nsWebShell::Init: GetService of JavaDOM failed (error %x)\n", +> jrv); +> } > #endif // JAVA_DOM diff --git a/mozilla/java/dom/tests/src/TestDOMAccessorApplet.java b/mozilla/java/dom/tests/src/TestDOMAccessorApplet.java new file mode 100644 index 00000000000..d30f2bc6d5f --- /dev/null +++ b/mozilla/java/dom/tests/src/TestDOMAccessorApplet.java @@ -0,0 +1,41 @@ +/* + The contents of this file are subject to the Mozilla Public + License Version 1.1 (the "License"); you may not use this file + except in compliance with the License. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS + IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. + + The Original Code is mozilla.org code. + + The Initial Developer of the Original Code is Sun Microsystems, + Inc. Portions created by Sun are + Copyright (C) 1999 Sun Microsystems, Inc. All + Rights Reserved. + + Contributor(s): +*/ + +package org.mozilla.dom.tests; + +import java.applet.Applet; +import org.mozilla.dom.DOMAccessor; +import org.mozilla.dom.DOMAccessorImpl; +import org.mozilla.dom.tests.TestDocLoadListener; + +public class TestDOMAccessorApplet extends java.applet.Applet +{ + private DOMAccessor accessor; + + public void init() + { + accessor = DOMAccessorImpl.getInstance(); + accessor.addDocumentLoadListener(new TestDocLoadListener()); + System.out.println("inited......"); + System.out.println("accsessor: " + accessor); + } +} + diff --git a/mozilla/java/dom/jni/DOMFactory.java b/mozilla/java/dom/tests/src/TestDocLoadListener.java similarity index 95% rename from mozilla/java/dom/jni/DOMFactory.java rename to mozilla/java/dom/tests/src/TestDocLoadListener.java index 6ba722f8358..2324c2b09a0 100644 --- a/mozilla/java/dom/jni/DOMFactory.java +++ b/mozilla/java/dom/tests/src/TestDocLoadListener.java @@ -19,7 +19,7 @@ Contributor(s): */ -package org.mozilla.dom; +package org.mozilla.dom.tests; import java.io.FileOutputStream; import java.io.BufferedOutputStream; @@ -33,9 +33,11 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; -public class DOMFactory implements DocumentLoadListener { +import org.mozilla.dom.DocumentLoadListener; - private static final boolean debug = false; +public class TestDocLoadListener implements DocumentLoadListener { + + private static final boolean debug = true; public DocumentLoadListener getDocumentLoadListener() { return this; @@ -54,11 +56,8 @@ public class DOMFactory implements DocumentLoadListener { url.toString() + " " + Integer.toHexString(status)); - if (url.endsWith(".xul") || - url.endsWith(".js") || - url.endsWith(".css") || - url.startsWith("file:")) return; - + if (!(url.endsWith(".xml") || url.endsWith(".html"))) return; + if (doc == null) return; Element element = doc.getDocumentElement(); if (element == null) return; diff --git a/mozilla/java/dom/tests/src/testa.html b/mozilla/java/dom/tests/src/testa.html new file mode 100644 index 00000000000..f3ef82488b5 --- /dev/null +++ b/mozilla/java/dom/tests/src/testa.html @@ -0,0 +1,11 @@ + + +This should run DOMAccessor test. + + Your browser is completely ignoring the <APPLET> tag! + + +