| Index: third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp
|
| diff --git a/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp b/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp
|
| index a9e006dc21cb19d61066e5448320ea97c1772e36..9ee7e68d7aa3084475278001ff5bc902870b129b 100644
|
| --- a/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp
|
| +++ b/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp
|
| @@ -38,6 +38,11 @@ public:
|
| }
|
| };
|
|
|
| +class EmptyClient : public FetchDataConsumerHandle::Client {
|
| +public:
|
| + void didGetReadable() override {}
|
| +};
|
| +
|
| class BodyStreamBufferTest : public ::testing::Test {
|
| public:
|
| BodyStreamBufferTest()
|
| @@ -51,6 +56,32 @@ protected:
|
| ExecutionContext* getExecutionContext() { return &m_page->document(); }
|
|
|
| OwnPtr<DummyPageHolder> m_page;
|
| +
|
| + ScriptValue eval(const char* s)
|
| + {
|
| + v8::Local<v8::String> source;
|
| + v8::Local<v8::Script> script;
|
| + v8::MicrotasksScope microtasks(getScriptState()->isolate(), v8::MicrotasksScope::kDoNotRunMicrotasks);
|
| + if (!v8Call(v8::String::NewFromUtf8(getScriptState()->isolate(), s, v8::NewStringType::kNormal), source)) {
|
| + ADD_FAILURE();
|
| + return ScriptValue();
|
| + }
|
| + if (!v8Call(v8::Script::Compile(getScriptState()->context(), source), script)) {
|
| + ADD_FAILURE() << "Compilation fails";
|
| + return ScriptValue();
|
| + }
|
| + return ScriptValue(getScriptState(), script->Run(getScriptState()->context()));
|
| + }
|
| + ScriptValue evalWithPrintingError(const char* s)
|
| + {
|
| + v8::TryCatch block(getScriptState()->isolate());
|
| + ScriptValue r = eval(s);
|
| + if (block.HasCaught()) {
|
| + ADD_FAILURE() << toCoreString(block.Exception()->ToString(getScriptState()->isolate())).utf8().data();
|
| + block.ReThrow();
|
| + }
|
| + return r;
|
| + }
|
| };
|
|
|
| TEST_F(BodyStreamBufferTest, ReleaseHandle)
|
| @@ -72,6 +103,31 @@ TEST_F(BodyStreamBufferTest, ReleaseHandle)
|
| EXPECT_TRUE(buffer->isStreamClosed());
|
| }
|
|
|
| +TEST_F(BodyStreamBufferTest, RealeaseHandleFromBufferMadeFromStream)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + ScriptValue stream = evalWithPrintingError("new ReadableStream()");
|
| + BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), stream);
|
| +
|
| + EXPECT_FALSE(buffer->hasPendingActivity());
|
| + EXPECT_FALSE(buffer->isStreamLocked());
|
| + EXPECT_FALSE(buffer->isStreamDisturbed());
|
| + EXPECT_TRUE(buffer->isStreamReadable());
|
| +
|
| + OwnPtr<FetchDataConsumerHandle> handle = buffer->releaseHandle();
|
| +
|
| + EXPECT_TRUE(handle);
|
| + EXPECT_TRUE(buffer->isStreamLocked());
|
| + EXPECT_FALSE(buffer->isStreamDisturbed());
|
| +
|
| + EmptyClient client;
|
| + size_t size = 0;
|
| + handle->obtainReader(&client)->read(nullptr, 0, WebDataConsumerHandle::FlagNone, &size);
|
| +
|
| + EXPECT_TRUE(buffer->isStreamLocked());
|
| + EXPECT_TRUE(buffer->isStreamDisturbed());
|
| +}
|
| +
|
| TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle)
|
| {
|
| OwnPtr<BlobData> data = BlobData::create();
|
| @@ -108,6 +164,25 @@ TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandleReturnsNull)
|
| EXPECT_FALSE(buffer->hasPendingActivity());
|
| }
|
|
|
| +TEST_F(BodyStreamBufferTest, DrainAsBlobFromBufferMadeFromBufferMadeFromStream)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + ScriptValue stream = evalWithPrintingError("new ReadableStream()");
|
| + BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), stream);
|
| +
|
| + EXPECT_FALSE(buffer->hasPendingActivity());
|
| + EXPECT_FALSE(buffer->isStreamLocked());
|
| + EXPECT_FALSE(buffer->isStreamDisturbed());
|
| + EXPECT_TRUE(buffer->isStreamReadable());
|
| +
|
| + EXPECT_FALSE(buffer->drainAsBlobDataHandle(FetchDataConsumerHandle::Reader::AllowBlobWithInvalidSize));
|
| +
|
| + EXPECT_FALSE(buffer->hasPendingActivity());
|
| + EXPECT_FALSE(buffer->isStreamLocked());
|
| + EXPECT_FALSE(buffer->isStreamDisturbed());
|
| + EXPECT_TRUE(buffer->isStreamReadable());
|
| +}
|
| +
|
| TEST_F(BodyStreamBufferTest, DrainAsFormData)
|
| {
|
| FormData* data = FormData::create(UTF8Encoding());
|
| @@ -145,6 +220,25 @@ TEST_F(BodyStreamBufferTest, DrainAsFormDataReturnsNull)
|
| EXPECT_FALSE(buffer->hasPendingActivity());
|
| }
|
|
|
| +TEST_F(BodyStreamBufferTest, DrainAsFormDataFromBufferMadeFromBufferMadeFromStream)
|
| +{
|
| + ScriptState::Scope scope(getScriptState());
|
| + ScriptValue stream = evalWithPrintingError("new ReadableStream()");
|
| + BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), stream);
|
| +
|
| + EXPECT_FALSE(buffer->hasPendingActivity());
|
| + EXPECT_FALSE(buffer->isStreamLocked());
|
| + EXPECT_FALSE(buffer->isStreamDisturbed());
|
| + EXPECT_TRUE(buffer->isStreamReadable());
|
| +
|
| + EXPECT_FALSE(buffer->drainAsFormData());
|
| +
|
| + EXPECT_FALSE(buffer->hasPendingActivity());
|
| + EXPECT_FALSE(buffer->isStreamLocked());
|
| + EXPECT_FALSE(buffer->isStreamDisturbed());
|
| + EXPECT_TRUE(buffer->isStreamReadable());
|
| +}
|
| +
|
| TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsArrayBuffer)
|
| {
|
| Checkpoint checkpoint;
|
|
|