Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(496)

Unified Diff: third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp

Issue 1899163002: BodyStreamBuffer's drainAs* function should lock stream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@body-stream-buffer-test-refactoring
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
« no previous file with comments | « third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.cpp ('k') | third_party/WebKit/Source/modules/fetch/FetchManager.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698