Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010 Apple Inc. All rights reserv ed. | 4 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010 Apple Inc. All rights reserv ed. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 113 | 113 |
| 114 ImageLoader::ImageLoader(Element* element) | 114 ImageLoader::ImageLoader(Element* element) |
| 115 : m_element(element) | 115 : m_element(element) |
| 116 , m_image(0) | 116 , m_image(0) |
| 117 , m_derefElementTimer(this, &ImageLoader::timerFired) | 117 , m_derefElementTimer(this, &ImageLoader::timerFired) |
| 118 , m_hasPendingLoadEvent(false) | 118 , m_hasPendingLoadEvent(false) |
| 119 , m_hasPendingErrorEvent(false) | 119 , m_hasPendingErrorEvent(false) |
| 120 , m_imageComplete(true) | 120 , m_imageComplete(true) |
| 121 , m_loadingImageDocument(false) | 121 , m_loadingImageDocument(false) |
| 122 , m_elementIsProtected(false) | 122 , m_elementIsProtected(false) |
| 123 , m_environmentChangeOnly(false) | |
| 123 , m_highPriorityClientCount(0) | 124 , m_highPriorityClientCount(0) |
| 124 { | 125 { |
| 125 WTF_LOG(Timers, "new ImageLoader %p", this); | 126 WTF_LOG(Timers, "new ImageLoader %p", this); |
| 126 } | 127 } |
| 127 | 128 |
| 128 ImageLoader::~ImageLoader() | 129 ImageLoader::~ImageLoader() |
| 129 { | 130 { |
| 130 WTF_LOG(Timers, "~ImageLoader %p; m_hasPendingLoadEvent=%d, m_hasPendingErro rEvent=%d", | 131 WTF_LOG(Timers, "~ImageLoader %p; m_hasPendingLoadEvent=%d, m_hasPendingErro rEvent=%d", |
| 131 this, m_hasPendingLoadEvent, m_hasPendingErrorEvent); | 132 this, m_hasPendingLoadEvent, m_hasPendingErrorEvent); |
| 132 | 133 |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 301 // being queued to fire. Ensure this happens after beforeload is dispatc hed. | 302 // being queued to fire. Ensure this happens after beforeload is dispatc hed. |
| 302 if (newImage) | 303 if (newImage) |
| 303 newImage->addClient(this); | 304 newImage->addClient(this); |
| 304 | 305 |
| 305 if (oldImage) | 306 if (oldImage) |
| 306 oldImage->removeClient(this); | 307 oldImage->removeClient(this); |
| 307 } else if (updateBehavior == UpdateSizeChanged && m_element->renderer() && m _element->renderer()->isImage()) { | 308 } else if (updateBehavior == UpdateSizeChanged && m_element->renderer() && m _element->renderer()->isImage()) { |
| 308 toRenderImage(m_element->renderer())->intrinsicSizeChanged(); | 309 toRenderImage(m_element->renderer())->intrinsicSizeChanged(); |
| 309 } | 310 } |
| 310 | 311 |
| 312 if (updateBehavior == UpdateSizeChanged) | |
| 313 m_environmentChangeOnly = true; | |
|
Mike West
2014/10/17 14:12:40
You can drop the `if` and just assign the result o
| |
| 314 | |
| 311 if (RenderImageResource* imageResource = renderImageResource()) | 315 if (RenderImageResource* imageResource = renderImageResource()) |
| 312 imageResource->resetAnimation(); | 316 imageResource->resetAnimation(); |
| 313 | 317 |
| 314 // Only consider updating the protection ref-count of the Element immediatel y before returning | 318 // Only consider updating the protection ref-count of the Element immediatel y before returning |
| 315 // from this function as doing so might result in the destruction of this Im ageLoader. | 319 // from this function as doing so might result in the destruction of this Im ageLoader. |
| 316 updatedHasPendingEvent(); | 320 updatedHasPendingEvent(); |
| 317 } | 321 } |
| 318 | 322 |
| 319 void ImageLoader::updateFromElement(UpdateFromElementBehavior updateBehavior, Lo adType loadType) | 323 void ImageLoader::updateFromElement(UpdateFromElementBehavior updateBehavior, Lo adType loadType) |
| 320 { | 324 { |
| 325 m_environmentChangeOnly = false; | |
| 321 AtomicString imageSourceURL = m_element->imageSourceURL(); | 326 AtomicString imageSourceURL = m_element->imageSourceURL(); |
| 322 | 327 |
| 323 if (updateBehavior == UpdateIgnorePreviousError) | 328 if (updateBehavior == UpdateIgnorePreviousError) |
| 324 clearFailedLoadURL(); | 329 clearFailedLoadURL(); |
| 325 | 330 |
| 326 if (!m_failedLoadURL.isEmpty() && imageSourceURL == m_failedLoadURL) | 331 if (!m_failedLoadURL.isEmpty() && imageSourceURL == m_failedLoadURL) |
| 327 return; | 332 return; |
| 328 | 333 |
| 329 // If we have a pending task, we have to clear it -- either we're | 334 // If we have a pending task, we have to clear it -- either we're |
| 330 // now loading immediately, or we need to reset the task's state. | 335 // now loading immediately, or we need to reset the task's state. |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 379 m_imageComplete = true; | 384 m_imageComplete = true; |
| 380 updateRenderer(); | 385 updateRenderer(); |
| 381 | 386 |
| 382 if (!m_hasPendingLoadEvent) | 387 if (!m_hasPendingLoadEvent) |
| 383 return; | 388 return; |
| 384 | 389 |
| 385 if (resource->errorOccurred()) { | 390 if (resource->errorOccurred()) { |
| 386 loadEventSender().cancelEvent(this); | 391 loadEventSender().cancelEvent(this); |
| 387 m_hasPendingLoadEvent = false; | 392 m_hasPendingLoadEvent = false; |
| 388 | 393 |
| 389 m_hasPendingErrorEvent = true; | 394 // The error event should not fire if the image data update is a result of environment change. |
| 390 errorEventSender().dispatchEventSoon(this); | 395 // https://html.spec.whatwg.org/multipage/embedded-content.html#the-img- element:the-img-element-55 |
| 396 if (!m_environmentChangeOnly) { | |
| 397 m_hasPendingErrorEvent = true; | |
| 398 errorEventSender().dispatchEventSoon(this); | |
| 399 } | |
| 391 | 400 |
| 392 // Only consider updating the protection ref-count of the Element immedi ately before returning | 401 // Only consider updating the protection ref-count of the Element immedi ately before returning |
| 393 // from this function as doing so might result in the destruction of thi s ImageLoader. | 402 // from this function as doing so might result in the destruction of thi s ImageLoader. |
| 394 updatedHasPendingEvent(); | 403 updatedHasPendingEvent(); |
| 395 return; | 404 return; |
| 396 } | 405 } |
| 397 if (resource->wasCanceled()) { | 406 if (resource->wasCanceled()) { |
| 398 m_hasPendingLoadEvent = false; | 407 m_hasPendingLoadEvent = false; |
| 399 // Only consider updating the protection ref-count of the Element immedi ately before returning | 408 // Only consider updating the protection ref-count of the Element immedi ately before returning |
| 400 // from this function as doing so might result in the destruction of thi s ImageLoader. | 409 // from this function as doing so might result in the destruction of thi s ImageLoader. |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 571 } | 580 } |
| 572 | 581 |
| 573 #if ENABLE(OILPAN) | 582 #if ENABLE(OILPAN) |
| 574 ImageLoader::ImageLoaderClientRemover::~ImageLoaderClientRemover() | 583 ImageLoader::ImageLoaderClientRemover::~ImageLoaderClientRemover() |
| 575 { | 584 { |
| 576 m_loader.willRemoveClient(m_client); | 585 m_loader.willRemoveClient(m_client); |
| 577 } | 586 } |
| 578 #endif | 587 #endif |
| 579 | 588 |
| 580 } | 589 } |
| OLD | NEW |