diff --git a/mozilla/java/dom/jni/javaDOMEventsGlobals.cpp b/mozilla/java/dom/jni/javaDOMEventsGlobals.cpp index c7977d4b9bb..ce5b39dc0db 100644 --- a/mozilla/java/dom/jni/javaDOMEventsGlobals.cpp +++ b/mozilla/java/dom/jni/javaDOMEventsGlobals.cpp @@ -160,14 +160,15 @@ void JavaDOMEventsGlobals::Destroy(JNIEnv *env) //returns true if specified event "type" exists in the given list of types // NOTE: it is assumed that "types" list is enden with NULL -static jboolean isEventOfType(const char* const* types, const char* type) +static jboolean isEventOfType(const char* const* types, nsString &type) { int i=0; - while (type && types && types[i]) { - if (!strcmp(type,types[i])) - return JNI_TRUE; - i++; + while (types && types[i]) { + if (type.EqualsIgnoreCase(types[i], strlen(types[i]))) { + return JNI_TRUE; + } + i++; } return JNI_FALSE; @@ -212,7 +213,7 @@ jobject JavaDOMEventsGlobals::CreateEventSubtype(JNIEnv *env, NULL }; - nsString eventType; + nsAutoString eventType; rv = event->GetType(eventType); if (NS_FAILED(rv)) { JavaDOMGlobals::ThrowException(env, @@ -220,19 +221,16 @@ jobject JavaDOMEventsGlobals::CreateEventSubtype(JNIEnv *env, return NULL; } - char* buffer = (char *) eventType.get(); - - if (isEventOfType(mouseEventTypes, buffer) == JNI_TRUE) { + if (isEventOfType(mouseEventTypes, eventType) == JNI_TRUE) { clazz = mouseEventClass; - } else if (isEventOfType(uiEventTypes, buffer) == JNI_TRUE) { + } else if (isEventOfType(uiEventTypes, eventType) == JNI_TRUE) { clazz = uiEventClass; } else { PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING, - ("Unknown type of UI event (%s)", buffer)); + ("Unknown type of UI event")); clazz = uiEventClass; } - nsMemory::Free(buffer); event->Release(); event = (nsIDOMEvent *) target; diff --git a/mozilla/java/webclient/src_moz/AjaxListener.cpp b/mozilla/java/webclient/src_moz/AjaxListener.cpp index f16b0d91a61..00cb624bbca 100755 --- a/mozilla/java/webclient/src_moz/AjaxListener.cpp +++ b/mozilla/java/webclient/src_moz/AjaxListener.cpp @@ -34,6 +34,7 @@ #include "nsIXMLHTTPRequest.h" #include "nsIInterfaceRequestor.h" #include "nsIDOMEvent.h" +#include "nsIDOMDocument.h" #include "NativeBrowserControl.h" #include "NativeWrapperFactory.h" @@ -214,6 +215,11 @@ AjaxListener::ObserveAjax(nsIRequest *request, PRInt32 readyState = 0; char buf[20]; jstring jStr = nsnull; + nsCOMPtr domDocument; + jlong documentLong = nsnull; + jclass clazz = nsnull; + jmethodID mid = nsnull; + jobject javaDOMDocument; browserControl->ContentStateChange(); @@ -300,6 +306,38 @@ AjaxListener::ObserveAjax(nsIRequest *request, (jobject) pShareContext); } + + // store the response xml + if (NS_SUCCEEDED(rv=ajax->GetResponseXML(getter_AddRefs(domDocument)))){ + documentLong = (jlong) domDocument.get(); + + if (nsnull == (clazz = + ::util_FindClass(mJNIEnv, + "org/mozilla/dom/DOMAccessor"))) { + ::util_ThrowExceptionToJava(mJNIEnv, "Exception: Can't get DOMAccessor class"); + return nsnull; + } + if (nsnull==(mid = + mJNIEnv->GetStaticMethodID(clazz, "getNodeByHandle", + "(J)Lorg/w3c/dom/Node;"))){ + ::util_ThrowExceptionToJava(mJNIEnv, "Exception: Can't get DOM Node."); + return nsnull; + } + + javaDOMDocument = (jobject) + util_CallStaticObjectMethodlongArg(mJNIEnv, + clazz, mid, + documentLong); + javaDOMDocument = ::util_NewGlobalRef(mJNIEnv, javaDOMDocument); + if (nsnull != javaDOMDocument) { + ::util_StoreIntoPropertiesObject(mJNIEnv, properties, + RESPONSE_XML_KEY, + javaDOMDocument, + (jobject) pShareContext); + } + + } + } DOCUMENT_LOADER_EVENT_MASK_NAMES maskValue = END_AJAX_EVENT_MASK; diff --git a/mozilla/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java b/mozilla/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java index 19fbf18a6b4..cd33ba8b3fc 100644 --- a/mozilla/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java +++ b/mozilla/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java @@ -33,6 +33,7 @@ import java.util.Map; import java.util.Iterator; import org.w3c.dom.DOMException; +import org.w3c.dom.Document; import org.w3c.dom.Node; import org.mozilla.webclient.*; @@ -74,6 +75,7 @@ public class TestBrowser extends JPanel { JButton jBackButton = new JButton("Back", new ImageIcon(getClass().getResource("images/Back.png"))); JButton jCopyButton = new JButton("Copy"); + JButton jDOMButton = new JButton("Show DOM"); JPanel jAddressPanel = new JPanel(); JLabel jAddressLabel = new JLabel(); @@ -163,6 +165,12 @@ public class TestBrowser extends JPanel { jCopyButton.setMaximumSize(new Dimension(75, 27)); jCopyButton.setPreferredSize(new Dimension(75, 27)); jCopyButton.addActionListener(new TestBrowser_jCopyButton_actionAdapter(this)); + + jDOMButton.setToolTipText("Copy current selection"); + jDOMButton.setHorizontalTextPosition(SwingConstants.TRAILING); + jDOMButton.setMaximumSize(new Dimension(75, 27)); + jDOMButton.setPreferredSize(new Dimension(75, 27)); + jDOMButton.addActionListener(new TestBrowser_jDOMButton_actionAdapter(this)); jForwardButton.setToolTipText("Go forward one page"); jForwardButton.setEnabled(false); @@ -204,6 +212,8 @@ public class TestBrowser extends JPanel { jBrowserToolBar.add(jStopButton, null); jBrowserToolBar.add(jViewSourceButton, null); jBrowserToolBar.add(jCopyButton, null); + jBrowserToolBar.add(jDOMButton, null); + jBrowserToolBar.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(2, 2, 2, 0))); @@ -246,6 +256,11 @@ public class TestBrowser extends JPanel { map.get("status")); System.out.println("responseText: " + map.get("responseText")); + Document responseDOM = (Document) map.get("responseXML"); + if (null != responseDOM) { + DOMViewerFrame domViewer = getDOMViewerFrame(); + domViewer.setDocument(responseDOM); + } // INTENTIONAL FALL THROUGH case ((int) DocumentLoadEvent.START_AJAX_EVENT_MASK): System.out.println("requestMethod: " + @@ -468,6 +483,21 @@ public class TestBrowser extends JPanel { currentPage.copyCurrentSelectionToSystemClipboard(); } + void jDOMButton_actionPerformed(ActionEvent e) { + Document doc = currentPage.getDOM(); + DOMViewerFrame viewer = getDOMViewerFrame(); + viewer.setDocument(doc); + viewer.setVisible(true); + } + + private DOMViewerFrame getDOMViewerFrame() { + if (null == domViewer) { + domViewer = new DOMViewerFrame("DOM Viewer", this); + domViewer.setSize(new Dimension(300, 600)); + domViewer.setLocation(645, 0); + } + return domViewer; + } void jForwardButton_actionPerformed(ActionEvent e) { history.forward(); @@ -487,18 +517,7 @@ public class TestBrowser extends JPanel { System.out.println(source); /***** if (null != doc) { - Document doc = currentPage.getDOM(); - currentPage.selectAll(); - Selection selection = currentPage.getSelection(); - System.out.println(selection.toString()); - - if (null == domViewer) { - domViewer = new DOMViewerFrame("DOM Viewer", this); - domViewer.setSize(new Dimension(300, 600)); - domViewer.setLocation(645, 0); - } - domViewer.setDocument(doc); - domViewer.setVisible(true); + } ******/ } @@ -547,6 +566,17 @@ class TestBrowser_jCopyButton_actionAdapter implements java.awt.event.ActionList } } +class TestBrowser_jDOMButton_actionAdapter implements java.awt.event.ActionListener { + TestBrowser adaptee; + + TestBrowser_jDOMButton_actionAdapter(TestBrowser adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jDOMButton_actionPerformed(e); + } +} class TestBrowser_jForwardButton_actionAdapter implements java.awt.event.ActionListener { TestBrowser adaptee;