This checkin enables finding out the request method and response status
of a URL_LOAD event. I'm still working on getting the request body via
the nsIUploadChannel interface. Next step will be to get that working.
I'm currently running into problems where the END_URL event for a POST
doesn't have a status. I think this is because I'm using the
Navigation.post() method rather than simulating a user post by pressing
a form submit button.
A classes_spec/org/mozilla/webclient/impl/wrapper_native/NativeInputStream.java
A src_moz/NativeInputStreamImpl.cpp
- Class to enable reading the post body from the request.
M build.xml
- add NativeInputStream to JNI generation
M classes_spec/org/mozilla/webclient/PageInfoListener.java
* <p>This {@link DocumentLoadListener} subclass adds the ability to get
* detailed information on each event. </p>
*
* <p>The <code>eventData</code> property of the
* <code>DocumentLoadEvent</code> instance will be a
* <code>java.util.Map</code>. The following entries may be present in
* this map for the following <code>*_EVENT_MASK</code> types in
* <code>DocumentLoadEvent</code>.</p>
*
* <dl>
*
* <dt>For all <code>*_EVENT_MASK</code> types</dt>
*
* <dd><p>the map will contain an entry under the key "<code>URI</code>"
* without the quotes. This will be the fully qualified URI for the
* event. </p></dd>
*
* <dt>For <code>START_URL_LOAD</code> type</dt>
*
* <dd><p>The map will contain an entry under the key
* "<code>method</code>" without the quotes. This will be the request
* method for this event. The map will also contain an entry under the
* key "<code>headers</code>". This entry will be a
* <code>java.util.Map</code> of all the request headers.</p></dd>
*
* <dt>For <code>END_URL_LOAD</code> type</dt>
*
* <dd><p>The map will contain an entry under the key
* "<code>method</code>" without the quotes. This will be the request
* method for this event. The map will contain an entry under the key
* "<code>status</code>" without the quotes. This will be the response
* status string from the server, such as "<code>200 OK</code>". The
* map will also contain an entry under the key "<code>headers</code>".
* This entry will be a <code>java.util.Map</code> of all the response
* headers.</p></dd>
*
* </dl>
M src_moz/EmbedProgress.cpp
- leverage nsIHttpChannel methods to get request method, response
status, and post body.
M src_moz/Makefile.in
- add NativeInputStream
M src_share/jni_util.cpp
M src_share/jni_util.h
- new constants
- add variant of ThrowExceptionToJava that takes the exception class name.
M test/automated/src/classes/org/mozilla/webclient/DocumentLoadListenerTest.java
- new test content. Post related content commented out.
git-svn-id: svn://10.0.0.236/trunk@169991 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
107
mozilla/java/webclient/src_moz/NativeInputStreamImpl.cpp
Normal file
107
mozilla/java/webclient/src_moz/NativeInputStreamImpl.cpp
Normal file
@@ -0,0 +1,107 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* 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 RaptorCanvas.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Kirk Baker and
|
||||
* Ian Wilkinson. Portions created by Kirk Baker and Ian Wilkinson are
|
||||
* Copyright (C) 1999 Kirk Baker and Ian Wilkinson. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s): Kirk Baker <kbaker@eb.com>
|
||||
* Ian Wilkinson <iw@ennoble.com>
|
||||
* Mark Lin <mark.lin@eng.sun.com>
|
||||
* Mark Goddard
|
||||
* Ed Burns <edburns@acm.org>
|
||||
* Ashutosh Kulkarni <ashuk@eng.sun.com>
|
||||
* Kyle Yuan <kyle.yuan@sun.com>
|
||||
*/
|
||||
|
||||
/*
|
||||
* NativeInputStreamImpl.cpp
|
||||
*/
|
||||
|
||||
#include "org_mozilla_webclient_impl_wrapper_0005fnative_NativeInputStream.h"
|
||||
|
||||
#include <nsIInputStream.h>
|
||||
#include "ns_util.h"
|
||||
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_webclient_impl_wrapper_1native_NativeInputStream_nativeRead
|
||||
(JNIEnv *env, jobject obj, jint nativeInputStream, jbyteArray buf, jint off,
|
||||
jint len)
|
||||
{
|
||||
nsIInputStream *stream = (nsIInputStream *) nativeInputStream;
|
||||
nsresult rv = NS_OK;
|
||||
PRUint32 ret;
|
||||
|
||||
char *cbuf = new char[len];
|
||||
jbyte *jbytes = new jbyte[len];
|
||||
int i = 0;
|
||||
// initialize the array
|
||||
for (i = 0; i < len; i++) {
|
||||
cbuf[i] = 0;
|
||||
jbytes[i] = 0;
|
||||
}
|
||||
// call the mozilla method
|
||||
if (NS_SUCCEEDED(rv = stream->Read(cbuf, len, &ret))) {
|
||||
// copy the chars to jbytes
|
||||
for (i = 0; i < ret; i++) {
|
||||
jbytes[i] = (jbyte) cbuf[i];
|
||||
}
|
||||
// copy the jbytes to the return back to java
|
||||
env->SetByteArrayRegion(buf, off, ret, jbytes);
|
||||
}
|
||||
else {
|
||||
::util_ThrowExceptionToJava(env, "java/io/IOException",
|
||||
"can't Read from native Stream");
|
||||
}
|
||||
|
||||
return (jint) ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_webclient_impl_wrapper_0005fnative_NativeInputStream
|
||||
* Method: nativeAvailable
|
||||
* Signature: (I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_webclient_impl_wrapper_1native_NativeInputStream_nativeAvailable
|
||||
(JNIEnv *env, jobject obj, jint nativeInputStream)
|
||||
{
|
||||
nsIInputStream *stream = (nsIInputStream *) nativeInputStream;
|
||||
nsresult rv = NS_OK;
|
||||
PRUint32 result = -1;
|
||||
|
||||
if (NS_FAILED(rv = stream->Available(&result))) {
|
||||
::util_ThrowExceptionToJava(env, "java/io/IOException",
|
||||
"can't get Available from native Stream");
|
||||
}
|
||||
|
||||
return (jint) result;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_webclient_impl_wrapper_1native_NativeInputStream_nativeClose
|
||||
(JNIEnv *env, jobject obj, jint nativeInputStream)
|
||||
{
|
||||
nsIInputStream *stream = (nsIInputStream *) nativeInputStream;
|
||||
nsresult rv = NS_OK;
|
||||
PRUint32 result = -1;
|
||||
|
||||
if (NS_SUCCEEDED(rv = stream->Close())) {
|
||||
stream->Release();
|
||||
}
|
||||
else {
|
||||
::util_ThrowExceptionToJava(env, "java/io/IOException",
|
||||
"can't get Available from native Stream");
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user