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

Side by Side Diff: Source/modules/fetch/FetchResponseData.cpp

Issue 1233573002: [Fetch API] Remove DrainingBuffer. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 5 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 | Annotate | Revision Log
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 "config.h" 5 #include "config.h"
6 #include "modules/fetch/FetchResponseData.h" 6 #include "modules/fetch/FetchResponseData.h"
7 7
8 #include "core/dom/DOMArrayBuffer.h" 8 #include "core/dom/DOMArrayBuffer.h"
9 #include "core/fetch/CrossOriginAccessControl.h" 9 #include "core/fetch/CrossOriginAccessControl.h"
10 #include "modules/fetch/BodyStreamBuffer.h" 10 #include "modules/fetch/BodyStreamBuffer.h"
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 case CORSType: 160 case CORSType:
161 ASSERT(m_internalResponse); 161 ASSERT(m_internalResponse);
162 ASSERT(m_buffer == m_internalResponse->m_buffer); 162 ASSERT(m_buffer == m_internalResponse->m_buffer);
163 ASSERT(m_internalResponse->m_type == DefaultType); 163 ASSERT(m_internalResponse->m_type == DefaultType);
164 newResponse->m_internalResponse = m_internalResponse->clone(executionCon text); 164 newResponse->m_internalResponse = m_internalResponse->clone(executionCon text);
165 m_buffer = m_internalResponse->m_buffer; 165 m_buffer = m_internalResponse->m_buffer;
166 newResponse->m_buffer = newResponse->m_internalResponse->m_buffer; 166 newResponse->m_buffer = newResponse->m_internalResponse->m_buffer;
167 break; 167 break;
168 case DefaultType: { 168 case DefaultType: {
169 ASSERT(!m_internalResponse); 169 ASSERT(!m_internalResponse);
170 if (!m_buffer) 170 if (m_buffer->hasBody()) {
171 return newResponse; 171 OwnPtr<WebDataConsumerHandle> handle1, handle2;
172 172 // TODO(yhirano): unlock the buffer appropriately.
173 OwnPtr<WebDataConsumerHandle> handle1; 173 DataConsumerTee::create(executionContext, m_buffer->lock(executionCo ntext), &handle1, &handle2);
174 OwnPtr<WebDataConsumerHandle> handle2; 174 m_buffer = new BodyStreamBuffer(createFetchDataConsumerHandleFromWeb Handle(handle1.release()));
175 DataConsumerTee::create(executionContext, m_buffer->releaseHandle(), &ha ndle1, &handle2); 175 newResponse->m_buffer = new BodyStreamBuffer(createFetchDataConsumer HandleFromWebHandle(handle2.release()));
176 m_buffer = BodyStreamBuffer::create(createFetchDataConsumerHandleFromWeb Handle(handle1.release())); 176 } else {
177 newResponse->m_buffer = BodyStreamBuffer::create(createFetchDataConsumer HandleFromWebHandle(handle2.release())); 177 m_buffer = new BodyStreamBuffer;
178 newResponse->m_buffer = new BodyStreamBuffer;
hiroshige 2015/07/24 12:47:03 Do we need these two lines? (I'm not sure about th
yhirano 2015/07/29 08:45:02 Done.
179 }
178 break; 180 break;
179 } 181 }
180 case ErrorType: 182 case ErrorType:
181 ASSERT(!m_internalResponse); 183 ASSERT(!m_internalResponse);
182 ASSERT(!m_buffer); 184 ASSERT(!m_buffer->hasBody());
183 break; 185 break;
184 case OpaqueType: 186 case OpaqueType:
185 ASSERT(m_internalResponse); 187 ASSERT(m_internalResponse);
186 ASSERT(!m_buffer); 188 ASSERT(!m_buffer->hasBody());
187 ASSERT(m_internalResponse->m_type == DefaultType); 189 ASSERT(m_internalResponse->m_type == DefaultType);
188 newResponse->m_internalResponse = m_internalResponse->clone(executionCon text); 190 newResponse->m_internalResponse = m_internalResponse->clone(executionCon text);
189 break; 191 break;
190 } 192 }
191 return newResponse; 193 return newResponse;
192 } 194 }
193 195
194 void FetchResponseData::populateWebServiceWorkerResponse(WebServiceWorkerRespons e& response) 196 void FetchResponseData::populateWebServiceWorkerResponse(WebServiceWorkerRespons e& response)
195 { 197 {
196 if (m_internalResponse) { 198 if (m_internalResponse) {
(...skipping 10 matching lines...) Expand all
207 const FetchHeaderList::Header* header = headerList()->list()[i].get(); 209 const FetchHeaderList::Header* header = headerList()->list()[i].get();
208 response.appendHeader(header->first, header->second); 210 response.appendHeader(header->first, header->second);
209 } 211 }
210 } 212 }
211 213
212 FetchResponseData::FetchResponseData(Type type, unsigned short status, AtomicStr ing statusMessage) 214 FetchResponseData::FetchResponseData(Type type, unsigned short status, AtomicStr ing statusMessage)
213 : m_type(type) 215 : m_type(type)
214 , m_status(status) 216 , m_status(status)
215 , m_statusMessage(statusMessage) 217 , m_statusMessage(statusMessage)
216 , m_headerList(FetchHeaderList::create()) 218 , m_headerList(FetchHeaderList::create())
219 , m_buffer(new BodyStreamBuffer)
217 { 220 {
218 } 221 }
219 222
220 void FetchResponseData::replaceBodyStreamBuffer(BodyStreamBuffer* buffer) 223 void FetchResponseData::replaceBodyStreamBuffer(BodyStreamBuffer* buffer)
221 { 224 {
222 if (m_type == BasicType || m_type == CORSType) { 225 if (m_type == BasicType || m_type == CORSType) {
223 ASSERT(m_internalResponse); 226 ASSERT(m_internalResponse);
224 m_internalResponse->m_buffer = buffer; 227 m_internalResponse->m_buffer = buffer;
225 m_buffer = buffer; 228 m_buffer = buffer;
226 } else if (m_type == DefaultType) { 229 } else if (m_type == DefaultType) {
227 ASSERT(!m_internalResponse); 230 ASSERT(!m_internalResponse);
228 m_buffer = buffer; 231 m_buffer = buffer;
229 } 232 }
230 } 233 }
231 234
232 DEFINE_TRACE(FetchResponseData) 235 DEFINE_TRACE(FetchResponseData)
233 { 236 {
234 visitor->trace(m_headerList); 237 visitor->trace(m_headerList);
235 visitor->trace(m_internalResponse); 238 visitor->trace(m_internalResponse);
236 visitor->trace(m_buffer); 239 visitor->trace(m_buffer);
237 } 240 }
238 241
239 } // namespace blink 242 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698