| OLD | NEW | 
|---|
| 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  Loading... | 
| 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; | 
|  | 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  Loading... | 
| 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 | 
| OLD | NEW | 
|---|