From c12b10d2b537c9463fd4e1691fbfd4055a7608ce Mon Sep 17 00:00:00 2001 From: "asqueella%gmail.com" Date: Sun, 13 May 2007 17:09:52 +0000 Subject: [PATCH] Bug 369787 - calling nsHttpChannel::SetContentType on a closed channel doesn't work as expected. p=Sylvain Pasche r=biesi, sr=darin --- netwerk/protocol/http/src/nsHttpChannel.cpp | 2 +- netwerk/test/unit/test_bug331825.js | 2 +- netwerk/test/unit/test_bug369787.js | 59 +++++++++++++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 netwerk/test/unit/test_bug369787.js diff --git a/netwerk/protocol/http/src/nsHttpChannel.cpp b/netwerk/protocol/http/src/nsHttpChannel.cpp index 0faace04c02..aad2237c468 100644 --- a/netwerk/protocol/http/src/nsHttpChannel.cpp +++ b/netwerk/protocol/http/src/nsHttpChannel.cpp @@ -3431,7 +3431,7 @@ nsHttpChannel::GetContentType(nsACString &value) NS_IMETHODIMP nsHttpChannel::SetContentType(const nsACString &value) { - if (mListener) { + if (mListener || mWasOpened) { if (!mResponseHead) return NS_ERROR_NOT_AVAILABLE; diff --git a/netwerk/test/unit/test_bug331825.js b/netwerk/test/unit/test_bug331825.js index 08b68b1d70e..b852579c935 100644 --- a/netwerk/test/unit/test_bug331825.js +++ b/netwerk/test/unit/test_bug331825.js @@ -1,7 +1,7 @@ do_import_script("netwerk/test/httpserver/httpd.js"); var server; -var BUGID = "331825"; +const BUGID = "331825"; function TestListener() { } diff --git a/netwerk/test/unit/test_bug369787.js b/netwerk/test/unit/test_bug369787.js new file mode 100644 index 00000000000..3bec08f5884 --- /dev/null +++ b/netwerk/test/unit/test_bug369787.js @@ -0,0 +1,59 @@ +do_import_script("netwerk/test/httpserver/httpd.js"); + +const BUGID = "369787"; +var server = null; +var channel = null; + +function change_content_type() { + var origType = channel.contentType; + const newType = "x-foo/x-bar"; + channel.contentType = newType; + do_check_eq(channel.contentType, newType); + channel.contentType = origType; + do_check_eq(channel.contentType, origType); +} + +function TestListener() { +} +TestListener.prototype.onStartRequest = function(request, context) { + change_content_type(); +} +TestListener.prototype.onStopRequest = function(request, context, status) { + change_content_type(); + + do_timeout(0, "after_channel_closed()"); +} + +function after_channel_closed() { + try { + change_content_type(); + } finally { + server.stop(); + do_test_finished(); + } +} + +function run_test() { + // start server + server = new nsHttpServer(); + + server.registerPathHandler("/bug" + BUGID, bug369787); + + server.start(4444); + + // make request + channel = + Components.classes["@mozilla.org/network/io-service;1"]. + getService(Components.interfaces.nsIIOService). + newChannel("http://localhost:4444/bug" + BUGID, null, null); + + channel.QueryInterface(Components.interfaces.nsIHttpChannel); + channel.asyncOpen(new TestListener(), null); + + do_test_pending(); +} + +// PATH HANDLER FOR /bug369787 +function bug369787(metadata, response) { + /* do nothing */ +}