| 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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 void cancel() override | 53 void cancel() override |
| 54 { | 54 { |
| 55 m_consumer->cancel(); | 55 m_consumer->cancel(); |
| 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 auto result = m_consumer->beginRead(&buffer, &available); |
| 64 if (result == BytesConsumer::Result::ShouldWait) |
| 65 return; |
| 66 if (result == BytesConsumer::Result::Ok) { |
| 67 m_blobData->appendBytes(buffer, available); |
| 68 result = m_consumer->endRead(available); |
| 69 } |
| 70 switch (result) { |
| 64 case BytesConsumer::Result::Ok: | 71 case BytesConsumer::Result::Ok: |
| 65 m_blobData->appendBytes(buffer, available); | |
| 66 if (m_consumer->endRead(available) != BytesConsumer::Result::Ok)
{ | |
| 67 m_client->didFetchDataLoadFailed(); | |
| 68 return; | |
| 69 } | |
| 70 break; | 72 break; |
| 71 case BytesConsumer::Result::ShouldWait: | 73 case BytesConsumer::Result::ShouldWait: |
| 74 NOTREACHED(); |
| 72 return; | 75 return; |
| 73 case BytesConsumer::Result::Done: { | 76 case BytesConsumer::Result::Done: { |
| 74 auto size = m_blobData->length(); | 77 auto size = m_blobData->length(); |
| 75 m_client->didFetchDataLoadedBlobHandle(BlobDataHandle::create(st
d::move(m_blobData), size)); | 78 m_client->didFetchDataLoadedBlobHandle(BlobDataHandle::create(st
d::move(m_blobData), size)); |
| 76 return; | 79 return; |
| 77 } | 80 } |
| 78 case BytesConsumer::Result::Error: | 81 case BytesConsumer::Result::Error: |
| 79 m_client->didFetchDataLoadFailed(); | 82 m_client->didFetchDataLoadFailed(); |
| 80 return; | 83 return; |
| 81 } | 84 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 void cancel() override | 119 void cancel() override |
| 117 { | 120 { |
| 118 m_consumer->cancel(); | 121 m_consumer->cancel(); |
| 119 } | 122 } |
| 120 | 123 |
| 121 void onStateChange() override | 124 void onStateChange() override |
| 122 { | 125 { |
| 123 while (true) { | 126 while (true) { |
| 124 const char* buffer; | 127 const char* buffer; |
| 125 size_t available; | 128 size_t available; |
| 126 switch (m_consumer->beginRead(&buffer, &available)) { | 129 auto result = m_consumer->beginRead(&buffer, &available); |
| 127 case BytesConsumer::Result::Ok: | 130 if (result == BytesConsumer::Result::ShouldWait) |
| 131 return; |
| 132 if (result == BytesConsumer::Result::Ok) { |
| 128 if (available > 0) { | 133 if (available > 0) { |
| 129 unsigned bytesAppended = m_rawData->append(buffer, available
); | 134 unsigned bytesAppended = m_rawData->append(buffer, available
); |
| 130 if (!bytesAppended) { | 135 if (!bytesAppended) { |
| 131 auto unused = m_consumer->endRead(0); | 136 auto unused = m_consumer->endRead(0); |
| 132 ALLOW_UNUSED_LOCAL(unused); | 137 ALLOW_UNUSED_LOCAL(unused); |
| 133 m_consumer->cancel(); | 138 m_consumer->cancel(); |
| 134 m_client->didFetchDataLoadFailed(); | 139 m_client->didFetchDataLoadFailed(); |
| 135 return; | 140 return; |
| 136 } | 141 } |
| 137 DCHECK_EQ(bytesAppended, available); | 142 DCHECK_EQ(bytesAppended, available); |
| 138 } | 143 } |
| 139 if (m_consumer->endRead(available) != BytesConsumer::Result::Ok)
{ | 144 result = m_consumer->endRead(available); |
| 140 m_client->didFetchDataLoadFailed(); | 145 } |
| 141 return; | 146 switch (result) { |
| 142 } | 147 case BytesConsumer::Result::Ok: |
| 143 break; | 148 break; |
| 144 case BytesConsumer::Result::ShouldWait: | 149 case BytesConsumer::Result::ShouldWait: |
| 150 NOTREACHED(); |
| 145 return; | 151 return; |
| 146 case BytesConsumer::Result::Done: | 152 case BytesConsumer::Result::Done: |
| 147 m_client->didFetchDataLoadedArrayBuffer(DOMArrayBuffer::create(m
_rawData->toArrayBuffer())); | 153 m_client->didFetchDataLoadedArrayBuffer(DOMArrayBuffer::create(m
_rawData->toArrayBuffer())); |
| 148 return; | 154 return; |
| 149 case BytesConsumer::Result::Error: | 155 case BytesConsumer::Result::Error: |
| 150 m_client->didFetchDataLoadFailed(); | 156 m_client->didFetchDataLoadFailed(); |
| 151 return; | 157 return; |
| 152 } | 158 } |
| 153 } | 159 } |
| 154 } | 160 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 181 m_consumer = consumer; | 187 m_consumer = consumer; |
| 182 m_consumer->setClient(this); | 188 m_consumer->setClient(this); |
| 183 onStateChange(); | 189 onStateChange(); |
| 184 } | 190 } |
| 185 | 191 |
| 186 void onStateChange() override | 192 void onStateChange() override |
| 187 { | 193 { |
| 188 while (true) { | 194 while (true) { |
| 189 const char* buffer; | 195 const char* buffer; |
| 190 size_t available; | 196 size_t available; |
| 191 switch (m_consumer->beginRead(&buffer, &available)) { | 197 auto result = m_consumer->beginRead(&buffer, &available); |
| 192 case BytesConsumer::Result::Ok: | 198 if (result == BytesConsumer::Result::ShouldWait) |
| 199 return; |
| 200 if (result == BytesConsumer::Result::Ok) { |
| 193 if (available > 0) | 201 if (available > 0) |
| 194 m_builder.append(m_decoder->decode(buffer, available)); | 202 m_builder.append(m_decoder->decode(buffer, available)); |
| 195 if (m_consumer->endRead(available) != BytesConsumer::Result::Ok)
{ | 203 result = m_consumer->endRead(available); |
| 196 m_client->didFetchDataLoadFailed(); | 204 } |
| 197 return; | 205 switch (result) { |
| 198 } | 206 case BytesConsumer::Result::Ok: |
| 199 break; | 207 break; |
| 200 case BytesConsumer::Result::ShouldWait: | 208 case BytesConsumer::Result::ShouldWait: |
| 209 NOTREACHED(); |
| 201 return; | 210 return; |
| 202 case BytesConsumer::Result::Done: | 211 case BytesConsumer::Result::Done: |
| 203 m_builder.append(m_decoder->flush()); | 212 m_builder.append(m_decoder->flush()); |
| 204 m_client->didFetchDataLoadedString(m_builder.toString()); | 213 m_client->didFetchDataLoadedString(m_builder.toString()); |
| 205 return; | 214 return; |
| 206 case BytesConsumer::Result::Error: | 215 case BytesConsumer::Result::Error: |
| 207 m_client->didFetchDataLoadFailed(); | 216 m_client->didFetchDataLoadFailed(); |
| 208 return; | 217 return; |
| 209 } | 218 } |
| 210 } | 219 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 m_consumer->setClient(this); | 257 m_consumer->setClient(this); |
| 249 onStateChange(); | 258 onStateChange(); |
| 250 } | 259 } |
| 251 | 260 |
| 252 void onStateChange() override | 261 void onStateChange() override |
| 253 { | 262 { |
| 254 bool needToFlush = false; | 263 bool needToFlush = false; |
| 255 while (true) { | 264 while (true) { |
| 256 const char* buffer; | 265 const char* buffer; |
| 257 size_t available; | 266 size_t available; |
| 258 switch (m_consumer->beginRead(&buffer, &available)) { | 267 auto result = m_consumer->beginRead(&buffer, &available); |
| 259 case BytesConsumer::Result::Ok: | 268 if (result == BytesConsumer::Result::ShouldWait) { |
| 260 m_outStream->addData(buffer, available); | |
| 261 if (m_consumer->endRead(available) != BytesConsumer::Result::Ok)
{ | |
| 262 m_outStream->abort(); | |
| 263 m_client->didFetchDataLoadFailed(); | |
| 264 return; | |
| 265 } | |
| 266 needToFlush = true; | |
| 267 break; | |
| 268 case BytesConsumer::Result::ShouldWait: | |
| 269 if (needToFlush) | 269 if (needToFlush) |
| 270 m_outStream->flush(); | 270 m_outStream->flush(); |
| 271 return; | 271 return; |
| 272 } |
| 273 if (result == BytesConsumer::Result::Ok) { |
| 274 m_outStream->addData(buffer, available); |
| 275 needToFlush = true; |
| 276 result = m_consumer->endRead(available); |
| 277 } |
| 278 switch (result) { |
| 279 case BytesConsumer::Result::Ok: |
| 280 break; |
| 281 case BytesConsumer::Result::ShouldWait: |
| 282 NOTREACHED(); |
| 283 return; |
| 272 case BytesConsumer::Result::Done: | 284 case BytesConsumer::Result::Done: |
| 273 if (needToFlush) | 285 if (needToFlush) |
| 274 m_outStream->flush(); | 286 m_outStream->flush(); |
| 275 m_outStream->finalize(); | 287 m_outStream->finalize(); |
| 276 m_client->didFetchDataLoadedStream(); | 288 m_client->didFetchDataLoadedStream(); |
| 277 return; | 289 return; |
| 278 case BytesConsumer::Result::Error: | 290 case BytesConsumer::Result::Error: |
| 279 // If the stream is aborted soon after the stream is registered | 291 // If the stream is aborted soon after the stream is registered |
| 280 // to the StreamRegistry, ServiceWorkerURLRequestJob may not | 292 // to the StreamRegistry, ServiceWorkerURLRequestJob may not |
| 281 // notice the error and continue waiting forever. | 293 // notice the error and continue waiting forever. |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 { | 335 { |
| 324 return new FetchDataLoaderAsString(); | 336 return new FetchDataLoaderAsString(); |
| 325 } | 337 } |
| 326 | 338 |
| 327 FetchDataLoader* FetchDataLoader::createLoaderAsStream(Stream* outStream) | 339 FetchDataLoader* FetchDataLoader::createLoaderAsStream(Stream* outStream) |
| 328 { | 340 { |
| 329 return new FetchDataLoaderAsStream(outStream); | 341 return new FetchDataLoaderAsStream(outStream); |
| 330 } | 342 } |
| 331 | 343 |
| 332 } // namespace blink | 344 } // namespace blink |
| OLD | NEW |