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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 68 ImageLoader::ImageLoader(Element* element) | 68 ImageLoader::ImageLoader(Element* element) |
| 69 : m_element(element) | 69 : m_element(element) |
| 70 , m_image(0) | 70 , m_image(0) |
| 71 , m_derefElementTimer(this, &ImageLoader::timerFired) | 71 , m_derefElementTimer(this, &ImageLoader::timerFired) |
| 72 , m_hasPendingBeforeLoadEvent(false) | 72 , m_hasPendingBeforeLoadEvent(false) |
| 73 , m_hasPendingLoadEvent(false) | 73 , m_hasPendingLoadEvent(false) |
| 74 , m_hasPendingErrorEvent(false) | 74 , m_hasPendingErrorEvent(false) |
| 75 , m_imageComplete(true) | 75 , m_imageComplete(true) |
| 76 , m_loadManually(false) | 76 , m_loadManually(false) |
| 77 , m_elementIsProtected(false) | 77 , m_elementIsProtected(false) |
| 78 , m_highPriorityClientCount(0) | |
| 78 { | 79 { |
| 79 } | 80 } |
| 80 | 81 |
| 81 ImageLoader::~ImageLoader() | 82 ImageLoader::~ImageLoader() |
| 82 { | 83 { |
| 83 if (m_image) | 84 if (m_image) |
| 84 m_image->removeClient(this); | 85 m_image->removeClient(this); |
| 85 | 86 |
| 86 ASSERT(m_hasPendingBeforeLoadEvent || !beforeLoadEventSender().hasPendingEve nts(this)); | 87 ASSERT(m_hasPendingBeforeLoadEvent || !beforeLoadEventSender().hasPendingEve nts(this)); |
| 87 if (m_hasPendingBeforeLoadEvent) | 88 if (m_hasPendingBeforeLoadEvent) |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 108 // Only consider updating the protection ref-count of the Element immediatel y before returning | 109 // Only consider updating the protection ref-count of the Element immediatel y before returning |
| 109 // from this function as doing so might result in the destruction of this Im ageLoader. | 110 // from this function as doing so might result in the destruction of this Im ageLoader. |
| 110 updatedHasPendingEvent(); | 111 updatedHasPendingEvent(); |
| 111 } | 112 } |
| 112 | 113 |
| 113 void ImageLoader::setImageWithoutConsideringPendingLoadEvent(CachedImage* newIma ge) | 114 void ImageLoader::setImageWithoutConsideringPendingLoadEvent(CachedImage* newIma ge) |
| 114 { | 115 { |
| 115 ASSERT(m_failedLoadURL.isEmpty()); | 116 ASSERT(m_failedLoadURL.isEmpty()); |
| 116 CachedImage* oldImage = m_image.get(); | 117 CachedImage* oldImage = m_image.get(); |
| 117 if (newImage != oldImage) { | 118 if (newImage != oldImage) { |
| 119 sourceImageChanged(); | |
| 118 m_image = newImage; | 120 m_image = newImage; |
| 119 if (m_hasPendingBeforeLoadEvent) { | 121 if (m_hasPendingBeforeLoadEvent) { |
| 120 beforeLoadEventSender().cancelEvent(this); | 122 beforeLoadEventSender().cancelEvent(this); |
| 121 m_hasPendingBeforeLoadEvent = false; | 123 m_hasPendingBeforeLoadEvent = false; |
| 122 } | 124 } |
| 123 if (m_hasPendingLoadEvent) { | 125 if (m_hasPendingLoadEvent) { |
| 124 loadEventSender().cancelEvent(this); | 126 loadEventSender().cancelEvent(this); |
| 125 m_hasPendingLoadEvent = false; | 127 m_hasPendingLoadEvent = false; |
| 126 } | 128 } |
| 127 if (m_hasPendingErrorEvent) { | 129 if (m_hasPendingErrorEvent) { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 183 m_failedLoadURL = attr; | 185 m_failedLoadURL = attr; |
| 184 m_hasPendingErrorEvent = true; | 186 m_hasPendingErrorEvent = true; |
| 185 errorEventSender().dispatchEventSoon(this); | 187 errorEventSender().dispatchEventSoon(this); |
| 186 } else | 188 } else |
| 187 clearFailedLoadURL(); | 189 clearFailedLoadURL(); |
| 188 } else if (!attr.isNull()) { | 190 } else if (!attr.isNull()) { |
| 189 // Fire an error event if the url is empty. | 191 // Fire an error event if the url is empty. |
| 190 m_hasPendingErrorEvent = true; | 192 m_hasPendingErrorEvent = true; |
| 191 errorEventSender().dispatchEventSoon(this); | 193 errorEventSender().dispatchEventSoon(this); |
| 192 } | 194 } |
| 193 | 195 |
| 194 CachedImage* oldImage = m_image.get(); | 196 CachedImage* oldImage = m_image.get(); |
| 195 if (newImage != oldImage) { | 197 if (newImage != oldImage) { |
| 198 sourceImageChanged(); | |
| 199 | |
| 196 if (m_hasPendingBeforeLoadEvent) { | 200 if (m_hasPendingBeforeLoadEvent) { |
| 197 beforeLoadEventSender().cancelEvent(this); | 201 beforeLoadEventSender().cancelEvent(this); |
| 198 m_hasPendingBeforeLoadEvent = false; | 202 m_hasPendingBeforeLoadEvent = false; |
| 199 } | 203 } |
| 200 if (m_hasPendingLoadEvent) { | 204 if (m_hasPendingLoadEvent) { |
| 201 loadEventSender().cancelEvent(this); | 205 loadEventSender().cancelEvent(this); |
| 202 m_hasPendingLoadEvent = false; | 206 m_hasPendingLoadEvent = false; |
| 203 } | 207 } |
| 204 | 208 |
| 205 // Cancel error events that belong to the previous load, which is now ca ncelled by changing the src attribute. | 209 // Cancel error events that belong to the previous load, which is now ca ncelled by changing the src attribute. |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 416 return; | 420 return; |
| 417 m_hasPendingErrorEvent = false; | 421 m_hasPendingErrorEvent = false; |
| 418 if (element()->document()->attached()) | 422 if (element()->document()->attached()) |
| 419 element()->dispatchEvent(Event::create(eventNames().errorEvent, false, f alse)); | 423 element()->dispatchEvent(Event::create(eventNames().errorEvent, false, f alse)); |
| 420 | 424 |
| 421 // Only consider updating the protection ref-count of the Element immediatel y before returning | 425 // Only consider updating the protection ref-count of the Element immediatel y before returning |
| 422 // from this function as doing so might result in the destruction of this Im ageLoader. | 426 // from this function as doing so might result in the destruction of this Im ageLoader. |
| 423 updatedHasPendingEvent(); | 427 updatedHasPendingEvent(); |
| 424 } | 428 } |
| 425 | 429 |
| 430 void ImageLoader::addClient(ImageLoaderClient* client) | |
| 431 { | |
| 432 if (client->requestsHighLiveResourceCachePriority()) { | |
| 433 m_highPriorityClientCount++; | |
| 434 if (m_image) | |
|
Justin Novosad
2013/07/29 17:47:58
Better to only call setCacheLiveResourcePriority i
| |
| 435 m_image->setCacheLiveResourcePriority(CachedResource::CacheLiveResou rcePriorityHigh); | |
| 436 } | |
| 437 m_clients.add(client); | |
| 438 } | |
| 439 void ImageLoader::removeClient(ImageLoaderClient* client) | |
| 440 { | |
| 441 if (client->requestsHighLiveResourceCachePriority()) { | |
| 442 ASSERT(m_highPriorityClientCount); | |
| 443 m_highPriorityClientCount--; | |
| 444 if (m_image && !m_highPriorityClientCount) | |
| 445 m_image->setCacheLiveResourcePriority(CachedResource::CacheLiveResou rcePriorityLow); | |
| 446 } | |
| 447 m_clients.remove(client); | |
| 448 } | |
| 449 | |
| 426 void ImageLoader::dispatchPendingBeforeLoadEvents() | 450 void ImageLoader::dispatchPendingBeforeLoadEvents() |
| 427 { | 451 { |
| 428 beforeLoadEventSender().dispatchPendingEvents(); | 452 beforeLoadEventSender().dispatchPendingEvents(); |
| 429 } | 453 } |
| 430 | 454 |
| 431 void ImageLoader::dispatchPendingLoadEvents() | 455 void ImageLoader::dispatchPendingLoadEvents() |
| 432 { | 456 { |
| 433 loadEventSender().dispatchPendingEvents(); | 457 loadEventSender().dispatchPendingEvents(); |
| 434 } | 458 } |
| 435 | 459 |
| 436 void ImageLoader::dispatchPendingErrorEvents() | 460 void ImageLoader::dispatchPendingErrorEvents() |
| 437 { | 461 { |
| 438 errorEventSender().dispatchPendingEvents(); | 462 errorEventSender().dispatchPendingEvents(); |
| 439 } | 463 } |
| 440 | 464 |
| 441 void ImageLoader::elementDidMoveToNewDocument() | 465 void ImageLoader::elementDidMoveToNewDocument() |
| 442 { | 466 { |
| 443 clearFailedLoadURL(); | 467 clearFailedLoadURL(); |
| 444 setImage(0); | 468 setImage(0); |
| 445 } | 469 } |
| 446 | 470 |
| 471 void ImageLoader::sourceImageChanged() | |
| 472 { | |
| 473 HashSet<ImageLoaderClient*>::iterator end = m_clients.end(); | |
| 474 for (HashSet<ImageLoaderClient*>::iterator it = m_clients.begin(); it != end ; ++it) { | |
| 475 ImageLoaderClient* handle = *it; | |
| 476 handle->notifyImageSourceChanged(); | |
| 477 } | |
| 478 } | |
| 479 | |
| 447 inline void ImageLoader::clearFailedLoadURL() | 480 inline void ImageLoader::clearFailedLoadURL() |
| 448 { | 481 { |
| 449 m_failedLoadURL = AtomicString(); | 482 m_failedLoadURL = AtomicString(); |
| 450 } | 483 } |
| 451 | 484 |
| 452 } | 485 } |
| OLD | NEW |