зеркало из https://github.com/mozilla/gecko-dev.git
Bug 664163: Yes this will get backed out: see bug. r=jdm
This commit is contained in:
Родитель
2f19124e5e
Коммит
95eecd06bc
|
@ -287,10 +287,18 @@ HttpChannelChild::OnStartRequest(const nsHttpResponseHead& responseHead,
|
|||
getter_AddRefs(mSecurityInfo));
|
||||
}
|
||||
|
||||
// Sanity check: we should have either set both remote/local socket addresses
|
||||
// or neither of them.
|
||||
if (selfAddr.raw.family != peerAddr.raw.family) {
|
||||
NS_RUNTIMEABORT("Child: socket has multiple address families!");
|
||||
}
|
||||
|
||||
mIsFromCache = isFromCache;
|
||||
mCacheEntryAvailable = cacheEntryAvailable;
|
||||
mCacheExpirationTime = cacheExpirationTime;
|
||||
mCachedCharset = cachedCharset;
|
||||
mSelfAddr = selfAddr;
|
||||
mPeerAddr = peerAddr;
|
||||
|
||||
AutoEventEnqueuer ensureSerialDispatch(mEventQ);
|
||||
|
||||
|
@ -313,9 +321,6 @@ HttpChannelChild::OnStartRequest(const nsHttpResponseHead& responseHead,
|
|||
rv = ApplyContentConversions();
|
||||
if (NS_FAILED(rv))
|
||||
Cancel(rv);
|
||||
|
||||
mSelfAddr = selfAddr;
|
||||
mPeerAddr = peerAddr;
|
||||
}
|
||||
|
||||
class TransportAndDataEvent : public ChannelEvent
|
||||
|
@ -1113,36 +1118,6 @@ HttpChannelChild::SetupFallbackChannel(const char *aFallbackKey)
|
|||
DROP_DEAD();
|
||||
}
|
||||
|
||||
// The next four _should_ be implemented, but we need to figure out how
|
||||
// to transfer the data from the chrome process first.
|
||||
|
||||
NS_IMETHODIMP
|
||||
HttpChannelChild::GetRemoteAddress(nsACString & _result)
|
||||
{
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
HttpChannelChild::GetRemotePort(PRInt32 * _result)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(_result);
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
HttpChannelChild::GetLocalAddress(nsACString & _result)
|
||||
{
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
HttpChannelChild::GetLocalPort(PRInt32 * _result)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(_result);
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// HttpChannelChild::nsICacheInfoChannel
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
@ -106,10 +106,6 @@ public:
|
|||
bool aMerge);
|
||||
// nsIHttpChannelInternal
|
||||
NS_IMETHOD SetupFallbackChannel(const char *aFallbackKey);
|
||||
NS_IMETHOD GetLocalAddress(nsACString& addr);
|
||||
NS_IMETHOD GetLocalPort(PRInt32* port);
|
||||
NS_IMETHOD GetRemoteAddress(nsACString& addr);
|
||||
NS_IMETHOD GetRemotePort(PRInt32* port);
|
||||
// nsISupportsPriority
|
||||
NS_IMETHOD SetPriority(PRInt32 value);
|
||||
// nsIResumableChannel
|
||||
|
|
|
@ -450,6 +450,15 @@ HttpChannelParent::OnStartRequest(nsIRequest *aRequest, nsISupports *aContext)
|
|||
}
|
||||
|
||||
nsHttpChannel *httpChan = static_cast<nsHttpChannel *>(mChannel.get());
|
||||
|
||||
// Sanity check: we should have either set both remote/local socket addresses
|
||||
// or neither of them.
|
||||
PRNetAddr selfAddr = httpChan->GetSelfAddr();
|
||||
PRNetAddr peerAddr = httpChan->GetPeerAddr();
|
||||
if (selfAddr.raw.family != peerAddr.raw.family) {
|
||||
NS_RUNTIMEABORT("Parent: socket has multiple address families!");
|
||||
}
|
||||
|
||||
if (mIPCClosed ||
|
||||
!SendOnStartRequest(responseHead ? *responseHead : nsHttpResponseHead(),
|
||||
!!responseHead,
|
||||
|
@ -457,7 +466,7 @@ HttpChannelParent::OnStartRequest(nsIRequest *aRequest, nsISupports *aContext)
|
|||
isFromCache,
|
||||
mCacheDescriptor ? true : false,
|
||||
expirationTime, cachedCharset, secInfoSerialization,
|
||||
httpChan->GetSelfAddr(), httpChan->GetPeerAddr()))
|
||||
selfAddr, peerAddr))
|
||||
{
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
|
|
|
@ -22,14 +22,42 @@ TracingListener.prototype = {
|
|||
|
||||
request.QueryInterface(Components.interfaces.nsIHttpChannelInternal);
|
||||
|
||||
// local/remote addresses broken in e10s: disable for now
|
||||
/*
|
||||
do_check_eq(request.localAddress, "127.0.0.1");
|
||||
do_check_eq(request.localPort > 0, true);
|
||||
do_check_neq(request.localPort, 4444);
|
||||
do_check_eq(request.remoteAddress, "127.0.0.1");
|
||||
do_check_eq(request.remotePort, 4444);
|
||||
*/
|
||||
var localAddr = "unknown";
|
||||
var localPort = "unknown";
|
||||
var remoteAddr = "unknown";
|
||||
var remotePort = "unknown";
|
||||
try {
|
||||
localAddr = request.localAddress;
|
||||
dump("got local address\n");
|
||||
} catch(e) {
|
||||
dump("couldn't get local address\n");
|
||||
}
|
||||
try {
|
||||
localPort = request.localPort;
|
||||
dump("got local port\n");
|
||||
} catch(e) {
|
||||
dump("couldn't get local port\n");
|
||||
}
|
||||
try {
|
||||
remoteAddr = request.remoteAddress;
|
||||
dump("got remote address\n");
|
||||
} catch(e) {
|
||||
dump("couldn't get remote address\n");
|
||||
}
|
||||
try {
|
||||
remotePort = request.remotePort;
|
||||
dump("got remote port\n");
|
||||
} catch(e) {
|
||||
dump("couldn't get remote port\n");
|
||||
}
|
||||
|
||||
do_check_eq(localAddr, "127.0.0.1");
|
||||
do_check_eq(localPort > 0, true);
|
||||
do_check_eq(remoteAddr, "127.0.0.1");
|
||||
do_check_eq(remotePort, 4444);
|
||||
|
||||
request.QueryInterface(Components.interfaces.nsISupportsPriority);
|
||||
request.priority = Ci.nsISupportsPriority.PRIORITY_LOW;
|
||||
|
||||
// Make sure listener can't be replaced after OnStartRequest was called.
|
||||
request.QueryInterface(Components.interfaces.nsITraceableChannel);
|
||||
|
@ -63,9 +91,10 @@ TracingListener.prototype = {
|
|||
input.close();
|
||||
} catch (e) {
|
||||
dump("TracingListener.onStopRequest swallowing exception: " + e + "\n");
|
||||
} finally {
|
||||
httpserver.stop(do_test_finished);
|
||||
}
|
||||
|
||||
// we're the last OnStopRequest called by the nsIStreamListenerTee
|
||||
run_next_test();
|
||||
},
|
||||
|
||||
QueryInterface: function(iid) {
|
||||
|
@ -135,18 +164,37 @@ function make_channel(url) {
|
|||
|
||||
// Check if received body is correctly modified.
|
||||
function channel_finished(request, input, ctx) {
|
||||
httpserver.stop(do_test_finished);
|
||||
// No-op: since the nsIStreamListenerTee calls the observer's OnStopRequest
|
||||
// after this, we call run_next_test() there
|
||||
}
|
||||
|
||||
// needs to be global or it'll go out of scope before it observes request
|
||||
var observer = new HttpResponseExaminer();
|
||||
|
||||
var testRuns = 1; // change this to >1 to run test multiple times
|
||||
var iteration = 1;
|
||||
|
||||
function run_next_test() {
|
||||
if (iteration > testRuns) {
|
||||
dump("Shutting down\n");
|
||||
httpserver.stop(do_test_finished);
|
||||
return;
|
||||
}
|
||||
if (iteration > 1) {
|
||||
dump("^^^ test iteration=" + iteration + "\n");
|
||||
}
|
||||
var channel = make_channel("http://localhost:4444/testdir");
|
||||
channel.asyncOpen(new ChannelListener(channel_finished), null);
|
||||
iteration++;
|
||||
}
|
||||
|
||||
function run_test() {
|
||||
var observer = new HttpResponseExaminer();
|
||||
observer.register();
|
||||
|
||||
httpserver = new nsHttpServer();
|
||||
httpserver.registerPathHandler("/testdir", test_handler);
|
||||
httpserver.start(4444);
|
||||
|
||||
var channel = make_channel("http://localhost:4444/testdir");
|
||||
channel.asyncOpen(new ChannelListener(channel_finished), null);
|
||||
run_next_test();
|
||||
do_test_pending();
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче