| 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 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 RawPtrWillBeWeakPersistent<ImageLoader> m_loader; | 135 RawPtrWillBeWeakPersistent<ImageLoader> m_loader; |
| 136 BypassMainWorldBehavior m_shouldBypassMainWorldCSP; | 136 BypassMainWorldBehavior m_shouldBypassMainWorldCSP; |
| 137 UpdateFromElementBehavior m_updateBehavior; | 137 UpdateFromElementBehavior m_updateBehavior; |
| 138 RefPtr<ScriptState> m_scriptState; | 138 RefPtr<ScriptState> m_scriptState; |
| 139 WeakPtrFactory<Task> m_weakFactory; | 139 WeakPtrFactory<Task> m_weakFactory; |
| 140 ReferrerPolicy m_referrerPolicy; | 140 ReferrerPolicy m_referrerPolicy; |
| 141 }; | 141 }; |
| 142 | 142 |
| 143 ImageLoader::ImageLoader(Element* element) | 143 ImageLoader::ImageLoader(Element* element) |
| 144 : m_element(element) | 144 : m_element(element) |
| 145 , m_image(0) | |
| 146 , m_derefElementTimer(this, &ImageLoader::timerFired) | 145 , m_derefElementTimer(this, &ImageLoader::timerFired) |
| 147 , m_hasPendingLoadEvent(false) | 146 , m_hasPendingLoadEvent(false) |
| 148 , m_hasPendingErrorEvent(false) | 147 , m_hasPendingErrorEvent(false) |
| 149 , m_imageComplete(true) | 148 , m_imageComplete(true) |
| 150 , m_loadingImageDocument(false) | 149 , m_loadingImageDocument(false) |
| 151 , m_elementIsProtected(false) | 150 , m_elementIsProtected(false) |
| 152 , m_suppressErrorEvents(false) | 151 , m_suppressErrorEvents(false) |
| 153 , m_highPriorityClientCount(0) | 152 , m_highPriorityClientCount(0) |
| 154 { | 153 { |
| 155 WTF_LOG(Timers, "new ImageLoader %p", this); | 154 WTF_LOG(Timers, "new ImageLoader %p", this); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 173 #if !ENABLE(OILPAN) | 172 #if !ENABLE(OILPAN) |
| 174 if (m_pendingTask) | 173 if (m_pendingTask) |
| 175 m_pendingTask->clearLoader(); | 174 m_pendingTask->clearLoader(); |
| 176 #endif | 175 #endif |
| 177 | 176 |
| 178 #if ENABLE(OILPAN) | 177 #if ENABLE(OILPAN) |
| 179 for (const auto& client : m_clients) | 178 for (const auto& client : m_clients) |
| 180 willRemoveClient(*client); | 179 willRemoveClient(*client); |
| 181 #endif | 180 #endif |
| 182 | 181 |
| 183 if (m_image) | 182 if (m_image) { |
| 184 m_image->removeClient(this); | 183 m_image->removeClient(this); |
| 184 m_image = nullptr; |
| 185 } |
| 185 | 186 |
| 186 #if !ENABLE(OILPAN) | 187 #if !ENABLE(OILPAN) |
| 187 ASSERT(m_hasPendingLoadEvent || !loadEventSender().hasPendingEvents(this)); | 188 ASSERT(m_hasPendingLoadEvent || !loadEventSender().hasPendingEvents(this)); |
| 188 if (m_hasPendingLoadEvent) | 189 if (m_hasPendingLoadEvent) |
| 189 loadEventSender().cancelEvent(this); | 190 loadEventSender().cancelEvent(this); |
| 190 | 191 |
| 191 ASSERT(m_hasPendingErrorEvent || !errorEventSender().hasPendingEvents(this))
; | 192 ASSERT(m_hasPendingErrorEvent || !errorEventSender().hasPendingEvents(this))
; |
| 192 if (m_hasPendingErrorEvent) | 193 if (m_hasPendingErrorEvent) |
| 193 errorEventSender().cancelEvent(this); | 194 errorEventSender().cancelEvent(this); |
| 194 #endif | 195 #endif |
| 195 } | 196 } |
| 196 | 197 |
| 197 #if ENABLE(OILPAN) | 198 #if ENABLE(OILPAN) |
| 198 void ImageLoader::clearWeakMembers(Visitor* visitor) | 199 void ImageLoader::clearWeakMembers(Visitor* visitor) |
| 199 { | 200 { |
| 200 Vector<UntracedMember<ImageLoaderClient>> deadClients; | 201 Vector<UntracedMember<ImageLoaderClient>> deadClients; |
| 201 for (const auto& client : m_clients) { | 202 for (const auto& client : m_clients) { |
| 202 if (!Heap::isHeapObjectAlive(client)) { | 203 if (!Heap::isHeapObjectAlive(client)) { |
| 203 willRemoveClient(*client); | 204 willRemoveClient(*client); |
| 204 deadClients.append(client); | 205 deadClients.append(client); |
| 205 } | 206 } |
| 206 } | 207 } |
| 207 for (unsigned i = 0; i < deadClients.size(); ++i) | 208 for (unsigned i = 0; i < deadClients.size(); ++i) |
| 208 m_clients.remove(deadClients[i]); | 209 m_clients.remove(deadClients[i]); |
| 209 } | 210 } |
| 210 #endif | 211 #endif |
| 211 | 212 |
| 212 DEFINE_TRACE(ImageLoader) | 213 DEFINE_TRACE(ImageLoader) |
| 213 { | 214 { |
| 215 visitor->trace(m_image); |
| 214 visitor->trace(m_element); | 216 visitor->trace(m_element); |
| 215 #if ENABLE(OILPAN) | 217 #if ENABLE(OILPAN) |
| 216 visitor->template registerWeakMembers<ImageLoader, &ImageLoader::clearWeakMe
mbers>(this); | 218 visitor->template registerWeakMembers<ImageLoader, &ImageLoader::clearWeakMe
mbers>(this); |
| 217 #endif | 219 #endif |
| 218 } | 220 } |
| 219 | 221 |
| 220 void ImageLoader::setImage(ImageResource* newImage) | 222 void ImageLoader::setImage(ImageResource* newImage) |
| 221 { | 223 { |
| 222 setImageWithoutConsideringPendingLoadEvent(newImage); | 224 setImageWithoutConsideringPendingLoadEvent(newImage); |
| 223 | 225 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 // Make sure to only decrement the count when we exit this function | 305 // Make sure to only decrement the count when we exit this function |
| 304 OwnPtr<IncrementLoadEventDelayCount> loadDelayCounter; | 306 OwnPtr<IncrementLoadEventDelayCount> loadDelayCounter; |
| 305 loadDelayCounter.swap(m_loadDelayCounter); | 307 loadDelayCounter.swap(m_loadDelayCounter); |
| 306 | 308 |
| 307 Document& document = m_element->document(); | 309 Document& document = m_element->document(); |
| 308 if (!document.isActive()) | 310 if (!document.isActive()) |
| 309 return; | 311 return; |
| 310 | 312 |
| 311 AtomicString imageSourceURL = m_element->imageSourceURL(); | 313 AtomicString imageSourceURL = m_element->imageSourceURL(); |
| 312 KURL url = imageSourceToKURL(imageSourceURL); | 314 KURL url = imageSourceToKURL(imageSourceURL); |
| 313 ResourcePtr<ImageResource> newImage = 0; | 315 RefPtrWillBeRawPtr<ImageResource> newImage = nullptr; |
| 314 RefPtrWillBeRawPtr<Element> protectElement(m_element.get()); | 316 RefPtrWillBeRawPtr<Element> protectElement(m_element.get()); |
| 315 if (!url.isNull()) { | 317 if (!url.isNull()) { |
| 316 // Unlike raw <img>, we block mixed content inside of <picture> or <img
srcset>. | 318 // Unlike raw <img>, we block mixed content inside of <picture> or <img
srcset>. |
| 317 ResourceLoaderOptions resourceLoaderOptions = ResourceFetcher::defaultRe
sourceOptions(); | 319 ResourceLoaderOptions resourceLoaderOptions = ResourceFetcher::defaultRe
sourceOptions(); |
| 318 ResourceRequest resourceRequest(url); | 320 ResourceRequest resourceRequest(url); |
| 319 resourceRequest.setFetchCredentialsMode(WebURLRequest::FetchCredentialsM
odeSameOrigin); | 321 resourceRequest.setFetchCredentialsMode(WebURLRequest::FetchCredentialsM
odeSameOrigin); |
| 320 if (updateBehavior == UpdateForcedReload) { | 322 if (updateBehavior == UpdateForcedReload) { |
| 321 resourceRequest.setCachePolicy(ResourceRequestCachePolicy::ReloadByp
assingCache); | 323 resourceRequest.setCachePolicy(ResourceRequestCachePolicy::ReloadByp
assingCache); |
| 322 resourceRequest.setLoFiState(WebURLRequest::LoFiOff); | 324 resourceRequest.setLoFiState(WebURLRequest::LoFiOff); |
| 323 // ImageLoader defers the load of images when in an ImageDocument. | 325 // ImageLoader defers the load of images when in an ImageDocument. |
| (...skipping 29 matching lines...) Expand all Loading... |
| 353 clearFailedLoadURL(); | 355 clearFailedLoadURL(); |
| 354 } | 356 } |
| 355 } else { | 357 } else { |
| 356 if (!imageSourceURL.isNull()) { | 358 if (!imageSourceURL.isNull()) { |
| 357 // Fire an error event if the url string is not empty, but the KURL
is. | 359 // Fire an error event if the url string is not empty, but the KURL
is. |
| 358 dispatchErrorEvent(); | 360 dispatchErrorEvent(); |
| 359 } | 361 } |
| 360 noImageResourceToLoad(); | 362 noImageResourceToLoad(); |
| 361 } | 363 } |
| 362 | 364 |
| 363 ImageResource* oldImage = m_image.get(); | 365 RefPtrWillBeRawPtr<ImageResource> oldImage = m_image.get(); |
| 364 if (updateBehavior == UpdateSizeChanged && m_element->layoutObject() && m_el
ement->layoutObject()->isImage() && newImage == oldImage) { | 366 if (updateBehavior == UpdateSizeChanged && m_element->layoutObject() && m_el
ement->layoutObject()->isImage() && newImage == oldImage) { |
| 365 toLayoutImage(m_element->layoutObject())->intrinsicSizeChanged(); | 367 toLayoutImage(m_element->layoutObject())->intrinsicSizeChanged(); |
| 366 } else { | 368 } else { |
| 367 if (newImage != oldImage) | 369 if (newImage != oldImage) |
| 368 sourceImageChanged(); | 370 sourceImageChanged(); |
| 369 | 371 |
| 370 if (m_hasPendingLoadEvent) { | 372 if (m_hasPendingLoadEvent) { |
| 371 loadEventSender().cancelEvent(this); | 373 loadEventSender().cancelEvent(this); |
| 372 m_hasPendingLoadEvent = false; | 374 m_hasPendingLoadEvent = false; |
| 373 } | 375 } |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 680 | 682 |
| 681 void ImageLoader::sourceImageChanged() | 683 void ImageLoader::sourceImageChanged() |
| 682 { | 684 { |
| 683 for (auto& client : m_clients) { | 685 for (auto& client : m_clients) { |
| 684 ImageLoaderClient* handle = client; | 686 ImageLoaderClient* handle = client; |
| 685 handle->notifyImageSourceChanged(); | 687 handle->notifyImageSourceChanged(); |
| 686 } | 688 } |
| 687 } | 689 } |
| 688 | 690 |
| 689 } // namespace blink | 691 } // namespace blink |
| OLD | NEW |