From 9b782a05a88ce6c011ac3e4bc9c92040e881cff0 Mon Sep 17 00:00:00 2001 From: "edburns%acm.org" Date: Sun, 13 Mar 2005 17:56:16 +0000 Subject: [PATCH] This checkin enables obtaining an InputStream to read the POST body from a request on the END_URL_LOAD event. Please see for an example. Next step is to clean up the javadocs. A webclient/test/automated/src/test/DocumentLoadListenerTest0.html M webclient/src_moz/EmbedProgress.cpp M webclient/test/automated/src/classes/org/mozilla/util/THTTPD.java M webclient/test/automated/src/classes/org/mozilla/webclient/DocumentLoadListenerTest.java git-svn-id: svn://10.0.0.236/trunk@170610 18797224-902f-48f8-a5cc-f745e15eee43 --- .../java/webclient/src_moz/EmbedProgress.cpp | 10 +- .../src/classes/org/mozilla/util/THTTPD.java | 10 +- .../webclient/DocumentLoadListenerTest.java | 313 +++++++++++++----- .../src/test/DocumentLoadListenerTest0.html | 20 ++ 4 files changed, 261 insertions(+), 92 deletions(-) create mode 100644 mozilla/java/webclient/test/automated/src/test/DocumentLoadListenerTest0.html diff --git a/mozilla/java/webclient/src_moz/EmbedProgress.cpp b/mozilla/java/webclient/src_moz/EmbedProgress.cpp index 53c63ccdeef..77e78c3c28d 100644 --- a/mozilla/java/webclient/src_moz/EmbedProgress.cpp +++ b/mozilla/java/webclient/src_moz/EmbedProgress.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include "nsIURI.h" @@ -190,7 +191,6 @@ EmbedProgress::OnStateChange(nsIWebProgress *aWebProgress, (jobject) &(mOwner->GetWrapperFactory()->shareContext)); } - } util_SendEventToJava(nsnull, @@ -255,6 +255,13 @@ EmbedProgress::OnStateChange(nsIWebProgress *aWebProgress, jmethodID jID; pStream = (jint) uploadStream; uploadStream->AddRef(); + // rewind upload stream + nsCOMPtr seekable = + do_QueryInterface(uploadStream); + if (seekable) { + seekable->Seek(nsISeekableStream::NS_SEEK_SET, 0); + } + if (clazz = env->FindClass("org/mozilla/webclient/impl/wrapper_native/NativeInputStream")) { if (jID = env->GetMethodID(clazz, "", "(I)V")) { if (streamObj = env->NewObject(clazz,jID,pStream)){ @@ -272,7 +279,6 @@ EmbedProgress::OnStateChange(nsIWebProgress *aWebProgress, } } } - } util_SendEventToJava(nsnull, diff --git a/mozilla/java/webclient/test/automated/src/classes/org/mozilla/util/THTTPD.java b/mozilla/java/webclient/test/automated/src/classes/org/mozilla/util/THTTPD.java index 667b1a9747c..b34b309071b 100644 --- a/mozilla/java/webclient/test/automated/src/classes/org/mozilla/util/THTTPD.java +++ b/mozilla/java/webclient/test/automated/src/classes/org/mozilla/util/THTTPD.java @@ -1,5 +1,5 @@ /* - * $Id: THTTPD.java,v 1.5 2004-09-03 19:04:21 edburns%acm.org Exp $ + * $Id: THTTPD.java,v 1.6 2005-03-13 17:56:16 edburns%acm.org Exp $ */ /* @@ -136,13 +136,7 @@ public class THTTPD extends Object { switch (getRequestMethod(requestLine)) { case REQUEST_POST: - while (null != (curLine = requestReader.readLine())) { - requestData.append(curLine); - if (socketInputStream.available() <= 0 || - curLine.trim().length() == 0) { - break; - } - } + System.out.println("THTTPD: POST"); // intentional fall through! case REQUEST_GET: responseWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); diff --git a/mozilla/java/webclient/test/automated/src/classes/org/mozilla/webclient/DocumentLoadListenerTest.java b/mozilla/java/webclient/test/automated/src/classes/org/mozilla/webclient/DocumentLoadListenerTest.java index 7595f9e4471..0a590d375ca 100644 --- a/mozilla/java/webclient/test/automated/src/classes/org/mozilla/webclient/DocumentLoadListenerTest.java +++ b/mozilla/java/webclient/test/automated/src/classes/org/mozilla/webclient/DocumentLoadListenerTest.java @@ -1,5 +1,5 @@ /* - * $Id: DocumentLoadListenerTest.java,v 1.3 2005-02-28 17:15:45 edburns%acm.org Exp $ + * $Id: DocumentLoadListenerTest.java,v 1.4 2005-03-13 17:56:16 edburns%acm.org Exp $ */ /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -40,6 +40,10 @@ import java.io.File; import java.io.FileInputStream; import java.io.InputStream; +import java.awt.Robot; +import java.awt.event.InputEvent; + + // DocumentLoadListenerTest.java public class DocumentLoadListenerTest extends WebclientTestCase { @@ -68,6 +72,12 @@ public class DocumentLoadListenerTest extends WebclientTestCase { // Constants // + static final int IN_X = 20; + static final int IN_Y = 117; + + static final int OUT_X = 700; + static final int OUT_Y = 500; + // // Testcases // @@ -134,11 +144,33 @@ public class DocumentLoadListenerTest extends WebclientTestCase { BrowserControlFactory.deleteBrowserControl(firstBrowserControl); } + public static final int HAS_START_EVENT_DATA = 0; + public static final int HAS_END_EVENT_DATA = 1; + public static final int START_EVENT_DATA_IS_MAP = 2; + public static final int END_EVENT_DATA_IS_MAP = 3; + public static final int START_HAS_REQUEST_METHOD = 4; + public static final int END_HAS_REQUEST_METHOD = 5; + public static final int START_REQUEST_METHOD_IS_CORRECT = 6; + public static final int END_REQUEST_METHOD_IS_CORRECT = 7; + public static final int START_URI_IS_CORRECT = 8; + public static final int END_URI_IS_CORRECT = 9; + public static final int HAS_REQUEST_HEADERS = 10; + public static final int HAS_RESPONSE_HEADERS = 12; + public static final int REQUEST_HEADERS_IS_MAP = 13; + public static final int RESPONSE_HEADERS_IS_MAP = 14; + public static final int REQUEST_HEADERS_ARE_CORRECT = 15; + public static final int RESPONSE_HEADERS_ARE_CORRECT = 16; + public static final int HAS_POST_BODY = 17; + public static final int HAS_RESPONSE_CODE = 18; + public static final int RESPONSE_CODE_IS_CORRECT = 19; + public static final int END_DOCUMENT_URI_IS_CORRECT = 20; + public void testPageInfoListener() throws Exception { BrowserControl firstBrowserControl = null; DocumentLoadListener listener = null; Selection selection = null; final StringBuffer methodToCheck = new StringBuffer(); + final StringBuffer url = new StringBuffer("http://localhost:5243/HttpNavigationTest.txt"); final BitSet listenerResult = new BitSet(); firstBrowserControl = BrowserControlFactory.newBrowserControl(); assertNotNull(firstBrowserControl); @@ -163,35 +195,46 @@ public class DocumentLoadListenerTest extends WebclientTestCase { // try loading a file over HTTP // - DocumentLoadListenerTest.keepWaiting = true; - final String url = "http://localhost:5243/HttpNavigationTest.txt"; - eventRegistration.addDocumentLoadListener(listener = new PageInfoListener() { public void eventDispatched(WebclientEvent event) { Map map = null; Iterator iter = null; Object requestMethod; + Object responseCode; if (event instanceof DocumentLoadEvent) { switch ((int) event.getType()) { case ((int) DocumentLoadEvent.START_URL_LOAD_EVENT_MASK): // do we have eventData? - assertNotNull(event.getEventData()); + listenerResult.set(HAS_START_EVENT_DATA, + null != event.getEventData()); // is it a map? - assertTrue(event.getEventData() instanceof Map); + listenerResult.set(START_EVENT_DATA_IS_MAP, + event.getEventData() instanceof + Map); map = (Map) event.getEventData(); - // does it have a URI entry? - assertEquals(url, map.get("URI")); + // does it have a method entry requestMethod = map.get("method"); - assertNotNull(requestMethod); + listenerResult.set(START_HAS_REQUEST_METHOD, + null != requestMethod); + // is it the expected value? - assertEquals(methodToCheck.toString(), - requestMethod.toString()); + listenerResult.set(START_REQUEST_METHOD_IS_CORRECT, + methodToCheck.toString().equals(requestMethod.toString())); + + System.out.println("START_URL_LOAD: request method: " + + requestMethod); + + // does it have a URI entry? + listenerResult.set(START_URI_IS_CORRECT, + url.toString().equals(map.get("URI")));; // does it have a headers entry? - assertNotNull(map.get("headers")); + listenerResult.set(HAS_REQUEST_HEADERS, + null != map.get("headers")); // is it a map? - assertTrue(map.get("headers") instanceof Map); + listenerResult.set(REQUEST_HEADERS_IS_MAP, + map.get("headers") instanceof Map); iter = (map = (Map) map.get("headers")).keySet().iterator(); boolean hadCorrectHostHeader = false; while (iter.hasNext()) { @@ -203,77 +246,39 @@ public class DocumentLoadListenerTest extends WebclientTestCase { } } // does it have the correct entry? - assertTrue(hadCorrectHostHeader); + listenerResult.set(REQUEST_HEADERS_ARE_CORRECT, + hadCorrectHostHeader); + break; case ((int) DocumentLoadEvent.END_URL_LOAD_EVENT_MASK): // do we have eventData? - assertNotNull(event.getEventData()); + listenerResult.set(HAS_END_EVENT_DATA, + null != event.getEventData()); // is it a map? - assertTrue(event.getEventData() instanceof Map); + listenerResult.set(END_EVENT_DATA_IS_MAP, + event.getEventData() instanceof + Map); map = (Map) event.getEventData(); - // do we have a URI entry? - assertEquals(url, map.get("URI")); - + // do we have a method entry requestMethod = map.get("method"); - assertNotNull(requestMethod); + listenerResult.set(END_HAS_REQUEST_METHOD, + null != requestMethod); + // is it the expected value - assertEquals(methodToCheck.toString(), - requestMethod.toString()); - - if (requestMethod.equals("GET")) { - // do we have a status entry - Object responseCode = map.get("status"); - assertNotNull(responseCode); - assertEquals("200 OK",responseCode.toString()); - } - - // do we have a headers entry? - assertNotNull(map.get("headers")); - assertTrue(map.get("headers") instanceof Map); - iter = (map = (Map) map.get("headers")).keySet().iterator(); - boolean hadCorrectServerHeader = false; - while (iter.hasNext()) { - String curName = iter.next().toString(); - if (curName.equals("Server")) { - if (-1 != map.get(curName).toString().indexOf("THTTPD")) { - hadCorrectServerHeader = true; - } - } - System.out.println("\t" + curName + - ": " + - map.get(curName)); - } - assertTrue(hadCorrectServerHeader); - break; - case ((int) DocumentLoadEvent.END_DOCUMENT_LOAD_EVENT_MASK): - // do we have eventData? - assertNotNull(event.getEventData()); - // is it a map? - assertTrue(event.getEventData() instanceof Map); - map = (Map) event.getEventData(); - // do we have a URI entry? - assertEquals(url, map.get("URI")); + listenerResult.set(END_REQUEST_METHOD_IS_CORRECT, + methodToCheck.toString().equals(requestMethod.toString())); - // do we have a method entry - requestMethod = map.get("method"); - assertNotNull(requestMethod); - // is it the expected value - assertEquals(methodToCheck.toString(), - requestMethod.toString()); + System.out.println("END_URL_LOAD request method: " + + requestMethod); - // do we have a status entry - Object responseCode = map.get("status"); - assertNotNull(responseCode); - assertEquals("200 OK",responseCode.toString()); - - /** if (requestMethod.equals("POST")) { listenerResult.set(0); InputStream requestBody = (InputStream) map.get("requestBody"); - assertNotNull(requestBody); + listenerResult.set(HAS_POST_BODY, + null != requestBody); int avail; byte bytes[]; try { @@ -287,39 +292,183 @@ public class DocumentLoadListenerTest extends WebclientTestCase { fail(); } } - ***/ - break; + // do we have a URI entry? + listenerResult.set(END_URI_IS_CORRECT, + url.toString().equals(map.get("URI"))); + + // do we have a status entry + responseCode = map.get("status"); + + if (requestMethod.equals("GET")) { + // do we have a status entry + listenerResult.set(HAS_RESPONSE_CODE, + null != responseCode); + listenerResult.set(RESPONSE_CODE_IS_CORRECT, + responseCode.toString().equals("200 OK")); + } + + // do we have a headers entry? + listenerResult.set(HAS_RESPONSE_HEADERS, + null != map.get("headers")); + listenerResult.set(RESPONSE_HEADERS_IS_MAP, + map.get("headers") instanceof Map); + iter = (map = (Map) map.get("headers")).keySet().iterator(); + boolean hadCorrectResponseHeader = false; + while (iter.hasNext()) { + String curName = iter.next().toString(); + if (curName.equals("Server")) { + if (-1 != map.get(curName).toString().indexOf("THTTPD")) { + hadCorrectResponseHeader = true; + } + } + System.out.println("\t" + curName + + ": " + + map.get(curName)); + } + listenerResult.set(RESPONSE_HEADERS_ARE_CORRECT, + hadCorrectResponseHeader); + + break; + case ((int) DocumentLoadEvent.END_DOCUMENT_LOAD_EVENT_MASK): + map = (Map) event.getEventData(); + // do we have a URI entry? + listenerResult.set(END_DOCUMENT_URI_IS_CORRECT, + url.toString().equals(map.get("URI"))); + + DocumentLoadListenerTest.keepWaiting = false; + break; } } - DocumentLoadListenerTest.keepWaiting = false; } }); Thread.currentThread().sleep(3000); + DocumentLoadListenerTest.keepWaiting = true; methodToCheck.replace(0, methodToCheck.length(), "GET"); System.out.println("++++++++++ Testing GET to " + url); - nav.loadURL(url); - + listenerResult.clear(); + nav.loadURL(url.toString()); + // keep waiting until the previous load completes while (DocumentLoadListenerTest.keepWaiting) { Thread.currentThread().sleep(1000); } + // START_URL_LOAD tests + assertTrue(listenerResult.get(HAS_START_EVENT_DATA)); + assertTrue(listenerResult.get(START_EVENT_DATA_IS_MAP)); + assertTrue(listenerResult.get(START_HAS_REQUEST_METHOD)); + assertTrue(listenerResult.get(START_REQUEST_METHOD_IS_CORRECT)); + assertTrue(listenerResult.get(START_URI_IS_CORRECT)); + assertTrue(listenerResult.get(HAS_REQUEST_HEADERS)); + assertTrue(listenerResult.get(REQUEST_HEADERS_IS_MAP)); + assertTrue(listenerResult.get(REQUEST_HEADERS_ARE_CORRECT)); + + // END_URL_LOAD tests + assertTrue(listenerResult.get(HAS_END_EVENT_DATA)); + assertTrue(listenerResult.get(END_EVENT_DATA_IS_MAP)); + assertTrue(listenerResult.get(END_HAS_REQUEST_METHOD)); + assertTrue(listenerResult.get(END_REQUEST_METHOD_IS_CORRECT)); + assertTrue(listenerResult.get(END_URI_IS_CORRECT)); + assertTrue(listenerResult.get(HAS_RESPONSE_CODE)); + assertTrue(listenerResult.get(RESPONSE_CODE_IS_CORRECT)); + assertTrue(listenerResult.get(HAS_RESPONSE_HEADERS)); + assertTrue(listenerResult.get(RESPONSE_HEADERS_IS_MAP)); + assertTrue(listenerResult.get(RESPONSE_HEADERS_ARE_CORRECT)); + + // END_DOCUMENT_LOAD tests + assertTrue(listenerResult.get(END_DOCUMENT_URI_IS_CORRECT)); + Thread.currentThread().sleep(3000); - /********** - methodToCheck.replace(0, methodToCheck.length(), "POST"); - System.out.println("++++++++++ Testing POST to " + url); - nav.post(url, null, "PostData\r\n", "X-WakaWaka: true\r\n\r\n"); - + DocumentLoadListenerTest.keepWaiting = true; + url.replace(0, url.length(), + "http://localhost:5243/DocumentLoadListenerTest0.html"); + methodToCheck.replace(0, methodToCheck.length(), "GET"); + listenerResult.clear(); + nav.loadURL(url.toString()); + // keep waiting until the previous load completes - while (NavigationTest.keepWaiting) { + while (DocumentLoadListenerTest.keepWaiting) { Thread.currentThread().sleep(1000); } - assertTrue(listenerResult.get(0)); - **********/ + + // START_URL_LOAD tests + assertTrue(listenerResult.get(HAS_START_EVENT_DATA)); + assertTrue(listenerResult.get(START_EVENT_DATA_IS_MAP)); + assertTrue(listenerResult.get(START_HAS_REQUEST_METHOD)); + assertTrue(listenerResult.get(START_REQUEST_METHOD_IS_CORRECT)); + assertTrue(listenerResult.get(START_URI_IS_CORRECT)); + assertTrue(listenerResult.get(HAS_REQUEST_HEADERS)); + assertTrue(listenerResult.get(REQUEST_HEADERS_IS_MAP)); + assertTrue(listenerResult.get(REQUEST_HEADERS_ARE_CORRECT)); + + // END_URL_LOAD tests + assertTrue(listenerResult.get(HAS_END_EVENT_DATA)); + assertTrue(listenerResult.get(END_EVENT_DATA_IS_MAP)); + assertTrue(listenerResult.get(END_HAS_REQUEST_METHOD)); + assertTrue(listenerResult.get(END_REQUEST_METHOD_IS_CORRECT)); + assertTrue(listenerResult.get(END_URI_IS_CORRECT)); + assertTrue(listenerResult.get(HAS_RESPONSE_CODE)); + assertTrue(listenerResult.get(RESPONSE_CODE_IS_CORRECT)); + assertTrue(listenerResult.get(HAS_RESPONSE_HEADERS)); + assertTrue(listenerResult.get(RESPONSE_HEADERS_IS_MAP)); + assertTrue(listenerResult.get(RESPONSE_HEADERS_ARE_CORRECT)); + + // END_DOCUMENT_LOAD tests + assertTrue(listenerResult.get(END_DOCUMENT_URI_IS_CORRECT)); + + DocumentLoadListenerTest.keepWaiting = true; + + System.out.println("++++++++++ Testing POST to " + url); + + // press the submit button + listenerResult.clear(); + url.replace(0, url.length(), + "http://localhost:5243/HistoryTest0.html"); + methodToCheck.replace(0, methodToCheck.length(), "POST"); + + Robot robot = new Robot(); + robot.mouseMove(IN_X, IN_Y); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + + // keep waiting until the previous load completes + while (DocumentLoadListenerTest.keepWaiting) { + Thread.currentThread().sleep(1000); + } + + // START_URL_LOAD tests + assertTrue(listenerResult.get(HAS_START_EVENT_DATA)); + assertTrue(listenerResult.get(START_EVENT_DATA_IS_MAP)); + assertTrue(listenerResult.get(START_HAS_REQUEST_METHOD)); + assertTrue(listenerResult.get(START_REQUEST_METHOD_IS_CORRECT)); + assertTrue(listenerResult.get(START_URI_IS_CORRECT)); + assertTrue(listenerResult.get(HAS_REQUEST_HEADERS)); + assertTrue(listenerResult.get(REQUEST_HEADERS_IS_MAP)); + assertTrue(listenerResult.get(REQUEST_HEADERS_ARE_CORRECT)); + + // END_URL_LOAD tests + assertTrue(listenerResult.get(HAS_END_EVENT_DATA)); + assertTrue(listenerResult.get(END_EVENT_DATA_IS_MAP)); + assertTrue(listenerResult.get(END_HAS_REQUEST_METHOD)); + assertTrue(listenerResult.get(END_REQUEST_METHOD_IS_CORRECT)); + assertTrue(listenerResult.get(HAS_POST_BODY)); + assertTrue(listenerResult.get(END_URI_IS_CORRECT)); + // For some reason, there is no response code when the method is POST + // assertTrue(listenerResult.get(HAS_RESPONSE_CODE)); + // assertTrue(listenerResult.get(RESPONSE_CODE_IS_CORRECT)); + assertTrue(listenerResult.get(HAS_RESPONSE_HEADERS)); + assertTrue(listenerResult.get(RESPONSE_HEADERS_IS_MAP)); + // For some reason, no response headers when the method is POST + // assertTrue(listenerResult.get(RESPONSE_HEADERS_ARE_CORRECT)); + + // END_DOCUMENT_LOAD tests + assertTrue(listenerResult.get(END_DOCUMENT_URI_IS_CORRECT)); + + eventRegistration.removeDocumentLoadListener(listener); diff --git a/mozilla/java/webclient/test/automated/src/test/DocumentLoadListenerTest0.html b/mozilla/java/webclient/test/automated/src/test/DocumentLoadListenerTest0.html new file mode 100644 index 00000000000..0b8e8f8194e --- /dev/null +++ b/mozilla/java/webclient/test/automated/src/test/DocumentLoadListenerTest0.html @@ -0,0 +1,20 @@ + + + + DocumentLoadListenerTest0 + + + +

DocumentLoadListenerTest0

+ +
+ +

+ +

+ +
+
+ +