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 5156c3d4a54cad834e89fa3e7d016e606645a10b..9350a543c9d19dee4cd797868a3134767e65a0f5 100644 |
--- a/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp |
+++ b/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp |
@@ -4,8 +4,14 @@ |
#include "modules/fetch/BodyStreamBuffer.h" |
+#include "core/html/FormData.h" |
#include "core/testing/DummyPageHolder.h" |
#include "modules/fetch/DataConsumerHandleTestUtil.h" |
+#include "modules/fetch/FetchBlobDataConsumerHandle.h" |
+#include "modules/fetch/FetchFormDataConsumerHandle.h" |
+#include "platform/blob/BlobData.h" |
+#include "platform/blob/BlobURL.h" |
+#include "platform/network/EncodedFormData.h" |
#include "platform/testing/UnitTestHelpers.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -23,6 +29,15 @@ using Command = DataConsumerHandleTestUtil::Command; |
using ReplayingHandle = DataConsumerHandleTestUtil::ReplayingHandle; |
using MockFetchDataLoaderClient = DataConsumerHandleTestUtil::MockFetchDataLoaderClient; |
+class FakeLoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory { |
+public: |
+ PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) override |
+ { |
+ ASSERT_NOT_REACHED(); |
+ return nullptr; |
+ } |
+}; |
+ |
class BodyStreamBufferTest : public ::testing::Test { |
public: |
BodyStreamBufferTest() |
@@ -57,6 +72,79 @@ TEST_F(BodyStreamBufferTest, ReleaseHandle) |
EXPECT_TRUE(buffer->isStreamClosed()); |
} |
+TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle) |
+{ |
+ OwnPtr<BlobData> data = BlobData::create(); |
+ data->appendText("hello", false); |
+ auto size = data->length(); |
+ RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(data.release(), size); |
+ BodyStreamBuffer* buffer = new BodyStreamBuffer(FetchBlobDataConsumerHandle::create(getExecutionContext(), blobDataHandle, new FakeLoaderFactory)); |
+ |
+ EXPECT_FALSE(buffer->isStreamLocked()); |
+ EXPECT_FALSE(buffer->isStreamDisturbed()); |
+ EXPECT_FALSE(buffer->hasPendingActivity()); |
+ RefPtr<BlobDataHandle> outputBlobDataHandle = buffer->drainAsBlobDataHandle(getExecutionContext(), FetchDataConsumerHandle::Reader::AllowBlobWithInvalidSize); |
+ |
+ EXPECT_TRUE(buffer->isStreamLocked()); |
+ EXPECT_TRUE(buffer->isStreamDisturbed()); |
+ EXPECT_FALSE(buffer->hasPendingActivity()); |
+ EXPECT_EQ(blobDataHandle, outputBlobDataHandle); |
+} |
+ |
+TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandleReturnsNull) |
+{ |
+ // This handle is not drainable. |
+ OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWebHandle(createWaitingDataConsumerHandle()); |
+ BodyStreamBuffer* buffer = new BodyStreamBuffer(handle.release()); |
+ |
+ EXPECT_FALSE(buffer->isStreamLocked()); |
+ EXPECT_FALSE(buffer->isStreamDisturbed()); |
+ EXPECT_FALSE(buffer->hasPendingActivity()); |
+ |
+ EXPECT_FALSE(buffer->drainAsBlobDataHandle(getExecutionContext(), FetchDataConsumerHandle::Reader::AllowBlobWithInvalidSize)); |
+ |
+ EXPECT_FALSE(buffer->isStreamLocked()); |
+ EXPECT_FALSE(buffer->isStreamDisturbed()); |
+ EXPECT_FALSE(buffer->hasPendingActivity()); |
+} |
+ |
+TEST_F(BodyStreamBufferTest, DrainAsFormData) |
+{ |
+ FormData* data = FormData::create(UTF8Encoding()); |
+ data->append("name1", "value1"); |
+ data->append("name2", "value2"); |
+ RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); |
+ |
+ BodyStreamBuffer* buffer = new BodyStreamBuffer(FetchFormDataConsumerHandle::create(getExecutionContext(), inputFormData)); |
+ |
+ EXPECT_FALSE(buffer->isStreamLocked()); |
+ EXPECT_FALSE(buffer->isStreamDisturbed()); |
+ EXPECT_FALSE(buffer->hasPendingActivity()); |
+ RefPtr<EncodedFormData> outputFormData = buffer->drainAsFormData(getExecutionContext()); |
+ |
+ EXPECT_TRUE(buffer->isStreamLocked()); |
+ EXPECT_TRUE(buffer->isStreamDisturbed()); |
+ EXPECT_FALSE(buffer->hasPendingActivity()); |
+ EXPECT_EQ(outputFormData->flattenToString(), inputFormData->flattenToString()); |
+} |
+ |
+TEST_F(BodyStreamBufferTest, DrainAsFormDataReturnsNull) |
+{ |
+ // This handle is not drainable. |
+ OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWebHandle(createWaitingDataConsumerHandle()); |
+ BodyStreamBuffer* buffer = new BodyStreamBuffer(handle.release()); |
+ |
+ EXPECT_FALSE(buffer->isStreamLocked()); |
+ EXPECT_FALSE(buffer->isStreamDisturbed()); |
+ EXPECT_FALSE(buffer->hasPendingActivity()); |
+ |
+ EXPECT_FALSE(buffer->drainAsFormData(getExecutionContext())); |
+ |
+ EXPECT_FALSE(buffer->isStreamLocked()); |
+ EXPECT_FALSE(buffer->isStreamDisturbed()); |
+ EXPECT_FALSE(buffer->hasPendingActivity()); |
+} |
+ |
TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsArrayBuffer) |
{ |
Checkpoint checkpoint; |