| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/FetchDataLoader.h" | 5 #include "modules/fetch/FetchDataLoader.h" |
| 6 | 6 |
| 7 #include "core/html/parser/TextResourceDecoder.h" | 7 #include "core/html/parser/TextResourceDecoder.h" |
| 8 #include "modules/fetch/BytesConsumer.h" | 8 #include "modules/fetch/BytesConsumer.h" |
| 9 #include "wtf/PtrUtil.h" | 9 #include "wtf/PtrUtil.h" |
| 10 #include "wtf/text/StringBuilder.h" | 10 #include "wtf/text/StringBuilder.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 } | 56 } |
| 57 | 57 |
| 58 void onStateChange() override | 58 void onStateChange() override |
| 59 { | 59 { |
| 60 while (true) { | 60 while (true) { |
| 61 const char* buffer; | 61 const char* buffer; |
| 62 size_t available; | 62 size_t available; |
| 63 switch (m_consumer->beginRead(&buffer, &available)) { | 63 switch (m_consumer->beginRead(&buffer, &available)) { |
| 64 case BytesConsumer::Result::Ok: | 64 case BytesConsumer::Result::Ok: |
| 65 m_blobData->appendBytes(buffer, available); | 65 m_blobData->appendBytes(buffer, available); |
| 66 m_consumer->endRead(available); | 66 if (m_consumer->endRead(available) != BytesConsumer::Result::Ok)
{ |
| 67 m_client->didFetchDataLoadFailed(); |
| 68 return; |
| 69 } |
| 67 break; | 70 break; |
| 68 case BytesConsumer::Result::ShouldWait: | 71 case BytesConsumer::Result::ShouldWait: |
| 69 return; | 72 return; |
| 70 case BytesConsumer::Result::Done: { | 73 case BytesConsumer::Result::Done: { |
| 71 auto size = m_blobData->length(); | 74 auto size = m_blobData->length(); |
| 72 m_client->didFetchDataLoadedBlobHandle(BlobDataHandle::create(st
d::move(m_blobData), size)); | 75 m_client->didFetchDataLoadedBlobHandle(BlobDataHandle::create(st
d::move(m_blobData), size)); |
| 73 return; | 76 return; |
| 74 } | 77 } |
| 75 case BytesConsumer::Result::Error: | 78 case BytesConsumer::Result::Error: |
| 76 m_client->didFetchDataLoadFailed(); | 79 m_client->didFetchDataLoadFailed(); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 void onStateChange() override | 121 void onStateChange() override |
| 119 { | 122 { |
| 120 while (true) { | 123 while (true) { |
| 121 const char* buffer; | 124 const char* buffer; |
| 122 size_t available; | 125 size_t available; |
| 123 switch (m_consumer->beginRead(&buffer, &available)) { | 126 switch (m_consumer->beginRead(&buffer, &available)) { |
| 124 case BytesConsumer::Result::Ok: | 127 case BytesConsumer::Result::Ok: |
| 125 if (available > 0) { | 128 if (available > 0) { |
| 126 unsigned bytesAppended = m_rawData->append(buffer, available
); | 129 unsigned bytesAppended = m_rawData->append(buffer, available
); |
| 127 if (!bytesAppended) { | 130 if (!bytesAppended) { |
| 128 m_consumer->endRead(0); | 131 auto unused = m_consumer->endRead(0); |
| 132 ALLOW_UNUSED_LOCAL(unused); |
| 129 m_consumer->cancel(); | 133 m_consumer->cancel(); |
| 130 m_client->didFetchDataLoadFailed(); | 134 m_client->didFetchDataLoadFailed(); |
| 131 return; | 135 return; |
| 132 } | 136 } |
| 133 DCHECK_EQ(bytesAppended, available); | 137 DCHECK_EQ(bytesAppended, available); |
| 134 } | 138 } |
| 135 m_consumer->endRead(available); | 139 if (m_consumer->endRead(available) != BytesConsumer::Result::Ok)
{ |
| 140 m_client->didFetchDataLoadFailed(); |
| 141 return; |
| 142 } |
| 136 break; | 143 break; |
| 137 case BytesConsumer::Result::ShouldWait: | 144 case BytesConsumer::Result::ShouldWait: |
| 138 return; | 145 return; |
| 139 case BytesConsumer::Result::Done: | 146 case BytesConsumer::Result::Done: |
| 140 m_client->didFetchDataLoadedArrayBuffer(DOMArrayBuffer::create(m
_rawData->toArrayBuffer())); | 147 m_client->didFetchDataLoadedArrayBuffer(DOMArrayBuffer::create(m
_rawData->toArrayBuffer())); |
| 141 return; | 148 return; |
| 142 case BytesConsumer::Result::Error: | 149 case BytesConsumer::Result::Error: |
| 143 m_client->didFetchDataLoadFailed(); | 150 m_client->didFetchDataLoadFailed(); |
| 144 return; | 151 return; |
| 145 } | 152 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 | 185 |
| 179 void onStateChange() override | 186 void onStateChange() override |
| 180 { | 187 { |
| 181 while (true) { | 188 while (true) { |
| 182 const char* buffer; | 189 const char* buffer; |
| 183 size_t available; | 190 size_t available; |
| 184 switch (m_consumer->beginRead(&buffer, &available)) { | 191 switch (m_consumer->beginRead(&buffer, &available)) { |
| 185 case BytesConsumer::Result::Ok: | 192 case BytesConsumer::Result::Ok: |
| 186 if (available > 0) | 193 if (available > 0) |
| 187 m_builder.append(m_decoder->decode(buffer, available)); | 194 m_builder.append(m_decoder->decode(buffer, available)); |
| 188 m_consumer->endRead(available); | 195 if (m_consumer->endRead(available) != BytesConsumer::Result::Ok)
{ |
| 196 m_client->didFetchDataLoadFailed(); |
| 197 return; |
| 198 } |
| 189 break; | 199 break; |
| 190 case BytesConsumer::Result::ShouldWait: | 200 case BytesConsumer::Result::ShouldWait: |
| 191 return; | 201 return; |
| 192 case BytesConsumer::Result::Done: | 202 case BytesConsumer::Result::Done: |
| 193 m_builder.append(m_decoder->flush()); | 203 m_builder.append(m_decoder->flush()); |
| 194 m_client->didFetchDataLoadedString(m_builder.toString()); | 204 m_client->didFetchDataLoadedString(m_builder.toString()); |
| 195 return; | 205 return; |
| 196 case BytesConsumer::Result::Error: | 206 case BytesConsumer::Result::Error: |
| 197 m_client->didFetchDataLoadFailed(); | 207 m_client->didFetchDataLoadFailed(); |
| 198 return; | 208 return; |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 | 251 |
| 242 void onStateChange() override | 252 void onStateChange() override |
| 243 { | 253 { |
| 244 bool needToFlush = false; | 254 bool needToFlush = false; |
| 245 while (true) { | 255 while (true) { |
| 246 const char* buffer; | 256 const char* buffer; |
| 247 size_t available; | 257 size_t available; |
| 248 switch (m_consumer->beginRead(&buffer, &available)) { | 258 switch (m_consumer->beginRead(&buffer, &available)) { |
| 249 case BytesConsumer::Result::Ok: | 259 case BytesConsumer::Result::Ok: |
| 250 m_outStream->addData(buffer, available); | 260 m_outStream->addData(buffer, available); |
| 251 m_consumer->endRead(available); | 261 if (m_consumer->endRead(available) != BytesConsumer::Result::Ok)
{ |
| 262 m_outStream->abort(); |
| 263 m_client->didFetchDataLoadFailed(); |
| 264 return; |
| 265 } |
| 252 needToFlush = true; | 266 needToFlush = true; |
| 253 break; | 267 break; |
| 254 case BytesConsumer::Result::ShouldWait: | 268 case BytesConsumer::Result::ShouldWait: |
| 255 if (needToFlush) | 269 if (needToFlush) |
| 256 m_outStream->flush(); | 270 m_outStream->flush(); |
| 257 return; | 271 return; |
| 258 case BytesConsumer::Result::Done: | 272 case BytesConsumer::Result::Done: |
| 259 if (needToFlush) | 273 if (needToFlush) |
| 260 m_outStream->flush(); | 274 m_outStream->flush(); |
| 261 m_outStream->finalize(); | 275 m_outStream->finalize(); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 { | 323 { |
| 310 return new FetchDataLoaderAsString(); | 324 return new FetchDataLoaderAsString(); |
| 311 } | 325 } |
| 312 | 326 |
| 313 FetchDataLoader* FetchDataLoader::createLoaderAsStream(Stream* outStream) | 327 FetchDataLoader* FetchDataLoader::createLoaderAsStream(Stream* outStream) |
| 314 { | 328 { |
| 315 return new FetchDataLoaderAsStream(outStream); | 329 return new FetchDataLoaderAsStream(outStream); |
| 316 } | 330 } |
| 317 | 331 |
| 318 } // namespace blink | 332 } // namespace blink |
| OLD | NEW |