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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/fetch/BodyStreamBuffer.h" 5 #include "modules/fetch/BodyStreamBuffer.h"
6 6
7 #include "core/html/FormData.h" 7 #include "core/html/FormData.h"
8 #include "core/testing/DummyPageHolder.h" 8 #include "core/testing/DummyPageHolder.h"
9 #include "modules/fetch/DataConsumerHandleTestUtil.h" 9 #include "modules/fetch/DataConsumerHandleTestUtil.h"
10 #include "modules/fetch/FetchBlobDataConsumerHandle.h" 10 #include "modules/fetch/FetchBlobDataConsumerHandle.h"
(...skipping 20 matching lines...) Expand all
31 31
32 class FakeLoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory { 32 class FakeLoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory {
33 public: 33 public:
34 PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClien t*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) override 34 PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClien t*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) override
35 { 35 {
36 ASSERT_NOT_REACHED(); 36 ASSERT_NOT_REACHED();
37 return nullptr; 37 return nullptr;
38 } 38 }
39 }; 39 };
40 40
41 class EmptyClient : public FetchDataConsumerHandle::Client {
42 public:
43 void didGetReadable() override {}
44 };
45
41 class BodyStreamBufferTest : public ::testing::Test { 46 class BodyStreamBufferTest : public ::testing::Test {
42 public: 47 public:
43 BodyStreamBufferTest() 48 BodyStreamBufferTest()
44 { 49 {
45 m_page = DummyPageHolder::create(IntSize(1, 1)); 50 m_page = DummyPageHolder::create(IntSize(1, 1));
46 } 51 }
47 ~BodyStreamBufferTest() override {} 52 ~BodyStreamBufferTest() override {}
48 53
49 protected: 54 protected:
50 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc ument().frame()); } 55 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc ument().frame()); }
51 ExecutionContext* getExecutionContext() { return &m_page->document(); } 56 ExecutionContext* getExecutionContext() { return &m_page->document(); }
52 57
53 OwnPtr<DummyPageHolder> m_page; 58 OwnPtr<DummyPageHolder> m_page;
59
60 ScriptValue eval(const char* s)
61 {
62 v8::Local<v8::String> source;
63 v8::Local<v8::Script> script;
64 v8::MicrotasksScope microtasks(getScriptState()->isolate(), v8::Microtas ksScope::kDoNotRunMicrotasks);
65 if (!v8Call(v8::String::NewFromUtf8(getScriptState()->isolate(), s, v8:: NewStringType::kNormal), source)) {
66 ADD_FAILURE();
67 return ScriptValue();
68 }
69 if (!v8Call(v8::Script::Compile(getScriptState()->context(), source), sc ript)) {
70 ADD_FAILURE() << "Compilation fails";
71 return ScriptValue();
72 }
73 return ScriptValue(getScriptState(), script->Run(getScriptState()->conte xt()));
74 }
75 ScriptValue evalWithPrintingError(const char* s)
76 {
77 v8::TryCatch block(getScriptState()->isolate());
78 ScriptValue r = eval(s);
79 if (block.HasCaught()) {
80 ADD_FAILURE() << toCoreString(block.Exception()->ToString(getScriptS tate()->isolate())).utf8().data();
81 block.ReThrow();
82 }
83 return r;
84 }
54 }; 85 };
55 86
56 TEST_F(BodyStreamBufferTest, ReleaseHandle) 87 TEST_F(BodyStreamBufferTest, ReleaseHandle)
57 { 88 {
58 OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWe bHandle(createWaitingDataConsumerHandle()); 89 OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWe bHandle(createWaitingDataConsumerHandle());
59 FetchDataConsumerHandle* rawHandle = handle.get(); 90 FetchDataConsumerHandle* rawHandle = handle.get();
60 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), handle.rel ease()); 91 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), handle.rel ease());
61 92
62 EXPECT_FALSE(buffer->hasPendingActivity()); 93 EXPECT_FALSE(buffer->hasPendingActivity());
63 EXPECT_FALSE(buffer->isStreamLocked()); 94 EXPECT_FALSE(buffer->isStreamLocked());
64 EXPECT_FALSE(buffer->isStreamDisturbed()); 95 EXPECT_FALSE(buffer->isStreamDisturbed());
65 EXPECT_TRUE(buffer->isStreamReadable()); 96 EXPECT_TRUE(buffer->isStreamReadable());
66 97
67 OwnPtr<FetchDataConsumerHandle> handle2 = buffer->releaseHandle(); 98 OwnPtr<FetchDataConsumerHandle> handle2 = buffer->releaseHandle();
68 99
69 ASSERT_EQ(rawHandle, handle2.get()); 100 ASSERT_EQ(rawHandle, handle2.get());
70 EXPECT_TRUE(buffer->isStreamLocked()); 101 EXPECT_TRUE(buffer->isStreamLocked());
71 EXPECT_TRUE(buffer->isStreamDisturbed()); 102 EXPECT_TRUE(buffer->isStreamDisturbed());
72 EXPECT_TRUE(buffer->isStreamClosed()); 103 EXPECT_TRUE(buffer->isStreamClosed());
73 } 104 }
74 105
106 TEST_F(BodyStreamBufferTest, RealeaseHandleFromBufferMadeFromStream)
107 {
108 ScriptState::Scope scope(getScriptState());
109 ScriptValue stream = evalWithPrintingError("new ReadableStream()");
110 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), stream);
111
112 EXPECT_FALSE(buffer->hasPendingActivity());
113 EXPECT_FALSE(buffer->isStreamLocked());
114 EXPECT_FALSE(buffer->isStreamDisturbed());
115 EXPECT_TRUE(buffer->isStreamReadable());
116
117 OwnPtr<FetchDataConsumerHandle> handle = buffer->releaseHandle();
118
119 EXPECT_TRUE(handle);
120 EXPECT_TRUE(buffer->isStreamLocked());
121 EXPECT_FALSE(buffer->isStreamDisturbed());
122
123 EmptyClient client;
124 size_t size = 0;
125 handle->obtainReader(&client)->read(nullptr, 0, WebDataConsumerHandle::FlagN one, &size);
126
127 EXPECT_TRUE(buffer->isStreamLocked());
128 EXPECT_TRUE(buffer->isStreamDisturbed());
129 }
130
75 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle) 131 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle)
76 { 132 {
77 OwnPtr<BlobData> data = BlobData::create(); 133 OwnPtr<BlobData> data = BlobData::create();
78 data->appendText("hello", false); 134 data->appendText("hello", false);
79 auto size = data->length(); 135 auto size = data->length();
80 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(data.release( ), size); 136 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(data.release( ), size);
81 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), FetchBlobD ataConsumerHandle::create(getExecutionContext(), blobDataHandle, new FakeLoaderF actory)); 137 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), FetchBlobD ataConsumerHandle::create(getExecutionContext(), blobDataHandle, new FakeLoaderF actory));
82 138
83 EXPECT_FALSE(buffer->isStreamLocked()); 139 EXPECT_FALSE(buffer->isStreamLocked());
84 EXPECT_FALSE(buffer->isStreamDisturbed()); 140 EXPECT_FALSE(buffer->isStreamDisturbed());
(...skipping 16 matching lines...) Expand all
101 EXPECT_FALSE(buffer->isStreamDisturbed()); 157 EXPECT_FALSE(buffer->isStreamDisturbed());
102 EXPECT_FALSE(buffer->hasPendingActivity()); 158 EXPECT_FALSE(buffer->hasPendingActivity());
103 159
104 EXPECT_FALSE(buffer->drainAsBlobDataHandle(FetchDataConsumerHandle::Reader:: AllowBlobWithInvalidSize)); 160 EXPECT_FALSE(buffer->drainAsBlobDataHandle(FetchDataConsumerHandle::Reader:: AllowBlobWithInvalidSize));
105 161
106 EXPECT_FALSE(buffer->isStreamLocked()); 162 EXPECT_FALSE(buffer->isStreamLocked());
107 EXPECT_FALSE(buffer->isStreamDisturbed()); 163 EXPECT_FALSE(buffer->isStreamDisturbed());
108 EXPECT_FALSE(buffer->hasPendingActivity()); 164 EXPECT_FALSE(buffer->hasPendingActivity());
109 } 165 }
110 166
167 TEST_F(BodyStreamBufferTest, DrainAsBlobFromBufferMadeFromBufferMadeFromStream)
168 {
169 ScriptState::Scope scope(getScriptState());
170 ScriptValue stream = evalWithPrintingError("new ReadableStream()");
171 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), stream);
172
173 EXPECT_FALSE(buffer->hasPendingActivity());
174 EXPECT_FALSE(buffer->isStreamLocked());
175 EXPECT_FALSE(buffer->isStreamDisturbed());
176 EXPECT_TRUE(buffer->isStreamReadable());
177
178 EXPECT_FALSE(buffer->drainAsBlobDataHandle(FetchDataConsumerHandle::Reader:: AllowBlobWithInvalidSize));
179
180 EXPECT_FALSE(buffer->hasPendingActivity());
181 EXPECT_FALSE(buffer->isStreamLocked());
182 EXPECT_FALSE(buffer->isStreamDisturbed());
183 EXPECT_TRUE(buffer->isStreamReadable());
184 }
185
111 TEST_F(BodyStreamBufferTest, DrainAsFormData) 186 TEST_F(BodyStreamBufferTest, DrainAsFormData)
112 { 187 {
113 FormData* data = FormData::create(UTF8Encoding()); 188 FormData* data = FormData::create(UTF8Encoding());
114 data->append("name1", "value1"); 189 data->append("name1", "value1");
115 data->append("name2", "value2"); 190 data->append("name2", "value2");
116 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); 191 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData();
117 192
118 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), FetchFormD ataConsumerHandle::create(getExecutionContext(), inputFormData)); 193 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), FetchFormD ataConsumerHandle::create(getExecutionContext(), inputFormData));
119 194
120 EXPECT_FALSE(buffer->isStreamLocked()); 195 EXPECT_FALSE(buffer->isStreamLocked());
(...skipping 17 matching lines...) Expand all
138 EXPECT_FALSE(buffer->isStreamDisturbed()); 213 EXPECT_FALSE(buffer->isStreamDisturbed());
139 EXPECT_FALSE(buffer->hasPendingActivity()); 214 EXPECT_FALSE(buffer->hasPendingActivity());
140 215
141 EXPECT_FALSE(buffer->drainAsFormData()); 216 EXPECT_FALSE(buffer->drainAsFormData());
142 217
143 EXPECT_FALSE(buffer->isStreamLocked()); 218 EXPECT_FALSE(buffer->isStreamLocked());
144 EXPECT_FALSE(buffer->isStreamDisturbed()); 219 EXPECT_FALSE(buffer->isStreamDisturbed());
145 EXPECT_FALSE(buffer->hasPendingActivity()); 220 EXPECT_FALSE(buffer->hasPendingActivity());
146 } 221 }
147 222
223 TEST_F(BodyStreamBufferTest, DrainAsFormDataFromBufferMadeFromBufferMadeFromStre am)
224 {
225 ScriptState::Scope scope(getScriptState());
226 ScriptValue stream = evalWithPrintingError("new ReadableStream()");
227 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), stream);
228
229 EXPECT_FALSE(buffer->hasPendingActivity());
230 EXPECT_FALSE(buffer->isStreamLocked());
231 EXPECT_FALSE(buffer->isStreamDisturbed());
232 EXPECT_TRUE(buffer->isStreamReadable());
233
234 EXPECT_FALSE(buffer->drainAsFormData());
235
236 EXPECT_FALSE(buffer->hasPendingActivity());
237 EXPECT_FALSE(buffer->isStreamLocked());
238 EXPECT_FALSE(buffer->isStreamDisturbed());
239 EXPECT_TRUE(buffer->isStreamReadable());
240 }
241
148 TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsArrayBuffer) 242 TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsArrayBuffer)
149 { 243 {
150 Checkpoint checkpoint; 244 Checkpoint checkpoint;
151 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); 245 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create();
152 DOMArrayBuffer* arrayBuffer = nullptr; 246 DOMArrayBuffer* arrayBuffer = nullptr;
153 247
154 InSequence s; 248 InSequence s;
155 EXPECT_CALL(checkpoint, Call(1)); 249 EXPECT_CALL(checkpoint, Call(1));
156 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg< 0>(&arrayBuffer)); 250 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg< 0>(&arrayBuffer));
157 EXPECT_CALL(checkpoint, Call(2)); 251 EXPECT_CALL(checkpoint, Call(2));
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), handle.rel ease()); 493 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), handle.rel ease());
400 checkpoint.Call(1); 494 checkpoint.Call(1);
401 ScriptValue reason(getScriptState(), v8String(getScriptState()->isolate(), " reason")); 495 ScriptValue reason(getScriptState(), v8String(getScriptState()->isolate(), " reason"));
402 buffer->cancelSource(getScriptState(), reason); 496 buffer->cancelSource(getScriptState(), reason);
403 checkpoint.Call(2); 497 checkpoint.Call(2);
404 } 498 }
405 499
406 } // namespace 500 } // namespace
407 501
408 } // namespace blink 502 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698