OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "core/loader/resource/ImageResourceContent.h" | 5 #include "core/loader/resource/ImageResourceContent.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "core/loader/resource/ImageResource.h" | 9 #include "core/loader/resource/ImageResource.h" |
10 #include "core/loader/resource/ImageResourceInfo.h" | 10 #include "core/loader/resource/ImageResourceInfo.h" |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 m_status = ResourceStatus::Cached; | 310 m_status = ResourceStatus::Cached; |
311 } | 311 } |
312 break; | 312 break; |
313 case DoNotNotifyFinish: | 313 case DoNotNotifyFinish: |
314 if (m_status == ResourceStatus::NotStarted) | 314 if (m_status == ResourceStatus::NotStarted) |
315 m_status = ResourceStatus::Pending; | 315 m_status = ResourceStatus::Pending; |
316 break; | 316 break; |
317 } | 317 } |
318 } | 318 } |
319 | 319 |
| 320 void ImageResourceContent::loadCompleted(const blink::Image* image) { |
| 321 if (m_image != image) |
| 322 return; |
| 323 CHECK_EQ(m_sizeAvailable, Image::SizeAvailableAndLoadingAsynchronously); |
| 324 m_sizeAvailable = Image::SizeAvailable; |
| 325 updateStatus(ResourceStatus::Cached, ShouldNotifyFinish); |
| 326 notifyObservers(ShouldNotifyFinish); |
| 327 } |
| 328 |
320 ImageResourceContent::UpdateImageResult ImageResourceContent::updateImage( | 329 ImageResourceContent::UpdateImageResult ImageResourceContent::updateImage( |
321 PassRefPtr<SharedBuffer> data, | 330 PassRefPtr<SharedBuffer> data, |
322 ResourceStatus status, | 331 ResourceStatus status, |
323 UpdateImageOption updateImageOption, | 332 UpdateImageOption updateImageOption, |
324 bool allDataReceived) { | 333 bool allDataReceived) { |
325 TRACE_EVENT0("blink", "ImageResourceContent::updateImage"); | 334 TRACE_EVENT0("blink", "ImageResourceContent::updateImage"); |
326 | 335 |
327 #if DCHECK_IS_ON() | 336 #if DCHECK_IS_ON() |
328 DCHECK(!m_isUpdateImageBeingCalled); | 337 DCHECK(!m_isUpdateImageBeingCalled); |
329 AutoReset<bool> scope(&m_isUpdateImageBeingCalled, true); | 338 AutoReset<bool> scope(&m_isUpdateImageBeingCalled, true); |
(...skipping 18 matching lines...) Expand all Loading... |
348 case UpdateImage: | 357 case UpdateImage: |
349 case ClearAndUpdateImage: | 358 case ClearAndUpdateImage: |
350 // Have the image update its data from its internal buffer. It will not do | 359 // Have the image update its data from its internal buffer. It will not do |
351 // anything now, but will delay decoding until queried for info (like size | 360 // anything now, but will delay decoding until queried for info (like size |
352 // or specific image frames). | 361 // or specific image frames). |
353 if (data) { | 362 if (data) { |
354 if (!m_image) | 363 if (!m_image) |
355 m_image = createImage(); | 364 m_image = createImage(); |
356 DCHECK(m_image); | 365 DCHECK(m_image); |
357 m_sizeAvailable = m_image->setData(std::move(data), allDataReceived); | 366 m_sizeAvailable = m_image->setData(std::move(data), allDataReceived); |
| 367 if (!allDataReceived) { |
| 368 DCHECK_NE(m_sizeAvailable, |
| 369 Image::SizeAvailableAndLoadingAsynchronously); |
| 370 } |
358 } | 371 } |
359 | 372 |
360 // Go ahead and tell our observers to try to draw if we have either | 373 // Go ahead and tell our observers to try to draw if we have either |
361 // received all the data or the size is known. Each chunk from the network | 374 // received all the data or the size is known. Each chunk from the network |
362 // causes observers to repaint, which will force that chunk to decode. | 375 // causes observers to repaint, which will force that chunk to decode. |
363 if (m_sizeAvailable == Image::SizeUnavailable && !allDataReceived) { | 376 if (m_sizeAvailable == Image::SizeUnavailable && !allDataReceived) { |
364 updateStatus(status, DoNotNotifyFinish); | 377 updateStatus(status, DoNotNotifyFinish); |
365 return UpdateImageResult::NoDecodeError; | 378 return UpdateImageResult::NoDecodeError; |
366 } | 379 } |
367 | 380 |
(...skipping 11 matching lines...) Expand all Loading... |
379 return UpdateImageResult::ShouldDecodeError; | 392 return UpdateImageResult::ShouldDecodeError; |
380 } | 393 } |
381 break; | 394 break; |
382 } | 395 } |
383 | 396 |
384 // Notifies the observers. | 397 // Notifies the observers. |
385 // It would be nice to only redraw the decoded band of the image, but with the | 398 // It would be nice to only redraw the decoded band of the image, but with the |
386 // current design (decoding delayed until painting) that seems hard. | 399 // current design (decoding delayed until painting) that seems hard. |
387 | 400 |
388 NotifyFinishOption notifyFinishOption = | 401 NotifyFinishOption notifyFinishOption = |
389 allDataReceived ? ShouldNotifyFinish : DoNotNotifyFinish; | 402 allDataReceived && |
| 403 m_sizeAvailable != Image::SizeAvailableAndLoadingAsynchronously |
| 404 ? ShouldNotifyFinish |
| 405 : DoNotNotifyFinish; |
390 updateStatus(status, notifyFinishOption); | 406 updateStatus(status, notifyFinishOption); |
391 notifyObservers(notifyFinishOption); | 407 notifyObservers(notifyFinishOption); |
392 return UpdateImageResult::NoDecodeError; | 408 return UpdateImageResult::NoDecodeError; |
393 } | 409 } |
394 | 410 |
395 void ImageResourceContent::notifyStartLoad() { | 411 void ImageResourceContent::notifyStartLoad() { |
396 m_status = ResourceStatus::Pending; | 412 m_status = ResourceStatus::Pending; |
397 } | 413 } |
398 | 414 |
399 void ImageResourceContent::decodedSizeChangedTo(const blink::Image* image, | 415 void ImageResourceContent::decodedSizeChangedTo(const blink::Image* image, |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
509 | 525 |
510 const ResourceResponse& ImageResourceContent::response() const { | 526 const ResourceResponse& ImageResourceContent::response() const { |
511 return m_info->response(); | 527 return m_info->response(); |
512 } | 528 } |
513 | 529 |
514 const ResourceError& ImageResourceContent::resourceError() const { | 530 const ResourceError& ImageResourceContent::resourceError() const { |
515 return m_info->resourceError(); | 531 return m_info->resourceError(); |
516 } | 532 } |
517 | 533 |
518 } // namespace blink | 534 } // namespace blink |
OLD | NEW |