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

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, 4 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
« no previous file with comments | « Source/modules/fetch/FetchRequestData.cpp ('k') | Source/modules/fetch/Request.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 }
178 break; 179 break;
179 } 180 }
180 case ErrorType: 181 case ErrorType:
181 ASSERT(!m_internalResponse); 182 ASSERT(!m_internalResponse);
182 ASSERT(!m_buffer); 183 ASSERT(!m_buffer->hasBody());
183 break; 184 break;
184 case OpaqueType: 185 case OpaqueType:
185 ASSERT(m_internalResponse); 186 ASSERT(m_internalResponse);
186 ASSERT(!m_buffer); 187 ASSERT(!m_buffer->hasBody());
187 ASSERT(m_internalResponse->m_type == DefaultType); 188 ASSERT(m_internalResponse->m_type == DefaultType);
188 newResponse->m_internalResponse = m_internalResponse->clone(executionCon text); 189 newResponse->m_internalResponse = m_internalResponse->clone(executionCon text);
189 break; 190 break;
190 } 191 }
191 return newResponse; 192 return newResponse;
192 } 193 }
193 194
194 void FetchResponseData::populateWebServiceWorkerResponse(WebServiceWorkerRespons e& response) 195 void FetchResponseData::populateWebServiceWorkerResponse(WebServiceWorkerRespons e& response)
195 { 196 {
196 if (m_internalResponse) { 197 if (m_internalResponse) {
(...skipping 10 matching lines...) Expand all
207 const FetchHeaderList::Header* header = headerList()->list()[i].get(); 208 const FetchHeaderList::Header* header = headerList()->list()[i].get();
208 response.appendHeader(header->first, header->second); 209 response.appendHeader(header->first, header->second);
209 } 210 }
210 } 211 }
211 212
212 FetchResponseData::FetchResponseData(Type type, unsigned short status, AtomicStr ing statusMessage) 213 FetchResponseData::FetchResponseData(Type type, unsigned short status, AtomicStr ing statusMessage)
213 : m_type(type) 214 : m_type(type)
214 , m_status(status) 215 , m_status(status)
215 , m_statusMessage(statusMessage) 216 , m_statusMessage(statusMessage)
216 , m_headerList(FetchHeaderList::create()) 217 , m_headerList(FetchHeaderList::create())
218 , m_buffer(new BodyStreamBuffer)
217 { 219 {
218 } 220 }
219 221
220 void FetchResponseData::replaceBodyStreamBuffer(BodyStreamBuffer* buffer) 222 void FetchResponseData::replaceBodyStreamBuffer(BodyStreamBuffer* buffer)
221 { 223 {
222 if (m_type == BasicType || m_type == CORSType) { 224 if (m_type == BasicType || m_type == CORSType) {
223 ASSERT(m_internalResponse); 225 ASSERT(m_internalResponse);
224 m_internalResponse->m_buffer = buffer; 226 m_internalResponse->m_buffer = buffer;
225 m_buffer = buffer; 227 m_buffer = buffer;
226 } else if (m_type == DefaultType) { 228 } else if (m_type == DefaultType) {
227 ASSERT(!m_internalResponse); 229 ASSERT(!m_internalResponse);
228 m_buffer = buffer; 230 m_buffer = buffer;
229 } 231 }
230 } 232 }
231 233
232 DEFINE_TRACE(FetchResponseData) 234 DEFINE_TRACE(FetchResponseData)
233 { 235 {
234 visitor->trace(m_headerList); 236 visitor->trace(m_headerList);
235 visitor->trace(m_internalResponse); 237 visitor->trace(m_internalResponse);
236 visitor->trace(m_buffer); 238 visitor->trace(m_buffer);
237 } 239 }
238 240
239 } // namespace blink 241 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/fetch/FetchRequestData.cpp ('k') | Source/modules/fetch/Request.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698