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

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

Issue 1969333002: [Fetch API] |(new Response(stream)).body| should return |stream| (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 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;

Powered by Google App Engine
This is Rietveld 408576698