зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset 47a103414177 (bug 1166504) for mochitest-e10s-4 permafail CLOSED TREE
This commit is contained in:
Родитель
4e9f80ed2e
Коммит
ba06617421
|
@ -16,7 +16,6 @@
|
|||
#include "base/basictypes.h"
|
||||
|
||||
#include "nsMultiplexInputStream.h"
|
||||
#include "nsICloneableInputStream.h"
|
||||
#include "nsIMultiplexInputStream.h"
|
||||
#include "nsISeekableStream.h"
|
||||
#include "nsCOMPtr.h"
|
||||
|
@ -34,7 +33,6 @@ class nsMultiplexInputStream final
|
|||
: public nsIMultiplexInputStream
|
||||
, public nsISeekableStream
|
||||
, public nsIIPCSerializableInputStream
|
||||
, public nsICloneableInputStream
|
||||
{
|
||||
public:
|
||||
nsMultiplexInputStream();
|
||||
|
@ -44,7 +42,6 @@ public:
|
|||
NS_DECL_NSIMULTIPLEXINPUTSTREAM
|
||||
NS_DECL_NSISEEKABLESTREAM
|
||||
NS_DECL_NSIIPCSERIALIZABLEINPUTSTREAM
|
||||
NS_DECL_NSICLONEABLEINPUTSTREAM
|
||||
|
||||
private:
|
||||
~nsMultiplexInputStream()
|
||||
|
@ -81,8 +78,7 @@ NS_IMPL_QUERY_INTERFACE_CI(nsMultiplexInputStream,
|
|||
nsIMultiplexInputStream,
|
||||
nsIInputStream,
|
||||
nsISeekableStream,
|
||||
nsIIPCSerializableInputStream,
|
||||
nsICloneableInputStream)
|
||||
nsIIPCSerializableInputStream)
|
||||
NS_IMPL_CI_INTERFACE_GETTER(nsMultiplexInputStream,
|
||||
nsIMultiplexInputStream,
|
||||
nsIInputStream,
|
||||
|
@ -783,65 +779,3 @@ nsMultiplexInputStream::Deserialize(const InputStreamParams& aParams,
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMultiplexInputStream::GetCloneable(bool* aCloneable)
|
||||
{
|
||||
MutexAutoLock lock(mLock);
|
||||
//XXXnsm Cloning a multiplex stream which has started reading is not permitted
|
||||
//right now.
|
||||
if (mCurrentStream > 0 || mStartedReadingCurrent) {
|
||||
*aCloneable = false;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
uint32_t len = mStreams.Length();
|
||||
for (uint32_t i = 0; i < len; ++i) {
|
||||
nsCOMPtr<nsICloneableInputStream> cis = do_QueryInterface(mStreams[i]);
|
||||
if (!cis || !cis->GetCloneable()) {
|
||||
*aCloneable = false;
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
*aCloneable = true;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMultiplexInputStream::Clone(nsIInputStream** aClone)
|
||||
{
|
||||
MutexAutoLock lock(mLock);
|
||||
|
||||
//XXXnsm Cloning a multiplex stream which has started reading is not permitted
|
||||
//right now.
|
||||
if (mCurrentStream > 0 || mStartedReadingCurrent) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsRefPtr<nsMultiplexInputStream> clone = new nsMultiplexInputStream();
|
||||
|
||||
nsresult rv;
|
||||
uint32_t len = mStreams.Length();
|
||||
for (uint32_t i = 0; i < len; ++i) {
|
||||
nsCOMPtr<nsICloneableInputStream> substream = do_QueryInterface(mStreams[i]);
|
||||
if (NS_WARN_IF(!substream)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIInputStream> clonedSubstream;
|
||||
rv = substream->Clone(getter_AddRefs(clonedSubstream));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = clone->AppendStream(clonedSubstream);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
clone.forget(aClone);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#include "Helpers.h"
|
||||
#include "mozilla/unused.h"
|
||||
#include "nsICloneableInputStream.h"
|
||||
#include "nsIMultiplexInputStream.h"
|
||||
#include "nsNetUtil.h"
|
||||
#include "nsStreamUtils.h"
|
||||
#include "nsStringStream.h"
|
||||
|
@ -112,88 +111,3 @@ TEST(CloneInputStream, NonCloneableInput_Fallback)
|
|||
testing::ConsumeAndValidateStream(stream, inputString);
|
||||
testing::ConsumeAndValidateStream(clone, inputString);
|
||||
}
|
||||
|
||||
TEST(CloneInputStream, CloneMultiplexStream)
|
||||
{
|
||||
nsCOMPtr<nsIMultiplexInputStream> stream =
|
||||
do_CreateInstance("@mozilla.org/io/multiplex-input-stream;1");
|
||||
ASSERT_TRUE(stream);
|
||||
|
||||
nsTArray<char> inputData;
|
||||
testing::CreateData(1024, inputData);
|
||||
for (uint32_t i = 0; i < 2; ++i) {
|
||||
nsCString inputString(inputData.Elements(), inputData.Length());
|
||||
|
||||
nsCOMPtr<nsIInputStream> base;
|
||||
nsresult rv = NS_NewCStringInputStream(getter_AddRefs(base), inputString);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
rv = stream->AppendStream(base);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
}
|
||||
|
||||
// Unread stream should clone successfully.
|
||||
nsTArray<char> doubled;
|
||||
doubled.AppendElements(inputData);
|
||||
doubled.AppendElements(inputData);
|
||||
|
||||
nsCOMPtr<nsIInputStream> clone;
|
||||
nsresult rv = NS_CloneInputStream(stream, getter_AddRefs(clone));
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
testing::ConsumeAndValidateStream(clone, doubled);
|
||||
|
||||
// Stream that has been read should fail.
|
||||
nsAutoPtr<char> buffer(new char[512]);
|
||||
uint32_t read;
|
||||
rv = stream->Read(buffer, 512, &read);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
nsCOMPtr<nsIInputStream> clone2;
|
||||
rv = NS_CloneInputStream(stream, getter_AddRefs(clone2));
|
||||
ASSERT_TRUE(NS_FAILED(rv));
|
||||
}
|
||||
|
||||
TEST(CloneInputStream, CloneMultiplexStreamPartial)
|
||||
{
|
||||
nsCOMPtr<nsIMultiplexInputStream> stream =
|
||||
do_CreateInstance("@mozilla.org/io/multiplex-input-stream;1");
|
||||
ASSERT_TRUE(stream);
|
||||
|
||||
nsTArray<char> inputData;
|
||||
testing::CreateData(1024, inputData);
|
||||
for (uint32_t i = 0; i < 2; ++i) {
|
||||
nsCString inputString(inputData.Elements(), inputData.Length());
|
||||
|
||||
nsCOMPtr<nsIInputStream> base;
|
||||
nsresult rv = NS_NewCStringInputStream(getter_AddRefs(base), inputString);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
rv = stream->AppendStream(base);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
}
|
||||
|
||||
// Fail when first stream read, but second hasn't been started.
|
||||
nsAutoPtr<char> buffer(new char[1024]);
|
||||
uint32_t read;
|
||||
nsresult rv = stream->Read(buffer, 1024, &read);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
nsCOMPtr<nsIInputStream> clone;
|
||||
rv = NS_CloneInputStream(stream, getter_AddRefs(clone));
|
||||
ASSERT_TRUE(NS_FAILED(rv));
|
||||
|
||||
// Fail after beginning read of second stream.
|
||||
rv = stream->Read(buffer, 512, &read);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv) && read == 512);
|
||||
|
||||
rv = NS_CloneInputStream(stream, getter_AddRefs(clone));
|
||||
ASSERT_TRUE(NS_FAILED(rv));
|
||||
|
||||
// Fail at the end.
|
||||
nsAutoCString consumed;
|
||||
rv = NS_ConsumeStream(stream, UINT32_MAX, consumed);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
rv = NS_CloneInputStream(stream, getter_AddRefs(clone));
|
||||
ASSERT_TRUE(NS_FAILED(rv));
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче